1/*++
2
3Copyright (c) 1999 - 2006, Intel Corporation. All rights reserved.<BR>
4This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution.  The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13Module Name:
14
15  LegacyBiosPlatform.h
16
17Abstract:
18
19  The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
20  implementation with this EFI code. The EFI driver that produces
21  the Legacy BIOS protocol is generic and consumes this protocol.
22  A driver that matches the Legacy16 produces this protocol
23
24Revision History
25
26  The EFI Legacy BIOS Platform Protocol is compliant with CSM spec 0.96.
27
28--*/
29
30#ifndef _EFI_LEGACY_BIOS_PLATFORM_H
31#define _EFI_LEGACY_BIOS_PLATFORM_H
32
33#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
34  { \
35    0x783658a3, 0x4172, 0x4421, {0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4} \
36  }
37
38EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PLATFORM_PROTOCOL);
39
40#include "Tiano.h"
41#include EFI_PROTOCOL_DEFINITION (LegacyBios)
42
43#pragma pack(1)
44//
45// Define structures for GetOemIntData
46//  Note:
47//    OemIntDataElenent is an array of structures from 0 to Count-1.
48//    RawData is an array of bytes from 0 to RamDataLength-1.
49//
50typedef struct {
51  UINT16  Int;
52  UINT16  Ax;
53  UINT32  RawDataLength;
54  UINT8   RawData[1];
55} EFI_OEM_INT_DATA_ELEMENT;
56
57typedef struct {
58  UINT16                    Count;
59  EFI_OEM_INT_DATA_ELEMENT  OemIntDataElement[1];
60} EFI_OEM_INT_DATA;
61#pragma pack()
62
63typedef enum {
64  EfiGetPlatformBinaryMpTable        = 0,
65  EfiGetPlatformBinaryOemIntData     = 1,
66  EfiGetPlatformBinaryOem16Data      = 2,
67  EfiGetPlatformBinaryOem32Data      = 3,
68  EfiGetPlatformBinaryTpmBinary      = 4,
69  EfiGetPlatformBinarySystemRom      = 5,
70  EfiGetPlatformPciExpressBase       = 6,
71  EfiGetPlatformPmmSize              = 7,
72  EfiGetPlatformEndOfOpromShadowAddr = 8
73} EFI_GET_PLATFORM_INFO_MODE;
74
75typedef enum {
76  EfiGetPlatformVgaHandle       = 0,
77  EfiGetPlatformIdeHandle       = 1,
78  EfiGetPlatformIsaBusHandle    = 2,
79  EfiGetPlatformUsbHandle       = 3
80} EFI_GET_PLATFORM_HANDLE_MODE;
81
82typedef enum {
83  EfiPlatformHookPrepareToScanRom = 0,
84  EfiPlatformHookShadowServiceRoms= 1,
85  EfiPlatformHookAfterRomInit     = 2
86} EFI_GET_PLATFORM_HOOK_MODE;
87
88typedef
89EFI_STATUS
90(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
91  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
92  IN EFI_GET_PLATFORM_INFO_MODE          Mode,
93  OUT VOID                               **Table,
94  OUT UINTN                              *TableSize,
95  OUT UINTN                              *Location,
96  OUT UINTN                              *Alignment,
97  IN  UINT16                             LegacySegment,
98  IN  UINT16                             LegacyOffset
99  )
100/*++
101
102  Routine Description:
103    Return a System ROM image for the platform
104
105  Arguments:
106    This                   - Protocol instance pointer.
107    Mode                   - Specifies what data to return
108    Table                  - Pointer to MP table.
109    TableSize              - Size in bytes of table.
110    Location               - Legacy region requested
111                               0x00 = Any location
112                               Bit 0 = 0xF0000 region
113                               Bit 1 = 0xE0000 region
114                               Multiple bits can be set
115    Alignment              - Address alignment for allocation.
116                             Bit mapped. First non-zero bit from right
117                             is alignment.
118
119    LegacySegment          - Segment in LegacyBios where Table is stored
120    LegacyOffset           - Offset in LegacyBios where Table is stored
121
122  Returns:
123    EFI_SUCCESS     - Data was returned successfully.
124    EFI_UNSUPPORTED - Mode is not supported on the platform.
125    EFI_NOT_FOUND   - Binary image or table not found.
126
127--*/
128;
129
130typedef
131EFI_STATUS
132(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
133  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
134  IN EFI_GET_PLATFORM_HANDLE_MODE        Mode,
135  IN UINT16                              Type,
136  OUT EFI_HANDLE                         **HandleBuffer,
137  OUT UINTN                              *HandleCount,
138  IN  VOID                               **AdditionalData OPTIONAL
139  )
140/*++
141
142  Routine Description:
143    Return the Legacy16 policy for which device should be the VGA controller
144    used during a Legacy16 boot.
145
146  Arguments:
147    This             - Protocol instance pointer.
148    Mode             - Specifies what handle to return.
149    Type             - Type from Device Path for Handle to represent.
150    HandleBuffer     - Handles of the device/controller in priority order
151                       with HandleBuffer[0] highest priority.
152    HandleCount      - Number of handles in the buffer.
153    AdditionalData   - Mode specific.
154
155
156  Returns:
157    EFI_SUCCESS     - Handle is valid
158    EFI_UNSUPPORTED - Mode is not supported on the platform.
159    EFI_NOT_FOUND   - Handle is not known
160
161--*/
162;
163
164typedef
165EFI_STATUS
166(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
167  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
168  IN  VOID                               *EfiToLegacy16BootTable
169  );
170
171/*++
172
173  Routine Description:
174    Load and initialize the Legacy BIOS SMM handler.
175
176  Arguments:
177    This                   - Protocol instance pointer.
178    EfiToLegacy16BootTable - Pointer to Legacy16 boot table.
179  Returns:
180    EFI_SUCCESS      - SMM code loaded.
181    EFI_DEVICE_ERROR - SMM code failed to load
182
183--*/
184;
185
186typedef
187EFI_STATUS
188(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
189  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
190  IN EFI_GET_PLATFORM_HOOK_MODE          Mode,
191  IN UINT16                              Type,
192  IN  EFI_HANDLE                         DeviceHandle,
193  IN  OUT UINTN                          *ShadowAddress,
194  IN  EFI_COMPATIBILITY16_TABLE          * Compatibility16Table,
195  IN  VOID                               **AdditionalData OPTIONAL
196  )
197/*++
198
199  Routine Description:
200    Prepare to scan a ROM.
201
202  Arguments:
203    This                   - Protocol instance pointer.
204    Handle                 - Device handle
205    ShadowAddress          - Address that ROM is shadowed at prior to
206                             initialization or first free ROM address,
207                             depending upon mode.
208    Compatibility16Table   - Pointer to Compatibility16Table.
209    AdditionalData   - Mode specific.
210
211
212  Returns:
213    EFI_SUCCESS     - RomImage is valid
214    EFI_UNSUPPORTED - Mode is not supported on the platform or platform
215                      policy is to not install this OPROM.
216--*/
217;
218
219typedef
220EFI_STATUS
221(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
222  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
223  OUT VOID                               **RoutingTable,
224  OUT UINTN                              *RoutingTableEntries,
225  OUT VOID                               **LocalPirqTable, OPTIONAL
226  OUT UINTN                              *PirqTableSize, OPTIONAL
227  OUT VOID                               **LocalIrqPriorityTable, OPTIONAL
228  OUT UINTN                              *IrqPriorityTableEntries OPTIONAL
229  )
230/*++
231
232  Routine Description:
233      1. List of IRQ routing entries and number of entries.
234      2. Pointer to Entire $PIR table and length.
235      3. List of IRQs to assign to PCI in priority.
236
237  Arguments:
238    This                - Protocol instance pointer.
239    RoutingTable        - Pointer to PCI IRQ Routing table.
240    RoutingTableEntries - Number of entries in table.
241    LocalPirqTable         - $PIR table
242    PirqTableSize          - $PIR table size
243    LocalIrqPriorityTable  - List of interrupts in priority order to assign
244    IrqPriorityTableEntries- Number of entries in priority table
245
246  Returns:
247    EFI_SUCCESS   - Table pointer returned
248
249--*/
250;
251
252typedef
253EFI_STATUS
254(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
255  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
256  IN  UINTN                              PciBus,
257  IN  UINTN                              PciDevice,
258  IN  UINTN                              PciFunction,
259  IN  OUT UINT8                          *Pirq,
260  OUT UINT8                              *PciIrq
261  )
262/*++
263
264  Routine Description:
265    Translate the PIRQ reported by the PCI device into the true PIRQ
266    from the internal IRQ routing information and IRQ assigned or to be
267    assigned to device.
268
269  Arguments:
270    This        - Protocol instance pointer.
271                  Base as defined below is the bus,device, function in
272                  IRQ routing table.
273    PciBus      - Base Bus for this device.
274    PciDevice   - Base Device for this device.
275    PciFunction - Base Function for this device.
276    Pirq        - Input is PIRQ reported by device, output is true PIRQ.
277    PciIrq      - The IRQ already assigned to the PIRQ or the IRQ to be
278                  assigned to the PIRQ.
279
280  Returns:
281    EFI_SUCCESS  - Irq translated
282
283--*/
284;
285
286typedef
287EFI_STATUS
288(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
289  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
290  IN  BBS_BBS_DEVICE_PATH                * BbsDevicePath,
291  IN  VOID                               *BbsTable,
292  IN  UINT32                             LoadOptionsSize,
293  IN  VOID                               *LoadOptions,
294  IN  VOID                               *EfiToLegacy16BootTable
295  )
296/*++
297
298  Routine Description:
299    Attempt to legacy boot the BootOption. If the EFI contexted has been
300    compromised this function will not return.
301
302  Arguments:
303    This                      - Protocol instance pointer.
304    BbsDevicePath             - EFI Device Path from BootXXXX variable.
305    BbsTable                  - Internal BBS table.
306    LoadOptionSize            - Size of LoadOption in size.
307    LoadOption                - LoadOption from BootXXXX variable
308    EfiToLegacy16BootTable    - Pointer to BootTable structure
309
310  Returns:
311    EFI_SUCCESS     - Removable media not present
312
313--*/
314;
315
316struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
317  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO    GetPlatformInfo;
318  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE  GetPlatformHandle;
319  EFI_LEGACY_BIOS_PLATFORM_SMM_INIT             SmmInit;
320  EFI_LEGACY_BIOS_PLATFORM_HOOKS                PlatformHooks;
321  EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE    GetRoutingTable;
322  EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ       TranslatePirq;
323  EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT      PrepareToBoot;
324};
325
326extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
327
328#endif
329