]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Protocol / LegacyBiosPlatform / LegacyBiosPlatform.h
1 /*++
2
3 Copyright (c) 1999 - 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13 Module Name:
14
15 LegacyBiosPlatform.h
16
17 Abstract:
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
24 Revision 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
38 EFI_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 //
50 typedef struct {
51 UINT16 Int;
52 UINT16 Ax;
53 UINT32 RawDataLength;
54 UINT8 RawData[1];
55 } EFI_OEM_INT_DATA_ELEMENT;
56
57 typedef struct {
58 UINT16 Count;
59 EFI_OEM_INT_DATA_ELEMENT OemIntDataElement[1];
60 } EFI_OEM_INT_DATA;
61 #pragma pack()
62
63 typedef 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
75 typedef enum {
76 EfiGetPlatformVgaHandle = 0,
77 EfiGetPlatformIdeHandle = 1,
78 EfiGetPlatformIsaBusHandle = 2,
79 EfiGetPlatformUsbHandle = 3
80 } EFI_GET_PLATFORM_HANDLE_MODE;
81
82 typedef enum {
83 EfiPlatformHookPrepareToScanRom = 0,
84 EfiPlatformHookShadowServiceRoms= 1,
85 EfiPlatformHookAfterRomInit = 2
86 } EFI_GET_PLATFORM_HOOK_MODE;
87
88 typedef
89 EFI_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
130 typedef
131 EFI_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
164 typedef
165 EFI_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
186 typedef
187 EFI_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
219 typedef
220 EFI_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
252 typedef
253 EFI_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
286 typedef
287 EFI_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
316 typedef struct _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 } EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
325
326 extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
327
328 #endif