3 Copyright (c) 2004 - 2007, 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
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.
18 Tiano PEI intrinsic definitions. This includes all Pei Services APIs.
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
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)
38 // Declare forward referenced data structures
40 EFI_FORWARD_DECLARATION (EFI_PEI_NOTIFY_DESCRIPTOR
);
41 EFI_FORWARD_DECLARATION (EFI_PEI_SERVICES
);
43 #include EFI_PPI_DEFINITION (CpuIo)
44 #include EFI_PPI_DEFINITION (PciCfg)
45 #include EFI_PPI_DEFINITION (PciCfg2)
46 #include EFI_PPI_DEFINITION (EcpPciCfg)
49 // PEI Specification Revision information
51 #if (PI_SPECIFICATION_VERSION < 0x00010000)
52 #define PEI_SPECIFICATION_MAJOR_REVISION 0
53 #define PEI_SPECIFICATION_MINOR_REVISION 91
55 #define PEI_SPECIFICATION_MAJOR_REVISION 1
56 #define PEI_SPECIFICATION_MINOR_REVISION 00
62 (EFIAPI
*EFI_PEIM_ENTRY_POINT
)(
63 IN EFI_FFS_FILE_HEADER
* FfsHeader
,
64 IN EFI_PEI_SERVICES
**PeiServices
69 (EFIAPI
*EFI_PEIM_NOTIFY_ENTRY_POINT
) (
70 IN EFI_PEI_SERVICES
**PeiServices
,
71 IN EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyDescriptor
,
77 (EFIAPI
*EFI_PEI_VERIFICATION
) (
78 IN UINTN SectionAddress
82 // PEI Ppi Services List Descriptors
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
95 } EFI_PEI_PPI_DESCRIPTOR
;
97 struct _EFI_PEI_NOTIFY_DESCRIPTOR
{
100 EFI_PEIM_NOTIFY_ENTRY_POINT Notify
;
104 #if (PI_SPECIFICATION_VERSION < 0x00010000)
111 (EFIAPI
*EFI_PEI_INSTALL_PPI
) (
112 IN EFI_PEI_SERVICES
**PeiServices
,
113 IN EFI_PEI_PPI_DESCRIPTOR
* PpiList
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
126 (EFIAPI
*EFI_PEI_LOCATE_PPI
) (
127 IN EFI_PEI_SERVICES
**PeiServices
,
130 IN OUT EFI_PEI_PPI_DESCRIPTOR
**PpiDescriptor
,
136 (EFIAPI
*EFI_PEI_NOTIFY_PPI
) (
137 IN EFI_PEI_SERVICES
**PeiServices
,
138 IN EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyList
142 // PEI Boot Mode Services
146 (EFIAPI
*EFI_PEI_GET_BOOT_MODE
) (
147 IN EFI_PEI_SERVICES
**PeiServices
,
148 IN OUT EFI_BOOT_MODE
* BootMode
153 (EFIAPI
*EFI_PEI_SET_BOOT_MODE
) (
154 IN EFI_PEI_SERVICES
**PeiServices
,
155 IN EFI_BOOT_MODE BootMode
163 (EFIAPI
*EFI_PEI_GET_HOB_LIST
) (
164 IN EFI_PEI_SERVICES
**PeiServices
,
165 IN OUT VOID
**HobList
170 (EFIAPI
*EFI_PEI_CREATE_HOB
) (
171 IN EFI_PEI_SERVICES
**PeiServices
,
178 // PEI Firmware Volume Services
183 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_VOLUME
) (
184 IN EFI_PEI_SERVICES
**PeiServices
,
186 IN OUT EFI_FIRMWARE_VOLUME_HEADER
**FwVolHeader
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
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
208 // PEI Memory Services
212 (EFIAPI
*EFI_PEI_INSTALL_PEI_MEMORY
) (
213 IN EFI_PEI_SERVICES
**PeiServices
,
214 IN EFI_PHYSICAL_ADDRESS MemoryBegin
,
215 IN UINT64 MemoryLength
220 (EFIAPI
*EFI_PEI_ALLOCATE_PAGES
) (
221 IN EFI_PEI_SERVICES
**PeiServices
,
222 IN EFI_MEMORY_TYPE MemoryType
,
224 IN OUT EFI_PHYSICAL_ADDRESS
* Memory
229 (EFIAPI
*EFI_PEI_ALLOCATE_POOL
) (
230 IN EFI_PEI_SERVICES
**PeiServices
,
237 (EFIAPI
*EFI_PEI_COPY_MEM
) (
238 IN VOID
*Destination
,
245 (EFIAPI
*EFI_PEI_SET_MEM
) (
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
,
258 IN EFI_GUID
* CallerId OPTIONAL
,
259 IN EFI_STATUS_CODE_DATA
* Data OPTIONAL
267 (EFIAPI
*EFI_PEI_RESET_SYSTEM
) (
268 IN EFI_PEI_SERVICES
**PeiServices
280 (EFIAPI
*EFI_PEI_INSTALL_PPI
) (
281 IN CONST EFI_PEI_SERVICES
**PeiServices
,
282 IN CONST EFI_PEI_PPI_DESCRIPTOR
* PpiList
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
295 (EFIAPI
*EFI_PEI_LOCATE_PPI
) (
296 IN CONST EFI_PEI_SERVICES
**PeiServices
,
297 IN CONST EFI_GUID
* Guid
,
299 IN OUT EFI_PEI_PPI_DESCRIPTOR
**PpiDescriptor OPTIONAL
,
305 (EFIAPI
*EFI_PEI_NOTIFY_PPI
) (
306 IN CONST EFI_PEI_SERVICES
**PeiServices
,
307 IN CONST EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyList
311 // PEI Boot Mode Services
315 (EFIAPI
*EFI_PEI_GET_BOOT_MODE
) (
316 IN CONST EFI_PEI_SERVICES
**PeiServices
,
317 IN OUT EFI_BOOT_MODE
* BootMode
322 (EFIAPI
*EFI_PEI_SET_BOOT_MODE
) (
323 IN CONST EFI_PEI_SERVICES
**PeiServices
,
324 IN EFI_BOOT_MODE BootMode
332 (EFIAPI
*EFI_PEI_GET_HOB_LIST
) (
333 IN CONST EFI_PEI_SERVICES
**PeiServices
,
334 IN OUT VOID
**HobList
339 (EFIAPI
*EFI_PEI_CREATE_HOB
) (
340 IN CONST EFI_PEI_SERVICES
**PeiServices
,
349 // PEI Firmware Volume Services
353 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_VOLUME2
) (
354 IN CONST EFI_PEI_SERVICES
**PeiServices
,
356 IN OUT EFI_PEI_FV_HANDLE
*VolumeHandle
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
*FwVolHeader
,
365 IN OUT EFI_PEI_FILE_HANDLE
**FileHandle
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
379 // PEI Memory Services
383 (EFIAPI
*EFI_PEI_INSTALL_PEI_MEMORY
) (
384 IN CONST EFI_PEI_SERVICES
**PeiServices
,
385 IN EFI_PHYSICAL_ADDRESS MemoryBegin
,
386 IN UINT64 MemoryLength
391 (EFIAPI
*EFI_PEI_ALLOCATE_PAGES
) (
393 IN CONST EFI_PEI_SERVICES
**PeiServices
,
394 IN EFI_MEMORY_TYPE MemoryType
,
396 IN OUT EFI_PHYSICAL_ADDRESS
* Memory
401 (EFIAPI
*EFI_PEI_ALLOCATE_POOL
) (
402 IN CONST EFI_PEI_SERVICES
**PeiServices
,
409 (EFIAPI
*EFI_PEI_COPY_MEM
) (
410 IN VOID
*Destination
,
417 (EFIAPI
*EFI_PEI_SET_MEM
) (
424 // New interfaceas added by the PI 1.0
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
437 (EFIAPI
*EFI_PEI_FFS_GET_FILE_INFO
) (
438 IN EFI_PEI_FILE_HANDLE FileHandle
,
439 OUT EFI_FV_FILE_INFO
*FileInfo
445 (EFIAPI
*EFI_PEI_FFS_GET_VOLUME_INFO
) (
446 IN EFI_PEI_FV_HANDLE
*VolumeHandle
,
447 OUT EFI_FV_INFO
*VolumeInfo
452 (EFIAPI
*EFI_PEI_REGISTER_FOR_SHADOW
) (
453 IN EFI_PEI_FILE_HANDLE FileHandle
457 // PEI Status Code Service
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
,
466 IN EFI_GUID
*CallerId OPTIONAL
,
467 IN EFI_STATUS_CODE_DATA
*Data OPTIONAL
475 (EFIAPI
*EFI_PEI_RESET_SYSTEM
) (
476 IN EFI_PEI_SERVICES
**PeiServices
483 // EFI PEI Services Table
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
;
490 struct _EFI_PEI_SERVICES
{
491 EFI_TABLE_HEADER Hdr
;
496 EFI_PEI_INSTALL_PPI InstallPpi
;
497 EFI_PEI_REINSTALL_PPI ReInstallPpi
;
498 EFI_PEI_LOCATE_PPI LocatePpi
;
499 EFI_PEI_NOTIFY_PPI NotifyPpi
;
502 // Boot Mode Functions
504 EFI_PEI_GET_BOOT_MODE GetBootMode
;
505 EFI_PEI_SET_BOOT_MODE SetBootMode
;
510 EFI_PEI_GET_HOB_LIST GetHobList
;
511 EFI_PEI_CREATE_HOB CreateHob
;
514 // Firmware Volume Functions
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
;
521 EFI_PEI_FFS_FIND_NEXT_VOLUME2 FfsFindNextVolume
;
522 EFI_PEI_FFS_FIND_NEXT_FILE2 FfsFindNextFile
;
523 EFI_PEI_FFS_FIND_SECTION_DATA2 FfsFindSectionData
;
526 // PEI Memory Functions
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
;
537 EFI_PEI_REPORT_STATUS_CODE PeiReportStatusCode
;
542 EFI_PEI_RESET_SYSTEM PeiResetSystem
;
545 // Pointer to PPI interface
547 #if (PI_SPECIFICATION_VERSION < 0x00010000)
549 PEI_CPU_IO_PPI
*CpuIo
;
550 #if defined (SUPPORT_DEPRECATED_PCI_CFG_PPI)
551 PEI_PCI_CFG_PPI
*PciCfg
;
553 ECP_PEI_PCI_CFG_PPI
*PciCfg
;
556 EFI_PEI_CPU_IO_PPI
*CpuIo
;
557 EFI_PEI_PCI_CFG2_PPI
*PciCfg
;
560 // New interfaceas added by the PI 1.0
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
;
570 #if (PI_SPECIFICATION_VERSION < 0x00010000)
573 UINTN BootFirmwareVolume
;
574 UINTN SizeOfCacheAsRam
;
575 EFI_PEI_PPI_DESCRIPTOR
*DispatchTable
;
576 } EFI_PEI_STARTUP_DESCRIPTOR
;
580 (EFIAPI
*PEI_MAIN_ENTRY_POINT
) (
581 IN EFI_PEI_STARTUP_DESCRIPTOR
*PeiStartupDescriptor
586 typedef struct _EFI_SEC_PEI_HAND_OFF
{
588 VOID
*BootFirmwareVolumeBase
;
589 UINTN BootFirmwareVolumeSize
;
590 VOID
*TemporaryRamBase
;
591 UINTN TemporaryRamSize
;
592 VOID
*PeiTemporaryRamBase
;
593 UINTN PeiTemporaryRamSize
;
596 } EFI_SEC_PEI_HAND_OFF
;
600 (EFIAPI
*PEI_MAIN_ENTRY_POINT
) (
601 IN CONST EFI_SEC_PEI_HAND_OFF
*SecCoreData
,
602 IN CONST EFI_PEI_PPI_DESCRIPTOR
*PpList