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