From: AJFISH Date: Thu, 16 Aug 2007 22:15:08 +0000 (+0000) Subject: Updated to use new PCD settings X-Git-Tag: edk2-stable201903~22297 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=6b88ceec9b23366f3a2b5541637a99f03ed7de04 Updated to use new PCD settings git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3664 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf index 7604092a81..fb2727f717 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf +++ b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf @@ -65,7 +65,14 @@ gEfiSerialIoProtocolGuid # PROTOCOL BY_START gEfiDevicePathProtocolGuid # PROTOCOL TO_START - [PcdsFeatureFlag.common] PcdNtEmulatorEnable|gEfiMdeModulePkgTokenSpaceGuid + +[PcdsFixedAtBuild.common] + PcdUartDefaultBaudRate|gEfiMdePkgTokenSpaceGuid|115200 + PcdUartDefaultDataBits|gEfiMdePkgTokenSpaceGuid|8 + PcdUartDefaultParity|gEfiMdePkgTokenSpaceGuid|1 + PcdUartDefaultStopBits|gEfiMdePkgTokenSpaceGuid|1 + + diff --git a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.c b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.c index 1de6fde50a..3eeb1d4d0d 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.c +++ b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.c @@ -27,6 +27,63 @@ EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver = { }; +SERIAL_DEV gSerialDevTempate = { + SERIAL_DEV_SIGNATURE, + NULL, + { // SerialIo + SERIAL_IO_INTERFACE_REVISION, + IsaSerialReset, + IsaSerialSetAttributes, + IsaSerialSetControl, + IsaSerialGetControl, + IsaSerialWrite, + IsaSerialRead, + NULL + }, + { // SerialMode + SERIAL_PORT_DEFAULT_CONTROL_MASK, + SERIAL_PORT_DEFAULT_TIMEOUT, + FixedPcdGet64 (PcdUartDefaultBaudRate), // BaudRate + SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH, + FixedPcdGet8 (PcdUartDefaultDataBits), // DataBits + FixedPcdGet8 (PcdUartDefaultParity), // Parity + FixedPcdGet8 (PcdUartDefaultStopBits) // StopBits + }, + NULL, + NULL, + { // UartDevicePath + { + MESSAGING_DEVICE_PATH, + MSG_UART_DP, + (UINT8) (sizeof (UART_DEVICE_PATH)), + (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8), + }, + 0, + FixedPcdGet64 (PcdUartDefaultBaudRate), + FixedPcdGet8 (PcdUartDefaultDataBits), + FixedPcdGet8 (PcdUartDefaultParity), + FixedPcdGet8 (PcdUartDefaultStopBits) + }, + NULL, + 0, //BaseAddress + { + 0, + 0, + SERIAL_MAX_BUFFER_SIZE, + { 0 } + }, + { + 0, + 0, + SERIAL_MAX_BUFFER_SIZE, + { 0 } + }, + FALSE, + FALSE, + UART16550A, + NULL +}; + /** The user Entry Point for module IsaSerial. The user code starts with this function. @@ -39,7 +96,7 @@ EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver = { **/ EFI_STATUS EFIAPI -InitializeIsaSerial( +InitializeIsaSerial ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) @@ -333,17 +390,15 @@ SerialControllerDriverStart ( // // Initialize the serial device instance // - SerialDevice = AllocatePool (sizeof (SERIAL_DEV)); + SerialDevice = AllocateCopyPool (sizeof (SERIAL_DEV), &gSerialDevTempate); if (SerialDevice == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Error; } - ZeroMem (SerialDevice, sizeof (SERIAL_DEV)); - + SerialDevice->SerialIo.Mode = &(SerialDevice->SerialMode); SerialDevice->IsaIo = IsaIo; SerialDevice->ParentDevicePath = ParentDevicePath; - SerialDevice->ControllerNameTable = NULL; ADD_SERIAL_NAME (SerialDevice, IsaIo); @@ -371,30 +426,6 @@ SerialControllerDriverStart ( goto Error; } - SerialDevice->Signature = SERIAL_DEV_SIGNATURE; - SerialDevice->Type = UART16550A; - SerialDevice->SoftwareLoopbackEnable = FALSE; - SerialDevice->HardwareFlowControl = FALSE; - SerialDevice->Handle = NULL; - SerialDevice->Receive.First = 0; - SerialDevice->Receive.Last = 0; - SerialDevice->Receive.Surplus = SERIAL_MAX_BUFFER_SIZE; - SerialDevice->Transmit.First = 0; - SerialDevice->Transmit.Last = 0; - SerialDevice->Transmit.Surplus = SERIAL_MAX_BUFFER_SIZE; - - // - // Serial I/O - // - SerialDevice->SerialIo.Revision = SERIAL_IO_INTERFACE_REVISION; - SerialDevice->SerialIo.Reset = IsaSerialReset; - SerialDevice->SerialIo.SetAttributes = IsaSerialSetAttributes; - SerialDevice->SerialIo.SetControl = IsaSerialSetControl; - SerialDevice->SerialIo.GetControl = IsaSerialGetControl; - SerialDevice->SerialIo.Write = IsaSerialWrite; - SerialDevice->SerialIo.Read = IsaSerialRead; - SerialDevice->SerialIo.Mode = &(SerialDevice->SerialMode); - if (RemainingDevicePath != NULL) { // // Match the configuration of the RemainingDevicePath. IsHandleSupported() @@ -404,14 +435,9 @@ SerialControllerDriverStart ( CopyMem (&SerialDevice->UartDevicePath, RemainingDevicePath, sizeof (UART_DEVICE_PATH)); } else { // - // Build the device path by appending the UART node to the ParentDevicePath - // from the WinNtIo handle. The Uart setings are zero here, since - // SetAttribute() will update them to match the default setings. + // Use the values from the gSerialDevTempate as no remaining device path was + // passed in. // - ZeroMem (&SerialDevice->UartDevicePath, sizeof (UART_DEVICE_PATH)); - SerialDevice->UartDevicePath.Header.Type = MESSAGING_DEVICE_PATH; - SerialDevice->UartDevicePath.Header.SubType = MSG_UART_DP; - SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) &SerialDevice->UartDevicePath, sizeof (UART_DEVICE_PATH)); } // // Build the device path by appending the UART node to the ParentDevicePath @@ -420,20 +446,17 @@ SerialControllerDriverStart ( // SerialDevice->DevicePath = AppendDevicePathNode ( ParentDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &SerialDevice->UartDevicePath + (EFI_DEVICE_PATH_PROTOCOL *)&SerialDevice->UartDevicePath ); - if (SerialDevice->DevicePath == NULL) { Status = EFI_DEVICE_ERROR; goto Error; } + // // Fill in Serial I/O Mode structure based on either the RemainingDevicePath or defaults. // - SerialDevice->SerialMode.ControlMask = SERIAL_PORT_DEFAULT_CONTROL_MASK; - SerialDevice->SerialMode.Timeout = SERIAL_PORT_DEFAULT_TIMEOUT; SerialDevice->SerialMode.BaudRate = SerialDevice->UartDevicePath.BaudRate; - SerialDevice->SerialMode.ReceiveFifoDepth = SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH; SerialDevice->SerialMode.DataBits = SerialDevice->UartDevicePath.DataBits; SerialDevice->SerialMode.Parity = SerialDevice->UartDevicePath.Parity; SerialDevice->SerialMode.StopBits = SerialDevice->UartDevicePath.StopBits; @@ -1132,7 +1155,7 @@ IsaSerialSetAttributes ( // Check for default settings and fill in actual values. // if (BaudRate == 0) { - BaudRate = SERIAL_PORT_DEFAULT_BAUD_RATE; + BaudRate = FixedPcdGet64 (PcdUartDefaultBaudRate); } if (ReceiveFifoDepth == 0) { @@ -1144,15 +1167,15 @@ IsaSerialSetAttributes ( } if (Parity == DefaultParity) { - Parity = SERIAL_PORT_DEFAULT_PARITY; + Parity = FixedPcdGet8 (PcdUartDefaultParity); } if (DataBits == 0) { - DataBits = SERIAL_PORT_DEFAULT_DATA_BITS; + DataBits = FixedPcdGet8 (PcdUartDefaultDataBits); } if (StopBits == DefaultStopBits) { - StopBits = (EFI_STOP_BITS_TYPE) SERIAL_PORT_DEFAULT_STOP_BITS; + StopBits = (EFI_STOP_BITS_TYPE) FixedPcdGet8 (PcdUartDefaultStopBits); } // // 5 and 6 data bits can not be verified on a 16550A UART @@ -1801,8 +1824,7 @@ IsaSerialPortPresent ( Temp = READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0xAA); - if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0xAA) - { + if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0xAA) { if (!FeaturePcdGet (PcdNtEmulatorEnable)) { Status = FALSE; } @@ -1810,8 +1832,7 @@ IsaSerialPortPresent ( WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0x55); - if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0x55) - { + if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0x55) { if (!FeaturePcdGet (PcdNtEmulatorEnable)) { Status = FALSE; } diff --git a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h index bf78094ac4..0fcc4f3fb0 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h +++ b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h @@ -121,14 +121,18 @@ extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver; // // Serial Driver Defaults // -#define SERIAL_PORT_DEFAULT_BAUD_RATE 115200 #define SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH 1 #define SERIAL_PORT_DEFAULT_TIMEOUT 1000000 + +/* +#define SERIAL_PORT_DEFAULT_BAUD_RATE 115200 #define SERIAL_PORT_DEFAULT_PARITY NoParity #define SERIAL_PORT_DEFAULT_DATA_BITS 8 #define SERIAL_PORT_DEFAULT_STOP_BITS 1 +*/ #define SERIAL_PORT_DEFAULT_CONTROL_MASK 0 + // // (24000000/13)MHz input clock // diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c index 4860a4b210..5b8cb8da0b 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c @@ -20,7 +20,6 @@ Revision History: --*/ - #include "Terminal.h" // @@ -36,6 +35,70 @@ EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding = { }; +EFI_GUID *gTerminalType[] = { + &gEfiPcAnsiGuid, + &gEfiVT100Guid, + &gEfiVT100PlusGuid, + &gEfiVTUTF8Guid +}; + + +TERMINAL_DEV gTerminalDevTemplate = { + TERMINAL_DEV_SIGNATURE, + NULL, + 0, + NULL, + NULL, + { // SimpleTextInput + TerminalConInReset, + TerminalConInReadKeyStroke, + NULL + }, + { // SimpleTextOutput + TerminalConOutReset, + TerminalConOutOutputString, + TerminalConOutTestString, + TerminalConOutQueryMode, + TerminalConOutSetMode, + TerminalConOutSetAttribute, + TerminalConOutClearScreen, + TerminalConOutSetCursorPosition, + TerminalConOutEnableCursor, + NULL + }, + { // SimpleTextOutputMode + 1, // MaxMode + 0, // Mode? + EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK), // Attribute + 0, // CursorColumn + 0, // CursorRow + TRUE // CursorVisible + }, + 0, + { + 0, + 0, + { 0 } + }, + { + 0, + 0, + { 0 } + }, + { + 0, + 0, + { 0 } + }, + NULL, // ControllerNameTable + NULL, + INPUT_STATE_DEFAULT, + RESET_STATE_DEFAULT, + FALSE +}; + + + EFI_STATUS EFIAPI TerminalDriverBindingSupported ( @@ -276,62 +339,48 @@ TerminalDriverBindingStart ( // If RemainingDevicePath is NULL, then create default device path node // if (RemainingDevicePath == NULL) { - DefaultNode = AllocatePool (sizeof (VENDOR_DEVICE_PATH)); + DefaultNode = AllocateZeroPool (sizeof (VENDOR_DEVICE_PATH)); if (DefaultNode == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Error; } - CopyMem (&DefaultNode->Guid, &gEfiPcAnsiGuid, sizeof (EFI_GUID)); - RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL*) DefaultNode; - } - // - // Use the RemainingDevicePath to determine the terminal type - // - Node = (VENDOR_DEVICE_PATH *) RemainingDevicePath; - - if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) { - - TerminalType = PcAnsiType; - - } else if (CompareGuid (&Node->Guid, &gEfiVT100Guid)) { - - TerminalType = VT100Type; - - } else if (CompareGuid (&Node->Guid, &gEfiVT100PlusGuid)) { - - TerminalType = VT100PlusType; - - } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) { - - TerminalType = VTUTF8Type; + TerminalType = FixedPcdGet8 (PcdDefaultTerminalType); + // must be between PcAnsiType (0) and VTUTF8Type (3) + ASSERT (TerminalType <= VTUTF8Type); + CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID)); + RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL*)DefaultNode; } else { - goto Error; + // + // Use the RemainingDevicePath to determine the terminal type + // + Node = (VENDOR_DEVICE_PATH *)RemainingDevicePath; + if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) { + TerminalType = PcAnsiType; + } else if (CompareGuid (&Node->Guid, &gEfiVT100Guid)) { + TerminalType = VT100Type; + } else if (CompareGuid (&Node->Guid, &gEfiVT100PlusGuid)) { + TerminalType = VT100PlusType; + } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) { + TerminalType = VTUTF8Type; + } else { + goto Error; + } } + // // Initialize the Terminal Dev // - TerminalDevice = AllocatePool (sizeof (TERMINAL_DEV)); + TerminalDevice = AllocateCopyPool (sizeof (TERMINAL_DEV), &gTerminalDevTemplate); if (TerminalDevice == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Error; } - ZeroMem (TerminalDevice, sizeof (TERMINAL_DEV)); - - TerminalDevice->Signature = TERMINAL_DEV_SIGNATURE; - TerminalDevice->TerminalType = TerminalType; - TerminalDevice->SerialIo = SerialIo; - // - // Simple Input Protocol - // - TerminalDevice->SimpleInput.Reset = TerminalConInReset; - TerminalDevice->SimpleInput.ReadKeyStroke = TerminalConInReadKeyStroke; - Status = gBS->CreateEvent ( EVT_NOTIFY_WAIT, TPL_NOTIFY, @@ -342,6 +391,7 @@ TerminalDriverBindingStart ( if (EFI_ERROR (Status)) { goto Error; } + // // initialize the FIFO buffer used for accommodating // the pre-read pending characters @@ -355,7 +405,6 @@ TerminalDriverBindingStart ( // keystroke response performance issue // Mode = TerminalDevice->SerialIo->Mode; - SerialInTimeOut = 0; if (Mode->BaudRate != 0) { SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN) Mode->BaudRate; @@ -409,24 +458,8 @@ TerminalDriverBindingStart ( // // Simple Text Output Protocol // - TerminalDevice->SimpleTextOutput.Reset = TerminalConOutReset; - TerminalDevice->SimpleTextOutput.OutputString = TerminalConOutOutputString; - TerminalDevice->SimpleTextOutput.TestString = TerminalConOutTestString; - TerminalDevice->SimpleTextOutput.QueryMode = TerminalConOutQueryMode; - TerminalDevice->SimpleTextOutput.SetMode = TerminalConOutSetMode; - TerminalDevice->SimpleTextOutput.SetAttribute = TerminalConOutSetAttribute; - TerminalDevice->SimpleTextOutput.ClearScreen = TerminalConOutClearScreen; - TerminalDevice->SimpleTextOutput.SetCursorPosition = TerminalConOutSetCursorPosition; - TerminalDevice->SimpleTextOutput.EnableCursor = TerminalConOutEnableCursor; TerminalDevice->SimpleTextOutput.Mode = &TerminalDevice->SimpleTextOutputMode; - TerminalDevice->SimpleTextOutputMode.MaxMode = 1; - // - // For terminal devices, cursor is always visible - // - TerminalDevice->SimpleTextOutputMode.CursorVisible = TRUE; - TerminalDevice->SimpleTextOutputMode.Attribute = EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK); - Status = TerminalDevice->SimpleTextOutput.Reset ( &TerminalDevice->SimpleTextOutput, FALSE @@ -450,11 +483,6 @@ TerminalDriverBindingStart ( if (EFI_ERROR (Status)) { goto ReportError; } - // - // - // - TerminalDevice->InputState = INPUT_STATE_DEFAULT; - TerminalDevice->ResetState = RESET_STATE_DEFAULT; Status = gBS->CreateEvent ( EVT_TIMER, diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h index 5a7dc0e3e7..c4f5ac19f3 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h @@ -74,7 +74,6 @@ typedef struct { UINT8 TerminalType; EFI_SERIAL_IO_PROTOCOL *SerialIo; EFI_DEVICE_PATH_PROTOCOL *DevicePath; - VENDOR_DEVICE_PATH Node; EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleInput; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOutput; EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutputMode; @@ -85,7 +84,7 @@ typedef struct { EFI_UNICODE_STRING_TABLE *ControllerNameTable; EFI_EVENT TwoSecondTimeOut; UINT32 InputState; - UINT32 ResetState; + UINT32 ResetState; // // Esc could not be output to the screen by user, @@ -94,7 +93,7 @@ typedef struct { // This boolean is used by the terminal driver only // to indicate whether the Esc could be sent or not. // - BOOLEAN OutputEscChar; + BOOLEAN OutputEscChar; } TERMINAL_DEV; #define INPUT_STATE_DEFAULT 0x00 diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf index 9368bf4377..ad0177ebbb 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf @@ -73,8 +73,10 @@ gEfiSimpleTextInProtocolGuid # PROTOCOL BY_START gEfiSimpleTextOutProtocolGuid # PROTOCOL BY_START -[PcdsFixedAtBuild] +[PcdsDynamic] PcdStatusCodeValueRemoteConsoleError|gEfiMdePkgTokenSpaceGuid PcdStatusCodeValueRemoteConsoleReset|gEfiMdePkgTokenSpaceGuid PcdStatusCodeValueRemoteConsoleInputError|gEfiMdePkgTokenSpaceGuid PcdStatusCodeValueRemoteConsoleOutputError|gEfiMdePkgTokenSpaceGuid + PcdDefaultTerminalType|gEfiMdePkgTokenSpaceGuid +