]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/PciCfg2ToPciCfgThunk/PciCfg2ToPciCfgThunk.c
Fix a type in the directory name. Compatiblity -> Compatibility.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / PciCfg2ToPciCfgThunk / PciCfg2ToPciCfgThunk.c
CommitLineData
4259256b 1/*++\r
2\r
3Copyright (c) 2006 - 2008 Intel Corporation. <BR>\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11Module Name:\r
12\r
13 Variable.c\r
14\r
15Abstract:\r
16\r
17 PEIM to provide the Variable functionality\r
18\r
19--*/\r
20\r
21#include <PiPei.h>\r
22#include <Ppi/PciCfg.h>\r
23#include <Ppi/PciCfg2.h>\r
24#include <Ppi/EcpPciCfg.h>\r
25#include <Library/DebugLib.h>\r
26\r
27//\r
28// Function Prototypes - Callbacks\r
29//\r
30EFI_STATUS\r
31EFIAPI\r
32EcpPciCfgPpiNotifyCallback (\r
33 IN EFI_PEI_SERVICES **PeiServices,\r
34 IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
35 IN VOID *Ppi\r
36 );\r
37\r
38//\r
39// Function Prototypes\r
40//\r
41EFI_STATUS\r
42EFIAPI\r
43PciCfg2Read (\r
44 IN CONST EFI_PEI_SERVICES **PeiServices,\r
45 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
46 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
47 IN UINT64 Address,\r
48 IN OUT VOID *Buffer\r
49 );\r
50\r
51EFI_STATUS\r
52EFIAPI\r
53PciCfg2Write (\r
54 IN CONST EFI_PEI_SERVICES **PeiServices,\r
55 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
56 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
57 IN UINT64 Address,\r
58 IN OUT VOID *Buffer\r
59 );\r
60\r
61EFI_STATUS\r
62EFIAPI\r
63PciCfg2Modify (\r
64 IN CONST EFI_PEI_SERVICES **PeiServices,\r
65 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
66 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
67 IN UINT64 Address,\r
68 IN CONST VOID *SetBits,\r
69 IN CONST VOID *ClearBits\r
70 );\r
71\r
72//\r
73// Module globals\r
74//\r
75EFI_PEI_NOTIFY_DESCRIPTOR mNotifyOnEcpPciCfgList = {\r
76 (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
77 &gEcpPeiPciCfgPpiGuid,\r
78 EcpPciCfgPpiNotifyCallback \r
79};\r
80\r
81EFI_PEI_PCI_CFG2_PPI mPciCfg2Ppi = {\r
82 PciCfg2Read,\r
83 PciCfg2Write,\r
84 PciCfg2Modify,\r
85 0\r
86};\r
87\r
88EFI_PEI_PPI_DESCRIPTOR mPpiListPciCfg2 = {\r
89 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
90 &gEfiPciCfg2PpiGuid,\r
91 &mPciCfg2Ppi\r
92};\r
93\r
94\r
95EFI_STATUS\r
96EFIAPI\r
97PeimInitializePciCfg2 (\r
98 IN EFI_FFS_FILE_HEADER *FfsHeader,\r
99 IN CONST EFI_PEI_SERVICES **PeiServices\r
100 )\r
101/*++\r
102\r
103Routine Description:\r
104\r
105 Provide the functionality of the variable services.\r
106\r
107Arguments:\r
108\r
109 FfsHeadher - The FFS file header\r
110 PeiServices - General purpose services available to every PEIM.\r
111\r
112Returns:\r
113\r
114 Status - EFI_SUCCESS if the interface could be successfully\r
115 installed\r
116\r
117--*/\r
118{\r
119 EFI_STATUS Status;\r
120\r
121 //\r
122 // Register a notification for ECP PCI CFG PPI\r
123 //\r
124 Status = (*PeiServices)->NotifyPpi (PeiServices, &mNotifyOnEcpPciCfgList);\r
125 ASSERT_EFI_ERROR (Status);\r
126 return Status;\r
127}\r
128\r
129EFI_STATUS\r
130EFIAPI\r
131EcpPciCfgPpiNotifyCallback (\r
132 IN EFI_PEI_SERVICES **PeiServices,\r
133 IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
134 IN VOID *Ppi\r
135 )\r
136{\r
137 //\r
138 // When ECP PCI CFG PPI is installed, publish the PCI CFG2 PPI in the \r
139 // PEI Services Table and the PPI database\r
140 //\r
141 (*PeiServices)->PciCfg = &mPciCfg2Ppi;\r
142 return (*PeiServices)->InstallPpi ((CONST EFI_PEI_SERVICES **)PeiServices, &mPpiListPciCfg2);\r
143}\r
144\r
145EFI_STATUS\r
146EFIAPI\r
147PciCfg2Read (\r
148 IN CONST EFI_PEI_SERVICES **PeiServices,\r
149 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
150 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
151 IN UINT64 Address,\r
152 IN OUT VOID *Buffer\r
153 )\r
154{\r
155 EFI_STATUS Status;\r
156 EFI_PEI_PCI_CFG_PPI *PciCfg;\r
157\r
158 Status = (*PeiServices)->LocatePpi (\r
159 PeiServices,\r
160 &gEcpPeiPciCfgPpiGuid,\r
161 0,\r
162 NULL,\r
163 (VOID **)&PciCfg\r
164 );\r
165 ASSERT_EFI_ERROR (Status);\r
166\r
167 return PciCfg->Read ((EFI_PEI_SERVICES **)PeiServices, PciCfg, Width, Address, Buffer);\r
168}\r
169\r
170EFI_STATUS\r
171EFIAPI\r
172PciCfg2Write (\r
173 IN CONST EFI_PEI_SERVICES **PeiServices,\r
174 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
175 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
176 IN UINT64 Address,\r
177 IN OUT VOID *Buffer\r
178 )\r
179{\r
180 EFI_STATUS Status;\r
181 EFI_PEI_PCI_CFG_PPI *PciCfg;\r
182\r
183 Status = (*PeiServices)->LocatePpi (\r
184 PeiServices,\r
185 &gEcpPeiPciCfgPpiGuid,\r
186 0,\r
187 NULL,\r
188 (VOID **)&PciCfg\r
189 );\r
190 ASSERT_EFI_ERROR (Status);\r
191\r
192 return PciCfg->Write ((EFI_PEI_SERVICES **)PeiServices, PciCfg, Width, Address, Buffer);\r
193}\r
194\r
195EFI_STATUS\r
196EFIAPI\r
197PciCfg2Modify (\r
198 IN CONST EFI_PEI_SERVICES **PeiServices,\r
199 IN CONST EFI_PEI_PCI_CFG2_PPI *This,\r
200 IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
201 IN UINT64 Address,\r
202 IN CONST VOID *SetBits,\r
203 IN CONST VOID *ClearBits\r
204 )\r
205{\r
206 EFI_STATUS Status;\r
207 EFI_PEI_PCI_CFG_PPI *PciCfg;\r
208\r
209 Status = (*PeiServices)->LocatePpi (\r
210 PeiServices,\r
211 &gEcpPeiPciCfgPpiGuid,\r
212 0,\r
213 NULL,\r
214 (VOID **)&PciCfg\r
215 );\r
216 ASSERT_EFI_ERROR (Status);\r
217\r
218 return PciCfg->Modify ((EFI_PEI_SERVICES **)PeiServices, PciCfg, Width, Address, *(UINTN *)SetBits, *(UINTN *)ClearBits);\r
219}\r