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