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