/**@file\r
- Serial driver for standard UARTS on an ISA bus.\r
+ Serial driver for standard UARTS on an ISA bus.\r
\r
Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
All rights reserved. This program and the accompanying materials\r
};\r
\r
\r
+SERIAL_DEV gSerialDevTempate = {\r
+ SERIAL_DEV_SIGNATURE,\r
+ NULL,\r
+ { // SerialIo\r
+ SERIAL_IO_INTERFACE_REVISION,\r
+ IsaSerialReset,\r
+ IsaSerialSetAttributes,\r
+ IsaSerialSetControl,\r
+ IsaSerialGetControl,\r
+ IsaSerialWrite,\r
+ IsaSerialRead,\r
+ NULL\r
+ },\r
+ { // SerialMode\r
+ SERIAL_PORT_DEFAULT_CONTROL_MASK,\r
+ SERIAL_PORT_DEFAULT_TIMEOUT,\r
+ FixedPcdGet64 (PcdUartDefaultBaudRate), // BaudRate\r
+ SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH,\r
+ FixedPcdGet8 (PcdUartDefaultDataBits), // DataBits\r
+ FixedPcdGet8 (PcdUartDefaultParity), // Parity\r
+ FixedPcdGet8 (PcdUartDefaultStopBits) // StopBits\r
+ },\r
+ NULL,\r
+ NULL,\r
+ { // UartDevicePath\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
+ NULL,\r
+ 0, //BaseAddress\r
+ {\r
+ 0,\r
+ 0,\r
+ SERIAL_MAX_BUFFER_SIZE,\r
+ { 0 }\r
+ },\r
+ {\r
+ 0,\r
+ 0,\r
+ SERIAL_MAX_BUFFER_SIZE,\r
+ { 0 }\r
+ },\r
+ FALSE,\r
+ FALSE,\r
+ UART16550A,\r
+ NULL\r
+};\r
+\r
/**\r
The user Entry Point for module IsaSerial. The user code starts with this function.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeIsaSerial(\r
+InitializeIsaSerial (\r
IN EFI_HANDLE ImageHandle,\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
//\r
// Install driver model protocol(s).\r
//\r
- Status = EfiLibInstallAllDriverProtocols (\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gSerialControllerDriver,\r
ImageHandle,\r
&gIsaSerialComponentName,\r
- NULL,\r
- NULL\r
+ &gIsaSerialComponentName2\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Status;\r
}\r
\r
+/**\r
+ Check to see if this driver supports the given controller\r
\r
+ @param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param Controller - The handle of the controller to test.\r
+ @param RemainingDevicePath - A pointer to the remaining portion of a device path.\r
+\r
+ @return EFI_SUCCESS - This driver can support the given controller\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SerialControllerDriverSupported (\r
IN EFI_HANDLE Controller,\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
-/*++\r
\r
- Routine Description:\r
-\r
- Check to see if this driver supports the given controller\r
-\r
- Arguments:\r
-\r
- This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
- Controller - The handle of the controller to test.\r
- RemainingDevicePath - A pointer to the remaining portion of a device path.\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - This driver can support the given controller\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
return Status;\r
}\r
\r
+/**\r
+ Start to management the controller passed in\r
+\r
+ @param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param Controller - The handle of the controller to test.\r
+ @param RemainingDevicePath - A pointer to the remaining portion of a device path.\r
+\r
+ @return EFI_SUCCESS - Driver is started successfully\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SerialControllerDriverStart (\r
IN EFI_HANDLE Controller,\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Start to management the controller passed in\r
-\r
- Arguments:\r
\r
- This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
- Controller - The handle of the controller to test.\r
- RemainingDevicePath - A pointer to the remaining portion of a device path.\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Driver is started successfully\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
EFI_ISA_IO_PROTOCOL *IsaIo;\r
//\r
// Initialize the serial device instance\r
//\r
- SerialDevice = AllocatePool (sizeof (SERIAL_DEV));\r
+ SerialDevice = AllocateCopyPool (sizeof (SERIAL_DEV), &gSerialDevTempate);\r
if (SerialDevice == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Error;\r
}\r
\r
- ZeroMem (SerialDevice, sizeof (SERIAL_DEV));\r
-\r
+ SerialDevice->SerialIo.Mode = &(SerialDevice->SerialMode);\r
SerialDevice->IsaIo = IsaIo;\r
SerialDevice->ParentDevicePath = ParentDevicePath;\r
- SerialDevice->ControllerNameTable = NULL;\r
\r
ADD_SERIAL_NAME (SerialDevice, IsaIo);\r
\r
goto Error;\r
}\r
\r
- SerialDevice->Signature = SERIAL_DEV_SIGNATURE;\r
- SerialDevice->Type = UART16550A;\r
- SerialDevice->SoftwareLoopbackEnable = FALSE;\r
- SerialDevice->HardwareFlowControl = FALSE;\r
- SerialDevice->Handle = NULL;\r
- SerialDevice->Receive.First = 0;\r
- SerialDevice->Receive.Last = 0;\r
- SerialDevice->Receive.Surplus = SERIAL_MAX_BUFFER_SIZE;\r
- SerialDevice->Transmit.First = 0;\r
- SerialDevice->Transmit.Last = 0;\r
- SerialDevice->Transmit.Surplus = SERIAL_MAX_BUFFER_SIZE;\r
-\r
- //\r
- // Serial I/O\r
- //\r
- SerialDevice->SerialIo.Revision = SERIAL_IO_INTERFACE_REVISION;\r
- SerialDevice->SerialIo.Reset = IsaSerialReset;\r
- SerialDevice->SerialIo.SetAttributes = IsaSerialSetAttributes;\r
- SerialDevice->SerialIo.SetControl = IsaSerialSetControl;\r
- SerialDevice->SerialIo.GetControl = IsaSerialGetControl;\r
- SerialDevice->SerialIo.Write = IsaSerialWrite;\r
- SerialDevice->SerialIo.Read = IsaSerialRead;\r
- SerialDevice->SerialIo.Mode = &(SerialDevice->SerialMode);\r
-\r
if (RemainingDevicePath != NULL) {\r
//\r
// Match the configuration of the RemainingDevicePath. IsHandleSupported()\r
CopyMem (&SerialDevice->UartDevicePath, RemainingDevicePath, sizeof (UART_DEVICE_PATH));\r
} else {\r
//\r
- // Build the device path by appending the UART node to the ParentDevicePath\r
- // from the WinNtIo handle. The Uart setings are zero here, since\r
- // SetAttribute() will update them to match the default setings.\r
+ // Use the values from the gSerialDevTempate as no remaining device path was\r
+ // passed in.\r
//\r
- ZeroMem (&SerialDevice->UartDevicePath, sizeof (UART_DEVICE_PATH));\r
- SerialDevice->UartDevicePath.Header.Type = MESSAGING_DEVICE_PATH;\r
- SerialDevice->UartDevicePath.Header.SubType = MSG_UART_DP;\r
- SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) &SerialDevice->UartDevicePath, sizeof (UART_DEVICE_PATH));\r
}\r
//\r
// Build the device path by appending the UART node to the ParentDevicePath\r
//\r
SerialDevice->DevicePath = AppendDevicePathNode (\r
ParentDevicePath,\r
- (EFI_DEVICE_PATH_PROTOCOL *) &SerialDevice->UartDevicePath\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&SerialDevice->UartDevicePath\r
);\r
-\r
if (SerialDevice->DevicePath == NULL) {\r
Status = EFI_DEVICE_ERROR;\r
goto Error;\r
}\r
+\r
//\r
// Fill in Serial I/O Mode structure based on either the RemainingDevicePath or defaults.\r
//\r
- SerialDevice->SerialMode.ControlMask = SERIAL_PORT_DEFAULT_CONTROL_MASK;\r
- SerialDevice->SerialMode.Timeout = SERIAL_PORT_DEFAULT_TIMEOUT;\r
SerialDevice->SerialMode.BaudRate = SerialDevice->UartDevicePath.BaudRate;\r
- SerialDevice->SerialMode.ReceiveFifoDepth = SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH;\r
SerialDevice->SerialMode.DataBits = SerialDevice->UartDevicePath.DataBits;\r
SerialDevice->SerialMode.Parity = SerialDevice->UartDevicePath.Parity;\r
SerialDevice->SerialMode.StopBits = SerialDevice->UartDevicePath.StopBits;\r
return Status;\r
}\r
\r
+/**\r
+ Disconnect this driver with the controller, uninstall related protocol instance\r
+\r
+ @param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param Controller - The handle of the controller to test.\r
+ @param NumberOfChildren - Number of child device.\r
+ @param ChildHandleBuffer - A pointer to the remaining portion of a device path.\r
+\r
+ @retval EFI_SUCCESS - Operation successfully\r
+ @retval EFI_DEVICE_ERROR - Cannot stop the driver successfully\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SerialControllerDriverStop (\r
IN UINTN NumberOfChildren,\r
IN EFI_HANDLE *ChildHandleBuffer\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Disconnect this driver with the controller, uninstall related protocol instance\r
-\r
- Arguments:\r
-\r
- This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
- Controller - The handle of the controller to test.\r
- NumberOfChildren - Number of child device.\r
- RemainingDevicePath - A pointer to the remaining portion of a device path.\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Operation successfully\r
- EFI_DEVICE_ERROR - Cannot stop the driver successfully\r
\r
---*/\r
{\r
EFI_STATUS Status;\r
UINTN Index;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Detect whether specific FIFO is full or not\r
+\r
+ @param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+\r
+ @return whether specific FIFO is full or not\r
+\r
+**/\r
BOOLEAN\r
IsaSerialFifoFull (\r
IN SERIAL_DEV_FIFO *Fifo\r
)\r
-/*++\r
-\r
- Routine Description:\r
\r
- Detect whether specific FIFO is full or not\r
-\r
- Arguments:\r
-\r
- Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
-\r
- Returns:\r
-\r
- TRUE - the FIFO is full\r
- FALSE - the FIFO is not full\r
-\r
---*/\r
{\r
if (Fifo->Surplus == 0) {\r
return TRUE;\r
return FALSE;\r
}\r
\r
+/**\r
+ Detect whether specific FIFO is empty or not\r
+\r
+ \r
+ @param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+\r
+ @return whether specific FIFO is empty or not\r
+\r
+**/\r
BOOLEAN\r
IsaSerialFifoEmpty (\r
IN SERIAL_DEV_FIFO *Fifo\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Detect whether specific FIFO is empty or not\r
-\r
- Arguments:\r
-\r
- Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
\r
- Returns:\r
-\r
- TRUE - the FIFO is empty\r
- FALSE - the FIFO is not empty\r
-\r
---*/\r
{\r
if (Fifo->Surplus == SERIAL_MAX_BUFFER_SIZE) {\r
return TRUE;\r
return FALSE;\r
}\r
\r
+/**\r
+ Add data to specific FIFO\r
+\r
+ @param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+ @param Data - the data added to FIFO\r
+\r
+ @retval EFI_SUCCESS - Add data to specific FIFO successfully\r
+ @retval EFI_OUT_OF_RESOURCE - Failed to add data because FIFO is already full\r
+\r
+**/\r
EFI_STATUS\r
IsaSerialFifoAdd (\r
IN SERIAL_DEV_FIFO *Fifo,\r
IN UINT8 Data\r
)\r
-/*++\r
\r
- Routine Description:\r
-\r
- Add data to specific FIFO\r
-\r
- Arguments:\r
-\r
- Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
- Data - the data added to FIFO\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Add data to specific FIFO successfully\r
- EFI_OUT_OF_RESOURCE - Failed to add data because FIFO is already full\r
-\r
---*/\r
{\r
//\r
// if FIFO full can not add data\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Remove data from specific FIFO\r
+\r
+ @param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+ @param Data - the data removed from FIFO\r
+\r
+ @retval EFI_SUCCESS - Remove data from specific FIFO successfully\r
+ @retval EFI_OUT_OF_RESOURCE - Failed to remove data because FIFO is empty\r
+\r
+**/\r
EFI_STATUS\r
IsaSerialFifoRemove (\r
IN SERIAL_DEV_FIFO *Fifo,\r
OUT UINT8 *Data\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Remove data from specific FIFO\r
-\r
- Arguments:\r
\r
- Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO\r
- Data - the data removed from FIFO\r
-\r
- Returns:\r
- EFI_SUCCESS - Remove data from specific FIFO successfully\r
- EFI_OUT_OF_RESOURCE - Failed to remove data because FIFO is empty\r
-\r
---*/\r
{\r
//\r
// if FIFO is empty, no data can remove\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Reads and writes all avaliable data.\r
+\r
+ @param SerialDevice - The device to flush\r
+\r
+ @retval EFI_SUCCESS - Data was read/written successfully.\r
+ @retval EFI_OUT_OF_RESOURCE - Failed because software receive FIFO is full. Note, when\r
+ this happens, pending writes are not done.\r
+\r
+**/\r
EFI_STATUS\r
IsaSerialReceiveTransmit (\r
IN SERIAL_DEV *SerialDevice\r
)\r
-/*++\r
\r
- Routine Description:\r
-\r
- Reads and writes all avaliable data.\r
-\r
- Arguments:\r
-\r
- SerialDevice - The device to flush\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Data was read/written successfully.\r
- EFI_OUT_OF_RESOURCE - Failed because software receive FIFO is full. Note, when\r
- this happens, pending writes are not done.\r
-\r
---*/\r
{\r
SERIAL_PORT_LSR Lsr;\r
UINT8 Data;\r
do {\r
Lsr.Data = READ_LSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
\r
- if (FeaturePcdGet (PcdNtEmulatorEnable)) {\r
- //\r
- // This is required for NT to avoid a forever-spin...\r
- // This would be better if READ_LSR was a polling operation\r
- // that would timeout.\r
- //\r
- Lsr.Bits.THRE = 1;\r
- }\r
//\r
// Flush incomming data to prevent a an overrun during a long write\r
//\r
\r
return EFI_SUCCESS;\r
}\r
+\r
//\r
// Interface Functions\r
//\r
+/**\r
+ Reset serial device\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+\r
+ @retval EFI_SUCCESS - Reset successfully\r
+ @retval EFI_DEVICE_ERROR - Failed to reset\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialReset (\r
IN EFI_SERIAL_IO_PROTOCOL *This\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Reset serial device\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Reset successfully\r
- EFI_DEVICE_ERROR - Failed to reset\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
SERIAL_DEV *SerialDevice;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Set new attributes to a serial device\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+ @param BaudRate - The baudrate of the serial device\r
+ @param ReceiveFifoDepth - The depth of receive FIFO buffer\r
+ @param Timeout - The request timeout for a single char\r
+ @param Parity - The type of parity used in serial device\r
+ @param DataBits - Number of databits used in serial device\r
+ @param StopBits - Number of stopbits used in serial device\r
+\r
+ @retval EFI_SUCCESS - The new attributes were set\r
+ @retval EFI_INVALID_PARAMETERS - One or more attributes have an unsupported value\r
+ @retval EFI_UNSUPPORTED - Data Bits can not set to 5 or 6\r
+ @retval EFI_DEVICE_ERROR - The serial device is not functioning correctly (no return)\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialSetAttributes (\r
IN UINT8 DataBits,\r
IN EFI_STOP_BITS_TYPE StopBits\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Set new attributes to a serial device\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
- BaudRate - The baudrate of the serial device\r
- ReceiveFifoDepth - The depth of receive FIFO buffer\r
- Timeout - The request timeout for a single char\r
- Parity - The type of parity used in serial device\r
- DataBits - Number of databits used in serial device\r
- StopBits - Number of stopbits used in serial device\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - The new attributes were set\r
- EFI_INVALID_PARAMETERS - One or more attributes have an unsupported value\r
- EFI_UNSUPPORTED - Data Bits can not set to 5 or 6\r
- EFI_DEVICE_ERROR - The serial device is not functioning correctly (no return)\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
SERIAL_DEV *SerialDevice;\r
// Check for default settings and fill in actual values.\r
//\r
if (BaudRate == 0) {\r
- BaudRate = SERIAL_PORT_DEFAULT_BAUD_RATE;\r
+ BaudRate = FixedPcdGet64 (PcdUartDefaultBaudRate);\r
}\r
\r
if (ReceiveFifoDepth == 0) {\r
}\r
\r
if (Parity == DefaultParity) {\r
- Parity = SERIAL_PORT_DEFAULT_PARITY;\r
+ Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);\r
}\r
\r
if (DataBits == 0) {\r
- DataBits = SERIAL_PORT_DEFAULT_DATA_BITS;\r
+ DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);\r
}\r
\r
if (StopBits == DefaultStopBits) {\r
- StopBits = (EFI_STOP_BITS_TYPE) SERIAL_PORT_DEFAULT_STOP_BITS;\r
+ StopBits = (EFI_STOP_BITS_TYPE) FixedPcdGet8 (PcdUartDefaultStopBits);\r
}\r
//\r
// 5 and 6 data bits can not be verified on a 16550A UART\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Set Control Bits\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+ @param Control - Control bits that can be settable\r
+\r
+ @retval EFI_SUCCESS - New Control bits were set successfully\r
+ @retval EFI_UNSUPPORTED - The Control bits wanted to set are not supported\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialSetControl (\r
IN EFI_SERIAL_IO_PROTOCOL *This,\r
IN UINT32 Control\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Set Control Bits\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
- Control - Control bits that can be settable\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - New Control bits were set successfully\r
- EFI_UNSUPPORTED - The Control bits wanted to set are not supported\r
-\r
---*/\r
{\r
SERIAL_DEV *SerialDevice;\r
SERIAL_PORT_MCR Mcr;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Get ControlBits\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+ @param Control - Control signals of the serial device\r
+\r
+ @retval EFI_SUCCESS - Get Control signals successfully\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialGetControl (\r
IN EFI_SERIAL_IO_PROTOCOL *This,\r
OUT UINT32 *Control\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Get ControlBits\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
- Control - Control signals of the serial device\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - Get Control signals successfully\r
-\r
---*/\r
{\r
SERIAL_DEV *SerialDevice;\r
SERIAL_PORT_MSR Msr;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Write the specified number of bytes to serial device\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+ @param BufferSize - On input the size of Buffer, on output the amount of\r
+ data actually written\r
+ @param Buffer - The buffer of data to write\r
+\r
+ @retval EFI_SUCCESS - The data were written successfully\r
+ @retval EFI_DEVICE_ERROR - The device reported an error\r
+ @retval EFI_TIMEOUT - The write operation was stopped due to timeout\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialWrite (\r
IN OUT UINTN *BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Write the specified number of bytes to serial device\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
- BufferSize - On input the size of Buffer, on output the amount of\r
- data actually written\r
- Buffer - The buffer of data to write\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - The data were written successfully\r
- EFI_DEVICE_ERROR - The device reported an error\r
- EFI_TIMEOUT - The write operation was stopped due to timeout\r
-\r
---*/\r
{\r
SERIAL_DEV *SerialDevice;\r
UINT8 *CharBuffer;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Read the specified number of bytes from serial device\r
+\r
+ @param This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+ @param BufferSize - On input the size of Buffer, on output the amount of\r
+ data returned in buffer\r
+ @param Buffer - The buffer to return the data into\r
+\r
+ @retval EFI_SUCCESS - The data were read successfully\r
+ @retval EFI_DEVICE_ERROR - The device reported an error\r
+ @retval EFI_TIMEOUT - The read operation was stopped due to timeout\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
IsaSerialRead (\r
IN OUT UINTN *BufferSize,\r
OUT VOID *Buffer\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Read the specified number of bytes from serial device\r
-\r
- Arguments:\r
-\r
- This - Pointer to EFI_SERIAL_IO_PROTOCOL\r
- BufferSize - On input the size of Buffer, on output the amount of\r
- data returned in buffer\r
- Buffer - The buffer to return the data into\r
-\r
- Returns:\r
-\r
- EFI_SUCCESS - The data were read successfully\r
- EFI_DEVICE_ERROR - The device reported an error\r
- EFI_TIMEOUT - The read operation was stopped due to timeout\r
-\r
---*/\r
{\r
SERIAL_DEV *SerialDevice;\r
UINT32 Index;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Use scratchpad register to test if this serial port is present\r
+\r
+ @param SerialDevice - Pointer to serial device structure\r
+\r
+ @return if this serial port is present\r
+**/\r
BOOLEAN\r
IsaSerialPortPresent (\r
IN SERIAL_DEV *SerialDevice\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Use scratchpad register to test if this serial port is present\r
-\r
- Arguments:\r
-\r
- SerialDevice - Pointer to serial device structure\r
-\r
- Returns:\r
-\r
- TRUE - The serial port is present\r
- FALSE - The serial port is NOT present\r
\r
---*/\r
{\r
UINT8 Temp;\r
BOOLEAN Status;\r
Temp = READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0xAA);\r
\r
- if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0xAA)\r
- {\r
- if (!FeaturePcdGet (PcdNtEmulatorEnable)) {\r
- Status = FALSE;\r
- }\r
+ if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0xAA) {\r
+ Status = FALSE;\r
}\r
\r
WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0x55);\r
\r
- if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0x55)\r
- {\r
- if (!FeaturePcdGet (PcdNtEmulatorEnable)) {\r
- Status = FALSE;\r
- }\r
+ if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0x55) {\r
+ Status = FALSE;\r
}\r
//\r
// Restore SCR\r
return Status;\r
}\r
\r
+/**\r
+ Use IsaIo protocol to read serial port\r
+\r
+ @param IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance\r
+ @param BaseAddress - Serial port register group base address\r
+ @param Offset - Offset in register group\r
+\r
+ @return Data read from serial port\r
+\r
+**/\r
UINT8\r
IsaSerialReadPort (\r
IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
IN UINT16 BaseAddress,\r
IN UINT32 Offset\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Use IsaIo protocol to read serial port\r
-\r
- Arguments:\r
-\r
- IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance\r
- BaseAddress - Serial port register group base address\r
- Offset - Offset in register group\r
-\r
- Returns:\r
-\r
- Data read from serial port\r
-\r
---*/\r
{\r
UINT8 Data;\r
\r
return Data;\r
}\r
\r
+/**\r
+ Use IsaIo protocol to write serial port\r
+\r
+ @param IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance\r
+ @param BaseAddress - Serial port register group base address\r
+ @param Offset - Offset in register group\r
+ @param Data - data which is to be written to some serial port register\r
+\r
+**/\r
VOID\r
IsaSerialWritePort (\r
IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
IN UINT32 Offset,\r
IN UINT8 Data\r
)\r
-/*++\r
-\r
- Routine Description:\r
-\r
- Use IsaIo protocol to write serial port\r
-\r
- Arguments:\r
-\r
- IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance\r
- BaseAddress - Serial port register group base address\r
- Offset - Offset in register group\r
- Data - data which is to be written to some serial port register\r
-\r
- Returns:\r
-\r
- None\r
-\r
---*/\r
{\r
//\r
// Use IsaIo to access IO\r