1 /*++ 2 3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 PeiApi.h 15 16 Abstract: 17 18 Tiano PEI intrinsic definitions. This includes all Pei Services APIs. 19 20 Peims are passed in a pointer to a pointer to the PEI Services table. 21 The PEI Services table contains pointers to the PEI services exported 22 by the PEI Core. 23 24 --*/ 25 26 #ifndef _PEI_API_H_ 27 #define _PEI_API_H_ 28 29 #include "PeiHob.h" 30 #include "EfiFirmwareFileSystem.h" 31 #include "EfiFirmwareVolumeHeader.h" 32 #include EFI_PPI_DEFINITION (FirmwareVolumeInfo) 33 #include EFI_PPI_DEFINITION (FirmwareVolume) 34 #include EFI_PPI_DEFINITION (Decompress) 35 36 37 // 38 // Declare forward referenced data structures 39 // 40 EFI_FORWARD_DECLARATION (EFI_PEI_NOTIFY_DESCRIPTOR); 41 EFI_FORWARD_DECLARATION (EFI_PEI_SERVICES); 42 43 #include EFI_PPI_DEFINITION (CpuIo) 44 #include EFI_PPI_DEFINITION (PciCfg) 45 #include EFI_PPI_DEFINITION (PciCfg2) 46 #include EFI_PPI_DEFINITION (EcpPciCfg) 47 48 // 49 // PEI Specification Revision information 50 // 51 #if (PI_SPECIFICATION_VERSION < 0x00010000) 52 #define PEI_SPECIFICATION_MAJOR_REVISION 0 53 #define PEI_SPECIFICATION_MINOR_REVISION 91 54 #else 55 #define PEI_SPECIFICATION_MAJOR_REVISION 1 56 #define PEI_SPECIFICATION_MINOR_REVISION 00 57 58 #endif 59 60 typedef 61 EFI_STATUS 62 (EFIAPI *EFI_PEIM_ENTRY_POINT)( 63 IN EFI_FFS_FILE_HEADER * FfsHeader, 64 IN EFI_PEI_SERVICES **PeiServices 65 ); 66 67 typedef 68 EFI_STATUS 69 (EFIAPI *EFI_PEIM_NOTIFY_ENTRY_POINT) ( 70 IN EFI_PEI_SERVICES **PeiServices, 71 IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyDescriptor, 72 IN VOID *Ppi 73 ); 74 75 typedef 76 EFI_STATUS 77 (EFIAPI *EFI_PEI_VERIFICATION) ( 78 IN UINTN SectionAddress 79 ); 80 81 // 82 // PEI Ppi Services List Descriptors 83 // 84 #define EFI_PEI_PPI_DESCRIPTOR_PIC 0x00000001 85 #define EFI_PEI_PPI_DESCRIPTOR_PPI 0x00000010 86 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK 0x00000020 87 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH 0x00000040 88 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES 0x00000060 89 #define EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST 0x80000000 90 91 typedef struct { 92 UINTN Flags; 93 EFI_GUID *Guid; 94 VOID *Ppi; 95 } EFI_PEI_PPI_DESCRIPTOR; 96 97 struct _EFI_PEI_NOTIFY_DESCRIPTOR { 98 UINTN Flags; 99 EFI_GUID *Guid; 100 EFI_PEIM_NOTIFY_ENTRY_POINT Notify; 101 }; 102 103 104 #if (PI_SPECIFICATION_VERSION < 0x00010000) 105 106 // 107 // PEI PPI Services 108 // 109 typedef 110 EFI_STATUS 111 (EFIAPI *EFI_PEI_INSTALL_PPI) ( 112 IN EFI_PEI_SERVICES **PeiServices, 113 IN EFI_PEI_PPI_DESCRIPTOR * PpiList 114 ); 115 116 typedef 117 EFI_STATUS 118 (EFIAPI *EFI_PEI_REINSTALL_PPI) ( 119 IN EFI_PEI_SERVICES **PeiServices, 120 IN EFI_PEI_PPI_DESCRIPTOR * OldPpi, 121 IN EFI_PEI_PPI_DESCRIPTOR * NewPpi 122 ); 123 124 typedef 125 EFI_STATUS 126 (EFIAPI *EFI_PEI_LOCATE_PPI) ( 127 IN EFI_PEI_SERVICES **PeiServices, 128 IN EFI_GUID * Guid, 129 IN UINTN Instance, 130 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, 131 IN OUT VOID **Ppi 132 ); 133 134 typedef 135 EFI_STATUS 136 (EFIAPI *EFI_PEI_NOTIFY_PPI) ( 137 IN EFI_PEI_SERVICES **PeiServices, 138 IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList 139 ); 140 141 // 142 // PEI Boot Mode Services 143 // 144 typedef 145 EFI_STATUS 146 (EFIAPI *EFI_PEI_GET_BOOT_MODE) ( 147 IN EFI_PEI_SERVICES **PeiServices, 148 IN OUT EFI_BOOT_MODE * BootMode 149 ); 150 151 typedef 152 EFI_STATUS 153 (EFIAPI *EFI_PEI_SET_BOOT_MODE) ( 154 IN EFI_PEI_SERVICES **PeiServices, 155 IN EFI_BOOT_MODE BootMode 156 ); 157 158 // 159 // PEI HOB Services 160 // 161 typedef 162 EFI_STATUS 163 (EFIAPI *EFI_PEI_GET_HOB_LIST) ( 164 IN EFI_PEI_SERVICES **PeiServices, 165 IN OUT VOID **HobList 166 ); 167 168 typedef 169 EFI_STATUS 170 (EFIAPI *EFI_PEI_CREATE_HOB) ( 171 IN EFI_PEI_SERVICES **PeiServices, 172 IN UINT16 Type, 173 IN UINT16 Length, 174 IN OUT VOID **Hob 175 ); 176 177 // 178 // PEI Firmware Volume Services 179 // 180 181 typedef 182 EFI_STATUS 183 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) ( 184 IN EFI_PEI_SERVICES **PeiServices, 185 IN UINTN Instance, 186 IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader 187 ); 188 189 typedef 190 EFI_STATUS 191 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE) ( 192 IN EFI_PEI_SERVICES **PeiServices, 193 IN EFI_FV_FILETYPE SearchType, 194 IN EFI_FIRMWARE_VOLUME_HEADER * FwVolHeader, 195 IN OUT EFI_FFS_FILE_HEADER **FileHeader 196 ); 197 198 typedef 199 EFI_STATUS 200 (EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA) ( 201 IN EFI_PEI_SERVICES **PeiServices, 202 IN EFI_SECTION_TYPE SectionType, 203 IN EFI_FFS_FILE_HEADER * FfsFileHeader, 204 IN OUT VOID **SectionData 205 ); 206 207 // 208 // PEI Memory Services 209 // 210 typedef 211 EFI_STATUS 212 (EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) ( 213 IN EFI_PEI_SERVICES **PeiServices, 214 IN EFI_PHYSICAL_ADDRESS MemoryBegin, 215 IN UINT64 MemoryLength 216 ); 217 218 typedef 219 EFI_STATUS 220 (EFIAPI *EFI_PEI_ALLOCATE_PAGES) ( 221 IN EFI_PEI_SERVICES **PeiServices, 222 IN EFI_MEMORY_TYPE MemoryType, 223 IN UINTN Pages, 224 IN OUT EFI_PHYSICAL_ADDRESS * Memory 225 ); 226 227 typedef 228 EFI_STATUS 229 (EFIAPI *EFI_PEI_ALLOCATE_POOL) ( 230 IN EFI_PEI_SERVICES **PeiServices, 231 IN UINTN Size, 232 OUT VOID **Buffer 233 ); 234 235 typedef 236 VOID 237 (EFIAPI *EFI_PEI_COPY_MEM) ( 238 IN VOID *Destination, 239 IN VOID *Source, 240 IN UINTN Length 241 ); 242 243 typedef 244 VOID 245 (EFIAPI *EFI_PEI_SET_MEM) ( 246 IN VOID *Buffer, 247 IN UINTN Size, 248 IN UINT8 Value 249 ); 250 251 typedef 252 EFI_STATUS 253 (EFIAPI *EFI_PEI_REPORT_STATUS_CODE) ( 254 IN EFI_PEI_SERVICES **PeiServices, 255 IN EFI_STATUS_CODE_TYPE Type, 256 IN EFI_STATUS_CODE_VALUE Value, 257 IN UINT32 Instance, 258 IN EFI_GUID * CallerId OPTIONAL, 259 IN EFI_STATUS_CODE_DATA * Data OPTIONAL 260 ); 261 262 // 263 // PEI Reset 264 // 265 typedef 266 EFI_STATUS 267 (EFIAPI *EFI_PEI_RESET_SYSTEM) ( 268 IN EFI_PEI_SERVICES **PeiServices 269 ); 270 271 272 273 #else 274 275 // 276 // PEI PPI Services 277 // 278 typedef 279 EFI_STATUS 280 (EFIAPI *EFI_PEI_INSTALL_PPI) ( 281 IN CONST EFI_PEI_SERVICES **PeiServices, 282 IN CONST EFI_PEI_PPI_DESCRIPTOR * PpiList 283 ); 284 285 typedef 286 EFI_STATUS 287 (EFIAPI *EFI_PEI_REINSTALL_PPI) ( 288 IN CONST EFI_PEI_SERVICES **PeiServices, 289 IN CONST EFI_PEI_PPI_DESCRIPTOR * OldPpi, 290 IN CONST EFI_PEI_PPI_DESCRIPTOR * NewPpi 291 ); 292 293 typedef 294 EFI_STATUS 295 (EFIAPI *EFI_PEI_LOCATE_PPI) ( 296 IN CONST EFI_PEI_SERVICES **PeiServices, 297 IN CONST EFI_GUID * Guid, 298 IN UINTN Instance, 299 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor OPTIONAL, 300 IN OUT VOID **Ppi 301 ); 302 303 typedef 304 EFI_STATUS 305 (EFIAPI *EFI_PEI_NOTIFY_PPI) ( 306 IN CONST EFI_PEI_SERVICES **PeiServices, 307 IN CONST EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList 308 ); 309 310 // 311 // PEI Boot Mode Services 312 // 313 typedef 314 EFI_STATUS 315 (EFIAPI *EFI_PEI_GET_BOOT_MODE) ( 316 IN CONST EFI_PEI_SERVICES **PeiServices, 317 IN OUT EFI_BOOT_MODE * BootMode 318 ); 319 320 typedef 321 EFI_STATUS 322 (EFIAPI *EFI_PEI_SET_BOOT_MODE) ( 323 IN CONST EFI_PEI_SERVICES **PeiServices, 324 IN EFI_BOOT_MODE BootMode 325 ); 326 327 // 328 // PEI HOB Services 329 // 330 typedef 331 EFI_STATUS 332 (EFIAPI *EFI_PEI_GET_HOB_LIST) ( 333 IN CONST EFI_PEI_SERVICES **PeiServices, 334 IN OUT VOID **HobList 335 ); 336 337 typedef 338 EFI_STATUS 339 (EFIAPI *EFI_PEI_CREATE_HOB) ( 340 IN CONST EFI_PEI_SERVICES **PeiServices, 341 IN UINT16 Type, 342 IN UINT16 Length, 343 IN OUT VOID **Hob 344 ); 345 346 347 348 // 349 // PEI Firmware Volume Services 350 // 351 typedef 352 EFI_STATUS 353 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME2) ( 354 IN CONST EFI_PEI_SERVICES **PeiServices, 355 IN UINTN Instance, 356 IN OUT EFI_PEI_FV_HANDLE *VolumeHandle 357 ); 358 359 typedef 360 EFI_STATUS 361 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE2) ( 362 IN CONST EFI_PEI_SERVICES **PeiServices, 363 IN EFI_FV_FILETYPE SearchType, 364 IN CONST EFI_PEI_FV_HANDLE FvHandle, 365 IN OUT EFI_PEI_FILE_HANDLE *FileHandle 366 ); 367 368 typedef 369 EFI_STATUS 370 (EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA2) ( 371 IN CONST EFI_PEI_SERVICES **PeiServices, 372 IN EFI_SECTION_TYPE SectionType, 373 IN EFI_PEI_FILE_HANDLE FileHandle, 374 OUT VOID **SectionData 375 ); 376 377 378 // 379 // PEI Memory Services 380 // 381 typedef 382 EFI_STATUS 383 (EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) ( 384 IN CONST EFI_PEI_SERVICES **PeiServices, 385 IN EFI_PHYSICAL_ADDRESS MemoryBegin, 386 IN UINT64 MemoryLength 387 ); 388 389 typedef 390 EFI_STATUS 391 (EFIAPI *EFI_PEI_ALLOCATE_PAGES) ( 392 393 IN CONST EFI_PEI_SERVICES **PeiServices, 394 IN EFI_MEMORY_TYPE MemoryType, 395 IN UINTN Pages, 396 IN OUT EFI_PHYSICAL_ADDRESS * Memory 397 ); 398 399 typedef 400 EFI_STATUS 401 (EFIAPI *EFI_PEI_ALLOCATE_POOL) ( 402 IN CONST EFI_PEI_SERVICES **PeiServices, 403 IN UINTN Size, 404 OUT VOID **Buffer 405 ); 406 407 typedef 408 VOID 409 (EFIAPI *EFI_PEI_COPY_MEM) ( 410 IN VOID *Destination, 411 IN VOID *Source, 412 IN UINTN Length 413 ); 414 415 typedef 416 VOID 417 (EFIAPI *EFI_PEI_SET_MEM) ( 418 IN VOID *Buffer, 419 IN UINTN Size, 420 IN UINT8 Value 421 ); 422 423 // 424 // New interfaceas added by the PI 1.0 425 // 426 typedef 427 EFI_STATUS 428 (EFIAPI *EFI_PEI_FFS_FIND_BY_NAME) ( 429 IN CONST EFI_GUID *FileName, 430 IN EFI_PEI_FV_HANDLE VolumeHandle, 431 OUT EFI_PEI_FILE_HANDLE *FileHandle 432 ); 433 434 435 typedef 436 EFI_STATUS 437 (EFIAPI *EFI_PEI_FFS_GET_FILE_INFO) ( 438 IN EFI_PEI_FILE_HANDLE FileHandle, 439 OUT EFI_FV_FILE_INFO *FileInfo 440 ); 441 442 443 typedef 444 EFI_STATUS 445 (EFIAPI *EFI_PEI_FFS_GET_VOLUME_INFO) ( 446 IN EFI_PEI_FV_HANDLE VolumeHandle, 447 OUT EFI_FV_INFO *VolumeInfo 448 ); 449 450 typedef 451 EFI_STATUS 452 (EFIAPI *EFI_PEI_REGISTER_FOR_SHADOW) ( 453 IN EFI_PEI_FILE_HANDLE FileHandle 454 ); 455 456 // 457 // PEI Status Code Service 458 // 459 typedef 460 EFI_STATUS 461 (EFIAPI *EFI_PEI_REPORT_STATUS_CODE) ( 462 IN EFI_PEI_SERVICES **PeiServices, 463 IN EFI_STATUS_CODE_TYPE Type, 464 IN EFI_STATUS_CODE_VALUE Value, 465 IN UINT32 Instance, 466 IN EFI_GUID *CallerId OPTIONAL, 467 IN EFI_STATUS_CODE_DATA *Data OPTIONAL 468 ); 469 470 // 471 // PEI Reset Service 472 // 473 typedef 474 EFI_STATUS 475 (EFIAPI *EFI_PEI_RESET_SYSTEM) ( 476 IN EFI_PEI_SERVICES **PeiServices 477 ); 478 479 #endif 480 481 482 // 483 // EFI PEI Services Table 484 // 485 #define PEI_SERVICES_SIGNATURE 0x5652455320494550ULL 486 #define PEI_SERVICES_REVISION ((PEI_SPECIFICATION_MAJOR_REVISION << 16) | (PEI_SPECIFICATION_MINOR_REVISION)) 487 typedef PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI; 488 489 490 struct _EFI_PEI_SERVICES { 491 EFI_TABLE_HEADER Hdr; 492 493 // 494 // PPI Functions 495 // 496 EFI_PEI_INSTALL_PPI InstallPpi; 497 EFI_PEI_REINSTALL_PPI ReInstallPpi; 498 EFI_PEI_LOCATE_PPI LocatePpi; 499 EFI_PEI_NOTIFY_PPI NotifyPpi; 500 501 // 502 // Boot Mode Functions 503 // 504 EFI_PEI_GET_BOOT_MODE GetBootMode; 505 EFI_PEI_SET_BOOT_MODE SetBootMode; 506 507 // 508 // HOB Functions 509 // 510 EFI_PEI_GET_HOB_LIST GetHobList; 511 EFI_PEI_CREATE_HOB CreateHob; 512 513 // 514 // Firmware Volume Functions 515 // 516 #if (PI_SPECIFICATION_VERSION < 0x00010000) 517 EFI_PEI_FFS_FIND_NEXT_VOLUME FfsFindNextVolume; 518 EFI_PEI_FFS_FIND_NEXT_FILE FfsFindNextFile; 519 EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData; 520 #else 521 EFI_PEI_FFS_FIND_NEXT_VOLUME2 FfsFindNextVolume; 522 EFI_PEI_FFS_FIND_NEXT_FILE2 FfsFindNextFile; 523 EFI_PEI_FFS_FIND_SECTION_DATA2 FfsFindSectionData; 524 #endif 525 // 526 // PEI Memory Functions 527 // 528 EFI_PEI_INSTALL_PEI_MEMORY InstallPeiMemory; 529 EFI_PEI_ALLOCATE_PAGES AllocatePages; 530 EFI_PEI_ALLOCATE_POOL AllocatePool; 531 EFI_PEI_COPY_MEM CopyMem; 532 EFI_PEI_SET_MEM SetMem; 533 534 // 535 // Status Code 536 // 537 EFI_PEI_REPORT_STATUS_CODE PeiReportStatusCode; 538 539 // 540 // Reset 541 // 542 EFI_PEI_RESET_SYSTEM PeiResetSystem; 543 544 // 545 // Pointer to PPI interface 546 // 547 #if (PI_SPECIFICATION_VERSION < 0x00010000) 548 549 PEI_CPU_IO_PPI *CpuIo; 550 #if defined (SUPPORT_DEPRECATED_PCI_CFG_PPI) 551 PEI_PCI_CFG_PPI *PciCfg; 552 #else 553 ECP_PEI_PCI_CFG_PPI *PciCfg; 554 #endif 555 #else 556 EFI_PEI_CPU_IO_PPI *CpuIo; 557 EFI_PEI_PCI_CFG2_PPI *PciCfg; 558 559 // 560 // New interfaceas added by the PI 1.0 561 // 562 EFI_PEI_FFS_FIND_BY_NAME FfsFindFileByName; 563 EFI_PEI_FFS_GET_FILE_INFO FfsGetFileInfo; 564 EFI_PEI_FFS_GET_VOLUME_INFO FfsGetVolumeInfo; 565 EFI_PEI_REGISTER_FOR_SHADOW RegisterForShadow; 566 #endif 567 568 }; 569 570 #if (PI_SPECIFICATION_VERSION < 0x00010000) 571 572 typedef struct { 573 UINTN BootFirmwareVolume; 574 UINTN SizeOfCacheAsRam; 575 EFI_PEI_PPI_DESCRIPTOR *DispatchTable; 576 } EFI_PEI_STARTUP_DESCRIPTOR; 577 578 typedef 579 EFI_STATUS 580 (EFIAPI *PEI_MAIN_ENTRY_POINT) ( 581 IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor 582 ); 583 584 #else 585 586 typedef struct _EFI_SEC_PEI_HAND_OFF { 587 UINT16 DataSize; 588 VOID *BootFirmwareVolumeBase; 589 UINTN BootFirmwareVolumeSize; 590 VOID *TemporaryRamBase; 591 UINTN TemporaryRamSize; 592 VOID *PeiTemporaryRamBase; 593 UINTN PeiTemporaryRamSize; 594 VOID *StackBase; 595 UINTN StackSize; 596 } EFI_SEC_PEI_HAND_OFF; 597 598 typedef 599 EFI_STATUS 600 (EFIAPI *PEI_MAIN_ENTRY_POINT) ( 601 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, 602 IN CONST EFI_PEI_PPI_DESCRIPTOR *PpList 603 ); 604 605 #endif 606 607 #endif 608