]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Include/PeiApi.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Include / PeiApi.h
1 /*++
2
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
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
47 //
48 // PEI Specification Revision information
49 //
50 #if (PI_SPECIFICATION_VERSION < 0x00010000)
51 #define PEI_SPECIFICATION_MAJOR_REVISION 0
52 #define PEI_SPECIFICATION_MINOR_REVISION 91
53 #else
54 #define PEI_SPECIFICATION_MAJOR_REVISION 1
55 #define PEI_SPECIFICATION_MINOR_REVISION 00
56
57 #endif
58
59 typedef
60 EFI_STATUS
61 (EFIAPI *EFI_PEIM_ENTRY_POINT)(
62 IN EFI_FFS_FILE_HEADER * FfsHeader,
63 IN EFI_PEI_SERVICES **PeiServices
64 );
65
66 typedef
67 EFI_STATUS
68 (EFIAPI *EFI_PEIM_NOTIFY_ENTRY_POINT) (
69 IN EFI_PEI_SERVICES **PeiServices,
70 IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyDescriptor,
71 IN VOID *Ppi
72 );
73
74 typedef
75 EFI_STATUS
76 (EFIAPI *EFI_PEI_VERIFICATION) (
77 IN UINTN SectionAddress
78 );
79
80 //
81 // PEI Ppi Services List Descriptors
82 //
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
89
90 typedef struct {
91 UINTN Flags;
92 EFI_GUID *Guid;
93 VOID *Ppi;
94 } EFI_PEI_PPI_DESCRIPTOR;
95
96 typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR {
97 UINTN Flags;
98 EFI_GUID *Guid;
99 EFI_PEIM_NOTIFY_ENTRY_POINT Notify;
100 } EFI_PEI_NOTIFY_DESCRIPTOR;
101
102
103
104 typedef
105 EFI_STATUS
106 (EFIAPI *EFI_REPORT_STATUS_CODE) (
107 IN EFI_STATUS_CODE_TYPE Type,
108 IN EFI_STATUS_CODE_VALUE Value,
109 IN UINT32 Instance,
110 IN EFI_GUID *CallerId OPTIONAL,
111 IN EFI_STATUS_CODE_DATA *Data OPTIONAL
112 );
113
114
115
116 #if (PI_SPECIFICATION_VERSION < 0x00010000)
117
118 //
119 // PEI PPI Services
120 //
121 typedef
122 EFI_STATUS
123 (EFIAPI *EFI_PEI_INSTALL_PPI) (
124 IN EFI_PEI_SERVICES **PeiServices,
125 IN EFI_PEI_PPI_DESCRIPTOR * PpiList
126 );
127
128 typedef
129 EFI_STATUS
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
134 );
135
136 typedef
137 EFI_STATUS
138 (EFIAPI *EFI_PEI_LOCATE_PPI) (
139 IN EFI_PEI_SERVICES **PeiServices,
140 IN EFI_GUID * Guid,
141 IN UINTN Instance,
142 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
143 IN OUT VOID **Ppi
144 );
145
146 typedef
147 EFI_STATUS
148 (EFIAPI *EFI_PEI_NOTIFY_PPI) (
149 IN EFI_PEI_SERVICES **PeiServices,
150 IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList
151 );
152
153 //
154 // PEI Boot Mode Services
155 //
156 typedef
157 EFI_STATUS
158 (EFIAPI *EFI_PEI_GET_BOOT_MODE) (
159 IN EFI_PEI_SERVICES **PeiServices,
160 IN OUT EFI_BOOT_MODE * BootMode
161 );
162
163 typedef
164 EFI_STATUS
165 (EFIAPI *EFI_PEI_SET_BOOT_MODE) (
166 IN EFI_PEI_SERVICES **PeiServices,
167 IN EFI_BOOT_MODE BootMode
168 );
169
170 //
171 // PEI HOB Services
172 //
173 typedef
174 EFI_STATUS
175 (EFIAPI *EFI_PEI_GET_HOB_LIST) (
176 IN EFI_PEI_SERVICES **PeiServices,
177 IN OUT VOID **HobList
178 );
179
180 typedef
181 EFI_STATUS
182 (EFIAPI *EFI_PEI_CREATE_HOB) (
183 IN EFI_PEI_SERVICES **PeiServices,
184 IN UINT16 Type,
185 IN UINT16 Length,
186 IN OUT VOID **Hob
187 );
188
189 //
190 // PEI Firmware Volume Services
191 //
192
193 typedef
194 EFI_STATUS
195 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) (
196 IN EFI_PEI_SERVICES **PeiServices,
197 IN UINTN Instance,
198 IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader
199 );
200
201 typedef
202 EFI_STATUS
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
208 );
209
210 typedef
211 EFI_STATUS
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
217 );
218
219 //
220 // PEI Memory Services
221 //
222 typedef
223 EFI_STATUS
224 (EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (
225 IN EFI_PEI_SERVICES **PeiServices,
226 IN EFI_PHYSICAL_ADDRESS MemoryBegin,
227 IN UINT64 MemoryLength
228 );
229
230 typedef
231 EFI_STATUS
232 (EFIAPI *EFI_PEI_ALLOCATE_PAGES) (
233 IN EFI_PEI_SERVICES **PeiServices,
234 IN EFI_MEMORY_TYPE MemoryType,
235 IN UINTN Pages,
236 IN OUT EFI_PHYSICAL_ADDRESS * Memory
237 );
238
239 typedef
240 EFI_STATUS
241 (EFIAPI *EFI_PEI_ALLOCATE_POOL) (
242 IN EFI_PEI_SERVICES **PeiServices,
243 IN UINTN Size,
244 OUT VOID **Buffer
245 );
246
247 typedef
248 VOID
249 (EFIAPI *EFI_PEI_COPY_MEM) (
250 IN VOID *Destination,
251 IN VOID *Source,
252 IN UINTN Length
253 );
254
255 typedef
256 VOID
257 (EFIAPI *EFI_PEI_SET_MEM) (
258 IN VOID *Buffer,
259 IN UINTN Size,
260 IN UINT8 Value
261 );
262
263 typedef
264 EFI_STATUS
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,
269 IN UINT32 Instance,
270 IN EFI_GUID * CallerId OPTIONAL,
271 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
272 );
273
274 //
275 // PEI Reset
276 //
277 typedef
278 EFI_STATUS
279 (EFIAPI *EFI_PEI_RESET_SYSTEM) (
280 IN EFI_PEI_SERVICES **PeiServices
281 );
282
283
284
285 #else
286
287 //
288 // PEI PPI Services
289 //
290 typedef
291 EFI_STATUS
292 (EFIAPI *EFI_PEI_INSTALL_PPI) (
293 IN CONST EFI_PEI_SERVICES **PeiServices,
294 IN CONST EFI_PEI_PPI_DESCRIPTOR * PpiList
295 );
296
297 typedef
298 EFI_STATUS
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
303 );
304
305 typedef
306 EFI_STATUS
307 (EFIAPI *EFI_PEI_LOCATE_PPI) (
308 IN CONST EFI_PEI_SERVICES **PeiServices,
309 IN CONST EFI_GUID * Guid,
310 IN UINTN Instance,
311 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor OPTIONAL,
312 IN OUT VOID **Ppi
313 );
314
315 typedef
316 EFI_STATUS
317 (EFIAPI *EFI_PEI_NOTIFY_PPI) (
318 IN CONST EFI_PEI_SERVICES **PeiServices,
319 IN CONST EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList
320 );
321
322 //
323 // PEI Boot Mode Services
324 //
325 typedef
326 EFI_STATUS
327 (EFIAPI *EFI_PEI_GET_BOOT_MODE) (
328 IN CONST EFI_PEI_SERVICES **PeiServices,
329 IN OUT EFI_BOOT_MODE * BootMode
330 );
331
332 typedef
333 EFI_STATUS
334 (EFIAPI *EFI_PEI_SET_BOOT_MODE) (
335 IN CONST EFI_PEI_SERVICES **PeiServices,
336 IN EFI_BOOT_MODE BootMode
337 );
338
339 //
340 // PEI HOB Services
341 //
342 typedef
343 EFI_STATUS
344 (EFIAPI *EFI_PEI_GET_HOB_LIST) (
345 IN CONST EFI_PEI_SERVICES **PeiServices,
346 IN OUT VOID **HobList
347 );
348
349 typedef
350 EFI_STATUS
351 (EFIAPI *EFI_PEI_CREATE_HOB) (
352 IN CONST EFI_PEI_SERVICES **PeiServices,
353 IN UINT16 Type,
354 IN UINT16 Length,
355 IN OUT VOID **Hob
356 );
357
358
359
360 //
361 // PEI Firmware Volume Services
362 //
363 typedef
364 EFI_STATUS
365 (EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME2) (
366 IN CONST EFI_PEI_SERVICES **PeiServices,
367 IN UINTN Instance,
368 IN OUT EFI_PEI_FV_HANDLE *VolumeHandle
369 );
370
371 typedef
372 EFI_STATUS
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
378 );
379
380 typedef
381 EFI_STATUS
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
387 );
388
389
390 //
391 // PEI Memory Services
392 //
393 typedef
394 EFI_STATUS
395 (EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (
396 IN CONST EFI_PEI_SERVICES **PeiServices,
397 IN EFI_PHYSICAL_ADDRESS MemoryBegin,
398 IN UINT64 MemoryLength
399 );
400
401 typedef
402 EFI_STATUS
403 (EFIAPI *EFI_PEI_ALLOCATE_PAGES) (
404
405 IN CONST EFI_PEI_SERVICES **PeiServices,
406 IN EFI_MEMORY_TYPE MemoryType,
407 IN UINTN Pages,
408 IN OUT EFI_PHYSICAL_ADDRESS * Memory
409 );
410
411 typedef
412 EFI_STATUS
413 (EFIAPI *EFI_PEI_ALLOCATE_POOL) (
414 IN CONST EFI_PEI_SERVICES **PeiServices,
415 IN UINTN Size,
416 OUT VOID **Buffer
417 );
418
419 typedef
420 VOID
421 (EFIAPI *EFI_PEI_COPY_MEM) (
422 IN VOID *Destination,
423 IN VOID *Source,
424 IN UINTN Length
425 );
426
427 typedef
428 VOID
429 (EFIAPI *EFI_PEI_SET_MEM) (
430 IN VOID *Buffer,
431 IN UINTN Size,
432 IN UINT8 Value
433 );
434
435 //
436 // New interfaceas added by the PI 1.0
437 //
438 typedef
439 EFI_STATUS
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
444 );
445
446
447 typedef
448 EFI_STATUS
449 (EFIAPI *EFI_PEI_FFS_GET_FILE_INFO) (
450 IN EFI_PEI_FILE_HANDLE FileHandle,
451 OUT EFI_FV_FILE_INFO *FileInfo
452 );
453
454
455 typedef
456 EFI_STATUS
457 (EFIAPI *EFI_PEI_FFS_GET_VOLUME_INFO) (
458 IN EFI_PEI_FV_HANDLE *VolumeHandle,
459 OUT EFI_FV_INFO *VolumeInfo
460 );
461
462 typedef
463 EFI_STATUS
464 (EFIAPI *EFI_PEI_REGISTER_FOR_SHADOW) (
465 IN EFI_PEI_FILE_HANDLE FileHandle
466 );
467
468 //
469 // PEI Status Code Service
470 //
471 typedef
472 EFI_STATUS
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,
477 IN UINT32 Instance,
478 IN EFI_GUID *CallerId OPTIONAL,
479 IN EFI_STATUS_CODE_DATA *Data OPTIONAL
480 );
481
482 //
483 // PEI Reset Service
484 //
485 typedef
486 EFI_STATUS
487 (EFIAPI *EFI_PEI_RESET_SYSTEM) (
488 IN EFI_PEI_SERVICES **PeiServices
489 );
490
491 #endif
492
493
494 //
495 // EFI PEI Services Table
496 //
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;
500
501
502 typedef struct _EFI_PEI_SERVICES {
503 EFI_TABLE_HEADER Hdr;
504
505 //
506 // PPI Functions
507 //
508 EFI_PEI_INSTALL_PPI InstallPpi;
509 EFI_PEI_REINSTALL_PPI ReInstallPpi;
510 EFI_PEI_LOCATE_PPI LocatePpi;
511 EFI_PEI_NOTIFY_PPI NotifyPpi;
512
513 //
514 // Boot Mode Functions
515 //
516 EFI_PEI_GET_BOOT_MODE GetBootMode;
517 EFI_PEI_SET_BOOT_MODE SetBootMode;
518
519 //
520 // HOB Functions
521 //
522 EFI_PEI_GET_HOB_LIST GetHobList;
523 EFI_PEI_CREATE_HOB CreateHob;
524
525 //
526 // Firmware Volume Functions
527 //
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;
532 #else
533 EFI_PEI_FFS_FIND_NEXT_VOLUME2 FfsFindNextVolume;
534 EFI_PEI_FFS_FIND_NEXT_FILE2 FfsFindNextFile;
535 EFI_PEI_FFS_FIND_SECTION_DATA2 FfsFindSectionData;
536 #endif
537 //
538 // PEI Memory Functions
539 //
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;
545
546 //
547 // Status Code
548 //
549 EFI_PEI_REPORT_STATUS_CODE PeiReportStatusCode;
550
551 //
552 // Reset
553 //
554 EFI_PEI_RESET_SYSTEM PeiResetSystem;
555
556 //
557 // Pointer to PPI interface
558 //
559 #if (PI_SPECIFICATION_VERSION < 0x00010000)
560
561 PEI_CPU_IO_PPI *CpuIo;
562 PEI_PCI_CFG_PPI *PciCfg;
563 #else
564 EFI_PEI_CPU_IO_PPI *CpuIo;
565 EFI_PEI_PCI_CFG2_PPI *PciCfg;
566
567 //
568 // New interfaceas added by the PI 1.0
569 //
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;
574 #endif
575
576 } EFI_PEI_SERVICES;
577
578 #if (PI_SPECIFICATION_VERSION < 0x00010000)
579
580 typedef struct {
581 UINTN BootFirmwareVolume;
582 UINTN SizeOfCacheAsRam;
583 EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
584 } EFI_PEI_STARTUP_DESCRIPTOR;
585
586 typedef
587 EFI_STATUS
588 (EFIAPI *PEI_MAIN_ENTRY_POINT) (
589 IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor
590 );
591
592 #else
593
594 typedef struct _EFI_SEC_PEI_HAND_OFF{
595 UINT16 DataSize;
596 VOID *BootFirmwareVolumeBase;
597 UINTN BootFirmwareVolumeSize;
598 VOID *TemporaryRamBase;
599 UINTN TemporaryRamSize;
600 VOID *PeiTemporaryRamBase;
601 UINTN PeiTemporaryRamSize;
602 VOID *StackBase;
603 UINTN StackSize;
604 }EFI_SEC_PEI_HAND_OFF;
605
606 typedef
607 EFI_STATUS
608 (EFIAPI *PEI_MAIN_ENTRY_POINT) (
609 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,
610 IN CONST EFI_PEI_PPI_DESCRIPTOR *PpList
611 );
612
613 #endif
614
615 #endif