• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*++
2 
3 Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
4 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 Module Name:
13 
14   BdsPlatform.h
15 
16 Abstract:
17 
18   Head file for BDS Platform specific code
19 
20 --*/
21 
22 #ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
23 #define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
24 
25 
26 #include <PiDxe.h>
27 
28 #include <IndustryStandard/Pci.h>
29 #include <IndustryStandard/Acpi.h>
30 #include <IndustryStandard/SmBios.h>
31 #include <IndustryStandard/LegacyBiosMpTable.h>
32 
33 #include <Library/DebugLib.h>
34 #include <Library/BaseMemoryLib.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/MemoryAllocationLib.h>
37 #include <Library/BaseLib.h>
38 #include <Library/PcdLib.h>
39 #include <Library/GenericBdsLib.h>
40 #include <Library/PlatformBdsLib.h>
41 #include <Library/HobLib.h>
42 #include <Library/UefiLib.h>
43 #include <Library/DxeServicesTableLib.h>
44 #include <Library/DevicePathLib.h>
45 
46 #include <Protocol/PciIo.h>
47 
48 #include <Guid/Acpi.h>
49 #include <Guid/SmBios.h>
50 #include <Guid/Mps.h>
51 #include <Guid/HobList.h>
52 #include <Guid/PciExpressBaseAddress.h>
53 #include <Guid/GlobalVariable.h>
54 #include <Guid/LdrMemoryDescriptor.h>
55 
56 extern BDS_CONSOLE_CONNECT_ENTRY  gPlatformConsole[];
57 extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformConnectSequence[];
58 extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformDriverOption[];
59 extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformRootBridges[];
60 extern ACPI_HID_DEVICE_PATH       gPnpPs2KeyboardDeviceNode;
61 extern ACPI_HID_DEVICE_PATH       gPnp16550ComPortDeviceNode;
62 extern UART_DEVICE_PATH           gUartDeviceNode;
63 extern VENDOR_DEVICE_PATH         gTerminalTypeDeviceNode;
64 //
65 //
66 //
67 #define VarConsoleInpDev        L"ConInDev"
68 #define VarConsoleInp           L"ConIn"
69 #define VarConsoleOutDev        L"ConOutDev"
70 #define VarConsoleOut           L"ConOut"
71 #define VarErrorOutDev          L"ErrOutDev"
72 #define VarErrorOut             L"ErrOut"
73 
74 #define PCI_DEVICE_PATH_NODE(Func, Dev) \
75   { \
76     { \
77       HARDWARE_DEVICE_PATH, \
78       HW_PCI_DP, \
79       { \
80         (UINT8) (sizeof (PCI_DEVICE_PATH)), \
81         (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
82       } \
83     }, \
84     (Func), \
85     (Dev) \
86   }
87 
88 #define PNPID_DEVICE_PATH_NODE(PnpId) \
89   { \
90     { \
91       ACPI_DEVICE_PATH, \
92       ACPI_DP, \
93       { \
94         (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
95         (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
96       } \
97     }, \
98     EISA_PNP_ID((PnpId)), \
99     0 \
100   }
101 
102 #define gPciRootBridge \
103   PNPID_DEVICE_PATH_NODE(0x0A03)
104 
105 #define gPciIsaBridge \
106   PCI_DEVICE_PATH_NODE(0, 0x1f)
107 
108 #define gP2PBridge \
109   PCI_DEVICE_PATH_NODE(0, 0x1e)
110 
111 #define gPnpPs2Keyboard \
112   PNPID_DEVICE_PATH_NODE(0x0303)
113 
114 #define gPnp16550ComPort \
115   PNPID_DEVICE_PATH_NODE(0x0501)
116 
117 #define gUart \
118   { \
119     { \
120       MESSAGING_DEVICE_PATH, \
121       MSG_UART_DP, \
122       { \
123         (UINT8) (sizeof (UART_DEVICE_PATH)), \
124         (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
125       } \
126     }, \
127     0, \
128     115200, \
129     8, \
130     1, \
131     1 \
132   }
133 
134 #define gPcAnsiTerminal \
135   { \
136     { \
137       MESSAGING_DEVICE_PATH, \
138       MSG_VENDOR_DP, \
139       { \
140         (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
141         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
142       } \
143     }, \
144     DEVICE_PATH_MESSAGING_PC_ANSI \
145   }
146 
147 #define gEndEntire \
148   { \
149     END_DEVICE_PATH_TYPE, \
150     END_ENTIRE_DEVICE_PATH_SUBTYPE, \
151     { \
152       END_DEVICE_PATH_LENGTH, \
153       0 \
154     } \
155   }
156 
157 #define PCI_CLASS_SCC          0x07
158 #define PCI_SUBCLASS_SERIAL    0x00
159 #define PCI_IF_16550           0x02
160 #define IS_PCI_16550SERIAL(_p)           IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550)
161 
162 #define EFI_SYSTEM_TABLE_MAX_ADDRESS 0xFFFFFFFF
163 #define SYS_TABLE_PAD(ptr) (((~ptr) +1) & 0x07 )
164 //
165 // Platform Root Bridge
166 //
167 typedef struct {
168   ACPI_HID_DEVICE_PATH      PciRootBridge;
169   EFI_DEVICE_PATH_PROTOCOL  End;
170 } PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
171 
172 typedef struct {
173   ACPI_HID_DEVICE_PATH      PciRootBridge;
174   PCI_DEVICE_PATH           IsaBridge;
175   ACPI_HID_DEVICE_PATH      Keyboard;
176   EFI_DEVICE_PATH_PROTOCOL  End;
177 } PLATFORM_DUMMY_ISA_KEYBOARD_DEVICE_PATH;
178 
179 typedef struct {
180   ACPI_HID_DEVICE_PATH      PciRootBridge;
181   PCI_DEVICE_PATH           IsaBridge;
182   ACPI_HID_DEVICE_PATH      IsaSerial;
183   UART_DEVICE_PATH          Uart;
184   VENDOR_DEVICE_PATH        TerminalType;
185   EFI_DEVICE_PATH_PROTOCOL  End;
186 } PLATFORM_DUMMY_ISA_SERIAL_DEVICE_PATH;
187 
188 typedef struct {
189   ACPI_HID_DEVICE_PATH      PciRootBridge;
190   PCI_DEVICE_PATH           VgaDevice;
191   EFI_DEVICE_PATH_PROTOCOL  End;
192 } PLATFORM_DUMMY_PCI_VGA_DEVICE_PATH;
193 
194 typedef struct {
195   ACPI_HID_DEVICE_PATH      PciRootBridge;
196   PCI_DEVICE_PATH           PciBridge;
197   PCI_DEVICE_PATH           SerialDevice;
198   UART_DEVICE_PATH          Uart;
199   VENDOR_DEVICE_PATH        TerminalType;
200   EFI_DEVICE_PATH_PROTOCOL  End;
201 } PLATFORM_DUMMY_PCI_SERIAL_DEVICE_PATH;
202 
203 //
204 // the short form device path for Usb keyboard
205 //
206 #define CLASS_HID           3
207 #define SUBCLASS_BOOT       1
208 #define PROTOCOL_KEYBOARD   1
209 
210 typedef struct {
211   USB_CLASS_DEVICE_PATH           UsbClass;
212   EFI_DEVICE_PATH_PROTOCOL        End;
213 } USB_CLASS_FORMAT_DEVICE_PATH;
214 
215 extern PLATFORM_ROOT_BRIDGE_DEVICE_PATH  gPlatformRootBridge0;
216 
217 //
218 // Platform BDS Functions
219 //
220 VOID
221 PlatformBdsGetDriverOption (
222   IN LIST_ENTRY               *BdsDriverLists
223   );
224 
225 EFI_STATUS
226 BdsMemoryTest (
227   EXTENDMEM_COVERAGE_LEVEL Level
228   );
229 
230 EFI_STATUS
231 PlatformBdsShowProgress (
232   EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
233   EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
234   CHAR16                        *Title,
235   EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
236   UINTN                         Progress,
237   UINTN                         PreviousValue
238   );
239 
240 VOID
241 PlatformBdsConnectSequence (
242   VOID
243   );
244 
245 EFI_STATUS
246 ProcessCapsules (
247   EFI_BOOT_MODE BootMode
248   );
249 
250 EFI_STATUS
251 PlatformBdsConnectConsole (
252   IN BDS_CONSOLE_CONNECT_ENTRY   *PlatformConsole
253   );
254 
255 EFI_STATUS
256 PlatformBdsNoConsoleAction (
257   VOID
258   );
259 
260 EFI_STATUS
261 ConvertMpsTable (
262   IN OUT  VOID     **Table
263   );
264 
265 EFI_STATUS
266 ConvertSmbiosTable (
267   IN OUT VOID       **Table
268   );
269 
270 EFI_STATUS
271 ConvertAcpiTable (
272  IN      UINTN      TableLen,
273  IN OUT  VOID       **Table
274   );
275 
276 EFI_STATUS
277 ConvertSystemTable (
278  IN     EFI_GUID   *TableGuid,
279  IN OUT VOID       **Table
280   );
281 
282 VOID
283 PlatformBdsEnterFrontPage (
284   IN UINT16                 TimeoutDefault,
285   IN BOOLEAN                ConnectAllHappened
286   );
287 
288 #endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
289