1 /** @file
2   Defined the platform specific device path which will be used by
3   platform Bbd to perform the platform policy connect.
4 
5   Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
6   Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
7   SPDX-License-Identifier: BSD-2-Clause-Patent
8 
9 **/
10 
11 #include "BdsPlatform.h"
12 #include <Guid/QemuRamfb.h>
13 
14 //
15 // Debug Agent UART Device Path structure
16 //
17 #pragma pack(1)
18 typedef struct {
19   VENDOR_DEVICE_PATH        VendorHardware;
20   UART_DEVICE_PATH          Uart;
21   VENDOR_DEVICE_PATH        TerminalType;
22   EFI_DEVICE_PATH_PROTOCOL  End;
23 } VENDOR_UART_DEVICE_PATH;
24 #pragma pack()
25 
26 //
27 // USB Keyboard Device Path structure
28 //
29 #pragma pack (1)
30 typedef struct {
31   USB_CLASS_DEVICE_PATH    Keyboard;
32   EFI_DEVICE_PATH_PROTOCOL End;
33 } USB_KEYBOARD_DEVICE_PATH;
34 #pragma pack ()
35 
36 //
37 // QemuRamfb Device Path structure
38 //
39 #pragma pack (1)
40 typedef struct {
41   VENDOR_DEVICE_PATH        Vendor;
42   ACPI_ADR_DEVICE_PATH      AcpiAdr;
43   EFI_DEVICE_PATH_PROTOCOL  End;
44 } VENDOR_RAMFB_DEVICE_PATH;
45 #pragma pack ()
46 
47 ACPI_HID_DEVICE_PATH       gPnpPs2KeyboardDeviceNode  = gPnpPs2Keyboard;
48 ACPI_HID_DEVICE_PATH       gPnp16550ComPortDeviceNode = gPnp16550ComPort;
49 UART_DEVICE_PATH           gUartDeviceNode            = gUart;
50 VENDOR_DEVICE_PATH         gTerminalTypeDeviceNode    = gPcAnsiTerminal;
51 
52 //
53 // Platform specific keyboard device path
54 //
55 
56 
57 //
58 // Debug Agent UART Device Path
59 //
60 VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = {
61   {
62     {
63       HARDWARE_DEVICE_PATH,
64       HW_VENDOR_DP,
65       {
66         (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
67         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
68       }
69     },
70     EFI_DEBUG_AGENT_GUID,
71   },
72   {
73     {
74       MESSAGING_DEVICE_PATH,
75       MSG_UART_DP,
76       {
77         (UINT8) (sizeof (UART_DEVICE_PATH)),
78         (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
79       }
80     },
81     0,  // Reserved
82     0,  // BaudRate - Default
83     0,  // DataBits - Default
84     0,  // Parity   - Default
85     0,  // StopBits - Default
86   },
87   gPcAnsiTerminal,
88   gEndEntire
89 };
90 
91 STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = {
92   {
93     {
94       MESSAGING_DEVICE_PATH,
95       MSG_USB_CLASS_DP,
96       {
97         (UINT8)sizeof (USB_CLASS_DEVICE_PATH),
98         (UINT8)(sizeof (USB_CLASS_DEVICE_PATH) >> 8)
99       }
100     },
101     0xFFFF, // VendorId: any
102     0xFFFF, // ProductId: any
103     3,      // DeviceClass: HID
104     1,      // DeviceSubClass: boot
105     1       // DeviceProtocol: keyboard
106   },
107   gEndEntire
108 };
109 
110 STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = {
111   {
112     {
113       HARDWARE_DEVICE_PATH,
114       HW_VENDOR_DP,
115       {
116         (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
117         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
118       }
119     },
120     QEMU_RAMFB_GUID,
121   },
122   {
123     {
124       ACPI_DEVICE_PATH,
125       ACPI_ADR_DP,
126       {
127         (UINT8) (sizeof (ACPI_ADR_DEVICE_PATH)),
128         (UINT8) ((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8)
129       }
130     },
131     ACPI_DISPLAY_ADR (
132       1,                                       // DeviceIdScheme
133       0,                                       // HeadId
134       0,                                       // NonVgaOutput
135       1,                                       // BiosCanDetect
136       0,                                       // VendorInfo
137       ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL,  // Type
138       0,                                       // Port
139       0                                        // Index
140       ),
141   },
142   gEndEntire
143 };
144 
145 //
146 // Predefined platform default console device path
147 //
148 PLATFORM_CONSOLE_CONNECT_ENTRY   gPlatformConsole[] = {
149   {
150     (EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath,
151     (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
152   },
153   {
154     (EFI_DEVICE_PATH_PROTOCOL *)&gUsbKeyboardDevicePath,
155     CONSOLE_IN
156   },
157   {
158     (EFI_DEVICE_PATH_PROTOCOL *)&gQemuRamfbDevicePath,
159     CONSOLE_OUT
160   },
161   {
162     NULL,
163     0
164   }
165 };
166 
167 //
168 // Predefined platform connect sequence
169 //
170 EFI_DEVICE_PATH_PROTOCOL    *gPlatformConnectSequence[] = { NULL };
171 
172