2 Defined the platform specific device path which will be filled to
3 ConIn/ConOut variables.
5 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include "PlatformBootManager.h"
13 /// the short form device path for Usb keyboard
16 #define SUBCLASS_BOOT 1
17 #define PROTOCOL_KEYBOARD 1
20 /// PcdDefaultTerminalType values
24 #define VT100PLUSTYPE 2
29 // Below is the platform console device path
32 ACPI_HID_DEVICE_PATH PciRootBridge
;
33 PCI_DEVICE_PATH PciUart
;
34 UART_DEVICE_PATH Uart
;
35 VENDOR_DEVICE_PATH TerminalType
;
36 EFI_DEVICE_PATH_PROTOCOL End
;
37 } PCI_UART_DEVICE_PATH
;
40 VENDOR_DEVICE_PATH VendorHardware
;
41 UART_DEVICE_PATH Uart
;
42 VENDOR_DEVICE_PATH TerminalType
;
43 EFI_DEVICE_PATH_PROTOCOL End
;
44 } VENDOR_UART_DEVICE_PATH
;
47 USB_CLASS_DEVICE_PATH UsbClass
;
48 EFI_DEVICE_PATH_PROTOCOL End
;
49 } USB_CLASS_FORMAT_DEVICE_PATH
;
51 #define PNPID_DEVICE_PATH_NODE(PnpId) \
57 (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
58 (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
61 EISA_PNP_ID((PnpId)), \
65 #define PCI_DEVICE_PATH_NODE(Func, Dev) \
68 HARDWARE_DEVICE_PATH, \
71 (UINT8) (sizeof (PCI_DEVICE_PATH)), \
72 (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
81 END_DEVICE_PATH_TYPE, \
82 END_ENTIRE_DEVICE_PATH_SUBTYPE, \
84 END_DEVICE_PATH_LENGTH, \
90 // Platform specific serial device path
92 PCI_UART_DEVICE_PATH gPciUartDevicePath0
= {
93 PNPID_DEVICE_PATH_NODE(0x0A03),
94 PCI_DEVICE_PATH_NODE(1, 20),
97 MESSAGING_DEVICE_PATH
,
100 (UINT8
)(sizeof (UART_DEVICE_PATH
)),
101 (UINT8
)((sizeof (UART_DEVICE_PATH
)) >> 8)
112 MESSAGING_DEVICE_PATH
,
115 (UINT8
)(sizeof (VENDOR_DEVICE_PATH
)),
116 (UINT8
)((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
119 DEVICE_PATH_MESSAGING_PC_ANSI
124 PCI_UART_DEVICE_PATH gPciUartDevicePath1
= {
125 PNPID_DEVICE_PATH_NODE(0x0A03),
126 PCI_DEVICE_PATH_NODE(5, 20),
129 MESSAGING_DEVICE_PATH
,
132 (UINT8
)(sizeof (UART_DEVICE_PATH
)),
133 (UINT8
)((sizeof (UART_DEVICE_PATH
)) >> 8)
144 MESSAGING_DEVICE_PATH
,
147 (UINT8
)(sizeof (VENDOR_DEVICE_PATH
)),
148 (UINT8
)((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
151 DEVICE_PATH_MESSAGING_PC_ANSI
156 VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath
= {
159 HARDWARE_DEVICE_PATH
,
162 (UINT8
) (sizeof (VENDOR_DEVICE_PATH
)),
163 (UINT8
) ((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
166 EFI_DEBUG_AGENT_GUID
,
170 MESSAGING_DEVICE_PATH
,
173 (UINT8
) (sizeof (UART_DEVICE_PATH
)),
174 (UINT8
) ((sizeof (UART_DEVICE_PATH
)) >> 8)
178 0, // BaudRate - Default
179 0, // DataBits - Default
180 0, // Parity - Default
181 0, // StopBits - Default
185 MESSAGING_DEVICE_PATH
,
188 (UINT8
)(sizeof (VENDOR_DEVICE_PATH
)),
189 (UINT8
)((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
192 DEVICE_PATH_MESSAGING_PC_ANSI
197 USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath
= {
200 MESSAGING_DEVICE_PATH
,
203 (UINT8
)(sizeof (USB_CLASS_DEVICE_PATH
)),
204 (UINT8
)((sizeof (USB_CLASS_DEVICE_PATH
)) >> 8)
207 0xffff, // VendorId - Match any vendor
208 0xffff, // ProductId - Match any product
209 CLASS_HID
, // DeviceClass
210 SUBCLASS_BOOT
, // DeviceSubClass
211 PROTOCOL_KEYBOARD
// DeviceProtocol
217 // Predefined platform default console device path
219 PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole
[] = {
220 { (EFI_DEVICE_PATH_PROTOCOL
*) &gPciUartDevicePath0
, (CONSOLE_OUT
| CONSOLE_IN
) },
221 { (EFI_DEVICE_PATH_PROTOCOL
*) &gPciUartDevicePath1
, (CONSOLE_OUT
| CONSOLE_IN
) },
222 { (EFI_DEVICE_PATH_PROTOCOL
*) &gDebugAgentUartDevicePath
, (CONSOLE_OUT
| CONSOLE_IN
) },
223 { (EFI_DEVICE_PATH_PROTOCOL
*) &gUsbClassKeyboardDevicePath
, (CONSOLE_IN
) },
229 InitializePlatformBootManagerLib (
230 IN EFI_HANDLE ImageHandle
,
231 IN EFI_SYSTEM_TABLE
*SystemTable
234 EFI_GUID
*TerminalTypeGuid
;
237 // Update UART device path nodes based on UART PCD settings
239 gPciUartDevicePath0
.Uart
.BaudRate
= PcdGet64 (PcdUartDefaultBaudRate
);
240 gPciUartDevicePath0
.Uart
.DataBits
= PcdGet8 (PcdUartDefaultDataBits
);
241 gPciUartDevicePath0
.Uart
.Parity
= PcdGet8 (PcdUartDefaultParity
);
242 gPciUartDevicePath0
.Uart
.StopBits
= PcdGet8 (PcdUartDefaultStopBits
);
243 gPciUartDevicePath1
.Uart
.BaudRate
= PcdGet64 (PcdUartDefaultBaudRate
);
244 gPciUartDevicePath1
.Uart
.DataBits
= PcdGet8 (PcdUartDefaultDataBits
);
245 gPciUartDevicePath1
.Uart
.Parity
= PcdGet8 (PcdUartDefaultParity
);
246 gPciUartDevicePath1
.Uart
.StopBits
= PcdGet8 (PcdUartDefaultStopBits
);
249 // Update Vendor device path nodes based on terminal type PCD settings
251 switch (PcdGet8 (PcdDefaultTerminalType
)) {
253 TerminalTypeGuid
= &gEfiPcAnsiGuid
;
256 TerminalTypeGuid
= &gEfiVT100Guid
;
259 TerminalTypeGuid
= &gEfiVT100PlusGuid
;
262 TerminalTypeGuid
= &gEfiVTUTF8Guid
;
265 TerminalTypeGuid
= &gEfiTtyTermGuid
;
268 TerminalTypeGuid
= &gEfiPcAnsiGuid
;
271 CopyGuid (&gPciUartDevicePath0
.TerminalType
.Guid
, TerminalTypeGuid
);
272 CopyGuid (&gPciUartDevicePath1
.TerminalType
.Guid
, TerminalTypeGuid
);