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