Home | History | Annotate | Download | only in protocol
      1 /*++
      2 
      3 Copyright (c) 1999 Intel Corporation
      4 
      5 Module Name:
      6 
      7     legacyboot
      8 
      9 Abstract:
     10 
     11     EFI support for legacy boot
     12 
     13 
     14 
     15 Revision History
     16 
     17 --*/
     18 
     19 #ifndef _LEGACY_BOOT_INCLUDE_
     20 #define _LEGACY_BOOT_INCLUDE_
     21 
     22 #define LEGACY_BOOT_PROTOCOL \
     23     { 0x376e5eb2, 0x30e4, 0x11d3, { 0xba, 0xe5, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
     24 
     25 #pragma pack(1)
     26 
     27 //
     28 // BBS 1.01 (See Appendix A) IPL and BCV Table Entry Data structure.
     29 //  Seg:Off pointers have been converted to EFI pointers in this data structure
     30 //  This is the structure that also maps to the EFI device path for the boot selection
     31 //
     32 typedef struct {
     33     UINT16  DeviceType;
     34     UINT16  StatusFlag;
     35     UINT32  Reserved;
     36     VOID    *BootHandler;   // Not an EFI entry point
     37     CHAR8   *DescString;
     38 } BBS_TABLE_ENTRY;
     39 #pragma pack()
     40 
     41 typedef
     42 EFI_STATUS
     43 (EFIAPI *LEGACY_BOOT_CALL) (
     44     IN EFI_DEVICE_PATH      *DevicePath
     45     );
     46 
     47 
     48 //
     49 // BBS support functions
     50 //  PnP Call numbers and BiosSelector hidden in implementation
     51 //
     52 
     53 typedef enum {
     54     IplRelative,
     55     BcvRelative
     56 } BBS_TYPE;
     57 
     58 INTERFACE_DECL(_LEGACY_BOOT_INTERFACE);
     59 
     60 //
     61 // == PnP Function 0x60 then BbsVersion == 0x0101 if this call fails then BbsVersion == 0x0000
     62 //
     63 
     64 //
     65 // == PnP Function 0x61
     66 //
     67 typedef
     68 EFI_STATUS
     69 (EFIAPI *GET_DEVICE_COUNT) (
     70     IN  struct _LEGACY_BOOT_INTERFACE   *This,
     71     IN  BBS_TYPE        *TableType,
     72     OUT UINTN           *DeviceCount,
     73     OUT UINTN           *MaxCount
     74     );
     75 
     76 //
     77 // == PnP Function 0x62
     78 //
     79 typedef
     80 EFI_STATUS
     81 (EFIAPI *GET_PRIORITY_AND_TABLE) (
     82     IN  struct _LEGACY_BOOT_INTERFACE   *This,
     83     IN  BBS_TYPE        *TableType,
     84     IN OUT  UINTN       *PrioritySize, // MaxCount * sizeof(UINT8)
     85     OUT     UINTN       *Priority,
     86     IN OUT  UINTN       *TableSize,    // MaxCount * sizeof(BBS_TABLE_ENTRY)
     87     OUT BBS_TABLE_ENTRY *TableEntrySize
     88     );
     89 
     90 //
     91 // == PnP Function 0x63
     92 //
     93 typedef
     94 EFI_STATUS
     95 (EFIAPI *SET_PRIORITY) (
     96     IN  struct _LEGACY_BOOT_INTERFACE   *This,
     97     IN  BBS_TYPE        *TableType,
     98     IN OUT  UINTN       *PrioritySize,
     99     OUT     UINTN       *Priority
    100     );
    101 
    102 typedef struct _LEGACY_BOOT_INTERFACE {
    103     LEGACY_BOOT_CALL    BootIt;
    104 
    105     //
    106     // New functions to allow BBS booting to be configured from EFI
    107     //
    108     UINTN                   BbsVersion;     // Currently 0x0101
    109     GET_DEVICE_COUNT        GetDeviceCount;
    110     GET_PRIORITY_AND_TABLE  GetPriorityAndTable;
    111     SET_PRIORITY            SetPriority;
    112 } LEGACY_BOOT_INTERFACE;
    113 
    114 EFI_STATUS
    115 PlInitializeLegacyBoot (
    116     VOID
    117     );
    118 
    119 #endif
    120