]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
Set network boot option to the default last priority.
[mirror_edk2.git] / Vlv2TbltDevicePkg / Library / PlatformBdsLib / BdsPlatform.h
CommitLineData
3cbfba02
DW
1/*++\r
2\r
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
4 \r\r
5 This program and the accompanying materials are licensed and made available under\r\r
6 the terms and conditions of the BSD License that accompanies this distribution. \r\r
7 The full text of the license may be found at \r\r
8 http://opensource.org/licenses/bsd-license.php. \r\r
9 \r\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r\r
12 \r\r
13\r
14\r
15Module Name:\r
16\r
17 BdsPlatform.h\r
18\r
19Abstract:\r
20\r
21 Head file for BDS Platform specific code\r
22\r
23--*/\r
24\r
25#ifndef _BDS_PLATFORM_H\r
26#define _BDS_PLATFORM_H\r
27\r
28#include <FrameworkDxe.h>\r
29\r
30#include <Protocol/FirmwareVolume2.h>\r
31#include <Protocol/DevicePath.h>\r
32#include <Protocol/SimpleNetwork.h>\r
33#include <Protocol/PciRootBridgeIo.h>\r
34#include <Protocol/LoadFile.h>\r
35#include <Protocol/LegacyBios.h>\r
36#include <Protocol/PciIo.h>\r
37#include <Protocol/SmmAccess2.h>\r
38#include <Protocol/DxeSmmReadyToLock.h>\r
39#include <Protocol/UserManager.h>\r
40#include <Protocol/DeferredImageLoad.h>\r
41#include <Protocol/AcpiS3Save.h>\r
42#include <Protocol/ExitPmAuth.h>\r
43#include <Protocol/MmioDevice.h>\r
44#include <Protocol/I2cBusMcg.h>\r
45#include <Protocol/I2cHostMcg.h>\r
46#include <Guid/CapsuleVendor.h>\r
47#include <Guid/MemoryTypeInformation.h>\r
48#include <Guid/GlobalVariable.h>\r
49\r
50\r
51#include <Library/DebugLib.h>\r
52#include <Library/BaseMemoryLib.h>\r
53#include <Library/UefiBootServicesTableLib.h>\r
54#include <Library/UefiRuntimeServicesTableLib.h>\r
55#include <Library/MemoryAllocationLib.h>\r
56#include <Library/BaseLib.h>\r
57#include <Library/PcdLib.h>\r
58#include <Library/IoLib.h>\r
59#include <Library/GenericBdsLib.h>\r
60#include <Library/PlatformBdsLib.h>\r
61#include <Library/DevicePathLib.h>\r
62#include <Library/UefiLib.h>\r
63#include <Library/HobLib.h>\r
64#include <Library/PrintLib.h>\r
65#include <Library/PerformanceLib.h>\r
66#include <Library/ReportStatusCodeLib.h>\r
67\r
68#include <IndustryStandard/Pci.h>\r
69\r
70extern EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges [];\r
71extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole [];\r
72extern EFI_DEVICE_PATH_PROTOCOL *gPlatformAllPossiblePciVgaConsole [];\r
73extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence [];\r
74extern EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption [];\r
75extern EFI_DEVICE_PATH_PROTOCOL *gPlatformBootOption [];\r
76extern EFI_DEVICE_PATH_PROTOCOL *gUserAuthenticationDevice[];\r
77extern BDS_CONSOLE_CONNECT_ENTRY gPlatformSimpleConsole [];\r
78extern EFI_DEVICE_PATH_PROTOCOL *gPlatformSimpleBootOption [];\r
79\r
69a99d0b
MG
80extern BOOLEAN mEnumBootDevice;\r
81\r
82\r
3cbfba02
DW
83//\r
84// the short form device path for Usb keyboard\r
85//\r
86#define CLASS_HID 3\r
87#define SUBCLASS_BOOT 1\r
88#define PROTOCOL_KEYBOARD 1\r
89\r
90#define PCI_DEVICE_PATH_NODE(Func, Dev) \\r
91 { \\r
92 HARDWARE_DEVICE_PATH, \\r
93 HW_PCI_DP, \\r
94 { \\r
95 (UINT8) (sizeof (PCI_DEVICE_PATH)), \\r
96 (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \\r
97 }, \\r
98 (Func), \\r
99 (Dev) \\r
100 }\r
101\r
102#define PNPID_DEVICE_PATH_NODE(PnpId) \\r
103 { \\r
104 { \\r
105 ACPI_DEVICE_PATH, \\r
106 ACPI_DP, \\r
107 { \\r
108 (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \\r
109 (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \\r
110 } \\r
111 }, \\r
112 EISA_PNP_ID((PnpId)), \\r
113 0 \\r
114 }\r
115\r
116#define gUart(BaudRate, DataBits, Parity, StopBits) \\r
117 { \\r
118 { \\r
119 MESSAGING_DEVICE_PATH, \\r
120 MSG_UART_DP, \\r
121 { \\r
122 (UINT8) (sizeof (UART_DEVICE_PATH)), \\r
123 (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \\r
124 } \\r
125 }, \\r
126 0, \\r
127 (BaudRate), \\r
128 (DataBits), \\r
129 (Parity), \\r
130 (StopBits) \\r
131 }\r
132\r
133#define gPcAnsiTerminal \\r
134 { \\r
135 { \\r
136 MESSAGING_DEVICE_PATH, \\r
137 MSG_VENDOR_DP, \\r
138 { \\r
139 (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \\r
140 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \\r
141 } \\r
142 }, \\r
143 DEVICE_PATH_MESSAGING_PC_ANSI \\r
144 }\r
145\r
146#define gUsbKeyboardMouse \\r
147 { \\r
148 { \\r
149 MESSAGING_DEVICE_PATH, \\r
150 MSG_USB_CLASS_DP, \\r
151 (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), \\r
152 (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) \\r
153 }, \\r
154 0xffff, \\r
155 0xffff, \\r
156 CLASS_HID, \\r
157 SUBCLASS_BOOT, \\r
158 PROTOCOL_KEYBOARD \\r
159 }\r
160\r
161#define gEndEntire \\r
162 { \\r
163 END_DEVICE_PATH_TYPE, \\r
164 END_ENTIRE_DEVICE_PATH_SUBTYPE, \\r
165 { \\r
166 END_DEVICE_PATH_LENGTH, \\r
167 0 \\r
168 } \\r
169 }\r
170\r
171#define gPciRootBridge \\r
172 PNPID_DEVICE_PATH_NODE(0x0A03)\r
173\r
174#define gPnpPs2Keyboard \\r
175 PNPID_DEVICE_PATH_NODE(0x0303)\r
176\r
177#define gPnp16550ComPort \\r
178 PNPID_DEVICE_PATH_NODE(0x0501)\r
179\r
180#define gPciePort0Bridge \\r
181 PCI_DEVICE_PATH_NODE(0, 0x1C)\r
182\r
183#define gPciePort1Bridge \\r
184 PCI_DEVICE_PATH_NODE(1, 0x1C)\r
185\r
186#define gPciePort2Bridge \\r
187 PCI_DEVICE_PATH_NODE(2, 0x1C)\r
188\r
189#define gPciePort3Bridge \\r
190 PCI_DEVICE_PATH_NODE(3, 0x1C)\r
191\r
192#define gPciIsaBridge \\r
193 PCI_DEVICE_PATH_NODE(0, 0x1f)\r
194\r
195//\r
196// Platform Root Bridge\r
197//\r
198typedef struct {\r
199 ACPI_HID_DEVICE_PATH PciRootBridge;\r
200 EFI_DEVICE_PATH_PROTOCOL End;\r
201} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;\r
202\r
203//\r
204// Below is the platform console device path\r
205//\r
206typedef struct {\r
207 ACPI_HID_DEVICE_PATH PciRootBridge;\r
208 PCI_DEVICE_PATH IsaBridge;\r
209 ACPI_HID_DEVICE_PATH Keyboard;\r
210 EFI_DEVICE_PATH_PROTOCOL End;\r
211} PLATFORM_ISA_KEYBOARD_DEVICE_PATH;\r
212\r
213typedef struct {\r
214 VENDOR_DEVICE_PATH VendorDevicePath;\r
215 EFI_DEVICE_PATH_PROTOCOL End;\r
216} HII_VENDOR_DEVICE_PATH;\r
217\r
218typedef struct {\r
219 USB_CLASS_DEVICE_PATH UsbClass;\r
220 EFI_DEVICE_PATH_PROTOCOL End;\r
221} USB_CLASS_FORMAT_DEVICE_PATH;\r
222\r
223typedef struct {\r
224 ACPI_HID_DEVICE_PATH PciRootBridge;\r
225 PCI_DEVICE_PATH OnboardVga;\r
226 EFI_DEVICE_PATH_PROTOCOL End;\r
227} PLATFORM_ONBOARD_VGA_DEVICE_PATH;\r
228\r
229typedef struct {\r
230 ACPI_HID_DEVICE_PATH PciRootBridge;\r
231 PCI_DEVICE_PATH AgpBridge;\r
232 PCI_DEVICE_PATH AgpDevice;\r
233 EFI_DEVICE_PATH_PROTOCOL End;\r
234} PLATFORM_OFFBOARD_VGA_DEVICE_PATH;\r
235\r
236typedef struct {\r
237 ACPI_HID_DEVICE_PATH PciRootBridge;\r
238 PCI_DEVICE_PATH IsaBridge;\r
239 ACPI_HID_DEVICE_PATH IsaSerial;\r
240 UART_DEVICE_PATH Uart;\r
241 VENDOR_DEVICE_PATH TerminalType;\r
242 EFI_DEVICE_PATH_PROTOCOL End;\r
243} PLATFORM_ISA_SERIAL_DEVICE_PATH;\r
244\r
245//\r
246// Below is the boot option device path\r
247//\r
248typedef struct {\r
249 BBS_BBS_DEVICE_PATH LegacyHD;\r
250 EFI_DEVICE_PATH_PROTOCOL End;\r
251} LEGACY_HD_DEVICE_PATH;\r
252\r
253//\r
254// Below is the platform IDE device path\r
255//\r
256typedef struct {\r
257 ACPI_HID_DEVICE_PATH PciRootBridge;\r
258 PCI_DEVICE_PATH IsaBridge;\r
259 ATAPI_DEVICE_PATH Ide;\r
260 EFI_DEVICE_PATH_PROTOCOL End;\r
261} PLATFORM_IDE_DEVICE_PATH;\r
262\r
263//\r
264// Floppy device path definition\r
265//\r
266typedef struct {\r
267 ACPI_HID_DEVICE_PATH PciRootBridge;\r
268 PCI_DEVICE_PATH IsaBridge;\r
269 ACPI_HID_DEVICE_PATH Floppy;\r
270 EFI_DEVICE_PATH_PROTOCOL End;\r
271} PLATFORM_FLOPPY_DEVICE_PATH;\r
272\r
273//\r
274// Below is the platform USB controller device path for\r
275// USB disk as user authentication device.\r
276//\r
277typedef struct {\r
278 ACPI_HID_DEVICE_PATH PciRootBridge;\r
279 PCI_DEVICE_PATH PciDevice;\r
280 EFI_DEVICE_PATH_PROTOCOL End;\r
281} PLATFORM_USB_DEVICE_PATH;\r
282\r
283//\r
284// Below is the platform PCI device path\r
285//\r
286typedef struct {\r
287 ACPI_HID_DEVICE_PATH PciRootBridge;\r
288 PCI_DEVICE_PATH PciDevice;\r
289 EFI_DEVICE_PATH_PROTOCOL End;\r
290} PLATFORM_PCI_DEVICE_PATH;\r
291\r
292typedef enum {\r
293 PMIC_Equal = 0, // = 0\r
294 PMIC_Greater_Than, // > 1\r
295 PMIC_Smaller_Than, // < 2\r
296 PMIC_Greater_Equal, // >= 3\r
297 PMIC_Smaller_Equal, // <= 4\r
298 PMIC_Any // don't care 5\r
299} PMIC_Condition_list;\r
300\r
301typedef enum {\r
302 PMIC_White_List = 0, //White list\r
303 PMIC_Black_List = 1 //Black list\r
304} PMIC_Compliance_mode;\r
305\r
306typedef struct {\r
307 UINT8 Cond_Choice; // PMIC_Condition_list\r
308 UINT8 Cond_Number; // the number\r
309}PMIC_Condition_Item;\r
310\r
311typedef struct {\r
312 PMIC_Condition_Item PMIC_BoardID;\r
313 PMIC_Condition_Item PMIC_FabID;\r
314 PMIC_Condition_Item Soc_Stepping;//define PMIC type, 1:Dialog , 2:Rohm\r
315 PMIC_Condition_Item PMIC_VendID;\r
316 PMIC_Condition_Item PMIC_RevID;\r
317 PMIC_Compliance_mode mode; //if 1, blacklist; if 0, white list.\r
318} PMIC_Compliance_Item;\r
319\r
320//\r
321// Platform BDS Functions\r
322//\r
323VOID\r
324PlatformBdsGetDriverOption (\r
325 IN LIST_ENTRY *BdsDriverLists\r
326 );\r
327\r
328VOID\r
329PlatformBdsPredictBootOption (\r
330 IN LIST_ENTRY *BdsBootOptionList\r
331 );\r
332\r
333EFI_STATUS\r
334PlatformBdsShowProgress (\r
335 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,\r
336 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,\r
337 CHAR16 *Title,\r
338 EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,\r
339 UINTN Progress,\r
340 UINTN PreviousValue\r
341 );\r
342\r
343VOID\r
344PlatformBdsConnectSequence (\r
345 VOID\r
346 );\r
347\r
348EFI_STATUS\r
349PlatformBdsConnectConsole (\r
350 IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole\r
351 );\r
352\r
353EFI_STATUS\r
354PlatformBdsNoConsoleAction (\r
355 VOID\r
356 );\r
357\r
358VOID\r
359PlatformBdsEnterFrontPage (\r
360 IN UINT16 TimeoutDefault,\r
361 IN BOOLEAN ConnectAllHappened\r
362 );\r
363\r
364VOID\r
365EFIAPI\r
366PlatformBdsUserIdentify (\r
367 OUT EFI_USER_PROFILE_HANDLE *User,\r
368 OUT BOOLEAN *DeferredImage\r
369 );\r
370\r
371VOID\r
372EFIAPI\r
373PlatformBdsConnectAuthDevice (\r
374 VOID\r
375 );\r
376\r
377VOID\r
378PlatformBdsEnterFrontPageWithHotKey (\r
379 IN UINT16 TimeoutDefault,\r
380 IN BOOLEAN ConnectAllHappened\r
381 );\r
382\r
383 EFI_STATUS\r
384 ShowProgress (\r
385 IN UINT16 TimeoutDefault\r
386 );\r
387\r
388 EFI_STATUS\r
389 InitializeFrontPage (\r
390 IN BOOLEAN InitializeHiiData\r
391 );\r
392\r
393 VOID\r
394 UpdateFrontPageStrings (\r
395 VOID\r
396 );\r
4139580d
SL
397 \r
398 \r
399 EFI_STATUS\r
400 InitBMPackage (\r
401 VOID\r
402 );\r
403 \r
404 \r
405 VOID\r
406 FreeBMPackage (\r
407 VOID\r
408 );\r
409 \r
410 \r
3cbfba02
DW
411 EFI_STATUS\r
412 CallFrontPage (\r
413 VOID\r
414 );\r
415\r
416\r
417 VOID\r
418 CallBootManager (\r
419 VOID\r
420 );\r
421\r
422VOID\r
423CallDeviceManager (\r
424 VOID\r
425 );\r
426\r
427VOID\r
428BdsStartBootMaint (\r
429 VOID\r
430 );\r
431\r
432CHAR16 *\r
433GetStringById (\r
434 IN EFI_STRING_ID Id\r
435 );\r
436\r
437EFI_STATUS\r
438WaitForSingleEvent (\r
439 IN EFI_EVENT Event,\r
440 IN UINT64 Timeout OPTIONAL\r
441 );\r
442\r
69a99d0b
MG
443EFI_STATUS\r
444BdsLibDeleteOptionFromHandle (\r
445 IN EFI_HANDLE Handle\r
446 );\r
447\r
448EFI_STATUS\r
449BdsDeleteAllInvalidEfiBootOption (\r
450 VOID\r
451 );\r
452\r
3cbfba02
DW
453\r
454#define ONE_SECOND 10000000\r
455#define FRONT_PAGE_KEY_CONTINUE 0x1000\r
456#define FRONT_PAGE_KEY_LANGUAGE 0x1234\r
457#define FRONT_PAGE_KEY_BOOT_MANAGER 0x1064\r
458#define FRONT_PAGE_KEY_DEVICE_MANAGER 0x8567\r
459#define FRONT_PAGE_KEY_BOOT_MAINTAIN 0x9876\r
460\r
461#define PORT_A_DVO 0 // ; DVO A\r
462#define PORT_B_DVO 1 // ; DVO B\r
463#define PORT_C_DVO 2 // ; DVO C\r
464#define PORT_D_DVO 3 // ; DVO D\r
465#define PORT_LVDS 4 // ; Integrated LVDS port\r
466#define PORT_ANALOG_TV 5 // ; Integrated TV port\r
467#define PORT_CRT 6 // ; integrated Analog port\r
468#define PORT_B_DP 7 // ; DisplayPort B\r
469#define PORT_C_DP 8 // ; DisplayPort C\r
470#define PORT_D_DP 9 // ; DisplayPort D\r
471#define PORT_A_DP 10 // ; DisplayPort A (for eDP on ILK)\r
472#define PORT_B_HDMI 11 // ; HDMI B\r
473#define PORT_C_HDMI 12 // ; HDMI C\r
474#define PORT_D_HDMI 13 // ; HDMI D\r
475#define PORT_B_DVI 14 // ; DVI B\r
476#define PORT_C_DVI 15 // ; DVI C\r
477#define PORT_D_DVI 16 // ; DVI D\r
478#define PORT_MIPI_A 21 // ; MIPI\r
479#define PORT_MIPI_B 22\r
480#define PORT_MIPI_C 23\r
481\r
482\r
483extern BOOLEAN gConnectAllHappened;\r
484extern UINTN gCallbackKey;\r
485\r
486VOID\r
487BdsBootDeviceSelect (\r
488 VOID\r
489);\r
490VOID FastBoot(VOID);\r
491\r
492extern BOOLEAN mModeInitialized;\r
493\r
494//\r
495// Boot video resolution and text mode.\r
496//\r
497extern UINT32 mBootHorizontalResolution ;\r
498extern UINT32 mBootVerticalResolution ;\r
499extern UINT32 mBootTextModeColumn ;\r
500extern UINT32 mBootTextModeRow ;\r
501\r
502//\r
503// BIOS setup video resolution and text mode.\r
504//\r
505extern UINT32 mSetupTextModeColumn ;\r
506extern UINT32 mSetupTextModeRow ;\r
507extern UINT32 mSetupHorizontalResolution ;\r
508extern UINT32 mSetupVerticalResolution ;\r
509extern EFI_STATUS BdsSetConsoleMode (BOOLEAN);\r
510#endif // _BDS_PLATFORM_H\r