3 Copyright (c) 2004 - 2007, Intel Corporation
4 All rights reserved. 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)
48 // PEI Specification Revision information
50 #if (PI_SPECIFICATION_VERSION < 0x00010000)
51 #define PEI_SPECIFICATION_MAJOR_REVISION 0
52 #define PEI_SPECIFICATION_MINOR_REVISION 91
54 #define PEI_SPECIFICATION_MAJOR_REVISION 1
55 #define PEI_SPECIFICATION_MINOR_REVISION 00
61 (EFIAPI
*EFI_PEIM_ENTRY_POINT
)(
62 IN EFI_FFS_FILE_HEADER
* FfsHeader
,
63 IN EFI_PEI_SERVICES
**PeiServices
68 (EFIAPI
*EFI_PEIM_NOTIFY_ENTRY_POINT
) (
69 IN EFI_PEI_SERVICES
**PeiServices
,
70 IN EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyDescriptor
,
76 (EFIAPI
*EFI_PEI_VERIFICATION
) (
77 IN UINTN SectionAddress
81 // PEI Ppi Services List Descriptors
83 #define EFI_PEI_PPI_DESCRIPTOR_PIC 0x00000001
84 #define EFI_PEI_PPI_DESCRIPTOR_PPI 0x00000010
85 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK 0x00000020
86 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH 0x00000040
87 #define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES 0x00000060
88 #define EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST 0x80000000
94 } EFI_PEI_PPI_DESCRIPTOR
;
96 typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR
{
99 EFI_PEIM_NOTIFY_ENTRY_POINT Notify
;
100 } EFI_PEI_NOTIFY_DESCRIPTOR
;
106 (EFIAPI
*EFI_REPORT_STATUS_CODE
) (
107 IN EFI_STATUS_CODE_TYPE Type
,
108 IN EFI_STATUS_CODE_VALUE Value
,
110 IN EFI_GUID
*CallerId OPTIONAL
,
111 IN EFI_STATUS_CODE_DATA
*Data OPTIONAL
116 #if (PI_SPECIFICATION_VERSION < 0x00010000)
123 (EFIAPI
*EFI_PEI_INSTALL_PPI
) (
124 IN EFI_PEI_SERVICES
**PeiServices
,
125 IN EFI_PEI_PPI_DESCRIPTOR
* PpiList
130 (EFIAPI
*EFI_PEI_REINSTALL_PPI
) (
131 IN EFI_PEI_SERVICES
**PeiServices
,
132 IN EFI_PEI_PPI_DESCRIPTOR
* OldPpi
,
133 IN EFI_PEI_PPI_DESCRIPTOR
* NewPpi
138 (EFIAPI
*EFI_PEI_LOCATE_PPI
) (
139 IN EFI_PEI_SERVICES
**PeiServices
,
142 IN OUT EFI_PEI_PPI_DESCRIPTOR
**PpiDescriptor
,
148 (EFIAPI
*EFI_PEI_NOTIFY_PPI
) (
149 IN EFI_PEI_SERVICES
**PeiServices
,
150 IN EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyList
154 // PEI Boot Mode Services
158 (EFIAPI
*EFI_PEI_GET_BOOT_MODE
) (
159 IN EFI_PEI_SERVICES
**PeiServices
,
160 IN OUT EFI_BOOT_MODE
* BootMode
165 (EFIAPI
*EFI_PEI_SET_BOOT_MODE
) (
166 IN EFI_PEI_SERVICES
**PeiServices
,
167 IN EFI_BOOT_MODE BootMode
175 (EFIAPI
*EFI_PEI_GET_HOB_LIST
) (
176 IN EFI_PEI_SERVICES
**PeiServices
,
177 IN OUT VOID
**HobList
182 (EFIAPI
*EFI_PEI_CREATE_HOB
) (
183 IN EFI_PEI_SERVICES
**PeiServices
,
190 // PEI Firmware Volume Services
195 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_VOLUME
) (
196 IN EFI_PEI_SERVICES
**PeiServices
,
198 IN OUT EFI_FIRMWARE_VOLUME_HEADER
**FwVolHeader
203 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_FILE
) (
204 IN EFI_PEI_SERVICES
**PeiServices
,
205 IN EFI_FV_FILETYPE SearchType
,
206 IN EFI_FIRMWARE_VOLUME_HEADER
* FwVolHeader
,
207 IN OUT EFI_FFS_FILE_HEADER
**FileHeader
212 (EFIAPI
*EFI_PEI_FFS_FIND_SECTION_DATA
) (
213 IN EFI_PEI_SERVICES
**PeiServices
,
214 IN EFI_SECTION_TYPE SectionType
,
215 IN EFI_FFS_FILE_HEADER
* FfsFileHeader
,
216 IN OUT VOID
**SectionData
220 // PEI Memory Services
224 (EFIAPI
*EFI_PEI_INSTALL_PEI_MEMORY
) (
225 IN EFI_PEI_SERVICES
**PeiServices
,
226 IN EFI_PHYSICAL_ADDRESS MemoryBegin
,
227 IN UINT64 MemoryLength
232 (EFIAPI
*EFI_PEI_ALLOCATE_PAGES
) (
233 IN EFI_PEI_SERVICES
**PeiServices
,
234 IN EFI_MEMORY_TYPE MemoryType
,
236 IN OUT EFI_PHYSICAL_ADDRESS
* Memory
241 (EFIAPI
*EFI_PEI_ALLOCATE_POOL
) (
242 IN EFI_PEI_SERVICES
**PeiServices
,
249 (EFIAPI
*EFI_PEI_COPY_MEM
) (
250 IN VOID
*Destination
,
257 (EFIAPI
*EFI_PEI_SET_MEM
) (
265 (EFIAPI
*EFI_PEI_REPORT_STATUS_CODE
) (
266 IN EFI_PEI_SERVICES
**PeiServices
,
267 IN EFI_STATUS_CODE_TYPE Type
,
268 IN EFI_STATUS_CODE_VALUE Value
,
270 IN EFI_GUID
* CallerId OPTIONAL
,
271 IN EFI_STATUS_CODE_DATA
* Data OPTIONAL
279 (EFIAPI
*EFI_PEI_RESET_SYSTEM
) (
280 IN EFI_PEI_SERVICES
**PeiServices
292 (EFIAPI
*EFI_PEI_INSTALL_PPI
) (
293 IN CONST EFI_PEI_SERVICES
**PeiServices
,
294 IN CONST EFI_PEI_PPI_DESCRIPTOR
* PpiList
299 (EFIAPI
*EFI_PEI_REINSTALL_PPI
) (
300 IN CONST EFI_PEI_SERVICES
**PeiServices
,
301 IN CONST EFI_PEI_PPI_DESCRIPTOR
* OldPpi
,
302 IN CONST EFI_PEI_PPI_DESCRIPTOR
* NewPpi
307 (EFIAPI
*EFI_PEI_LOCATE_PPI
) (
308 IN CONST EFI_PEI_SERVICES
**PeiServices
,
309 IN CONST EFI_GUID
* Guid
,
311 IN OUT EFI_PEI_PPI_DESCRIPTOR
**PpiDescriptor OPTIONAL
,
317 (EFIAPI
*EFI_PEI_NOTIFY_PPI
) (
318 IN CONST EFI_PEI_SERVICES
**PeiServices
,
319 IN CONST EFI_PEI_NOTIFY_DESCRIPTOR
* NotifyList
323 // PEI Boot Mode Services
327 (EFIAPI
*EFI_PEI_GET_BOOT_MODE
) (
328 IN CONST EFI_PEI_SERVICES
**PeiServices
,
329 IN OUT EFI_BOOT_MODE
* BootMode
334 (EFIAPI
*EFI_PEI_SET_BOOT_MODE
) (
335 IN CONST EFI_PEI_SERVICES
**PeiServices
,
336 IN EFI_BOOT_MODE BootMode
344 (EFIAPI
*EFI_PEI_GET_HOB_LIST
) (
345 IN CONST EFI_PEI_SERVICES
**PeiServices
,
346 IN OUT VOID
**HobList
351 (EFIAPI
*EFI_PEI_CREATE_HOB
) (
352 IN CONST EFI_PEI_SERVICES
**PeiServices
,
361 // PEI Firmware Volume Services
365 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_VOLUME2
) (
366 IN CONST EFI_PEI_SERVICES
**PeiServices
,
368 IN OUT EFI_PEI_FV_HANDLE
*VolumeHandle
373 (EFIAPI
*EFI_PEI_FFS_FIND_NEXT_FILE2
) (
374 IN CONST EFI_PEI_SERVICES
**PeiServices
,
375 IN EFI_FV_FILETYPE SearchType
,
376 IN CONST EFI_PEI_FV_HANDLE
*FwVolHeader
,
377 IN OUT EFI_PEI_FILE_HANDLE
**FileHandle
382 (EFIAPI
*EFI_PEI_FFS_FIND_SECTION_DATA2
) (
383 IN CONST EFI_PEI_SERVICES
**PeiServices
,
384 IN EFI_SECTION_TYPE SectionType
,
385 IN EFI_PEI_FILE_HANDLE
*FileHandle
,
386 OUT VOID
**SectionData
391 // PEI Memory Services
395 (EFIAPI
*EFI_PEI_INSTALL_PEI_MEMORY
) (
396 IN CONST EFI_PEI_SERVICES
**PeiServices
,
397 IN EFI_PHYSICAL_ADDRESS MemoryBegin
,
398 IN UINT64 MemoryLength
403 (EFIAPI
*EFI_PEI_ALLOCATE_PAGES
) (
405 IN CONST EFI_PEI_SERVICES
**PeiServices
,
406 IN EFI_MEMORY_TYPE MemoryType
,
408 IN OUT EFI_PHYSICAL_ADDRESS
* Memory
413 (EFIAPI
*EFI_PEI_ALLOCATE_POOL
) (
414 IN CONST EFI_PEI_SERVICES
**PeiServices
,
421 (EFIAPI
*EFI_PEI_COPY_MEM
) (
422 IN VOID
*Destination
,
429 (EFIAPI
*EFI_PEI_SET_MEM
) (
436 // New interfaceas added by the PI 1.0
440 (EFIAPI
*EFI_PEI_FFS_FIND_BY_NAME
) (
441 IN CONST EFI_GUID
*FileName
,
442 IN EFI_PEI_FV_HANDLE VolumeHandle
,
443 OUT EFI_PEI_FILE_HANDLE
*FileHandle
449 (EFIAPI
*EFI_PEI_FFS_GET_FILE_INFO
) (
450 IN EFI_PEI_FILE_HANDLE FileHandle
,
451 OUT EFI_FV_FILE_INFO
*FileInfo
457 (EFIAPI
*EFI_PEI_FFS_GET_VOLUME_INFO
) (
458 IN EFI_PEI_FV_HANDLE
*VolumeHandle
,
459 OUT EFI_FV_INFO
*VolumeInfo
464 (EFIAPI
*EFI_PEI_REGISTER_FOR_SHADOW
) (
465 IN EFI_PEI_FILE_HANDLE FileHandle
469 // PEI Status Code Service
473 (EFIAPI
*EFI_PEI_REPORT_STATUS_CODE
) (
474 IN EFI_PEI_SERVICES
**PeiServices
,
475 IN EFI_STATUS_CODE_TYPE Type
,
476 IN EFI_STATUS_CODE_VALUE Value
,
478 IN EFI_GUID
*CallerId OPTIONAL
,
479 IN EFI_STATUS_CODE_DATA
*Data OPTIONAL
487 (EFIAPI
*EFI_PEI_RESET_SYSTEM
) (
488 IN EFI_PEI_SERVICES
**PeiServices
495 // EFI PEI Services Table
497 #define PEI_SERVICES_SIGNATURE 0x5652455320494550
498 #define PEI_SERVICES_REVISION ((PEI_SPECIFICATION_MAJOR_REVISION << 16) | (PEI_SPECIFICATION_MINOR_REVISION))
499 typedef PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI
;
502 typedef struct _EFI_PEI_SERVICES
{
503 EFI_TABLE_HEADER Hdr
;
508 EFI_PEI_INSTALL_PPI InstallPpi
;
509 EFI_PEI_REINSTALL_PPI ReInstallPpi
;
510 EFI_PEI_LOCATE_PPI LocatePpi
;
511 EFI_PEI_NOTIFY_PPI NotifyPpi
;
514 // Boot Mode Functions
516 EFI_PEI_GET_BOOT_MODE GetBootMode
;
517 EFI_PEI_SET_BOOT_MODE SetBootMode
;
522 EFI_PEI_GET_HOB_LIST GetHobList
;
523 EFI_PEI_CREATE_HOB CreateHob
;
526 // Firmware Volume Functions
528 #if (PI_SPECIFICATION_VERSION < 0x00010000)
529 EFI_PEI_FFS_FIND_NEXT_VOLUME FfsFindNextVolume
;
530 EFI_PEI_FFS_FIND_NEXT_FILE FfsFindNextFile
;
531 EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData
;
533 EFI_PEI_FFS_FIND_NEXT_VOLUME2 FfsFindNextVolume
;
534 EFI_PEI_FFS_FIND_NEXT_FILE2 FfsFindNextFile
;
535 EFI_PEI_FFS_FIND_SECTION_DATA2 FfsFindSectionData
;
538 // PEI Memory Functions
540 EFI_PEI_INSTALL_PEI_MEMORY InstallPeiMemory
;
541 EFI_PEI_ALLOCATE_PAGES AllocatePages
;
542 EFI_PEI_ALLOCATE_POOL AllocatePool
;
543 EFI_PEI_COPY_MEM CopyMem
;
544 EFI_PEI_SET_MEM SetMem
;
549 EFI_PEI_REPORT_STATUS_CODE PeiReportStatusCode
;
554 EFI_PEI_RESET_SYSTEM PeiResetSystem
;
557 // Pointer to PPI interface
559 #if (PI_SPECIFICATION_VERSION < 0x00010000)
561 PEI_CPU_IO_PPI
*CpuIo
;
562 PEI_PCI_CFG_PPI
*PciCfg
;
564 EFI_PEI_CPU_IO_PPI
*CpuIo
;
565 EFI_PEI_PCI_CFG2_PPI
*PciCfg
;
568 // New interfaceas added by the PI 1.0
570 EFI_PEI_FFS_FIND_BY_NAME FfsFindFileByName
;
571 EFI_PEI_FFS_GET_FILE_INFO FfsGetFileInfo
;
572 EFI_PEI_FFS_GET_VOLUME_INFO FfsGetVolumeInfo
;
573 EFI_PEI_REGISTER_FOR_SHADOW RegisterForShadow
;
578 #if (PI_SPECIFICATION_VERSION < 0x00010000)
581 UINTN BootFirmwareVolume
;
582 UINTN SizeOfCacheAsRam
;
583 EFI_PEI_PPI_DESCRIPTOR
*DispatchTable
;
584 } EFI_PEI_STARTUP_DESCRIPTOR
;
588 (EFIAPI
*PEI_MAIN_ENTRY_POINT
) (
589 IN EFI_PEI_STARTUP_DESCRIPTOR
*PeiStartupDescriptor
594 typedef struct _EFI_SEC_PEI_HAND_OFF
{
596 VOID
*BootFirmwareVolumeBase
;
597 UINTN BootFirmwareVolumeSize
;
598 VOID
*TemporaryRamBase
;
599 UINTN TemporaryRamSize
;
600 VOID
*PeiTemporaryRamBase
;
601 UINTN PeiTemporaryRamSize
;
604 }EFI_SEC_PEI_HAND_OFF
;
608 (EFIAPI
*PEI_MAIN_ENTRY_POINT
) (
609 IN CONST EFI_SEC_PEI_HAND_OFF
*SecCoreData
,
610 IN CONST EFI_PEI_PPI_DESCRIPTOR
*PpList