//\r
EfiBootManagerDispatchDeferredImages ();\r
\r
- PlatformInitializeConsole (gPlatformConsole);\r
+ PlatformInitializeConsole (\r
+ XenDetected() ? gXenPlatformConsole : gPlatformConsole);\r
PcdStatus = PcdSet16S (PcdPlatformBootTimeOut,\r
GetFrontPageTimeoutFromQemu ());\r
ASSERT_RETURN_ERROR (PcdStatus);\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId\r
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut\r
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate ## CONSUMES\r
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits ## CONSUMES\r
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity ## CONSUMES\r
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits ## CONSUMES\r
\r
[Pcd.IA32, Pcd.X64]\r
gEfiMdePkgTokenSpaceGuid.PcdFSBClock\r
\r
#include "BdsPlatform.h"\r
#include <Guid/QemuRamfb.h>\r
+#include <Guid/SerialPortLibVendor.h>\r
\r
//\r
-// Debug Agent UART Device Path structure\r
+// Vendor UART Device Path structure\r
//\r
-#pragma pack(1)\r
+#pragma pack (1)\r
typedef struct {\r
VENDOR_DEVICE_PATH VendorHardware;\r
UART_DEVICE_PATH Uart;\r
VENDOR_DEVICE_PATH TerminalType;\r
EFI_DEVICE_PATH_PROTOCOL End;\r
} VENDOR_UART_DEVICE_PATH;\r
-#pragma pack()\r
+#pragma pack ()\r
\r
//\r
// USB Keyboard Device Path structure\r
gEndEntire\r
};\r
\r
+STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = {\r
+ {\r
+ {\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_VENDOR_DP,\r
+ {\r
+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ }\r
+ },\r
+ EDKII_SERIAL_PORT_LIB_VENDOR_GUID\r
+ },\r
+ {\r
+ {\r
+ MESSAGING_DEVICE_PATH,\r
+ MSG_UART_DP,\r
+ {\r
+ (UINT8) (sizeof (UART_DEVICE_PATH)),\r
+ (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)\r
+ }\r
+ },\r
+ 0,\r
+ FixedPcdGet64 (PcdUartDefaultBaudRate),\r
+ FixedPcdGet8 (PcdUartDefaultDataBits),\r
+ FixedPcdGet8 (PcdUartDefaultParity),\r
+ FixedPcdGet8 (PcdUartDefaultStopBits),\r
+ },\r
+ gPcAnsiTerminal,\r
+ gEndEntire\r
+};\r
+\r
//\r
// Predefined platform default console device path\r
//\r
}\r
};\r
\r
+PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = {\r
+ {\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&gXenConsoleDevicePath,\r
+ (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)\r
+ },\r
+ {\r
+ NULL,\r
+ 0\r
+ }\r
+};\r
+\r
//\r
// Predefined platform connect sequence\r
//\r
OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
OvmfPkg/XenBusDxe/XenBusDxe.inf\r
OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
+ MdeModulePkg/Universal/SerialDxe/SerialDxe.inf {\r
+ <LibraryClasses>\r
+ SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf\r
+ }\r
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf\r
MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf\r
MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf\r
INF OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf\r
INF OvmfPkg/XenBusDxe/XenBusDxe.inf\r
INF OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf\r
+INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf\r
\r
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf\r
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf\r