179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/** @file
279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  implementation with this EFI code. The EFI driver that produces
479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  the Legacy BIOS protocol is generic and consumes this protocol.
579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  A driver that matches the Legacy16 produces this protocol
679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
7f43c43c72cad940588880d1014e1d462cae75d36jyaoCopyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
8f22f941ed273753a0426d1234869857f19c28664myronporterThis program and the accompanying materials are licensed and made available under
9f22f941ed273753a0426d1234869857f19c28664myronporterthe terms and conditions of the BSD License that accompanies this distribution.
10f22f941ed273753a0426d1234869857f19c28664myronporterThe full text of the license may be found at
11f22f941ed273753a0426d1234869857f19c28664myronporterhttp://opensource.org/licenses/bsd-license.php.
12f22f941ed273753a0426d1234869857f19c28664myronporter
13f22f941ed273753a0426d1234869857f19c28664myronporterTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14f22f941ed273753a0426d1234869857f19c28664myronporterWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
1579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
1679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @par Revision Reference:
1779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  This protocol is defined in Framework for EFI Compatibility Support Module spec
180f899407a356d80ee211b181878b0b432e7c3fffgikidy  Version 0.97.
1979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
2079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
2179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
2279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing#ifndef _EFI_LEGACY_BIOS_PLATFORM_H_
2379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing#define _EFI_LEGACY_BIOS_PLATFORM_H_
2479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
2587d6344732796c9570488593977377bb0e693de7mdkinney///
2687d6344732796c9570488593977377bb0e693de7mdkinney/// Legacy BIOS Platform depends on HDD_INFO and EFI_COMPATIBILITY16_TABLE that
2787d6344732796c9570488593977377bb0e693de7mdkinney/// are defined with the Legacy BIOS Protocol
2887d6344732796c9570488593977377bb0e693de7mdkinney///
2987d6344732796c9570488593977377bb0e693de7mdkinney#include <Protocol/LegacyBios.h>
30b80fbe8543eb535e40172a263b6b5d633e5b282cbxing
3179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
3279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  { \
3379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing    0x783658a3, 0x4172, 0x4421, {0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 } \
3479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  }
3579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
3679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
3779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
3804dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/**
39412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  This enum specifies the Mode param values for GetPlatformInfo()
4004dd6cc01af0c18f6d75686b55537ba308a92ae6lgr**/
4179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef enum {
42412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
43412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode is invoked twice. The first invocation has LegacySegment and
445259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// LegacyOffset set to 0. The mode returns the MP table address in EFI memory, along with its size.
45412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The second invocation has LegacySegment and LegacyOffset set to the location
46412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// in the 0xF0000 or 0xE0000 block to which the MP table is to be copied. The second
475259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// invocation allows any MP table address fixes to occur in the EFI memory copy of the
48412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// MP table. The caller, not EfiGetPlatformBinaryMpTable, copies the modified MP
49412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// table to the allocated region in 0xF0000 or 0xE0000 block after the second invocation.
50412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
51412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
52412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
53412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Table Pointer to the MP table.
54412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
55412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   TableSize Size in bytes of the MP table.
56412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
57412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Location Location to place table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
58412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     Bit 0 = 1 0xF0000 64 KB block.
59412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     Bit 1 = 1 0xE0000 64 KB block.
60412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     Multiple bits can be set.
61412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
625259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   Alignment Bit-mapped address alignment granularity.
63412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     The first nonzero bit from the right is the address granularity.
64412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
655259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  //    LegacySegment Segment in which EfiCompatibility code will place the MP table.
66412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
675259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacyOffset Offset in which EfiCompatibility code will place the MP table.
68412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
69412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
70412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
71412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_SUCCESS The MP table was returned.
72412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
73412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_UNSUPPORTED The MP table is not supported on this platform.
74412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
7579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformBinaryMpTable      = 0,
76412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
775259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// This mode returns a block of data. The content and usage is IBV or OEM defined.
78412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// OEMs or IBVs normally use this function for nonstandard Compatibility16 runtime soft
79412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// INTs. It is the responsibility of this routine to coalesce multiple OEM 16 bit functions, if
80412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// they exist, into one coherent package that is understandable by the Compatibility16 code.
81412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This function is invoked twice. The first invocation has LegacySegment and
825259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// LegacyOffset set to 0. The function returns the table address in EFI memory, as well as its size.
83412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The second invocation has LegacySegment and LegacyOffset set to the location
84412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// in the 0xF0000 or 0xE0000 block to which the data (table) is to be copied. The second
855259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// invocation allows any data (table) address fixes to occur in the EFI memory copy of
86412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// the table. The caller, not GetOemIntData(), copies the modified data (table) to the
87412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// allocated region in 0xF0000 or 0xE0000 block after the second invocation.
88412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
89412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
90412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
91412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Table Pointer to OEM legacy 16 bit code or data.
92412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
93412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   TableSize Size of data.
94412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
95412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Location Location to place table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
96412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///       Bit 0 = 1 0xF0000 64 KB block.
97412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///       Bit 1 = 1 0xE0000 64 KB block.
98412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///       Multiple bits can be set.
99412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
100412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Alignment Bit mapped address alignment granularity.
101412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     The first nonzero bit from the right is the address granularity.
102412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
1035259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacySegment Segment in which EfiCompatibility code will place the table or data.
104412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
1055259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacyOffset Offset in which EfiCompatibility code will place the table or data.
106412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
107412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
108412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
109412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_SUCCESS The data was returned successfully.
110412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
111412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_UNSUPPORTED Oem INT is not supported on this platform.
112412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
11379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformBinaryOemIntData   = 1,
114412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
1155259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// This mode returns a block of data. The content and usage is IBV defined. OEMs or
116412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// IBVs normally use this mode for nonstandard Compatibility16 runtime 16 bit routines. It
117412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// is the responsibility of this routine to coalesce multiple OEM 16 bit functions, if they
118412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// exist, into one coherent package that is understandable by the Compatibility16 code.
1195259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///
1205259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// Example usage: A legacy mobile BIOS that has a pre-existing runtime
121412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// interface to return the battery status to calling applications.
1225259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///
123412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode is invoked twice. The first invocation has LegacySegment and
124412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size.
125412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The second invocation has LegacySegment and LegacyOffset set to the location
126412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second
1275259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  /// invocation allows any table address fixes to occur in the EFI memory copy of the table.
128412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The caller, not EfiGetPlatformBinaryOem16Data, copies the modified table to
129412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// the allocated region in 0xF0000 or 0xE0000 block after the second invocation.
130412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
131412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
132412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
133412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Table Pointer to OEM legacy 16 bit code or data.
134412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
135412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   TableSize Size of data.
136412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
137412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Location Location to place the table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
138412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Bit 0 = 1 0xF0000 64 KB block.
139412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Bit 1 = 1 0xE0000 64 KB block.
140412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Multiple bits can be set.
141412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
142412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Alignment Bit mapped address alignment granularity.
143412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     The first nonzero bit from the right is the address granularity.
144412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
1455259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacySegment Segment in which EfiCompatibility code will place the table or data.
146412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
1475259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacyOffset Offset in which EfiCompatibility code will place the table or data.
148412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
149412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
150412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
151412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_SUCCESS The data was returned successfully.
152412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
153412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_UNSUPPORTED Oem16 is not supported on this platform.
154412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
15579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformBinaryOem16Data    = 2,
156412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
1575259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel/// This mode returns a block of data. The content and usage are IBV defined. OEMs or
158412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// IBVs normally use this mode for nonstandard Compatibility16 runtime 32 bit routines. It
159412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// is the responsibility of this routine to coalesce multiple OEM 32 bit functions, if they
160412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// exist, into one coherent package that is understandable by the Compatibility16 code.
1615259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel///
1625259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel/// Example usage: A legacy mobile BIOS that has a pre existing runtime
163412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// interface to return the battery status to calling applications.
1645259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel///
165412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// This mode is invoked twice. The first invocation has LegacySegment and
166412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size.
167412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
168412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// The second invocation has LegacySegment and LegacyOffset set to the location
169412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second
170412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// invocation allows any table address fix ups to occur in the EFI memory copy of the table.
171412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// The caller, not EfiGetPlatformBinaryOem32Data, copies the modified table to
172412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// the allocated region in 0xF0000 or 0xE0000 block after the second invocation..
173412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
174412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// Note: There are two generic mechanisms by which this mode can be used.
175f0d6194dfaa62d16f40e3113e0d52430046a3e81lgao/// Mechanism 1: This mode returns the data and the Legacy BIOS Protocol copies
176412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// the data into the F0000 or E0000 block in the Compatibility16 code. The
177412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// EFI_COMPATIBILITY16_TABLE entries Oem32Segment and Oem32Offset can
178412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// be viewed as two UINT16 entries.
179f0d6194dfaa62d16f40e3113e0d52430046a3e81lgao/// Mechanism 2: This mode directly fills in the EFI_COMPATIBILITY16_TABLE with
180412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// a pointer to the INT15 E820 region containing the 32 bit code. It returns
181412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// EFI_UNSUPPORTED. The EFI_COMPATIBILITY16_TABLE entries,
182412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// Oem32Segment and Oem32Offset, can be viewed as two UINT16 entries or
183412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// as a single UINT32 entry as determined by the IBV.
184412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
185412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// The function parameters associated with this mode are:
186412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
187412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///   TableSize Size of data.
188412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
18955db3d44421ed651a5aab7eec1cbb225757c5f46lgao///   Location Location to place the table. 0x00 or 0xE0000 or 0xF0000 64 KB blocks.
190412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///       Bit 0 = 1 0xF0000 64 KB block.
191412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///       Bit 1 = 1 0xE0000 64 KB block.
192412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///       Multiple bits can be set.
193412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
194412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///   Alignment Bit mapped address alignment granularity.
195412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///       The first nonzero bit from the right is the address granularity.
196412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
1975259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel///   LegacySegment Segment in which EfiCompatibility code will place the table or data.
198412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
1995259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel///   LegacyOffset Offset in which EfiCompatibility code will place the table or data.
200412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
201412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr/// The return values associated with this mode are:
202412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///   EFI_SUCCESS The data was returned successfully.
203412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///   EFI_UNSUPPORTED Oem32 is not supported on this platform.
204412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr///
205412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgrEfiGetPlatformBinaryOem32Data    = 3,
206412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
207412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns a TPM binary image for the onboard TPM device.
208412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
209412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
210412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
211412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Table TPM binary image for the onboard TPM device.
212412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
213412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   TableSize Size of BinaryImage in bytes.
214412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
215412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Location Location to place the table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
216412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Bit 0 = 1 0xF0000 64 KB block.
217412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Bit 1 = 1 0xE0000 64 KB block.
218412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///      Multiple bits can be set.
219412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
220412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   Alignment Bit mapped address alignment granularity.
221412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     The first nonzero bit from the right is the address granularity.
222412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
2235259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacySegment Segment in which EfiCompatibility code will place the table or data.
224412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
2255259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  ///   LegacyOffset Offset in which EfiCompatibility code will place the table or data.
226412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
227412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
228412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
229412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_SUCCESS BinaryImage is valid.
230412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
231412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_UNSUPPORTED Mode is not supported on this platform.
232412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
233412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_NOT_FOUND No BinaryImage was found.
234412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
23579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformBinaryTpmBinary    = 4,
236412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
23755db3d44421ed651a5aab7eec1cbb225757c5f46lgao  /// The mode finds the Compatibility16 Rom Image.
238412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
239412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
240412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
241f22f941ed273753a0426d1234869857f19c28664myronporter  ///    System ROM image for the platform.
242412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
243f22f941ed273753a0426d1234869857f19c28664myronporter  ///    TableSize Size of Table in bytes.
244412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
245f22f941ed273753a0426d1234869857f19c28664myronporter  ///    Location Ignored.
246412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
247f22f941ed273753a0426d1234869857f19c28664myronporter  ///    Alignment Ignored.
248412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
249f22f941ed273753a0426d1234869857f19c28664myronporter  ///    LegacySegment Ignored.
250412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
251f22f941ed273753a0426d1234869857f19c28664myronporter  ///    LegacyOffset Ignored.
252412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
253412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
254412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
255412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///    EFI_SUCCESS ROM image found.
256412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
257412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///    EFI_NOT_FOUND ROM not found.
258412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
25979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformBinarySystemRom    = 5,
260412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
261412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns the Base address of PciExpress memory mapped configuration
262412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// address space.
263412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
264412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
265412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
266f22f941ed273753a0426d1234869857f19c28664myronporter  ///    Table System ROM image for the platform.
267412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
268f22f941ed273753a0426d1234869857f19c28664myronporter  ///    TableSize Size of Table in bytes.
269412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
270f22f941ed273753a0426d1234869857f19c28664myronporter  ///    Location Ignored.
271412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
272f22f941ed273753a0426d1234869857f19c28664myronporter  ///    Alignment Ignored.
273412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
274f22f941ed273753a0426d1234869857f19c28664myronporter  ///    LegacySegment Ignored.
275412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
276f22f941ed273753a0426d1234869857f19c28664myronporter  ///    LegacyOffset Ignored.
277412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
278412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The return values associated with this mode are:
279412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
280412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_SUCCESS Address is valid.
281412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
282412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   EFI_UNSUPPORTED System does not PciExpress.
283412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
28479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformPciExpressBase     = 6,
285412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
28679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformPmmSize            = 7,
287412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
28879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformEndOpromShadowAddr = 8,
289412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
29079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing} EFI_GET_PLATFORM_INFO_MODE;
29179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
29204dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/**
293f22f941ed273753a0426d1234869857f19c28664myronporter  This enum specifies the Mode param values for GetPlatformHandle().
29404dd6cc01af0c18f6d75686b55537ba308a92ae6lgr**/
29579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef enum {
296412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
297412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns the Compatibility16 policy for the device that should be the VGA
298412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// controller used during a Compatibility16 boot.
299412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
300412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
301412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
302f22f941ed273753a0426d1234869857f19c28664myronporter  ///   Type 0x00.
303412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
304412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleBuffer Buffer of all VGA handles found.
305412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
306412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleCount Number of VGA handles found.
307412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
308f22f941ed273753a0426d1234869857f19c28664myronporter  ///   AdditionalData NULL.
309412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
31079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformVgaHandle       = 0,
311412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
312412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns the Compatibility16 policy for the device that should be the IDE
313412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// controller used during a Compatibility16 boot.
314412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
315412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
316412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
317f22f941ed273753a0426d1234869857f19c28664myronporter  ///   Type 0x00.
318412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
319412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleBuffer Buffer of all IDE handles found.
320412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
321f22f941ed273753a0426d1234869857f19c28664myronporter  ///   HandleCount Number of IDE handles found.
322412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
323412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   AdditionalData Pointer to HddInfo.
324412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     Information about all onboard IDE controllers.
325412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
32679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformIdeHandle       = 1,
327412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
328412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns the Compatibility16 policy for the device that should be the ISA bus
329412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// controller used during a Compatibility16 boot.
330412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
331412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
332412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
333f22f941ed273753a0426d1234869857f19c28664myronporter  ///   Type 0x00.
334412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
335412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleBuffer Buffer of all ISA bus handles found.
336412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
337412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleCount Number of ISA bus handles found.
338412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
339f22f941ed273753a0426d1234869857f19c28664myronporter  ///   AdditionalData NULL.
340412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
34179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformIsaBusHandle    = 2,
342412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
343412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode returns the Compatibility16 policy for the device that should be the USB
344412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// device used during a Compatibility16 boot.
345412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
346412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
347412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
348f22f941ed273753a0426d1234869857f19c28664myronporter  ///   Type 0x00.
349412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
350412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleBuffer Buffer of all USB handles found.
351412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
352412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///   HandleCount Number of USB bus handles found.
353412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
354f22f941ed273753a0426d1234869857f19c28664myronporter  ///   AdditionalData NULL.
355412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
35679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiGetPlatformUsbHandle       = 3
35779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing} EFI_GET_PLATFORM_HANDLE_MODE;
35879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
35904dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/**
360f22f941ed273753a0426d1234869857f19c28664myronporter  This enum specifies the Mode param values for PlatformHooks().
361f22f941ed273753a0426d1234869857f19c28664myronporter  Note: Any OEM defined hooks start with 0x8000.
36204dd6cc01af0c18f6d75686b55537ba308a92ae6lgr**/
36379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef enum {
364412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
365412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode allows any preprocessing before scanning OpROMs.
366412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
367412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
368412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
369f22f941ed273753a0426d1234869857f19c28664myronporter  ///     Type 0.
370412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
371412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     DeviceHandle Handle of device OpROM is associated with.
372412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
373412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     ShadowAddress Address where OpROM is shadowed.
374412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
375f22f941ed273753a0426d1234869857f19c28664myronporter  ///     Compatibility16Table NULL.
376412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
377f22f941ed273753a0426d1234869857f19c28664myronporter  ///     AdditionalData NULL.
378412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
37979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiPlatformHookPrepareToScanRom = 0,
380412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
381412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode shadows legacy OpROMS that may not have a physical device associated with
382412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// them. It returns EFI_SUCCESS if the ROM was shadowed.
383412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
384412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
385412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
386f22f941ed273753a0426d1234869857f19c28664myronporter  ///     Type 0.
387412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
388f22f941ed273753a0426d1234869857f19c28664myronporter  ///     DeviceHandle 0.
389412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
390412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     ShadowAddress First free OpROM area, after other OpROMs have been dispatched..
391412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
392412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///     Compatibility16Table Pointer to the Compatability16 Table.
393412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
394f22f941ed273753a0426d1234869857f19c28664myronporter  ///       AdditionalData NULL.
395412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
39679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiPlatformHookShadowServiceRoms= 1,
397412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
398412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This mode allows platform to perform any required operation after an OpROM has
399412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// completed its initialization.
400412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
401412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// The function parameters associated with this mode are:
402412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
403f22f941ed273753a0426d1234869857f19c28664myronporter  ///       Type 0.
404412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
405412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///       DeviceHandle Handle of device OpROM is associated with.
406412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
407412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///       ShadowAddress Address where OpROM is shadowed.
408412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
409f22f941ed273753a0426d1234869857f19c28664myronporter  ///       Compatibility16Table NULL.
410412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
411f22f941ed273753a0426d1234869857f19c28664myronporter  ///       AdditionalData NULL.
412412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
41379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EfiPlatformHookAfterRomInit     = 2
41479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing} EFI_GET_PLATFORM_HOOK_MODE;
41579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
41604dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
41704dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/// This IRQ has not been assigned to PCI.
41804dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
4199226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney#define PCI_UNUSED        0x00
42004dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
42104dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/// This IRQ has been assigned to PCI.
42204dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
4239226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney#define PCI_USED          0xFF
42404dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
42504dd6cc01af0c18f6d75686b55537ba308a92ae6lgr/// This IRQ has been used by an SIO legacy device and cannot be used by PCI.
42604dd6cc01af0c18f6d75686b55537ba308a92ae6lgr///
427f0d6194dfaa62d16f40e3113e0d52430046a3e81lgao#define LEGACY_USED       0xFE
428f0d6194dfaa62d16f40e3113e0d52430046a3e81lgao
4299226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney#pragma pack(1)
4309226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
4319226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinneytypedef struct {
432412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
433412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// IRQ for this entry.
434412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4359226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8 Irq;
436412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
437412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// Status of this IRQ.
438412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
439412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI_UNUSED 0x00. This IRQ has not been assigned to PCI.
440412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
441412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI_USED 0xFF. This IRQ has been assigned to PCI.
442412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
443412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// LEGACY_USED 0xFE. This IRQ has been used by an SIO legacy
444412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// device and cannot be used by PCI.
445412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
446f43c43c72cad940588880d1014e1d462cae75d36jyao  UINT8 Used;
4479226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney} EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY;
4489226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
4499226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney//
4509226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney// Define PIR table structures
4519226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney//
4529226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney#define EFI_LEGACY_PIRQ_TABLE_SIGNATURE SIGNATURE_32 ('$', 'P', 'I', 'R')
4539226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
4549226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinneytypedef struct {
455412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
456412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// $PIR.
457412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4589226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT32  Signature;
459412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
460412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// 0x00.
461412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4629226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   MinorVersion;
463412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
464412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// 0x01 for table version 1.0.
465412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4669226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   MajorVersion;
467412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
468412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// 0x20 + RoutingTableEntries * 0x10.
469412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4709226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT16  TableSize;
471412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
472412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI interrupt router bus.
473412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4749226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   Bus;
475412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
476412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI interrupt router device/function.
477412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4789226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   DevFun;
479412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
480412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// If nonzero, bit map of IRQs reserved for PCI.
481412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4829226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT16  PciOnlyIrq;
483412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
484412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// Vendor ID of a compatible PCI interrupt router.
485412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4869226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT16  CompatibleVid;
487412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
488412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// Device ID of a compatible PCI interrupt router.
489412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4909226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT16  CompatibleDid;
491412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4921910fbaf7014fab2012f06ab03829f0146cf32d4vanjeff  /// If nonzero, a value passed directly to the IRQ miniport's Initialize function.
49304dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  ///
4949226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT32  Miniport;
495412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
496412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// Reserved for future usage.
497412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
4989226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   Reserved[11];
499412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
500412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// This byte plus the sum of all other bytes in the LocalPirqTable equal 0x00.
501412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5029226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   Checksum;
5039226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney} EFI_LEGACY_PIRQ_TABLE_HEADER;
5049226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
5059226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
5069226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinneytypedef struct {
507412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
508f43c43c72cad940588880d1014e1d462cae75d36jyao  /// If nonzero, a value assigned by the IBV.
509412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5109226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8   Pirq;
511412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
512f43c43c72cad940588880d1014e1d462cae75d36jyao  /// If nonzero, the IRQs that can be assigned to this device.
513412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
514f43c43c72cad940588880d1014e1d462cae75d36jyao  UINT16  IrqMask;
5159226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney} EFI_LEGACY_PIRQ_ENTRY;
5169226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
5179226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinneytypedef struct {
518412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
519412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI bus of the entry.
520412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5219226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8                 Bus;
522412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
523412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// PCI device of this entry.
524412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5259226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8                 Device;
526412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
527412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// An IBV value and IRQ mask for PIRQ pins A through D.
528412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5299226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  EFI_LEGACY_PIRQ_ENTRY PirqEntry[4];
530412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
531412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// If nonzero, the slot number assigned by the board manufacturer.
532412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5339226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8                 Slot;
534412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
535412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  /// Reserved for future use.
536412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
5379226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney  UINT8                 Reserved;
5389226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney} EFI_LEGACY_IRQ_ROUTING_ENTRY;
5399226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
5409226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney#pragma pack()
5419226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
5429226e4ee0a204848ae83daf3026ebfadb80bbfa2mdkinney
54379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
54479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  Finds the binary data or other platform information.
54579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
546f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                  The protocol instance pointer.
54704dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Mode                  Specifies what data to return. See See EFI_GET_PLATFORM_INFO_MODE enum.
54804dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Table                 Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
5495259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  @param  TableSize            	Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
5505259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  @param  Location             	Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
55104dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Alignment             Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
55204dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  LegacySegment         Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
5535259c97d7ac7f464c134c3a15186b30e8e8eadffpkandel  @param  LegacyOffset          Mode specific.  See EFI_GET_PLATFORM_INFO_MODE enum.
55479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
555f22f941ed273753a0426d1234869857f19c28664myronporter  @retval EFI_SUCCESS           Data returned successfully.
55679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
55779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_NOT_FOUND         Binary image or table not found.
55879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
55979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
56079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
56179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
56269686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO)(
56379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
56479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_GET_PLATFORM_INFO_MODE          Mode,
56579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT VOID                               **Table,
56679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *TableSize,
56779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *Location,
56879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *Alignment,
56979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINT16                             LegacySegment,
57079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINT16                             LegacyOffset
57179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
57279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
57379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
57404dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  Returns a buffer of handles for the requested subfunction.
57579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
576f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                  The protocol instance pointer.
57704dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Mode                  Specifies what handle to return. See EFI_GET_PLATFORM_HANDLE_MODE enum.
578412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  @param  Type                  Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
57904dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  HandleBuffer          Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
58004dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  HandleCount           Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
58104dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  AdditionalData        Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
58279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
583f22f941ed273753a0426d1234869857f19c28664myronporter  @retval EFI_SUCCESS           Handle is valid.
58479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
585f22f941ed273753a0426d1234869857f19c28664myronporter  @retval EFI_NOT_FOUND         Handle is not known.
58679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
58779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
58879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
58979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
59069686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE)(
59179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
59279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_GET_PLATFORM_HANDLE_MODE        Mode,
59379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN UINT16                              Type,
59479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT EFI_HANDLE                         **HandleBuffer,
59579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *HandleCount,
59679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  VOID                               **AdditionalData OPTIONAL
59779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
59879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
59979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
60079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  Load and initialize the Legacy BIOS SMM handler.
60179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
602f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                   The protocol instance pointer.
603f22f941ed273753a0426d1234869857f19c28664myronporter  @param  EfiToLegacy16BootTable A pointer to Legacy16 boot table.
60479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
60579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_SUCCESS           SMM code loaded.
60679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_DEVICE_ERROR      SMM code failed to load
60779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
60879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
60979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
61079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
61169686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT)(
61279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
61379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  VOID                               *EfiToLegacy16BootTable
61479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
61579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
61679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
61779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  Allows platform to perform any required action after a LegacyBios operation.
618412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  Invokes the specific sub function specified by Mode.
61979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
620f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                  The protocol instance pointer.
62104dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Mode                  Specifies what handle to return. See EFI_GET_PLATFORM_HOOK_MODE enum.
62204dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Type                  Mode specific.  See EFI_GET_PLATFORM_HOOK_MODE enum.
62304dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  DeviceHandle          Mode specific.  See EFI_GET_PLATFORM_HOOK_MODE enum.
62404dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  ShadowAddress         Mode specific.  See EFI_GET_PLATFORM_HOOK_MODE enum.
62504dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  Compatibility16Table  Mode specific.  See EFI_GET_PLATFORM_HOOK_MODE enum.
62604dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  @param  AdditionalData        Mode specific.  See EFI_GET_PLATFORM_HOOK_MODE enum.
62704dd6cc01af0c18f6d75686b55537ba308a92ae6lgr
628f22f941ed273753a0426d1234869857f19c28664myronporter  @retval EFI_SUCCESS           The operation performed successfully. Mode specific.
62979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
63079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
63179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
63279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
63379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
63469686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS)(
63579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
63679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_GET_PLATFORM_HOOK_MODE          Mode,
63779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN UINT16                              Type,
63804dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  IN  EFI_HANDLE                         DeviceHandle, OPTIONAL
63904dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  IN  OUT UINTN                          *ShadowAddress, OPTIONAL
64004dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  IN  EFI_COMPATIBILITY16_TABLE          *Compatibility16Table, OPTIONAL
64104dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  OUT  VOID                               **AdditionalData OPTIONAL
64279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
64379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
64479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
64579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  Returns information associated with PCI IRQ routing.
646412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  This function returns the following information associated with PCI IRQ routing:
647f22f941ed273753a0426d1234869857f19c28664myronporter    * An IRQ routing table and number of entries in the table.
648f22f941ed273753a0426d1234869857f19c28664myronporter    * The $PIR table and its size.
649f22f941ed273753a0426d1234869857f19c28664myronporter    * A list of PCI IRQs and the priority order to assign them.
65079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
651f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                    The protocol instance pointer.
652f22f941ed273753a0426d1234869857f19c28664myronporter  @param  RoutingTable            The pointer to PCI IRQ Routing table.
653412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr                                  This location is the $PIR table minus the header.
654f22f941ed273753a0426d1234869857f19c28664myronporter  @param  RoutingTableEntries     The number of entries in table.
655f22f941ed273753a0426d1234869857f19c28664myronporter  @param  LocalPirqTable          $PIR table.
656f22f941ed273753a0426d1234869857f19c28664myronporter  @param  PirqTableSize           $PIR table size.
657f22f941ed273753a0426d1234869857f19c28664myronporter  @param  LocalIrqPriorityTable   A list of interrupts in priority order to assign.
658f22f941ed273753a0426d1234869857f19c28664myronporter  @param  IrqPriorityTableEntries The number of entries in the priority table.
65979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
66079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_SUCCESS           Data was successfully returned.
66179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
66279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
66379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
66479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
66569686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE)(
66679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
66779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT VOID                               **RoutingTable,
66879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *RoutingTableEntries,
66979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT VOID                               **LocalPirqTable, OPTIONAL
67079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *PirqTableSize, OPTIONAL
67179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT VOID                               **LocalIrqPriorityTable, OPTIONAL
67279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINTN                              *IrqPriorityTableEntries OPTIONAL
67379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
67479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
67579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
676f22f941ed273753a0426d1234869857f19c28664myronporter  Translates the given PIRQ accounting for bridge.
677412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  This function translates the given PIRQ back through all buses, if required,
678412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  and returns the true PIRQ and associated IRQ.
67979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
680f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                  The protocol instance pointer.
681f22f941ed273753a0426d1234869857f19c28664myronporter  @param  PciBus                The PCI bus number for this device.
682f22f941ed273753a0426d1234869857f19c28664myronporter  @param  PciDevice             The PCI device number for this device.
683f22f941ed273753a0426d1234869857f19c28664myronporter  @param  PciFunction           The PCI function number for this device.
684f22f941ed273753a0426d1234869857f19c28664myronporter  @param  Pirq                  Input is PIRQ reported by device, and output is true PIRQ.
685f22f941ed273753a0426d1234869857f19c28664myronporter  @param  PciIrq                The IRQ already assigned to the PIRQ, or the IRQ to be
68679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing                                assigned to the PIRQ.
68779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
68879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_SUCCESS           The PIRQ was translated.
68979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
69079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
69179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
69279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
69369686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ)(
69479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
69579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINTN                              PciBus,
69679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINTN                              PciDevice,
69779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINTN                              PciFunction,
69879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  OUT UINT8                          *Pirq,
69979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  OUT UINT8                              *PciIrq
70079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
70179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
70279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
70379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  Attempt to legacy boot the BootOption. If the EFI contexted has been
70479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  compromised this function will not return.
70579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
706f22f941ed273753a0426d1234869857f19c28664myronporter  @param  This                   The protocol instance pointer.
707f22f941ed273753a0426d1234869857f19c28664myronporter  @param  BbsDevicePath          The EFI Device Path from BootXXXX variable.
708f22f941ed273753a0426d1234869857f19c28664myronporter  @param  BbsTable               The Internal BBS table.
709f22f941ed273753a0426d1234869857f19c28664myronporter  @param  LoadOptionSize         The size of LoadOption in size.
710f22f941ed273753a0426d1234869857f19c28664myronporter  @param  LoadOption             The LoadOption from BootXXXX variable
711f22f941ed273753a0426d1234869857f19c28664myronporter  @param  EfiToLegacy16BootTable A pointer to BootTable structure
71279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
71379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  @retval EFI_SUCCESS           Ready to boot.
71479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
71579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
71679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingtypedef
71779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingEFI_STATUS
71869686d5669e0bc621ded618becf1529ce93ff1fdklu(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT)(
71979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
72079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  BBS_BBS_DEVICE_PATH                *BbsDevicePath,
72179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  VOID                               *BbsTable,
72279964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  UINT32                             LoadOptionsSize,
72379964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  VOID                               *LoadOptions,
72479964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  IN  VOID                               *EfiToLegacy16BootTable
72579964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  );
72679964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
72779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing/**
72804dd6cc01af0c18f6d75686b55537ba308a92ae6lgr  This protocol abstracts the platform portion of the traditional BIOS.
72979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing**/
73079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingstruct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
731412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
732412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Gets binary data or other platform information.
733412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
734412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO    GetPlatformInfo;
735412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
736412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Returns a buffer of all handles matching the requested subfunction.
737412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
73879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE  GetPlatformHandle;
739412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
740412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Loads and initializes the traditional BIOS SMM handler.
741412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_SMM_INIT             SmmInit;
742412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
743412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Allows platform to perform any required actions after a LegacyBios operation.
744412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
745412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_HOOKS                PlatformHooks;
746412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
747412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Gets $PIR table.
748412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE    GetRoutingTable;
749412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
750412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Translates the given PIRQ to the final value after traversing any PCI bridges.
751412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
752412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ       TranslatePirq;
753412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
754412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///  Final platform function before the system attempts to boot to a traditional OS.
755412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  ///
756412fb9ef2d5389a7ad1735ac8187ac2f72103fbclgr  EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT      PrepareToBoot;
75779964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing};
75879964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
75979964ac84ea0ca6c68d0dea38245fa83ff1945d1bxingextern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
76079964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing
76179964ac84ea0ca6c68d0dea38245fa83ff1945d1bxing#endif
762