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