PlatformData.c 6.8 KB

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