xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/protocol/legacyboot.h (revision b2c829d73acfa2ef1ac1967460ebcec8f439b096)
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