3 Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
16 Head file for BDS Platform specific code
20 #ifndef _BDS_PLATFORM_H
21 #define _BDS_PLATFORM_H
23 #include <FrameworkDxe.h>
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>
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>
64 #include <IndustryStandard/Pci.h>
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
[];
76 extern BOOLEAN mEnumBootDevice
;
80 // the short form device path for Usb keyboard
83 #define SUBCLASS_BOOT 1
84 #define PROTOCOL_KEYBOARD 1
86 #define PCI_DEVICE_PATH_NODE(Func, Dev) \
88 HARDWARE_DEVICE_PATH, \
91 (UINT8) (sizeof (PCI_DEVICE_PATH)), \
92 (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
98 #define PNPID_DEVICE_PATH_NODE(PnpId) \
104 (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
105 (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
108 EISA_PNP_ID((PnpId)), \
112 #define gUart(BaudRate, DataBits, Parity, StopBits) \
115 MESSAGING_DEVICE_PATH, \
118 (UINT8) (sizeof (UART_DEVICE_PATH)), \
119 (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
129 #define gPcAnsiTerminal \
132 MESSAGING_DEVICE_PATH, \
135 (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
136 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
139 DEVICE_PATH_MESSAGING_PC_ANSI \
142 #define gUsbKeyboardMouse \
145 MESSAGING_DEVICE_PATH, \
147 (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), \
148 (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) \
159 END_DEVICE_PATH_TYPE, \
160 END_ENTIRE_DEVICE_PATH_SUBTYPE, \
162 END_DEVICE_PATH_LENGTH, \
167 #define gPciRootBridge \
168 PNPID_DEVICE_PATH_NODE(0x0A03)
170 #define gPnpPs2Keyboard \
171 PNPID_DEVICE_PATH_NODE(0x0303)
173 #define gPnp16550ComPort \
174 PNPID_DEVICE_PATH_NODE(0x0501)
176 #define gPciePort0Bridge \
177 PCI_DEVICE_PATH_NODE(0, 0x1C)
179 #define gPciePort1Bridge \
180 PCI_DEVICE_PATH_NODE(1, 0x1C)
182 #define gPciePort2Bridge \
183 PCI_DEVICE_PATH_NODE(2, 0x1C)
185 #define gPciePort3Bridge \
186 PCI_DEVICE_PATH_NODE(3, 0x1C)
188 #define gPciIsaBridge \
189 PCI_DEVICE_PATH_NODE(0, 0x1f)
192 // Platform Root Bridge
195 ACPI_HID_DEVICE_PATH PciRootBridge
;
196 EFI_DEVICE_PATH_PROTOCOL End
;
197 } PLATFORM_ROOT_BRIDGE_DEVICE_PATH
;
200 // Below is the platform console device path
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
;
210 VENDOR_DEVICE_PATH VendorDevicePath
;
211 EFI_DEVICE_PATH_PROTOCOL End
;
212 } HII_VENDOR_DEVICE_PATH
;
215 USB_CLASS_DEVICE_PATH UsbClass
;
216 EFI_DEVICE_PATH_PROTOCOL End
;
217 } USB_CLASS_FORMAT_DEVICE_PATH
;
220 ACPI_HID_DEVICE_PATH PciRootBridge
;
221 PCI_DEVICE_PATH OnboardVga
;
222 EFI_DEVICE_PATH_PROTOCOL End
;
223 } PLATFORM_ONBOARD_VGA_DEVICE_PATH
;
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
;
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
;
242 // Below is the boot option device path
245 BBS_BBS_DEVICE_PATH LegacyHD
;
246 EFI_DEVICE_PATH_PROTOCOL End
;
247 } LEGACY_HD_DEVICE_PATH
;
250 // Below is the platform IDE device path
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
;
260 // Floppy device path definition
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
;
270 // Below is the platform USB controller device path for
271 // USB disk as user authentication device.
274 ACPI_HID_DEVICE_PATH PciRootBridge
;
275 PCI_DEVICE_PATH PciDevice
;
276 EFI_DEVICE_PATH_PROTOCOL End
;
277 } PLATFORM_USB_DEVICE_PATH
;
280 // Debug Agent UART Console device path definition
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
;
290 // Below is the platform PCI device path
293 ACPI_HID_DEVICE_PATH PciRootBridge
;
294 PCI_DEVICE_PATH PciDevice
;
295 EFI_DEVICE_PATH_PROTOCOL End
;
296 } PLATFORM_PCI_DEVICE_PATH
;
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
;
308 PMIC_White_List
= 0, //White list
309 PMIC_Black_List
= 1 //Black list
310 } PMIC_Compliance_mode
;
313 UINT8 Cond_Choice
; // PMIC_Condition_list
314 UINT8 Cond_Number
; // the number
315 }PMIC_Condition_Item
;
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
;
327 // Platform BDS Functions
330 PlatformBdsGetDriverOption (
331 IN LIST_ENTRY
*BdsDriverLists
335 PlatformBdsPredictBootOption (
336 IN LIST_ENTRY
*BdsBootOptionList
340 PlatformBdsShowProgress (
341 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground
,
342 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground
,
344 EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor
,
350 PlatformBdsConnectSequence (
355 PlatformBdsConnectConsole (
356 IN BDS_CONSOLE_CONNECT_ENTRY
*PlatformConsole
360 PlatformBdsNoConsoleAction (
365 PlatformBdsEnterFrontPage (
366 IN UINT16 TimeoutDefault
,
367 IN BOOLEAN ConnectAllHappened
372 PlatformBdsUserIdentify (
373 OUT EFI_USER_PROFILE_HANDLE
*User
,
374 OUT BOOLEAN
*DeferredImage
379 PlatformBdsConnectAuthDevice (
384 PlatformBdsEnterFrontPageWithHotKey (
385 IN UINT16 TimeoutDefault
,
386 IN BOOLEAN ConnectAllHappened
391 IN UINT16 TimeoutDefault
395 InitializeFrontPage (
396 IN BOOLEAN InitializeHiiData
400 UpdateFrontPageStrings (
446 IN UINT64 Timeout OPTIONAL
450 BdsLibDeleteOptionFromHandle (
455 BdsDeleteAllInvalidEfiBootOption (
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
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
489 extern BOOLEAN gConnectAllHappened
;
490 extern UINTN gCallbackKey
;
493 BdsBootDeviceSelect (
498 extern BOOLEAN mModeInitialized
;
501 // Boot video resolution and text mode.
503 extern UINT32 mBootHorizontalResolution
;
504 extern UINT32 mBootVerticalResolution
;
505 extern UINT32 mBootTextModeColumn
;
506 extern UINT32 mBootTextModeRow
;
509 // BIOS setup video resolution and text mode.
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