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