3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
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.
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.
21 Head file for BDS Platform specific code
25 #ifndef _BDS_PLATFORM_H
26 #define _BDS_PLATFORM_H
28 #include <FrameworkDxe.h>
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>
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>
68 #include <IndustryStandard/Pci.h>
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
[];
80 extern BOOLEAN mEnumBootDevice
;
84 // the short form device path for Usb keyboard
87 #define SUBCLASS_BOOT 1
88 #define PROTOCOL_KEYBOARD 1
90 #define PCI_DEVICE_PATH_NODE(Func, Dev) \
92 HARDWARE_DEVICE_PATH, \
95 (UINT8) (sizeof (PCI_DEVICE_PATH)), \
96 (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
102 #define PNPID_DEVICE_PATH_NODE(PnpId) \
108 (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
109 (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
112 EISA_PNP_ID((PnpId)), \
116 #define gUart(BaudRate, DataBits, Parity, StopBits) \
119 MESSAGING_DEVICE_PATH, \
122 (UINT8) (sizeof (UART_DEVICE_PATH)), \
123 (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
133 #define gPcAnsiTerminal \
136 MESSAGING_DEVICE_PATH, \
139 (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
140 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
143 DEVICE_PATH_MESSAGING_PC_ANSI \
146 #define gUsbKeyboardMouse \
149 MESSAGING_DEVICE_PATH, \
151 (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), \
152 (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) \
163 END_DEVICE_PATH_TYPE, \
164 END_ENTIRE_DEVICE_PATH_SUBTYPE, \
166 END_DEVICE_PATH_LENGTH, \
171 #define gPciRootBridge \
172 PNPID_DEVICE_PATH_NODE(0x0A03)
174 #define gPnpPs2Keyboard \
175 PNPID_DEVICE_PATH_NODE(0x0303)
177 #define gPnp16550ComPort \
178 PNPID_DEVICE_PATH_NODE(0x0501)
180 #define gPciePort0Bridge \
181 PCI_DEVICE_PATH_NODE(0, 0x1C)
183 #define gPciePort1Bridge \
184 PCI_DEVICE_PATH_NODE(1, 0x1C)
186 #define gPciePort2Bridge \
187 PCI_DEVICE_PATH_NODE(2, 0x1C)
189 #define gPciePort3Bridge \
190 PCI_DEVICE_PATH_NODE(3, 0x1C)
192 #define gPciIsaBridge \
193 PCI_DEVICE_PATH_NODE(0, 0x1f)
196 // Platform Root Bridge
199 ACPI_HID_DEVICE_PATH PciRootBridge
;
200 EFI_DEVICE_PATH_PROTOCOL End
;
201 } PLATFORM_ROOT_BRIDGE_DEVICE_PATH
;
204 // Below is the platform console device path
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
;
214 VENDOR_DEVICE_PATH VendorDevicePath
;
215 EFI_DEVICE_PATH_PROTOCOL End
;
216 } HII_VENDOR_DEVICE_PATH
;
219 USB_CLASS_DEVICE_PATH UsbClass
;
220 EFI_DEVICE_PATH_PROTOCOL End
;
221 } USB_CLASS_FORMAT_DEVICE_PATH
;
224 ACPI_HID_DEVICE_PATH PciRootBridge
;
225 PCI_DEVICE_PATH OnboardVga
;
226 EFI_DEVICE_PATH_PROTOCOL End
;
227 } PLATFORM_ONBOARD_VGA_DEVICE_PATH
;
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
;
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
;
246 // Below is the boot option device path
249 BBS_BBS_DEVICE_PATH LegacyHD
;
250 EFI_DEVICE_PATH_PROTOCOL End
;
251 } LEGACY_HD_DEVICE_PATH
;
254 // Below is the platform IDE device path
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
;
264 // Floppy device path definition
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
;
274 // Below is the platform USB controller device path for
275 // USB disk as user authentication device.
278 ACPI_HID_DEVICE_PATH PciRootBridge
;
279 PCI_DEVICE_PATH PciDevice
;
280 EFI_DEVICE_PATH_PROTOCOL End
;
281 } PLATFORM_USB_DEVICE_PATH
;
284 // Below is the platform PCI device path
287 ACPI_HID_DEVICE_PATH PciRootBridge
;
288 PCI_DEVICE_PATH PciDevice
;
289 EFI_DEVICE_PATH_PROTOCOL End
;
290 } PLATFORM_PCI_DEVICE_PATH
;
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
;
302 PMIC_White_List
= 0, //White list
303 PMIC_Black_List
= 1 //Black list
304 } PMIC_Compliance_mode
;
307 UINT8 Cond_Choice
; // PMIC_Condition_list
308 UINT8 Cond_Number
; // the number
309 }PMIC_Condition_Item
;
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
;
321 // Platform BDS Functions
324 PlatformBdsGetDriverOption (
325 IN LIST_ENTRY
*BdsDriverLists
329 PlatformBdsPredictBootOption (
330 IN LIST_ENTRY
*BdsBootOptionList
334 PlatformBdsShowProgress (
335 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground
,
336 EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground
,
338 EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor
,
344 PlatformBdsConnectSequence (
349 PlatformBdsConnectConsole (
350 IN BDS_CONSOLE_CONNECT_ENTRY
*PlatformConsole
354 PlatformBdsNoConsoleAction (
359 PlatformBdsEnterFrontPage (
360 IN UINT16 TimeoutDefault
,
361 IN BOOLEAN ConnectAllHappened
366 PlatformBdsUserIdentify (
367 OUT EFI_USER_PROFILE_HANDLE
*User
,
368 OUT BOOLEAN
*DeferredImage
373 PlatformBdsConnectAuthDevice (
378 PlatformBdsEnterFrontPageWithHotKey (
379 IN UINT16 TimeoutDefault
,
380 IN BOOLEAN ConnectAllHappened
385 IN UINT16 TimeoutDefault
389 InitializeFrontPage (
390 IN BOOLEAN InitializeHiiData
394 UpdateFrontPageStrings (
440 IN UINT64 Timeout OPTIONAL
444 BdsLibDeleteOptionFromHandle (
449 BdsDeleteAllInvalidEfiBootOption (
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
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
483 extern BOOLEAN gConnectAllHappened
;
484 extern UINTN gCallbackKey
;
487 BdsBootDeviceSelect (
492 extern BOOLEAN mModeInitialized
;
495 // Boot video resolution and text mode.
497 extern UINT32 mBootHorizontalResolution
;
498 extern UINT32 mBootVerticalResolution
;
499 extern UINT32 mBootTextModeColumn
;
500 extern UINT32 mBootTextModeRow
;
503 // BIOS setup video resolution and text mode.
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