OvmfPkg/PlatformBootManagerLib: Remove dependency on Mps.h
[mirror_edk2.git] / OvmfPkg / Library / PlatformBootManagerLib / BdsPlatform.h
1 /** @file\r
2   Platform BDS customizations include file.\r
3 \r
4   Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
5   SPDX-License-Identifier: BSD-2-Clause-Patent\r
6 \r
7 Module Name:\r
8 \r
9   BdsPlatform.h\r
10 \r
11 Abstract:\r
12 \r
13   Head file for BDS Platform specific code\r
14 \r
15 **/\r
16 \r
17 #ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_\r
18 #define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_\r
19 \r
20 \r
21 #include <PiDxe.h>\r
22 \r
23 #include <IndustryStandard/Pci.h>\r
24 #include <IndustryStandard/Acpi.h>\r
25 #include <IndustryStandard/SmBios.h>\r
26 #include <IndustryStandard/PeImage.h>\r
27 #include <IndustryStandard/Virtio095.h>\r
28 \r
29 #include <Library/DebugLib.h>\r
30 #include <Library/BaseMemoryLib.h>\r
31 #include <Library/UefiBootServicesTableLib.h>\r
32 #include <Library/UefiRuntimeServicesTableLib.h>\r
33 #include <Library/MemoryAllocationLib.h>\r
34 #include <Library/BaseLib.h>\r
35 #include <Library/PcdLib.h>\r
36 #include <Library/PciLib.h>\r
37 #include <Library/UefiBootManagerLib.h>\r
38 #include <Library/BootLogoLib.h>\r
39 #include <Library/HobLib.h>\r
40 #include <Library/UefiLib.h>\r
41 #include <Library/DxeServicesTableLib.h>\r
42 #include <Library/DevicePathLib.h>\r
43 #include <Library/IoLib.h>\r
44 #include <Library/NvVarsFileLib.h>\r
45 #include <Library/QemuFwCfgLib.h>\r
46 #include <Library/QemuFwCfgS3Lib.h>\r
47 #include <Library/QemuBootOrderLib.h>\r
48 \r
49 #include <Protocol/Decompress.h>\r
50 #include <Protocol/PciIo.h>\r
51 #include <Protocol/FirmwareVolume2.h>\r
52 #include <Protocol/SimpleFileSystem.h>\r
53 #include <Protocol/PciRootBridgeIo.h>\r
54 #include <Protocol/S3SaveState.h>\r
55 #include <Protocol/DxeSmmReadyToLock.h>\r
56 #include <Protocol/LoadedImage.h>\r
57 \r
58 #include <Guid/Acpi.h>\r
59 #include <Guid/SmBios.h>\r
60 #include <Guid/HobList.h>\r
61 #include <Guid/GlobalVariable.h>\r
62 #include <Guid/EventGroup.h>\r
63 #include <Guid/DebugAgentGuid.h>\r
64 \r
65 #include <OvmfPlatforms.h>\r
66 \r
67 extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformConnectSequence[];\r
68 extern ACPI_HID_DEVICE_PATH       gPnpPs2KeyboardDeviceNode;\r
69 extern ACPI_HID_DEVICE_PATH       gPnp16550ComPortDeviceNode;\r
70 extern UART_DEVICE_PATH           gUartDeviceNode;\r
71 extern VENDOR_DEVICE_PATH         gTerminalTypeDeviceNode;\r
72 \r
73 #define PCI_DEVICE_PATH_NODE(Func, Dev) \\r
74   { \\r
75     { \\r
76       HARDWARE_DEVICE_PATH, \\r
77       HW_PCI_DP, \\r
78       { \\r
79         (UINT8) (sizeof (PCI_DEVICE_PATH)), \\r
80         (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \\r
81       } \\r
82     }, \\r
83     (Func), \\r
84     (Dev) \\r
85   }\r
86 \r
87 #define PNPID_DEVICE_PATH_NODE(PnpId) \\r
88   { \\r
89     { \\r
90       ACPI_DEVICE_PATH, \\r
91       ACPI_DP, \\r
92       { \\r
93         (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \\r
94         (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \\r
95       }, \\r
96     }, \\r
97     EISA_PNP_ID((PnpId)), \\r
98     0 \\r
99   }\r
100 \r
101 #define gPciIsaBridge \\r
102   PCI_DEVICE_PATH_NODE(0, 0x1f)\r
103 \r
104 #define gP2PBridge \\r
105   PCI_DEVICE_PATH_NODE(0, 0x1e)\r
106 \r
107 #define gPnpPs2Keyboard \\r
108   PNPID_DEVICE_PATH_NODE(0x0303)\r
109 \r
110 #define gPnp16550ComPort \\r
111   PNPID_DEVICE_PATH_NODE(0x0501)\r
112 \r
113 #define gUart \\r
114   { \\r
115     { \\r
116       MESSAGING_DEVICE_PATH, \\r
117       MSG_UART_DP, \\r
118       { \\r
119         (UINT8) (sizeof (UART_DEVICE_PATH)), \\r
120         (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \\r
121       } \\r
122     }, \\r
123     0, \\r
124     115200, \\r
125     8, \\r
126     1, \\r
127     1 \\r
128   }\r
129 \r
130 #define gPcAnsiTerminal \\r
131   { \\r
132     { \\r
133       MESSAGING_DEVICE_PATH, \\r
134       MSG_VENDOR_DP, \\r
135       { \\r
136         (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \\r
137         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \\r
138       } \\r
139     }, \\r
140     DEVICE_PATH_MESSAGING_PC_ANSI \\r
141   }\r
142 \r
143 #define gEndEntire \\r
144   { \\r
145     END_DEVICE_PATH_TYPE, \\r
146     END_ENTIRE_DEVICE_PATH_SUBTYPE, \\r
147     { \\r
148       END_DEVICE_PATH_LENGTH, \\r
149       0 \\r
150     } \\r
151   }\r
152 \r
153 #define PCI_CLASS_SCC          0x07\r
154 #define PCI_SUBCLASS_SERIAL    0x00\r
155 #define PCI_IF_16550           0x02\r
156 #define IS_PCI_16550SERIAL(_p)           IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550)\r
157 #define IS_PCI_ISA_PDECODE(_p)        IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0)\r
158 \r
159 typedef struct {\r
160   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
161   UINTN                     ConnectType;\r
162 } PLATFORM_CONSOLE_CONNECT_ENTRY;\r
163 \r
164 #define CONSOLE_OUT BIT0\r
165 #define CONSOLE_IN  BIT1\r
166 #define STD_ERROR   BIT2\r
167 extern PLATFORM_CONSOLE_CONNECT_ENTRY  gPlatformConsole[];\r
168 \r
169 //\r
170 // Platform BDS Functions\r
171 //\r
172 \r
173 VOID\r
174 PlatformInitializeConsole (\r
175   IN PLATFORM_CONSOLE_CONNECT_ENTRY   *PlatformConsole\r
176   );\r
177 \r
178 /**\r
179   Loads and boots UEFI Linux via the FwCfg interface.\r
180 \r
181   @retval    EFI_NOT_FOUND - The Linux kernel was not found\r
182 \r
183 **/\r
184 EFI_STATUS\r
185 TryRunningQemuKernel (\r
186   VOID\r
187   );\r
188 \r
189 #endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_\r