| /** @file | |
| Defined the platform specific device path which will be filled to | |
| ConIn/ConOut variables. | |
| Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include "PlatformBootManager.h" | |
| /// | |
| /// the short form device path for Usb keyboard | |
| /// | |
| #define CLASS_HID 3 | |
| #define SUBCLASS_BOOT 1 | |
| #define PROTOCOL_KEYBOARD 1 | |
| /// | |
| /// PcdDefaultTerminalType values | |
| /// | |
| #define PCANSITYPE 0 | |
| #define VT100TYPE 1 | |
| #define VT100PLUSTYPE 2 | |
| #define VTUTF8TYPE 3 | |
| #define TTYTERMTYPE 4 | |
| // | |
| // Below is the platform console device path | |
| // | |
| typedef struct { | |
| ACPI_HID_DEVICE_PATH PciRootBridge; | |
| PCI_DEVICE_PATH PciUart; | |
| UART_DEVICE_PATH Uart; | |
| VENDOR_DEVICE_PATH TerminalType; | |
| EFI_DEVICE_PATH_PROTOCOL End; | |
| } PCI_UART_DEVICE_PATH; | |
| typedef struct { | |
| VENDOR_DEVICE_PATH VendorHardware; | |
| UART_DEVICE_PATH Uart; | |
| VENDOR_DEVICE_PATH TerminalType; | |
| EFI_DEVICE_PATH_PROTOCOL End; | |
| } VENDOR_UART_DEVICE_PATH; | |
| typedef struct { | |
| USB_CLASS_DEVICE_PATH UsbClass; | |
| EFI_DEVICE_PATH_PROTOCOL End; | |
| } USB_CLASS_FORMAT_DEVICE_PATH; | |
| #define PNPID_DEVICE_PATH_NODE(PnpId) \ | |
| { \ | |
| { \ | |
| ACPI_DEVICE_PATH, \ | |
| ACPI_DP, \ | |
| { \ | |
| (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \ | |
| (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \ | |
| } \ | |
| }, \ | |
| EISA_PNP_ID((PnpId)), \ | |
| 0 \ | |
| } | |
| #define PCI_DEVICE_PATH_NODE(Func, Dev) \ | |
| { \ | |
| { \ | |
| HARDWARE_DEVICE_PATH, \ | |
| HW_PCI_DP, \ | |
| { \ | |
| (UINT8) (sizeof (PCI_DEVICE_PATH)), \ | |
| (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \ | |
| }, \ | |
| }, \ | |
| (Func), \ | |
| (Dev) \ | |
| } | |
| #define gEndEntire \ | |
| { \ | |
| END_DEVICE_PATH_TYPE, \ | |
| END_ENTIRE_DEVICE_PATH_SUBTYPE, \ | |
| { \ | |
| END_DEVICE_PATH_LENGTH, \ | |
| 0 \ | |
| } \ | |
| } | |
| // | |
| // Platform specific serial device path | |
| // | |
| PCI_UART_DEVICE_PATH gPciUartDevicePath0 = { | |
| PNPID_DEVICE_PATH_NODE(0x0A03), | |
| PCI_DEVICE_PATH_NODE(1, 20), | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_UART_DP, | |
| { | |
| (UINT8)(sizeof (UART_DEVICE_PATH)), | |
| (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| 0, // Reserved | |
| 921600, // BaudRate | |
| 8, // DataBits | |
| 1, // Parity | |
| 1 // StopBits | |
| }, | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_VENDOR_DP, | |
| { | |
| (UINT8)(sizeof (VENDOR_DEVICE_PATH)), | |
| (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) | |
| }, | |
| }, | |
| DEVICE_PATH_MESSAGING_PC_ANSI | |
| }, | |
| gEndEntire | |
| }; | |
| PCI_UART_DEVICE_PATH gPciUartDevicePath1 = { | |
| PNPID_DEVICE_PATH_NODE(0x0A03), | |
| PCI_DEVICE_PATH_NODE(5, 20), | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_UART_DP, | |
| { | |
| (UINT8)(sizeof (UART_DEVICE_PATH)), | |
| (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| 0, // Reserved | |
| 921600, // BaudRate | |
| 8, // DataBits | |
| 1, // Parity | |
| 1 // StopBits | |
| }, | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_VENDOR_DP, | |
| { | |
| (UINT8)(sizeof (VENDOR_DEVICE_PATH)), | |
| (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| DEVICE_PATH_MESSAGING_PC_ANSI | |
| }, | |
| gEndEntire | |
| }; | |
| VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { | |
| { | |
| { | |
| HARDWARE_DEVICE_PATH, | |
| HW_VENDOR_DP, | |
| { | |
| (UINT8) (sizeof (VENDOR_DEVICE_PATH)), | |
| (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| EFI_DEBUG_AGENT_GUID, | |
| }, | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_UART_DP, | |
| { | |
| (UINT8) (sizeof (UART_DEVICE_PATH)), | |
| (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| 0, // Reserved | |
| 0, // BaudRate - Default | |
| 0, // DataBits - Default | |
| 0, // Parity - Default | |
| 0, // StopBits - Default | |
| }, | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_VENDOR_DP, | |
| { | |
| (UINT8)(sizeof (VENDOR_DEVICE_PATH)), | |
| (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| DEVICE_PATH_MESSAGING_PC_ANSI | |
| }, | |
| gEndEntire | |
| }; | |
| USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = { | |
| { | |
| { | |
| MESSAGING_DEVICE_PATH, | |
| MSG_USB_CLASS_DP, | |
| { | |
| (UINT8)(sizeof (USB_CLASS_DEVICE_PATH)), | |
| (UINT8)((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) | |
| } | |
| }, | |
| 0xffff, // VendorId - Match any vendor | |
| 0xffff, // ProductId - Match any product | |
| CLASS_HID, // DeviceClass | |
| SUBCLASS_BOOT, // DeviceSubClass | |
| PROTOCOL_KEYBOARD // DeviceProtocol | |
| }, | |
| gEndEntire | |
| }; | |
| // | |
| // Predefined platform default console device path | |
| // | |
| PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { | |
| { (EFI_DEVICE_PATH_PROTOCOL *) &gPciUartDevicePath0, (CONSOLE_OUT | CONSOLE_IN) }, | |
| { (EFI_DEVICE_PATH_PROTOCOL *) &gPciUartDevicePath1, (CONSOLE_OUT | CONSOLE_IN) }, | |
| { (EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath, (CONSOLE_OUT | CONSOLE_IN) }, | |
| { (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, (CONSOLE_IN) }, | |
| { NULL, 0 } | |
| }; | |
| EFI_STATUS | |
| EFIAPI | |
| InitializePlatformBootManagerLib ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ) | |
| { | |
| EFI_GUID *TerminalTypeGuid; | |
| // | |
| // Update UART device path nodes based on UART PCD settings | |
| // | |
| gPciUartDevicePath0.Uart.BaudRate = PcdGet64 (PcdUartDefaultBaudRate); | |
| gPciUartDevicePath0.Uart.DataBits = PcdGet8 (PcdUartDefaultDataBits); | |
| gPciUartDevicePath0.Uart.Parity = PcdGet8 (PcdUartDefaultParity); | |
| gPciUartDevicePath0.Uart.StopBits = PcdGet8 (PcdUartDefaultStopBits); | |
| gPciUartDevicePath1.Uart.BaudRate = PcdGet64 (PcdUartDefaultBaudRate); | |
| gPciUartDevicePath1.Uart.DataBits = PcdGet8 (PcdUartDefaultDataBits); | |
| gPciUartDevicePath1.Uart.Parity = PcdGet8 (PcdUartDefaultParity); | |
| gPciUartDevicePath1.Uart.StopBits = PcdGet8 (PcdUartDefaultStopBits); | |
| // | |
| // Update Vendor device path nodes based on terminal type PCD settings | |
| // | |
| switch (PcdGet8 (PcdDefaultTerminalType)) { | |
| case PCANSITYPE: | |
| TerminalTypeGuid = &gEfiPcAnsiGuid; | |
| break; | |
| case VT100TYPE: | |
| TerminalTypeGuid = &gEfiVT100Guid; | |
| break; | |
| case VT100PLUSTYPE: | |
| TerminalTypeGuid = &gEfiVT100PlusGuid; | |
| break; | |
| case VTUTF8TYPE: | |
| TerminalTypeGuid = &gEfiVTUTF8Guid; | |
| break; | |
| case TTYTERMTYPE: | |
| TerminalTypeGuid = &gEfiTtyTermGuid; | |
| break; | |
| default: | |
| TerminalTypeGuid = &gEfiPcAnsiGuid; | |
| break; | |
| } | |
| CopyGuid (&gPciUartDevicePath0.TerminalType.Guid, TerminalTypeGuid); | |
| CopyGuid (&gPciUartDevicePath1.TerminalType.Guid, TerminalTypeGuid); | |
| return EFI_SUCCESS; | |
| } |