]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Ppi/CpuIo.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / Ppi / CpuIo.h
CommitLineData
5879b875 1/** @file\r
9095d37b 2 This PPI provides a set of memory and I/O-based services.\r
d7132512 3 The perspective of the services is that of the processor, not the bus or system.\r
5879b875 4\r
9095d37b 5Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
9344f092 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
5879b875 7\r
5879b875 8 @par Revision Reference:\r
0047820e 9 This PPI is introduced in PI Version 1.0.\r
9095d37b 10\r
5879b875 11**/\r
12\r
13#ifndef __PEI_CPUIO_PPI_H__\r
14#define __PEI_CPUIO_PPI_H__\r
15\r
16#define EFI_PEI_CPU_IO_PPI_INSTALLED_GUID \\r
17 { 0xe6af1f7b, 0xfc3f, 0x46da, {0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82 } }\r
18\r
2f88bd3a 19typedef struct _EFI_PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI;\r
5879b875 20\r
06889842 21///\r
af2dc6a7 22/// EFI_PEI_CPU_IO_PPI_WIDTH.\r
06889842 23///\r
5879b875 24typedef enum {\r
25 EfiPeiCpuIoWidthUint8,\r
26 EfiPeiCpuIoWidthUint16,\r
27 EfiPeiCpuIoWidthUint32,\r
28 EfiPeiCpuIoWidthUint64,\r
29 EfiPeiCpuIoWidthFifoUint8,\r
30 EfiPeiCpuIoWidthFifoUint16,\r
31 EfiPeiCpuIoWidthFifoUint32,\r
32 EfiPeiCpuIoWidthFifoUint64,\r
33 EfiPeiCpuIoWidthFillUint8,\r
34 EfiPeiCpuIoWidthFillUint16,\r
35 EfiPeiCpuIoWidthFillUint32,\r
36 EfiPeiCpuIoWidthFillUint64,\r
37 EfiPeiCpuIoWidthMaximum\r
38} EFI_PEI_CPU_IO_PPI_WIDTH;\r
39\r
40/**\r
41 Memory-based access services and I/O-based access services.\r
42\r
7c1c4dcf 43 @param[in] PeiServices An indirect pointer to the PEI Services Table\r
44 published by the PEI Foundation.\r
af2dc6a7 45 @param[in] This The pointer to local data for the interface.\r
7c1c4dcf 46 @param[in] Width The width of the access. Enumerated in bytes.\r
47 @param[in] Address The physical address of the access.\r
48 @param[in] Count The number of accesses to perform.\r
49 @param[in, out] Buffer A pointer to the buffer of data.\r
5879b875 50\r
7c1c4dcf 51 @retval EFI_SUCCESS The function completed successfully.\r
52 @retval EFI_NOT_YET_AVAILABLE The service has not been installed.\r
5879b875 53\r
54**/\r
55typedef\r
56EFI_STATUS\r
8b13229b 57(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM)(\r
7c1c4dcf 58 IN CONST EFI_PEI_SERVICES **PeiServices,\r
59 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
60 IN EFI_PEI_CPU_IO_PPI_WIDTH Width,\r
61 IN UINT64 Address,\r
62 IN UINTN Count,\r
63 IN OUT VOID *Buffer\r
5879b875 64 );\r
65\r
06889842 66///\r
06889842 67/// EFI_PEI_CPU_IO_PPI_ACCESS\r
06889842 68///\r
5879b875 69typedef struct {\r
dafa11b1 70 ///\r
71 /// This service provides the various modalities of memory and I/O read.\r
72 ///\r
2f88bd3a 73 EFI_PEI_CPU_IO_PPI_IO_MEM Read;\r
dafa11b1 74 ///\r
75 /// This service provides the various modalities of memory and I/O write.\r
76 ///\r
2f88bd3a 77 EFI_PEI_CPU_IO_PPI_IO_MEM Write;\r
5879b875 78} EFI_PEI_CPU_IO_PPI_ACCESS;\r
79\r
80/**\r
81 8-bit I/O read operations.\r
82\r
9095d37b 83 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 84 by the PEI Foundation.\r
af2dc6a7 85 @param[in] This The pointer to local data for the interface.\r
80ae2a58 86 @param[in] Address The physical address of the access.\r
5879b875 87\r
7c1c4dcf 88 @return An 8-bit value returned from the I/O space.\r
5879b875 89\r
90**/\r
91typedef\r
92UINT8\r
8b13229b 93(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ8)(\r
7c1c4dcf 94 IN CONST EFI_PEI_SERVICES **PeiServices,\r
95 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
96 IN UINT64 Address\r
5879b875 97 );\r
98\r
99/**\r
100 16-bit I/O read operations.\r
101\r
9095d37b 102 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 103 by the PEI Foundation.\r
af2dc6a7 104 @param[in] This The pointer to local data for the interface.\r
80ae2a58 105 @param[in] Address The physical address of the access.\r
5879b875 106\r
7c1c4dcf 107 @return A 16-bit value returned from the I/O space.\r
5879b875 108\r
109**/\r
110typedef\r
111UINT16\r
8b13229b 112(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ16)(\r
7c1c4dcf 113 IN CONST EFI_PEI_SERVICES **PeiServices,\r
114 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
115 IN UINT64 Address\r
5879b875 116 );\r
117\r
118/**\r
119 32-bit I/O read operations.\r
120\r
9095d37b 121 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 122 by the PEI Foundation.\r
af2dc6a7 123 @param[in] This The pointer to local data for the interface.\r
80ae2a58 124 @param[in] Address The physical address of the access.\r
5879b875 125\r
7c1c4dcf 126 @return A 32-bit value returned from the I/O space.\r
5879b875 127\r
128**/\r
129typedef\r
130UINT32\r
8b13229b 131(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ32)(\r
7c1c4dcf 132 IN CONST EFI_PEI_SERVICES **PeiServices,\r
133 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
134 IN UINT64 Address\r
5879b875 135 );\r
136\r
137/**\r
138 64-bit I/O read operations.\r
139\r
9095d37b 140 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 141 by the PEI Foundation.\r
af2dc6a7 142 @param[in] This The pointer to local data for the interface.\r
80ae2a58 143 @param[in] Address The physical address of the access.\r
5879b875 144\r
7c1c4dcf 145 @return A 64-bit value returned from the I/O space.\r
5879b875 146\r
147**/\r
148typedef\r
149UINT64\r
8b13229b 150(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ64)(\r
7c1c4dcf 151 IN CONST EFI_PEI_SERVICES **PeiServices,\r
152 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
153 IN UINT64 Address\r
5879b875 154 );\r
155\r
156/**\r
157 8-bit I/O write operations.\r
158\r
9095d37b 159 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 160 by the PEI Foundation.\r
af2dc6a7 161 @param[in] This The pointer to local data for the interface.\r
80ae2a58 162 @param[in] Address The physical address of the access.\r
163 @param[in] Data The data to write.\r
5879b875 164\r
5879b875 165**/\r
166typedef\r
167VOID\r
8b13229b 168(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE8)(\r
7c1c4dcf 169 IN CONST EFI_PEI_SERVICES **PeiServices,\r
170 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
171 IN UINT64 Address,\r
172 IN UINT8 Data\r
5879b875 173 );\r
174\r
175/**\r
176 16-bit I/O write operations.\r
177\r
9095d37b 178 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 179 by the PEI Foundation.\r
af2dc6a7 180 @param[in] This The pointer to local data for the interface.\r
80ae2a58 181 @param[in] Address The physical address of the access.\r
182 @param[in] Data The data to write.\r
5879b875 183\r
5879b875 184**/\r
185typedef\r
186VOID\r
8b13229b 187(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE16)(\r
7c1c4dcf 188 IN CONST EFI_PEI_SERVICES **PeiServices,\r
189 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
190 IN UINT64 Address,\r
191 IN UINT16 Data\r
5879b875 192 );\r
193\r
194/**\r
195 32-bit I/O write operations.\r
196\r
9095d37b 197 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 198 by the PEI Foundation.\r
af2dc6a7 199 @param[in] This The pointer to local data for the interface.\r
80ae2a58 200 @param[in] Address The physical address of the access.\r
201 @param[in] Data The data to write.\r
5879b875 202\r
5879b875 203**/\r
204typedef\r
205VOID\r
8b13229b 206(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE32)(\r
7c1c4dcf 207 IN CONST EFI_PEI_SERVICES **PeiServices,\r
208 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
209 IN UINT64 Address,\r
210 IN UINT32 Data\r
5879b875 211 );\r
212\r
213/**\r
214 64-bit I/O write operations.\r
215\r
9095d37b 216 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 217 by the PEI Foundation.\r
af2dc6a7 218 @param[in] This The pointer to local data for the interface.\r
80ae2a58 219 @param[in] Address The physical address of the access.\r
220 @param[in] Data The data to write.\r
5879b875 221\r
5879b875 222**/\r
223typedef\r
224VOID\r
8b13229b 225(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE64)(\r
7c1c4dcf 226 IN CONST EFI_PEI_SERVICES **PeiServices,\r
227 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
228 IN UINT64 Address,\r
229 IN UINT64 Data\r
5879b875 230 );\r
231\r
232/**\r
dafa11b1 233 8-bit memory read operations.\r
5879b875 234\r
9095d37b 235 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 236 by the PEI Foundation.\r
af2dc6a7 237 @param[in] This The pointer to local data for the interface.\r
80ae2a58 238 @param[in] Address The physical address of the access.\r
5879b875 239\r
7c1c4dcf 240 @return An 8-bit value returned from the memory space.\r
5879b875 241\r
242**/\r
243typedef\r
244UINT8\r
8b13229b 245(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ8)(\r
7c1c4dcf 246 IN CONST EFI_PEI_SERVICES **PeiServices,\r
247 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
248 IN UINT64 Address\r
5879b875 249 );\r
250\r
251/**\r
dafa11b1 252 16-bit memory read operations.\r
5879b875 253\r
9095d37b 254 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 255 by the PEI Foundation.\r
af2dc6a7 256 @param[in] This The pointer to local data for the interface.\r
80ae2a58 257 @param[in] Address The physical address of the access.\r
5879b875 258\r
7c1c4dcf 259 @return A 16-bit value returned from the memory space.\r
5879b875 260\r
261**/\r
262typedef\r
263UINT16\r
8b13229b 264(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ16)(\r
7c1c4dcf 265 IN CONST EFI_PEI_SERVICES **PeiServices,\r
266 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
267 IN UINT64 Address\r
5879b875 268 );\r
269\r
270/**\r
dafa11b1 271 32-bit memory read operations.\r
5879b875 272\r
9095d37b 273 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 274 by the PEI Foundation.\r
af2dc6a7 275 @param[in] This The pointer to local data for the interface.\r
80ae2a58 276 @param[in] Address The physical address of the access.\r
5879b875 277\r
7c1c4dcf 278 @return A 32-bit value returned from the memory space.\r
5879b875 279\r
280**/\r
281typedef\r
282UINT32\r
8b13229b 283(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ32)(\r
7c1c4dcf 284 IN CONST EFI_PEI_SERVICES **PeiServices,\r
285 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
286 IN UINT64 Address\r
5879b875 287 );\r
288\r
289/**\r
dafa11b1 290 64-bit memory read operations.\r
5879b875 291\r
9095d37b 292 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 293 by the PEI Foundation.\r
af2dc6a7 294 @param[in] This The pointer to local data for the interface.\r
80ae2a58 295 @param[in] Address The physical address of the access.\r
5879b875 296\r
7c1c4dcf 297 @return A 64-bit value returned from the memory space.\r
5879b875 298\r
299**/\r
300typedef\r
301UINT64\r
8b13229b 302(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ64)(\r
7c1c4dcf 303 IN CONST EFI_PEI_SERVICES **PeiServices,\r
304 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
305 IN UINT64 Address\r
5879b875 306 );\r
307\r
308/**\r
dafa11b1 309 8-bit memory write operations.\r
5879b875 310\r
9095d37b 311 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 312 by the PEI Foundation.\r
af2dc6a7 313 @param[in] This The pointer to local data for the interface.\r
80ae2a58 314 @param[in] Address The physical address of the access.\r
315 @param[in] Data The data to write.\r
5879b875 316\r
5879b875 317**/\r
318typedef\r
319VOID\r
8b13229b 320(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE8)(\r
7c1c4dcf 321 IN CONST EFI_PEI_SERVICES **PeiServices,\r
322 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
323 IN UINT64 Address,\r
324 IN UINT8 Data\r
5879b875 325 );\r
326\r
327/**\r
dafa11b1 328 16-bit memory write operations.\r
5879b875 329\r
9095d37b 330 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 331 by the PEI Foundation.\r
af2dc6a7 332 @param[in] This The pointer to local data for the interface.\r
80ae2a58 333 @param[in] Address The physical address of the access.\r
334 @param[in] Data The data to write.\r
5879b875 335\r
5879b875 336**/\r
337typedef\r
338VOID\r
8b13229b 339(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE16)(\r
7c1c4dcf 340 IN CONST EFI_PEI_SERVICES **PeiServices,\r
341 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
342 IN UINT64 Address,\r
343 IN UINT16 Data\r
5879b875 344 );\r
345\r
346/**\r
dafa11b1 347 32-bit memory write operations.\r
5879b875 348\r
9095d37b 349 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 350 by the PEI Foundation.\r
af2dc6a7 351 @param[in] This The pointer to local data for the interface.\r
80ae2a58 352 @param[in] Address The physical address of the access.\r
353 @param[in] Data The data to write.\r
5879b875 354\r
5879b875 355**/\r
356typedef\r
357VOID\r
8b13229b 358(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE32)(\r
7c1c4dcf 359 IN CONST EFI_PEI_SERVICES **PeiServices,\r
360 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
361 IN UINT64 Address,\r
362 IN UINT32 Data\r
5879b875 363 );\r
364\r
365/**\r
dafa11b1 366 64-bit memory write operations.\r
5879b875 367\r
9095d37b 368 @param[in] PeiServices An indirect pointer to the PEI Services Table published\r
80ae2a58 369 by the PEI Foundation.\r
af2dc6a7 370 @param[in] This The pointer to local data for the interface.\r
80ae2a58 371 @param[in] Address The physical address of the access.\r
372 @param[in] Data The data to write.\r
5879b875 373\r
5879b875 374**/\r
375typedef\r
376VOID\r
8b13229b 377(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE64)(\r
7c1c4dcf 378 IN CONST EFI_PEI_SERVICES **PeiServices,\r
379 IN CONST EFI_PEI_CPU_IO_PPI *This,\r
380 IN UINT64 Address,\r
381 IN UINT64 Data\r
5879b875 382 );\r
383\r
dafa11b1 384///\r
385/// EFI_PEI_CPU_IO_PPI provides a set of memory and I/O-based services.\r
9095d37b 386/// The perspective of the services is that of the processor, not that of the\r
af2dc6a7 387/// bus or system.\r
dafa11b1 388///\r
5879b875 389struct _EFI_PEI_CPU_IO_PPI {\r
80ae2a58 390 ///\r
391 /// Collection of memory-access services.\r
392 ///\r
2f88bd3a 393 EFI_PEI_CPU_IO_PPI_ACCESS Mem;\r
80ae2a58 394 ///\r
395 /// Collection of I/O-access services.\r
396 ///\r
2f88bd3a
MK
397 EFI_PEI_CPU_IO_PPI_ACCESS Io;\r
398\r
399 EFI_PEI_CPU_IO_PPI_IO_READ8 IoRead8;\r
400 EFI_PEI_CPU_IO_PPI_IO_READ16 IoRead16;\r
401 EFI_PEI_CPU_IO_PPI_IO_READ32 IoRead32;\r
402 EFI_PEI_CPU_IO_PPI_IO_READ64 IoRead64;\r
403\r
404 EFI_PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8;\r
405 EFI_PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16;\r
406 EFI_PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32;\r
407 EFI_PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64;\r
408\r
409 EFI_PEI_CPU_IO_PPI_MEM_READ8 MemRead8;\r
410 EFI_PEI_CPU_IO_PPI_MEM_READ16 MemRead16;\r
411 EFI_PEI_CPU_IO_PPI_MEM_READ32 MemRead32;\r
412 EFI_PEI_CPU_IO_PPI_MEM_READ64 MemRead64;\r
413\r
414 EFI_PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8;\r
415 EFI_PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16;\r
416 EFI_PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32;\r
417 EFI_PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64;\r
5879b875 418};\r
419\r
2f88bd3a 420extern EFI_GUID gEfiPeiCpuIoPpiInstalledGuid;\r
5879b875 421\r
422#endif\r