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