]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkPlatformPkg/Library/PlatformBootManagerLib/PlatformData.c
QuarkPlatformPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / QuarkPlatformPkg / Library / PlatformBootManagerLib / PlatformData.c
1 /** @file
2 Defined the platform specific device path which will be filled to
3 ConIn/ConOut variables.
4
5 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #include "PlatformBootManager.h"
11
12 ///
13 /// the short form device path for Usb keyboard
14 ///
15 #define CLASS_HID 3
16 #define SUBCLASS_BOOT 1
17 #define PROTOCOL_KEYBOARD 1
18
19 ///
20 /// PcdDefaultTerminalType values
21 ///
22 #define PCANSITYPE 0
23 #define VT100TYPE 1
24 #define VT100PLUSTYPE 2
25 #define VTUTF8TYPE 3
26 #define TTYTERMTYPE 4
27
28 //
29 // Below is the platform console device path
30 //
31 typedef struct {
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;
38
39 typedef struct {
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;
45
46 typedef struct {
47 USB_CLASS_DEVICE_PATH UsbClass;
48 EFI_DEVICE_PATH_PROTOCOL End;
49 } USB_CLASS_FORMAT_DEVICE_PATH;
50
51 #define PNPID_DEVICE_PATH_NODE(PnpId) \
52 { \
53 { \
54 ACPI_DEVICE_PATH, \
55 ACPI_DP, \
56 { \
57 (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
58 (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
59 } \
60 }, \
61 EISA_PNP_ID((PnpId)), \
62 0 \
63 }
64
65 #define PCI_DEVICE_PATH_NODE(Func, Dev) \
66 { \
67 { \
68 HARDWARE_DEVICE_PATH, \
69 HW_PCI_DP, \
70 { \
71 (UINT8) (sizeof (PCI_DEVICE_PATH)), \
72 (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
73 }, \
74 }, \
75 (Func), \
76 (Dev) \
77 }
78
79 #define gEndEntire \
80 { \
81 END_DEVICE_PATH_TYPE, \
82 END_ENTIRE_DEVICE_PATH_SUBTYPE, \
83 { \
84 END_DEVICE_PATH_LENGTH, \
85 0 \
86 } \
87 }
88
89 //
90 // Platform specific serial device path
91 //
92 PCI_UART_DEVICE_PATH gPciUartDevicePath0 = {
93 PNPID_DEVICE_PATH_NODE(0x0A03),
94 PCI_DEVICE_PATH_NODE(1, 20),
95 {
96 {
97 MESSAGING_DEVICE_PATH,
98 MSG_UART_DP,
99 {
100 (UINT8)(sizeof (UART_DEVICE_PATH)),
101 (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8)
102 }
103 },
104 0, // Reserved
105 921600, // BaudRate
106 8, // DataBits
107 1, // Parity
108 1 // StopBits
109 },
110 {
111 {
112 MESSAGING_DEVICE_PATH,
113 MSG_VENDOR_DP,
114 {
115 (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
116 (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
117 },
118 },
119 DEVICE_PATH_MESSAGING_PC_ANSI
120 },
121 gEndEntire
122 };
123
124 PCI_UART_DEVICE_PATH gPciUartDevicePath1 = {
125 PNPID_DEVICE_PATH_NODE(0x0A03),
126 PCI_DEVICE_PATH_NODE(5, 20),
127 {
128 {
129 MESSAGING_DEVICE_PATH,
130 MSG_UART_DP,
131 {
132 (UINT8)(sizeof (UART_DEVICE_PATH)),
133 (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8)
134 }
135 },
136 0, // Reserved
137 921600, // BaudRate
138 8, // DataBits
139 1, // Parity
140 1 // StopBits
141 },
142 {
143 {
144 MESSAGING_DEVICE_PATH,
145 MSG_VENDOR_DP,
146 {
147 (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
148 (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
149 }
150 },
151 DEVICE_PATH_MESSAGING_PC_ANSI
152 },
153 gEndEntire
154 };
155
156 VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = {
157 {
158 {
159 HARDWARE_DEVICE_PATH,
160 HW_VENDOR_DP,
161 {
162 (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
163 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
164 }
165 },
166 EFI_DEBUG_AGENT_GUID,
167 },
168 {
169 {
170 MESSAGING_DEVICE_PATH,
171 MSG_UART_DP,
172 {
173 (UINT8) (sizeof (UART_DEVICE_PATH)),
174 (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
175 }
176 },
177 0, // Reserved
178 0, // BaudRate - Default
179 0, // DataBits - Default
180 0, // Parity - Default
181 0, // StopBits - Default
182 },
183 {
184 {
185 MESSAGING_DEVICE_PATH,
186 MSG_VENDOR_DP,
187 {
188 (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
189 (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
190 }
191 },
192 DEVICE_PATH_MESSAGING_PC_ANSI
193 },
194 gEndEntire
195 };
196
197 USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
198 {
199 {
200 MESSAGING_DEVICE_PATH,
201 MSG_USB_CLASS_DP,
202 {
203 (UINT8)(sizeof (USB_CLASS_DEVICE_PATH)),
204 (UINT8)((sizeof (USB_CLASS_DEVICE_PATH)) >> 8)
205 }
206 },
207 0xffff, // VendorId - Match any vendor
208 0xffff, // ProductId - Match any product
209 CLASS_HID, // DeviceClass
210 SUBCLASS_BOOT, // DeviceSubClass
211 PROTOCOL_KEYBOARD // DeviceProtocol
212 },
213 gEndEntire
214 };
215
216 //
217 // Predefined platform default console device path
218 //
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) },
224 { NULL, 0 }
225 };
226
227 EFI_STATUS
228 EFIAPI
229 InitializePlatformBootManagerLib (
230 IN EFI_HANDLE ImageHandle,
231 IN EFI_SYSTEM_TABLE *SystemTable
232 )
233 {
234 EFI_GUID *TerminalTypeGuid;
235
236 //
237 // Update UART device path nodes based on UART PCD settings
238 //
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);
247
248 //
249 // Update Vendor device path nodes based on terminal type PCD settings
250 //
251 switch (PcdGet8 (PcdDefaultTerminalType)) {
252 case PCANSITYPE:
253 TerminalTypeGuid = &gEfiPcAnsiGuid;
254 break;
255 case VT100TYPE:
256 TerminalTypeGuid = &gEfiVT100Guid;
257 break;
258 case VT100PLUSTYPE:
259 TerminalTypeGuid = &gEfiVT100PlusGuid;
260 break;
261 case VTUTF8TYPE:
262 TerminalTypeGuid = &gEfiVTUTF8Guid;
263 break;
264 case TTYTERMTYPE:
265 TerminalTypeGuid = &gEfiTtyTermGuid;
266 break;
267 default:
268 TerminalTypeGuid = &gEfiPcAnsiGuid;
269 break;
270 }
271 CopyGuid (&gPciUartDevicePath0.TerminalType.Guid, TerminalTypeGuid);
272 CopyGuid (&gPciUartDevicePath1.TerminalType.Guid, TerminalTypeGuid);
273
274 return EFI_SUCCESS;
275 }