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