]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Protocol/LegacyBios.h
Initial import.
[mirror_edk2.git] / MdePkg / Include / Protocol / LegacyBios.h
1 /** @file
2 The EFI Legacy BIOS Protocol is used to abstract legacy Option ROM usage
3 under EFI and Legacy OS boot.
4
5 Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
6 well known naming conventions.
7
8 Thunk - A thunk is a transition from one processor mode to another. A Thunk
9 is a transition from native EFI mode to 16-bit mode. A reverse thunk
10 would be a transition from 16-bit mode to native EFI mode.
11
12 You most likely should not use this protocol! Find the EFI way to solve the
13 problem to make your code portable
14
15 Copyright (c) 2006, Intel Corporation
16 All rights reserved. This program and the accompanying materials
17 are licensed and made available under the terms and conditions of the BSD License
18 which accompanies this distribution. The full text of the license may be found at
19 http://opensource.org/licenses/bsd-license.php
20
21 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
22 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
23
24 Module Name: LegacyBios.h
25
26 @par Revision Reference:
27 This protocol is defined in Framework for EFI Compatibility Support Module spec
28 Version 0.96
29
30 **/
31
32 #ifndef _EFI_LEGACY_BIOS_H
33 #define _EFI_LEGACY_BIOS_H
34
35 #define EFI_LEGACY_BIOS_PROTOCOL_GUID \
36 { \
37 0xdb9a1e3d, 0x45cb, 0x4abb, {0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d } \
38 }
39
40 typedef struct _EFI_LEGACY_BIOS_PROTOCOL EFI_LEGACY_BIOS_PROTOCOL;
41
42 //
43 // Convert from 32-bit address (_Adr) to Segment:Offset 16-bit form
44 //
45 #define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
46 #define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
47 #define BYTE_GRANULARITY 0x01
48 #define WORD_GRANULARITY 0x02
49 #define DWORD_GRANULARITY 0x04
50 #define QWORD_GRANULARITY 0x08
51 #define PARAGRAPH_GRANULARITY 0x10
52
53 #define CARRY_FLAG 0x01
54
55 //*********************************************************
56 // EFI_EFLAGS_REG
57 //*********************************************************
58 typedef struct {
59 UINT32 CF:1;
60 UINT32 Reserved1:1;
61 UINT32 PF:1;
62 UINT32 Reserved2:1;
63 UINT32 AF:1;
64 UINT32 Reserved3:1;
65 UINT32 ZF:1;
66 UINT32 SF:1;
67 UINT32 TF:1;
68 UINT32 IF:1;
69 UINT32 DF:1;
70 UINT32 OF:1;
71 UINT32 IOPL:2;
72 UINT32 NT:1;
73 UINT32 Reserved4:2;
74 UINT32 VM:1;
75 UINT32 Reserved5:14;
76 } EFI_EFLAGS_REG;
77
78 //*********************************************************
79 // EFI_DWORD_REGS
80 //*********************************************************
81
82 typedef struct {
83 UINT32 EAX;
84 UINT32 EBX;
85 UINT32 ECX;
86 UINT32 EDX;
87 UINT32 ESI;
88 UINT32 EDI;
89 EFI_EFLAGS_REG EFlags;
90 UINT16 ES;
91 UINT16 CS;
92 UINT16 SS;
93 UINT16 DS;
94 UINT16 FS;
95 UINT16 GS;
96 UINT32 EBP;
97 UINT32 ESP;
98 } EFI_DWORD_REGS;
99
100 //*******************************************
101 // EFI_FLAGS_REG
102 //*******************************************
103 typedef struct {
104 UINT16 CF:1;
105 UINT16 Reserved1:1;
106 UINT16 PF:1;
107 UINT16 Reserved2:1;
108 UINT16 AF:1;
109 UINT16 Reserved3:1;
110 UINT16 ZF:1;
111 UINT16 SF:1;
112 UINT16 TF:1;
113 UINT16 IF:1;
114 UINT16 DF:1;
115 UINT16 OF:1;
116 UINT16 IOPL:2;
117 UINT16 NT:1;
118 UINT16 Reserved4:1;
119 } EFI_FLAGS_REG;
120
121
122 //*********************************************************
123 // EFI_WORD_REGS
124 //*********************************************************
125
126 typedef struct {
127 UINT16 AX;
128 UINT16 ReservedAX;
129 UINT16 BX;
130 UINT16 ReservedBX;
131 UINT16 CX;
132 UINT16 ReservedCX;
133 UINT16 DX;
134 UINT16 ReservedDX;
135 UINT16 SI;
136 UINT16 ReservedSI;
137 UINT16 DI;
138 UINT16 ReservedDI;
139 EFI_FLAGS_REG Flags;
140 UINT16 ReservedFlags;
141 UINT16 ES;
142 UINT16 CS;
143 UINT16 SS;
144 UINT16 DS;
145 UINT16 FS;
146 UINT16 GS;
147 UINT16 BP;
148 UINT16 ReservedBP;
149 UINT16 SP;
150 UINT16 ReservedSP;
151 } EFI_WORD_REGS;
152
153 //*********************************************************
154 // EFI_BYTE_REGS
155 //*********************************************************
156
157 typedef struct {
158 UINT8 AL, AH;
159 UINT16 ReservedAX;
160 UINT8 BL, BH;
161 UINT16 ReservedBX;
162 UINT8 CL, CH;
163 UINT16 ReservedCX;
164 UINT8 DL, DH;
165 UINT16 ReservedDX;
166 } EFI_BYTE_REGS;
167
168 typedef union {
169 EFI_DWORD_REGS E;
170 EFI_WORD_REGS X;
171 EFI_BYTE_REGS H;
172 } EFI_IA32_REGISTER_SET;
173
174 #pragma pack(1)
175 //
176 // $EFI table created by Legacy16 code and consumed by EFI Legacy driver
177 //
178 typedef struct {
179 UINT32 Signature; // "$EFI"
180 UINT8 TableChecksum;
181 UINT8 TableLength;
182 UINT8 EfiMajorRevision;
183 UINT8 EfiMinorRevision;
184 UINT8 TableMajorRevision;
185 UINT8 TableMinorRevision;
186 UINT8 Reserved[2];
187 UINT16 Legacy16CallSegment;
188 UINT16 Legacy16CallOffset;
189
190 UINT16 PnPInstallationCheckSegment;
191 UINT16 PnPInstallationCheckOffset;
192
193 UINT32 EfiSystemTable;
194 UINT32 OemStringPointer;
195 UINT32 AcpiRsdPtrPointer;
196 UINT16 OemRevision;
197 UINT32 E820Pointer;
198 UINT32 E820Length;
199 UINT32 IrqRoutingTablePointer;
200 UINT32 IrqRoutingTableLength;
201 UINT32 MpTablePtr;
202 UINT32 MpTableLength;
203 UINT16 OemIntSegment;
204 UINT16 OemIntOffset;
205 UINT16 Oem32Segment;
206 UINT16 Oem32Offset;
207 UINT16 Oem16Segment;
208 UINT16 Oem16Offset;
209 UINT16 TpmSegment;
210 UINT16 TpmOffset;
211 UINT32 IbvPointer;
212 UINT32 PciExpressBase;
213 UINT8 LastPciBus;
214 } EFI_COMPATIBILITY16_TABLE;
215 //
216 // define maximum number of HDD system supports
217 //
218 #define MAX_HDD_ENTRIES 0x30
219
220 typedef struct {
221 UINT16 Raw[256];
222 } ATAPI_IDENTIFY;
223
224 //
225 // HDD_INFO status
226 //
227 #define HDD_PRIMARY 0x01
228 #define HDD_SECONDARY 0x02
229 #define HDD_MASTER_ATAPI_CDROM 0x04
230 #define HDD_SLAVE_ATAPI_CDROM 0x08
231 #define HDD_MASTER_IDE 0x20
232 #define HDD_SLAVE_IDE 0x40
233 #define HDD_MASTER_ATAPI_ZIPDISK 0x10
234 #define HDD_SLAVE_ATAPI_ZIPDISK 0x80
235
236 typedef struct {
237 UINT16 Status;
238 UINT32 Bus;
239 UINT32 Device;
240 UINT32 Function;
241 UINT16 CommandBaseAddress;
242 UINT16 ControlBaseAddress;
243 UINT16 BusMasterAddress;
244 UINT8 HddIrq;
245 ATAPI_IDENTIFY IdentifyDrive[2];
246 } HDD_INFO;
247
248 //
249 // Parties data structures
250 //
251 typedef struct {
252 UINT8 DirectoryServiceValidity : 1;
253 UINT8 RabcaUsedFlag : 1;
254 UINT8 ExecuteHddDiagnosticsFlag : 1;
255 UINT8 Reserved : 5;
256 } UDC_ATTRIBUTES;
257
258 typedef struct {
259 UDC_ATTRIBUTES Attributes;
260 UINT8 DeviceNumber;
261 UINT8 BbsTableEntryNumberForParentDevice;
262 UINT8 BbsTableEntryNumberForBoot;
263 UINT8 BbsTableEntryNumberForHddDiag;
264 UINT8 BeerData[128];
265 UINT8 ServiceAreaData[64];
266 } UD_TABLE;
267
268 //
269 // define BBS Device Types
270 //
271 #define BBS_FLOPPY 0x01
272 #define BBS_HARDDISK 0x02
273 #define BBS_CDROM 0x03
274 #define BBS_PCMCIA 0x04
275 #define BBS_USB 0x05
276 #define BBS_EMBED_NETWORK 0x06
277 #define BBS_BEV_DEVICE 0x80
278 #define BBS_UNKNOWN 0xff
279
280 typedef struct {
281 UINT16 OldPosition : 4;
282 UINT16 Reserved1 : 4;
283 UINT16 Enabled : 1;
284 UINT16 Failed : 1;
285 UINT16 MediaPresent : 2;
286 UINT16 Reserved2 : 4;
287 } BBS_STATUS_FLAGS;
288
289 #define MAX_BBS_ENTRIES 0x100
290 //
291 // BBS_IGNORE_ENTRY is placed in the BootPriority field if the entry is to
292 // be skipped.
293 // BBS_UNPRIORITIZED_ENTRY is placed in the BootPriority field before
294 // priority has been assigned but indicates valid entry.
295 // BBS_LOWEST_PRIORITY is normally used for removable media with no media
296 // inserted. This allows the 16-bit CSM to allocate a drive letter to
297 // the device.
298 // BBS_DO_NOT_BOOT_FROM is used for devices that the 16-bit CSM is to assign
299 // a drive letter to but never boot from.
300 //
301 // AdditionalIrq??Handler usage is IBV specific. The fields have been added
302 // for:
303 // 1. Saving non-BBS card info about IRQs taken by card.
304 // 2. For BBS compliant cards that hook IRQs in order to have their SETUP
305 // executed.
306 //
307 #define BBS_DO_NOT_BOOT_FROM 0xFFFC
308 #define BBS_LOWEST_PRIORITY 0xFFFD
309 #define BBS_UNPRIORITIZED_ENTRY 0xFFFE
310 #define BBS_IGNORE_ENTRY 0xFFFF
311
312 typedef struct {
313 UINT16 BootPriority;
314 UINT32 Bus;
315 UINT32 Device;
316 UINT32 Function;
317 UINT8 Class;
318 UINT8 SubClass;
319 UINT16 MfgStringOffset;
320 UINT16 MfgStringSegment;
321 UINT16 DeviceType;
322 BBS_STATUS_FLAGS StatusFlags;
323 UINT16 BootHandlerOffset;
324 UINT16 BootHandlerSegment;
325 UINT16 DescStringOffset;
326 UINT16 DescStringSegment;
327 UINT32 InitPerReserved;
328 UINT32 AdditionalIrq13Handler;
329 UINT32 AdditionalIrq18Handler;
330 UINT32 AdditionalIrq19Handler;
331 UINT32 AdditionalIrq40Handler;
332 UINT8 AssignedDriveNumber;
333 UINT32 AdditionalIrq41Handler;
334 UINT32 AdditionalIrq46Handler;
335 UINT32 IBV1;
336 UINT32 IBV2;
337 } BBS_TABLE;
338
339 #pragma pack()
340
341 /**
342 Thunk to 16-bit real mode and execute a software interrupt with a vector
343 of BiosInt. Regs will contain the 16-bit register context on entry and
344 exit.
345
346 @param This Protocol instance pointer.
347 @param BiosInt Processor interrupt vector to invoke
348 @param Reg Register contexted passed into (and returned) from thunk to
349 16-bit mode
350
351 @retval FALSE Thunk completed, and there were no BIOS errors in the target code.
352 See Regs for status.
353 @retval TRUE There was a BIOS erro in the target code.
354
355 **/
356 typedef
357 BOOLEAN
358 (EFIAPI *EFI_LEGACY_BIOS_INT86) (
359 IN EFI_LEGACY_BIOS_PROTOCOL *This,
360 IN UINT8 BiosInt,
361 IN OUT EFI_IA32_REGISTER_SET *Regs
362 )
363 ;
364
365 /**
366 Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
367 16-bit register context on entry and exit. Arguments can be passed on
368 the Stack argument
369
370 @param This Protocol instance pointer.
371 @param Segment Segemnt of 16-bit mode call
372 @param Offset Offset of 16-bit mdoe call
373 @param Reg Register contexted passed into (and returned) from thunk to
374 16-bit mode
375 @param Stack Caller allocated stack used to pass arguments
376 @param StackSize Size of Stack in bytes
377
378 @retval FALSE Thunk completed, and there were no BIOS errors in the target code.
379 See Regs for status.
380 @retval TRUE There was a BIOS erro in the target code.
381
382 **/
383 typedef
384 BOOLEAN
385 (EFIAPI *EFI_LEGACY_BIOS_FARCALL86) (
386 IN EFI_LEGACY_BIOS_PROTOCOL *This,
387 IN UINT16 Segment,
388 IN UINT16 Offset,
389 IN EFI_IA32_REGISTER_SET *Regs,
390 IN VOID *Stack,
391 IN UINTN StackSize
392 )
393 ;
394
395 typedef
396 EFI_STATUS
397 (EFIAPI *EFI_LEGACY_BIOS_CHECK_ROM) (
398 IN EFI_LEGACY_BIOS_PROTOCOL *This,
399 IN EFI_HANDLE PciHandle,
400 OUT VOID **RomImage, OPTIONAL
401 OUT UINTN *RomSize, OPTIONAL
402 OUT UINTN *Flags
403
404 /**
405 Test to see if a legacy PCI ROM exists for this device. Optionally return
406 the Legacy ROM instance for this PCI device.
407
408 @param This Protocol instance pointer.
409 @param PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded
410 @param RomImage Return the legacy PCI ROM for this device
411 @param RomSize Size of ROM Image
412 @param Flags Indicates if ROM found and if PC-AT.
413
414 @retval EFI_SUCCESS Legacy Option ROM availible for this device
415 @retval EFI_UNSUPPORTED Legacy Option ROM not supported.
416
417 **/
418 )
419 ;
420
421 /**
422 Load a legacy PC-AT OPROM on the PciHandle device. Return information
423 about how many disks were added by the OPROM and the shadow address and
424 size. DiskStart & DiskEnd are INT 13h drive letters. Thus 0x80 is C:
425
426 @param This Protocol instance pointer.
427 @param PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded.
428 This value is NULL if RomImage is non-NULL. This is the normal
429 case.
430 @param RomImage A PCI PC-AT ROM image. This argument is non-NULL if there is
431 no hardware associated with the ROM and thus no PciHandle,
432 otherwise is must be NULL.
433 Example is PXE base code.
434 @param Flags Return Status if ROM was found and if was Legacy OPROM.
435 @param DiskStart Disk number of first device hooked by the ROM. If DiskStart
436 is the same as DiskEnd no disked were hooked.
437 @param DiskEnd Disk number of the last device hooked by the ROM.
438 @param RomShadowAddress Shadow address of PC-AT ROM
439 @param RomShadowSize Size of RomShadowAddress in bytes
440
441 @retval EFI_SUCCESS Thunk completed, see Regs for status.
442 @retval EFI_INVALID_PARAMETER PciHandle not found
443
444 **/
445 typedef
446 EFI_STATUS
447 (EFIAPI *EFI_LEGACY_BIOS_INSTALL_ROM) (
448 IN EFI_LEGACY_BIOS_PROTOCOL *This,
449 IN EFI_HANDLE PciHandle,
450 IN VOID **RomImage,
451 OUT UINTN *Flags,
452 OUT UINT8 *DiskStart, OPTIONAL
453 OUT UINT8 *DiskEnd, OPTIONAL
454 OUT VOID **RomShadowAddress, OPTIONAL
455 OUT UINT32 *ShadowedRomSize OPTIONAL
456 )
457 ;
458
459 /**
460 Attempt to legacy boot the BootOption. If the EFI contexted has been
461 compromised this function will not return.
462
463 @param This Protocol instance pointer.
464 @param BootOption EFI Device Path from BootXXXX variable.
465 @param LoadOptionSize Size of LoadOption in size.
466 @param LoadOption LoadOption from BootXXXX variable
467
468 @retval EFI_SUCCESS Removable media not present
469
470 **/
471 /**
472 Update BDA with current Scroll, Num & Cap lock LEDS
473
474 @param This Protocol instance pointer.
475 @param Leds Status of current Scroll, Num & Cap lock LEDS
476 Bit 0 is Scroll Lock 0 = Not locked
477 Bit 1 is Num Lock
478 Bit 2 is Caps Lock
479
480 @retval EFI_SUCCESS Removable media not present
481
482 **/
483 typedef
484 EFI_STATUS
485 (EFIAPI *EFI_LEGACY_BIOS_BOOT) (
486 IN EFI_LEGACY_BIOS_PROTOCOL *This,
487 IN BBS_BBS_DEVICE_PATH *BootOption,
488 IN UINT32 LoadOptionsSize,
489 IN VOID *LoadOptions
490 )
491 ;
492 typedef
493 EFI_STATUS
494 (EFIAPI *EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS) (
495 IN EFI_LEGACY_BIOS_PROTOCOL *This,
496 IN UINT8 Leds
497 )
498 ;
499
500 /**
501 Retrieve legacy BBS info and assign boot priority.
502
503 @param This Protocol instance pointer.
504 @param HddCount Number of HDD_INFO structures
505 @param HddInfo Onboard IDE controller information
506 @param BbsCount Number of BBS_TABLE structures
507 @param BbsTable List BBS entries
508
509 @retval EFI_SUCCESS Tables returned
510
511 **/
512 typedef
513 EFI_STATUS
514 (EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO) (
515 IN EFI_LEGACY_BIOS_PROTOCOL *This,
516 OUT UINT16 *HddCount,
517 OUT HDD_INFO **HddInfo,
518 OUT UINT16 *BbsCount,
519 OUT IN BBS_TABLE **BbsTable
520 )
521 ;
522
523 /**
524 Assign drive number to legacy HDD drives prior to booting an EFI
525 aware OS so the OS can access drives without an EFI driver.
526
527 @param This Protocol instance pointer.
528 @param BbsCount Number of BBS_TABLE structures
529 @param BbsTable List BBS entries
530
531 @retval EFI_SUCCESS Drive numbers assigned
532
533 **/
534 typedef
535 EFI_STATUS
536 (EFIAPI *EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI) (
537 IN EFI_LEGACY_BIOS_PROTOCOL *This,
538 OUT UINT16 *BbsCount,
539 OUT IN BBS_TABLE **BbsTable
540 )
541 ;
542
543 /**
544 To boot from an unconventional device like parties and/or execute
545 HDD diagnostics.
546
547 @param This Protocol instance pointer.
548 @param Attributes How to interpret the other input parameters
549 @param BbsEntry The 0-based index into the BbsTable for the parent
550 device.
551 @param BeerData Pointer to the 128 bytes of ram BEER data.
552 @param ServiceAreaData Pointer to the 64 bytes of raw Service Area data. The
553 caller must provide a pointer to the specific Service
554 Area and not the start all Service Areas.
555
556 EFI_INVALID_PARAMETER if error. Does NOT return if no error.
557
558 **/
559 typedef
560 EFI_STATUS
561 (EFIAPI *EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE) (
562 IN EFI_LEGACY_BIOS_PROTOCOL *This,
563 IN UDC_ATTRIBUTES Attributes,
564 IN UINTN BbsEntry,
565 IN VOID *BeerData,
566 IN VOID *ServiceAreaData
567 )
568 ;
569
570 /**
571 Shadow all legacy16 OPROMs that haven't been shadowed.
572 Warning: Use this with caution. This routine disconnects all EFI
573 drivers. If used externally then caller must re-connect EFI
574 drivers.
575
576 @retval EFI_SUCCESS OPROMs shadowed
577
578 **/
579 typedef
580 EFI_STATUS
581 (EFIAPI *EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS) (
582 IN EFI_LEGACY_BIOS_PROTOCOL *This
583 )
584 ;
585
586 /**
587 Get a region from the LegacyBios for S3 usage.
588
589 @param This Protocol instance pointer.
590 @param LegacyMemorySize Size of required region
591 @param Region Region to use.
592 00 = Either 0xE0000 or 0xF0000 block
593 Bit0 = 1 0xF0000 block
594 Bit1 = 1 0xE0000 block
595 @param Alignment Address alignment. Bit mapped. First non-zero
596 bit from right is alignment.
597 @param LegacyMemoryAddress Region Assigned
598
599 @retval EFI_SUCCESS Region assigned
600
601 @retval Other Region not assigned
602
603 **/
604 typedef
605 EFI_STATUS
606 (EFIAPI *EFI_LEGACY_BIOS_GET_LEGACY_REGION) (
607 IN EFI_LEGACY_BIOS_PROTOCOL *This,
608 IN UINTN LegacyMemorySize,
609 IN UINTN Region,
610 IN UINTN Alignment,
611 OUT VOID **LegacyMemoryAddress
612 )
613 ;
614
615 /**
616 Get a region from the LegacyBios for Tiano usage. Can only be invoked once.
617
618 @param This Protocol instance pointer.
619 @param LegacyMemorySize Size of data to copy
620 @param LegacyMemoryAddress Legacy Region destination address
621 Note: must be in region assigned by
622 LegacyBiosGetLegacyRegion
623 @param LegacyMemorySourceAddress Source of data
624
625 @retval EFI_SUCCESS Region assigned
626 @retval EFI_ACCESS_DENIED Destination outside assigned region
627
628 **/
629 typedef
630 EFI_STATUS
631 (EFIAPI *EFI_LEGACY_BIOS_COPY_LEGACY_REGION) (
632 IN EFI_LEGACY_BIOS_PROTOCOL *This,
633 IN UINTN LegacyMemorySize,
634 IN VOID *LegacyMemoryAddress,
635 IN VOID *LegacyMemorySourceAddress
636 )
637 ;
638
639 /**
640 @par Protocol Description:
641 Abstracts the traditional BIOS from the rest of EFI. The LegacyBoot()
642 member function allows the BDS to support booting a traditional OS.
643 EFI thunks drivers that make EFI bindings for BIOS INT services use
644 all the other member functions.
645
646 @param Int86
647 Performs traditional software INT. See the Int86() function description.
648
649 @param FarCall86
650 Performs a far call into Compatibility16 or traditional OpROM code.
651
652 @param CheckPciRom
653 Checks if a traditional OpROM exists for this device.
654
655 @param InstallPciRom
656 Loads a traditional OpROM in traditional OpROM address space.
657
658 @param LegacyBoot
659 Boots a traditional OS.
660
661 @param UpdateKeyboardLedStatus
662 Updates BDA to reflect the current EFI keyboard LED status.
663
664 @param GetBbsInfo
665 Allows an external agent, such as BIOS Setup, to get the BBS data.
666
667 @param ShadowAllLegacyOproms
668 Causes all legacy OpROMs to be shadowed.
669
670 @param PrepareToBootEfi
671 Performs all actions prior to boot. Used when booting an EFI-aware OS
672 rather than a legacy OS.
673
674 @param GetLegacyRegion
675 Allows EFI to reserve an area in the 0xE0000 or 0xF0000 block.
676
677 @param CopyLegacyRegion
678 Allows EFI to copy data to the area specified by GetLegacyRegion.
679
680 @param BootUnconventionalDevice
681 Allows the user to boot off an unconventional device such as a PARTIES partition.
682
683 **/
684 struct _EFI_LEGACY_BIOS_PROTOCOL {
685 EFI_LEGACY_BIOS_INT86 Int86;
686 EFI_LEGACY_BIOS_FARCALL86 FarCall86;
687 EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom;
688 EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom;
689 EFI_LEGACY_BIOS_BOOT LegacyBoot;
690 EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus;
691 EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo;
692 EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi;
693 EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms;
694 EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion;
695 EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion;
696 EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice;
697 };
698
699 extern EFI_GUID gEfiLegacyBiosProtocolGuid;
700
701 #endif