diff --git a/ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c b/ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c index a40e269d07..7e74a05df7 100644 --- a/ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c +++ b/ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c @@ -236,20 +236,39 @@ PL011UartSetControl ( } /** - Get the serial device control bits. - @param UartBase The base address of the PL011 UART. - @param Control Control signals read from the serial device. + Retrieve the status of the control bits on a serial device. - @retval EFI_SUCCESS The control bits were read from the serial device. - @retval EFI_DEVICE_ERROR The serial device is not functioning correctly. + @param[in] UartBase UART registers base address + @param[out] Control Status of the control bits on a serial device : + + . EFI_SERIAL_DATA_CLEAR_TO_SEND, EFI_SERIAL_DATA_SET_READY, + EFI_SERIAL_RING_INDICATE, EFI_SERIAL_CARRIER_DETECT, + EFI_SERIAL_REQUEST_TO_SEND, EFI_SERIAL_DATA_TERMINAL_READY + are all related to the DTE (Data Terminal Equipment) and + DCE (Data Communication Equipment) modes of operation of + the serial device. + . EFI_SERIAL_INPUT_BUFFER_EMPTY : equal to one if the receive + buffer is empty, 0 otherwise. + . EFI_SERIAL_OUTPUT_BUFFER_EMPTY : equal to one if the transmit + buffer is empty, 0 otherwise. + . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE : equal to one if the + hardware loopback is enabled (the ouput feeds the receive + buffer), 0 otherwise. + . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : equal to one if a + loopback is accomplished by software, 0 otherwise. + . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE : equal to one if the + hardware flow control based on CTS (Clear To Send) and RTS + (Ready To Send) control signals is enabled, 0 otherwise. + + @retval RETURN_SUCCESS The control bits were read from the serial device. **/ RETURN_STATUS EFIAPI PL011UartGetControl ( - IN UINTN UartBase, - OUT UINT32 *Control + IN UINTN UartBase, + OUT UINT32 *Control ) { UINT32 FlagRegister; @@ -293,22 +312,15 @@ PL011UartGetControl ( *Control |= EFI_SERIAL_OUTPUT_BUFFER_EMPTY; } - if ((ControlRegister & (PL011_UARTCR_CTSEN | PL011_UARTCR_RTSEN)) == (PL011_UARTCR_CTSEN | PL011_UARTCR_RTSEN)) { + if ((ControlRegister & (PL011_UARTCR_CTSEN | PL011_UARTCR_RTSEN)) + == (PL011_UARTCR_CTSEN | PL011_UARTCR_RTSEN)) { *Control |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE; } -#ifdef NEVER - // ToDo: Implement EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE if ((ControlRegister & PL011_UARTCR_LBE) == PL011_UARTCR_LBE) { *Control |= EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE; } - // ToDo: Implement EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE - if (SoftwareLoopbackEnable) { - *Control |= EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE; - } -#endif - return RETURN_SUCCESS; } diff --git a/ArmPlatformPkg/Include/Drivers/PL011Uart.h b/ArmPlatformPkg/Include/Drivers/PL011Uart.h index f8e4a083aa..6675cefeb3 100644 --- a/ArmPlatformPkg/Include/Drivers/PL011Uart.h +++ b/ArmPlatformPkg/Include/Drivers/PL011Uart.h @@ -134,20 +134,40 @@ PL011UartSetControl ( ); /** - Get the serial device control bits. - @param UartBase The base address of the PL011 UART. - @param Control Control signals read from the serial device. + Retrieve the status of the control bits on a serial device. - @retval EFI_SUCCESS The control bits were read from the serial device. - @retval EFI_DEVICE_ERROR The serial device is not functioning correctly. + @param[in] UartBase UART registers base address + @param[out] Control Status of the control bits on a serial device : + + . EFI_SERIAL_DATA_CLEAR_TO_SEND, EFI_SERIAL_DATA_SET_READY, + EFI_SERIAL_RING_INDICATE, EFI_SERIAL_CARRIER_DETECT, + EFI_SERIAL_REQUEST_TO_SEND, EFI_SERIAL_DATA_TERMINAL_READY + are all related to the DTE (Data Terminal Equipment) and + DCE (Data Communication Equipment) modes of operation of + the serial device. + . EFI_SERIAL_INPUT_BUFFER_EMPTY : equal to one if the receive + buffer is empty, 0 otherwise. + . EFI_SERIAL_OUTPUT_BUFFER_EMPTY : equal to one if the transmit + buffer is empty, 0 otherwise. + . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE : equal to one if the + hardware loopback is enabled (the ouput feeds the receive + buffer), 0 otherwise. + . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : equal to one if a + loopback is accomplished by software, 0 otherwise. + . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE : equal to one if the + hardware flow control based on CTS (Clear To Send) and RTS + (Ready To Send) control signals is enabled, 0 otherwise. + + + @retval RETURN_SUCCESS The control bits were read from the serial device. **/ RETURN_STATUS EFIAPI PL011UartGetControl ( - IN UINTN UartBase, - OUT UINT32 *Control + IN UINTN UartBase, + OUT UINT32 *Control ); /** diff --git a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c index 7b3cd89298..44fe78f4f4 100644 --- a/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c +++ b/ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c @@ -100,20 +100,38 @@ SerialPortSetControl ( } /** - Get the serial device control bits. - @param Control Control signals read from the serial device. + Retrieve the status of the control bits on a serial device. - @retval EFI_SUCCESS The control bits were read from the serial device. - @retval EFI_DEVICE_ERROR The serial device is not functioning correctly. + @param[out] Control Status of the control bits on a serial device : + + . EFI_SERIAL_DATA_CLEAR_TO_SEND, EFI_SERIAL_DATA_SET_READY, + EFI_SERIAL_RING_INDICATE, EFI_SERIAL_CARRIER_DETECT, + EFI_SERIAL_REQUEST_TO_SEND, EFI_SERIAL_DATA_TERMINAL_READY + are all related to the DTE (Data Terminal Equipment) and + DCE (Data Communication Equipment) modes of operation of + the serial device. + . EFI_SERIAL_INPUT_BUFFER_EMPTY : equal to one if the receive + buffer is empty, 0 otherwise. + . EFI_SERIAL_OUTPUT_BUFFER_EMPTY : equal to one if the transmit + buffer is empty, 0 otherwise. + . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE : equal to one if the + hardware loopback is enabled (the ouput feeds the receive + buffer), 0 otherwise. + . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : equal to one if a + loopback is accomplished by software, 0 otherwise. + . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE : equal to one if the + hardware flow control based on CTS (Clear To Send) and RTS + (Ready To Send) control signals is enabled, 0 otherwise. + + @retval RETURN_SUCCESS The control bits were read from the serial device. **/ RETURN_STATUS EFIAPI SerialPortGetControl ( - OUT UINT32 *Control + OUT UINT32 *Control ) { return PL011UartGetControl ((UINTN)PcdGet64 (PcdSerialRegisterBase), Control); } - diff --git a/EmbeddedPkg/Include/Library/SerialPortExtLib.h b/EmbeddedPkg/Include/Library/SerialPortExtLib.h index 28705f0f20..0d0abb35ff 100644 --- a/EmbeddedPkg/Include/Library/SerialPortExtLib.h +++ b/EmbeddedPkg/Include/Library/SerialPortExtLib.h @@ -61,18 +61,38 @@ SerialPortSetControl ( ); /** - Get the serial device control bits. - @param Control Control signals read from the serial device. + Retrieve the status of the control bits on a serial device. - @retval EFI_SUCCESS The control bits were read from the serial device. - @retval EFI_DEVICE_ERROR The serial device is not functioning correctly. + @param[out] Control Status of the control bits on a serial device : + + . EFI_SERIAL_DATA_CLEAR_TO_SEND, EFI_SERIAL_DATA_SET_READY, + EFI_SERIAL_RING_INDICATE, EFI_SERIAL_CARRIER_DETECT, + EFI_SERIAL_REQUEST_TO_SEND, EFI_SERIAL_DATA_TERMINAL_READY + are all related to the DTE (Data Terminal Equipment) and + DCE (Data Communication Equipment) modes of operation of + the serial device. + . EFI_SERIAL_INPUT_BUFFER_EMPTY : equal to one if the receive + buffer is empty, 0 otherwise. + . EFI_SERIAL_OUTPUT_BUFFER_EMPTY : equal to one if the transmit + buffer is empty, 0 otherwise. + . EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE : equal to one if the + hardware loopback is enabled (the ouput feeds the receive + buffer), 0 otherwise. + . EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE : equal to one if a + loopback is accomplished by software, 0 otherwise. + . EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE : equal to one if the + hardware flow control based on CTS (Clear To Send) and RTS + (Ready To Send) control signals is enabled, 0 otherwise. + + @retval RETURN_SUCCESS The control bits were read from the serial device. + @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly. **/ RETURN_STATUS EFIAPI SerialPortGetControl ( - OUT UINT32 *Control + OUT UINT32 *Control ); /** diff --git a/EmbeddedPkg/Library/TemplateSerialPortExtLib/TemplateSerialPortExtLib.c b/EmbeddedPkg/Library/TemplateSerialPortExtLib/TemplateSerialPortExtLib.c index 2c2b4382d2..f0f8465cb6 100644 --- a/EmbeddedPkg/Library/TemplateSerialPortExtLib/TemplateSerialPortExtLib.c +++ b/EmbeddedPkg/Library/TemplateSerialPortExtLib/TemplateSerialPortExtLib.c @@ -36,7 +36,7 @@ SerialPortSetControl ( /** Get the serial device control bits. - @param Control Control signals read from the serial device. + @param Control Control signals read from the serial device. @retval EFI_SUCCESS The control bits were read from the serial device. @retval EFI_DEVICE_ERROR The serial device is not functioning correctly. @@ -45,7 +45,7 @@ SerialPortSetControl ( RETURN_STATUS EFIAPI SerialPortGetControl ( - OUT UINT32 *Control + OUT UINT32 *Control ) { if (SerialPortPoll ()) { @@ -54,7 +54,7 @@ SerialPortGetControl ( } else { *Control = EFI_SERIAL_INPUT_BUFFER_EMPTY | EFI_SERIAL_OUTPUT_BUFFER_EMPTY; } - return EFI_SUCCESS; + return RETURN_SUCCESS; } /**