MdeModulePkg: Apply uncrustify changes

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737

Apply uncrustify changes to .c/.h files in the MdeModulePkg package

Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Michael Kubacki
2021-12-05 14:54:02 -08:00
committed by mergify[bot]
parent 7c7184e201
commit 1436aea4d5
994 changed files with 107608 additions and 101311 deletions

View File

@@ -20,14 +20,13 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gPciSioSerialComponen
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPciSioSerialComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SerialComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SerialComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gPciSioSerialComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SerialComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SerialComponentNameGetControllerName,
"en"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSerialDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSerialDriverNameTable[] = {
{
"eng;en",
L"PCI SIO Serial Driver"
@@ -165,11 +164,11 @@ SerialComponentNameGetDriverName (
EFI_STATUS
EFIAPI
SerialComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
@@ -182,18 +181,18 @@ SerialComponentNameGetControllerName (
// Make sure this driver is currently managing ControllerHandle
//
IoProtocolGuid = &gEfiSioProtocolGuid;
Status = EfiTestManagedDevice (
ControllerHandle,
gSerialControllerDriver.DriverBindingHandle,
IoProtocolGuid
);
Status = EfiTestManagedDevice (
ControllerHandle,
gSerialControllerDriver.DriverBindingHandle,
IoProtocolGuid
);
if (EFI_ERROR (Status)) {
IoProtocolGuid = &gEfiPciIoProtocolGuid;
Status = EfiTestManagedDevice (
ControllerHandle,
gSerialControllerDriver.DriverBindingHandle,
IoProtocolGuid
);
Status = EfiTestManagedDevice (
ControllerHandle,
gSerialControllerDriver.DriverBindingHandle,
IoProtocolGuid
);
}
if (EFI_ERROR (Status)) {
@@ -217,7 +216,7 @@ SerialComponentNameGetControllerName (
Status = gBS->OpenProtocol (
ChildHandle,
&gEfiSerialIoProtocolGuid,
(VOID **) &SerialIo,
(VOID **)&SerialIo,
gSerialControllerDriver.DriverBindingHandle,
ChildHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -229,7 +228,7 @@ SerialComponentNameGetControllerName (
//
// Get the Serial Controller's Device structure
//
SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);
SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);
ControllerNameTable = SerialDevice->ControllerNameTable;
}
@@ -250,11 +249,12 @@ SerialComponentNameGetControllerName (
**/
VOID
AddName (
IN SERIAL_DEV *SerialDevice,
IN UINT32 Instance
IN SERIAL_DEV *SerialDevice,
IN UINT32 Instance
)
{
CHAR16 SerialPortName[SERIAL_PORT_NAME_LEN];
CHAR16 SerialPortName[SERIAL_PORT_NAME_LEN];
UnicodeSPrint (
SerialPortName,
sizeof (SerialPortName),
@@ -275,5 +275,4 @@ AddName (
SerialPortName,
FALSE
);
}

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _SERIAL_H_
#define _SERIAL_H_
#include <Uefi.h>
#include <IndustryStandard/Pci.h>
@@ -34,13 +33,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Driver Binding Externs
//
extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;
extern EFI_COMPONENT_NAME_PROTOCOL gPciSioSerialComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gPciSioSerialComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;
extern EFI_COMPONENT_NAME_PROTOCOL gPciSioSerialComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gPciSioSerialComponentName2;
#define SIO_SERIAL_PORT_NAME L"SIO Serial Port #%d"
#define PCI_SERIAL_PORT_NAME L"PCI Serial Port #%d"
#define SERIAL_PORT_NAME_LEN (sizeof (SIO_SERIAL_PORT_NAME) / sizeof (CHAR16) + MAXIMUM_VALUE_CHARACTERS)
#define SIO_SERIAL_PORT_NAME L"SIO Serial Port #%d"
#define PCI_SERIAL_PORT_NAME L"PCI Serial Port #%d"
#define SERIAL_PORT_NAME_LEN (sizeof (SIO_SERIAL_PORT_NAME) / sizeof (CHAR16) + MAXIMUM_VALUE_CHARACTERS)
//
// Internal Data Structures
@@ -61,73 +60,73 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gPciSioSerialComponentName2;
/// RegisterStride equals to 4.
///
typedef struct {
UINT16 VendorId; ///< Vendor ID to match the PCI device. The value 0xFFFF terminates the list of entries.
UINT16 DeviceId; ///< Device ID to match the PCI device
UINT32 ClockRate; ///< UART clock rate. Set to 0 for default clock rate of 1843200 Hz
UINT64 Offset; ///< The byte offset into to the BAR
UINT8 BarIndex; ///< Which BAR to get the UART base address
UINT8 RegisterStride; ///< UART register stride in bytes. Set to 0 for default register stride of 1 byte.
UINT16 ReceiveFifoDepth; ///< UART receive FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
UINT16 TransmitFifoDepth; ///< UART transmit FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
UINT8 Reserved[2];
UINT16 VendorId; ///< Vendor ID to match the PCI device. The value 0xFFFF terminates the list of entries.
UINT16 DeviceId; ///< Device ID to match the PCI device
UINT32 ClockRate; ///< UART clock rate. Set to 0 for default clock rate of 1843200 Hz
UINT64 Offset; ///< The byte offset into to the BAR
UINT8 BarIndex; ///< Which BAR to get the UART base address
UINT8 RegisterStride; ///< UART register stride in bytes. Set to 0 for default register stride of 1 byte.
UINT16 ReceiveFifoDepth; ///< UART receive FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
UINT16 TransmitFifoDepth; ///< UART transmit FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
UINT8 Reserved[2];
} PCI_SERIAL_PARAMETER;
#pragma pack()
#define SERIAL_MAX_FIFO_SIZE 17 ///< Actual FIFO size is 16. FIFO based on circular wastes one unit.
#define SERIAL_MAX_FIFO_SIZE 17 ///< Actual FIFO size is 16. FIFO based on circular wastes one unit.
typedef struct {
UINT16 Head; ///< Head pointer of the FIFO. Empty when (Head == Tail).
UINT16 Tail; ///< Tail pointer of the FIFO. Full when ((Tail + 1) % SERIAL_MAX_FIFO_SIZE == Head).
UINT8 Data[SERIAL_MAX_FIFO_SIZE]; ///< Store the FIFO data.
UINT16 Head; ///< Head pointer of the FIFO. Empty when (Head == Tail).
UINT16 Tail; ///< Tail pointer of the FIFO. Full when ((Tail + 1) % SERIAL_MAX_FIFO_SIZE == Head).
UINT8 Data[SERIAL_MAX_FIFO_SIZE]; ///< Store the FIFO data.
} SERIAL_DEV_FIFO;
typedef union {
EFI_PCI_IO_PROTOCOL *PciIo;
EFI_SIO_PROTOCOL *Sio;
EFI_PCI_IO_PROTOCOL *PciIo;
EFI_SIO_PROTOCOL *Sio;
} PARENT_IO_PROTOCOL_PTR;
typedef struct {
EFI_PCI_IO_PROTOCOL *PciIo; // Pointer to parent PciIo instance.
UINTN ChildCount; // Count of child SerialIo instance.
UINT64 PciAttributes; // Original PCI attributes.
EFI_PCI_IO_PROTOCOL *PciIo; // Pointer to parent PciIo instance.
UINTN ChildCount; // Count of child SerialIo instance.
UINT64 PciAttributes; // Original PCI attributes.
} PCI_DEVICE_INFO;
typedef struct {
UINT32 Signature;
EFI_HANDLE Handle;
EFI_SERIAL_IO_PROTOCOL SerialIo;
EFI_SERIAL_IO_MODE SerialMode;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT32 Signature;
EFI_HANDLE Handle;
EFI_SERIAL_IO_PROTOCOL SerialIo;
EFI_SERIAL_IO_MODE SerialMode;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
UART_DEVICE_PATH UartDevicePath;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
UART_DEVICE_PATH UartDevicePath;
EFI_PHYSICAL_ADDRESS BaseAddress; ///< UART base address
BOOLEAN MmioAccess; ///< TRUE for MMIO, FALSE for IO
UINT8 RegisterStride; ///< UART Register Stride
UINT32 ClockRate; ///< UART clock rate
EFI_PHYSICAL_ADDRESS BaseAddress; ///< UART base address
BOOLEAN MmioAccess; ///< TRUE for MMIO, FALSE for IO
UINT8 RegisterStride; ///< UART Register Stride
UINT32 ClockRate; ///< UART clock rate
UINT16 ReceiveFifoDepth; ///< UART receive FIFO depth in bytes.
SERIAL_DEV_FIFO Receive; ///< The FIFO used to store received data
UINT16 ReceiveFifoDepth; ///< UART receive FIFO depth in bytes.
SERIAL_DEV_FIFO Receive; ///< The FIFO used to store received data
UINT16 TransmitFifoDepth; ///< UART transmit FIFO depth in bytes.
SERIAL_DEV_FIFO Transmit; ///< The FIFO used to store to-transmit data
UINT16 TransmitFifoDepth; ///< UART transmit FIFO depth in bytes.
SERIAL_DEV_FIFO Transmit; ///< The FIFO used to store to-transmit data
BOOLEAN SoftwareLoopbackEnable;
BOOLEAN HardwareFlowControl;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
BOOLEAN ContainsControllerNode; ///< TRUE if the device produced contains Controller node
UINT32 Instance;
PCI_DEVICE_INFO *PciDeviceInfo;
BOOLEAN SoftwareLoopbackEnable;
BOOLEAN HardwareFlowControl;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
BOOLEAN ContainsControllerNode; ///< TRUE if the device produced contains Controller node
UINT32 Instance;
PCI_DEVICE_INFO *PciDeviceInfo;
} SERIAL_DEV;
#define SERIAL_DEV_SIGNATURE SIGNATURE_32 ('s', 'e', 'r', 'd')
#define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)
#define SERIAL_DEV_SIGNATURE SIGNATURE_32 ('s', 'e', 'r', 'd')
#define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)
//
// Serial Driver Defaults
//
#define SERIAL_PORT_DEFAULT_TIMEOUT 1000000
#define SERIAL_PORT_SUPPORT_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \
#define SERIAL_PORT_DEFAULT_TIMEOUT 1000000
#define SERIAL_PORT_SUPPORT_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \
EFI_SERIAL_DATA_SET_READY | \
EFI_SERIAL_RING_INDICATE | \
EFI_SERIAL_CARRIER_DETECT | \
@@ -139,23 +138,23 @@ typedef struct {
EFI_SERIAL_OUTPUT_BUFFER_EMPTY | \
EFI_SERIAL_INPUT_BUFFER_EMPTY)
#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS
#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds
#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS
#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds
//
// UART Registers
//
#define SERIAL_REGISTER_THR 0 ///< WO Transmit Holding Register
#define SERIAL_REGISTER_RBR 0 ///< RO Receive Buffer Register
#define SERIAL_REGISTER_DLL 0 ///< R/W Divisor Latch LSB
#define SERIAL_REGISTER_DLM 1 ///< R/W Divisor Latch MSB
#define SERIAL_REGISTER_IER 1 ///< R/W Interrupt Enable Register
#define SERIAL_REGISTER_IIR 2 ///< RO Interrupt Identification Register
#define SERIAL_REGISTER_FCR 2 ///< WO FIFO Cotrol Register
#define SERIAL_REGISTER_LCR 3 ///< R/W Line Control Register
#define SERIAL_REGISTER_MCR 4 ///< R/W Modem Control Register
#define SERIAL_REGISTER_LSR 5 ///< R/W Line Status Register
#define SERIAL_REGISTER_MSR 6 ///< R/W Modem Status Register
#define SERIAL_REGISTER_SCR 7 ///< R/W Scratch Pad Register
#define SERIAL_REGISTER_THR 0 ///< WO Transmit Holding Register
#define SERIAL_REGISTER_RBR 0 ///< RO Receive Buffer Register
#define SERIAL_REGISTER_DLL 0 ///< R/W Divisor Latch LSB
#define SERIAL_REGISTER_DLM 1 ///< R/W Divisor Latch MSB
#define SERIAL_REGISTER_IER 1 ///< R/W Interrupt Enable Register
#define SERIAL_REGISTER_IIR 2 ///< RO Interrupt Identification Register
#define SERIAL_REGISTER_FCR 2 ///< WO FIFO Cotrol Register
#define SERIAL_REGISTER_LCR 3 ///< R/W Line Control Register
#define SERIAL_REGISTER_MCR 4 ///< R/W Modem Control Register
#define SERIAL_REGISTER_LSR 5 ///< R/W Line Status Register
#define SERIAL_REGISTER_MSR 6 ///< R/W Modem Status Register
#define SERIAL_REGISTER_SCR 7 ///< R/W Scratch Pad Register
#pragma pack(1)
///
@@ -163,13 +162,13 @@ typedef struct {
///
typedef union {
struct {
UINT8 Ravie : 1; ///< Receiver Data Available Interrupt Enable
UINT8 Theie : 1; ///< Transmistter Holding Register Empty Interrupt Enable
UINT8 Rie : 1; ///< Receiver Interrupt Enable
UINT8 Mie : 1; ///< Modem Interrupt Enable
UINT8 Reserved : 4;
UINT8 Ravie : 1; ///< Receiver Data Available Interrupt Enable
UINT8 Theie : 1; ///< Transmistter Holding Register Empty Interrupt Enable
UINT8 Rie : 1; ///< Receiver Interrupt Enable
UINT8 Mie : 1; ///< Modem Interrupt Enable
UINT8 Reserved : 4;
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_IER;
///
@@ -177,15 +176,15 @@ typedef union {
///
typedef union {
struct {
UINT8 TrFIFOE : 1; ///< Transmit and Receive FIFO Enable
UINT8 ResetRF : 1; ///< Reset Reciever FIFO
UINT8 ResetTF : 1; ///< Reset Transmistter FIFO
UINT8 Dms : 1; ///< DMA Mode Select
UINT8 Reserved : 1;
UINT8 TrFIFO64 : 1; ///< Enable 64 byte FIFO
UINT8 Rtb : 2; ///< Receive Trigger Bits
UINT8 TrFIFOE : 1; ///< Transmit and Receive FIFO Enable
UINT8 ResetRF : 1; ///< Reset Reciever FIFO
UINT8 ResetTF : 1; ///< Reset Transmistter FIFO
UINT8 Dms : 1; ///< DMA Mode Select
UINT8 Reserved : 1;
UINT8 TrFIFO64 : 1; ///< Enable 64 byte FIFO
UINT8 Rtb : 2; ///< Receive Trigger Bits
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_FCR;
///
@@ -193,15 +192,15 @@ typedef union {
///
typedef union {
struct {
UINT8 SerialDB : 2; ///< Number of Serial Data Bits
UINT8 StopB : 1; ///< Number of Stop Bits
UINT8 ParEn : 1; ///< Parity Enable
UINT8 EvenPar : 1; ///< Even Parity Select
UINT8 SticPar : 1; ///< Sticky Parity
UINT8 BrCon : 1; ///< Break Control
UINT8 DLab : 1; ///< Divisor Latch Access Bit
UINT8 SerialDB : 2; ///< Number of Serial Data Bits
UINT8 StopB : 1; ///< Number of Stop Bits
UINT8 ParEn : 1; ///< Parity Enable
UINT8 EvenPar : 1; ///< Even Parity Select
UINT8 SticPar : 1; ///< Sticky Parity
UINT8 BrCon : 1; ///< Break Control
UINT8 DLab : 1; ///< Divisor Latch Access Bit
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_LCR;
///
@@ -209,14 +208,14 @@ typedef union {
///
typedef union {
struct {
UINT8 DtrC : 1; ///< Data Terminal Ready Control
UINT8 Rts : 1; ///< Request To Send Control
UINT8 Out1 : 1; ///< Output1
UINT8 Out2 : 1; ///< Output2, used to disable interrupt
UINT8 Lme : 1; ///< Loopback Mode Enable
UINT8 Reserved : 3;
UINT8 DtrC : 1; ///< Data Terminal Ready Control
UINT8 Rts : 1; ///< Request To Send Control
UINT8 Out1 : 1; ///< Output1
UINT8 Out2 : 1; ///< Output2, used to disable interrupt
UINT8 Lme : 1; ///< Loopback Mode Enable
UINT8 Reserved : 3;
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_MCR;
///
@@ -224,16 +223,16 @@ typedef union {
///
typedef union {
struct {
UINT8 Dr : 1; ///< Receiver Data Ready Status
UINT8 Oe : 1; ///< Overrun Error Status
UINT8 Pe : 1; ///< Parity Error Status
UINT8 Fe : 1; ///< Framing Error Status
UINT8 Bi : 1; ///< Break Interrupt Status
UINT8 Thre : 1; ///< Transmistter Holding Register Status
UINT8 Temt : 1; ///< Transmitter Empty Status
UINT8 FIFOe : 1; ///< FIFO Error Status
UINT8 Dr : 1; ///< Receiver Data Ready Status
UINT8 Oe : 1; ///< Overrun Error Status
UINT8 Pe : 1; ///< Parity Error Status
UINT8 Fe : 1; ///< Framing Error Status
UINT8 Bi : 1; ///< Break Interrupt Status
UINT8 Thre : 1; ///< Transmistter Holding Register Status
UINT8 Temt : 1; ///< Transmitter Empty Status
UINT8 FIFOe : 1; ///< FIFO Error Status
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_LSR;
///
@@ -241,48 +240,49 @@ typedef union {
///
typedef union {
struct {
UINT8 DeltaCTS : 1; ///< Delta Clear To Send Status
UINT8 DeltaDSR : 1; ///< Delta Data Set Ready Status
UINT8 TrailingEdgeRI : 1; ///< Trailing Edge of Ring Indicator Status
UINT8 DeltaDCD : 1; ///< Delta Data Carrier Detect Status
UINT8 Cts : 1; ///< Clear To Send Status
UINT8 Dsr : 1; ///< Data Set Ready Status
UINT8 Ri : 1; ///< Ring Indicator Status
UINT8 Dcd : 1; ///< Data Carrier Detect Status
UINT8 DeltaCTS : 1; ///< Delta Clear To Send Status
UINT8 DeltaDSR : 1; ///< Delta Data Set Ready Status
UINT8 TrailingEdgeRI : 1; ///< Trailing Edge of Ring Indicator Status
UINT8 DeltaDCD : 1; ///< Delta Data Carrier Detect Status
UINT8 Cts : 1; ///< Clear To Send Status
UINT8 Dsr : 1; ///< Data Set Ready Status
UINT8 Ri : 1; ///< Ring Indicator Status
UINT8 Dcd : 1; ///< Data Carrier Detect Status
} Bits;
UINT8 Data;
UINT8 Data;
} SERIAL_PORT_MSR;
#pragma pack()
//
// Define serial register I/O macros
//
#define READ_RBR(S) SerialReadRegister (S, SERIAL_REGISTER_RBR)
#define READ_DLL(S) SerialReadRegister (S, SERIAL_REGISTER_DLL)
#define READ_DLM(S) SerialReadRegister (S, SERIAL_REGISTER_DLM)
#define READ_IER(S) SerialReadRegister (S, SERIAL_REGISTER_IER)
#define READ_IIR(S) SerialReadRegister (S, SERIAL_REGISTER_IIR)
#define READ_LCR(S) SerialReadRegister (S, SERIAL_REGISTER_LCR)
#define READ_MCR(S) SerialReadRegister (S, SERIAL_REGISTER_MCR)
#define READ_LSR(S) SerialReadRegister (S, SERIAL_REGISTER_LSR)
#define READ_MSR(S) SerialReadRegister (S, SERIAL_REGISTER_MSR)
#define READ_SCR(S) SerialReadRegister (S, SERIAL_REGISTER_SCR)
#define READ_RBR(S) SerialReadRegister (S, SERIAL_REGISTER_RBR)
#define READ_DLL(S) SerialReadRegister (S, SERIAL_REGISTER_DLL)
#define READ_DLM(S) SerialReadRegister (S, SERIAL_REGISTER_DLM)
#define READ_IER(S) SerialReadRegister (S, SERIAL_REGISTER_IER)
#define READ_IIR(S) SerialReadRegister (S, SERIAL_REGISTER_IIR)
#define READ_LCR(S) SerialReadRegister (S, SERIAL_REGISTER_LCR)
#define READ_MCR(S) SerialReadRegister (S, SERIAL_REGISTER_MCR)
#define READ_LSR(S) SerialReadRegister (S, SERIAL_REGISTER_LSR)
#define READ_MSR(S) SerialReadRegister (S, SERIAL_REGISTER_MSR)
#define READ_SCR(S) SerialReadRegister (S, SERIAL_REGISTER_SCR)
#define WRITE_THR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_THR, D)
#define WRITE_DLL(S, D) SerialWriteRegister (S, SERIAL_REGISTER_DLL, D)
#define WRITE_DLM(S, D) SerialWriteRegister (S, SERIAL_REGISTER_DLM, D)
#define WRITE_IER(S, D) SerialWriteRegister (S, SERIAL_REGISTER_IER, D)
#define WRITE_FCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_FCR, D)
#define WRITE_LCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_LCR, D)
#define WRITE_MCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_MCR, D)
#define WRITE_LSR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_LSR, D)
#define WRITE_MSR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_MSR, D)
#define WRITE_SCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_SCR, D)
#define WRITE_THR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_THR, D)
#define WRITE_DLL(S, D) SerialWriteRegister (S, SERIAL_REGISTER_DLL, D)
#define WRITE_DLM(S, D) SerialWriteRegister (S, SERIAL_REGISTER_DLM, D)
#define WRITE_IER(S, D) SerialWriteRegister (S, SERIAL_REGISTER_IER, D)
#define WRITE_FCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_FCR, D)
#define WRITE_LCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_LCR, D)
#define WRITE_MCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_MCR, D)
#define WRITE_LSR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_LSR, D)
#define WRITE_MSR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_MSR, D)
#define WRITE_SCR(S, D) SerialWriteRegister (S, SERIAL_REGISTER_SCR, D)
//
// Prototypes
// Driver model protocol interface
//
/**
Check to see if this driver supports the given controller
@@ -296,9 +296,9 @@ typedef union {
EFI_STATUS
EFIAPI
SerialControllerDriverSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -313,9 +313,9 @@ SerialControllerDriverSupported (
EFI_STATUS
EFIAPI
SerialControllerDriverStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -333,15 +333,16 @@ SerialControllerDriverStart (
EFI_STATUS
EFIAPI
SerialControllerDriverStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
//
// Serial I/O Protocol Interface
//
/**
Reset serial device.
@@ -354,7 +355,7 @@ SerialControllerDriverStop (
EFI_STATUS
EFIAPI
SerialReset (
IN EFI_SERIAL_IO_PROTOCOL *This
IN EFI_SERIAL_IO_PROTOCOL *This
);
/**
@@ -377,13 +378,13 @@ SerialReset (
EFI_STATUS
EFIAPI
SerialSetAttributes (
IN EFI_SERIAL_IO_PROTOCOL *This,
IN UINT64 BaudRate,
IN UINT32 ReceiveFifoDepth,
IN UINT32 Timeout,
IN EFI_PARITY_TYPE Parity,
IN UINT8 DataBits,
IN EFI_STOP_BITS_TYPE StopBits
IN EFI_SERIAL_IO_PROTOCOL *This,
IN UINT64 BaudRate,
IN UINT32 ReceiveFifoDepth,
IN UINT32 Timeout,
IN EFI_PARITY_TYPE Parity,
IN UINT8 DataBits,
IN EFI_STOP_BITS_TYPE StopBits
);
/**
@@ -399,8 +400,8 @@ SerialSetAttributes (
EFI_STATUS
EFIAPI
SerialSetControl (
IN EFI_SERIAL_IO_PROTOCOL *This,
IN UINT32 Control
IN EFI_SERIAL_IO_PROTOCOL *This,
IN UINT32 Control
);
/**
@@ -415,8 +416,8 @@ SerialSetControl (
EFI_STATUS
EFIAPI
SerialGetControl (
IN EFI_SERIAL_IO_PROTOCOL *This,
OUT UINT32 *Control
IN EFI_SERIAL_IO_PROTOCOL *This,
OUT UINT32 *Control
);
/**
@@ -435,9 +436,9 @@ SerialGetControl (
EFI_STATUS
EFIAPI
SerialWrite (
IN EFI_SERIAL_IO_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
IN EFI_SERIAL_IO_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
);
/**
@@ -456,14 +457,15 @@ SerialWrite (
EFI_STATUS
EFIAPI
SerialRead (
IN EFI_SERIAL_IO_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
IN EFI_SERIAL_IO_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
//
// Internal Functions
//
/**
Use scratchpad register to test if this serial port is present.
@@ -473,7 +475,7 @@ SerialRead (
**/
BOOLEAN
SerialPresent (
IN SERIAL_DEV *SerialDevice
IN SERIAL_DEV *SerialDevice
);
/**
@@ -486,7 +488,7 @@ SerialPresent (
**/
BOOLEAN
SerialFifoFull (
IN SERIAL_DEV_FIFO *Fifo
IN SERIAL_DEV_FIFO *Fifo
);
/**
@@ -499,7 +501,7 @@ SerialFifoFull (
**/
BOOLEAN
SerialFifoEmpty (
IN SERIAL_DEV_FIFO *Fifo
IN SERIAL_DEV_FIFO *Fifo
);
/**
@@ -514,8 +516,8 @@ SerialFifoEmpty (
**/
EFI_STATUS
SerialFifoAdd (
IN SERIAL_DEV_FIFO *Fifo,
IN UINT8 Data
IN SERIAL_DEV_FIFO *Fifo,
IN UINT8 Data
);
/**
@@ -530,8 +532,8 @@ SerialFifoAdd (
**/
EFI_STATUS
SerialFifoRemove (
IN SERIAL_DEV_FIFO *Fifo,
OUT UINT8 *Data
IN SERIAL_DEV_FIFO *Fifo,
OUT UINT8 *Data
);
/**
@@ -546,7 +548,7 @@ SerialFifoRemove (
**/
EFI_STATUS
SerialReceiveTransmit (
IN SERIAL_DEV *SerialDevice
IN SERIAL_DEV *SerialDevice
);
/**
@@ -559,8 +561,8 @@ SerialReceiveTransmit (
**/
UINT8
SerialReadRegister (
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset
);
/**
@@ -572,15 +574,15 @@ SerialReadRegister (
**/
VOID
SerialWriteRegister (
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset,
IN UINT8 Data
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset,
IN UINT8 Data
);
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
@@ -628,7 +630,6 @@ SerialComponentNameGetDriverName (
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@@ -700,11 +701,11 @@ SerialComponentNameGetDriverName (
EFI_STATUS
EFIAPI
SerialComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
/**
@@ -715,8 +716,8 @@ SerialComponentNameGetControllerName (
**/
VOID
AddName (
IN SERIAL_DEV *SerialDevice,
IN UINT32 Uid
IN SERIAL_DEV *SerialDevice,
IN UINT32 Uid
);
/**
@@ -741,13 +742,13 @@ AddName (
**/
BOOLEAN
VerifyUartParameters (
IN UINT32 ClockRate,
IN UINT64 BaudRate,
IN UINT8 DataBits,
IN EFI_PARITY_TYPE Parity,
IN EFI_STOP_BITS_TYPE StopBits,
OUT UINT64 *Divisor,
OUT UINT64 *ActualBaudRate
IN UINT32 ClockRate,
IN UINT64 BaudRate,
IN UINT8 DataBits,
IN EFI_PARITY_TYPE Parity,
IN EFI_STOP_BITS_TYPE StopBits,
OUT UINT64 *Divisor,
OUT UINT64 *ActualBaudRate
);
/**
@@ -762,9 +763,9 @@ VerifyUartParameters (
**/
UART_DEVICE_PATH *
SkipControllerDevicePathNode (
EFI_DEVICE_PATH_PROTOCOL *DevicePath,
BOOLEAN *ContainsControllerNode,
UINT32 *ControllerNumber
EFI_DEVICE_PATH_PROTOCOL *DevicePath,
BOOLEAN *ContainsControllerNode,
UINT32 *ControllerNumber
);
/**
@@ -778,6 +779,7 @@ SkipControllerDevicePathNode (
**/
BOOLEAN
IsUartFlowControlDevicePathNode (
IN UART_FLOW_CONTROL_DEVICE_PATH *FlowControl
IN UART_FLOW_CONTROL_DEVICE_PATH *FlowControl
);
#endif

View File

@@ -20,27 +20,31 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
UART_DEVICE_PATH *
SkipControllerDevicePathNode (
EFI_DEVICE_PATH_PROTOCOL *DevicePath,
BOOLEAN *ContainsControllerNode,
UINT32 *ControllerNumber
EFI_DEVICE_PATH_PROTOCOL *DevicePath,
BOOLEAN *ContainsControllerNode,
UINT32 *ControllerNumber
)
{
if ((DevicePathType (DevicePath) == HARDWARE_DEVICE_PATH) &&
(DevicePathSubType (DevicePath) == HW_CONTROLLER_DP)
) {
)
{
if (ContainsControllerNode != NULL) {
*ContainsControllerNode = TRUE;
}
if (ControllerNumber != NULL) {
*ControllerNumber = ((CONTROLLER_DEVICE_PATH *) DevicePath)->ControllerNumber;
*ControllerNumber = ((CONTROLLER_DEVICE_PATH *)DevicePath)->ControllerNumber;
}
DevicePath = NextDevicePathNode (DevicePath);
} else {
if (ContainsControllerNode != NULL) {
*ContainsControllerNode = FALSE;
}
}
return (UART_DEVICE_PATH *) DevicePath;
return (UART_DEVICE_PATH *)DevicePath;
}
/**
@@ -65,26 +69,27 @@ SkipControllerDevicePathNode (
**/
BOOLEAN
VerifyUartParameters (
IN UINT32 ClockRate,
IN UINT64 BaudRate,
IN UINT8 DataBits,
IN EFI_PARITY_TYPE Parity,
IN EFI_STOP_BITS_TYPE StopBits,
OUT UINT64 *Divisor,
OUT UINT64 *ActualBaudRate
IN UINT32 ClockRate,
IN UINT64 BaudRate,
IN UINT8 DataBits,
IN EFI_PARITY_TYPE Parity,
IN EFI_STOP_BITS_TYPE StopBits,
OUT UINT64 *Divisor,
OUT UINT64 *ActualBaudRate
)
{
UINT64 Remainder;
UINT32 ComputedBaudRate;
UINT64 ComputedDivisor;
UINT64 Percent;
UINT64 Remainder;
UINT32 ComputedBaudRate;
UINT64 ComputedDivisor;
UINT64 Percent;
if ((DataBits < 5) || (DataBits > 8) ||
(Parity < NoParity) || (Parity > SpaceParity) ||
(StopBits < OneStopBit) || (StopBits > TwoStopBits) ||
((DataBits == 5) && (StopBits == TwoStopBits)) ||
((DataBits >= 6) && (DataBits <= 8) && (StopBits == OneFiveStopBits))
) {
)
{
return FALSE;
}
@@ -108,6 +113,7 @@ VerifyUartParameters (
if (Remainder >= LShiftU64 (BaudRate, 3)) {
ComputedDivisor++;
}
//
// If the computed divisor is larger than the maximum value that can be programmed
// into the UART, then the requested baud rate can not be supported.
@@ -128,13 +134,13 @@ VerifyUartParameters (
// Actual baud rate that the serial port will be programmed for
// should be with in 4% of requested one.
//
ComputedBaudRate = ClockRate / ((UINT16) ComputedDivisor << 4);
ComputedBaudRate = ClockRate / ((UINT16)ComputedDivisor << 4);
if (ComputedBaudRate == 0) {
return FALSE;
}
Percent = DivU64x32 (MultU64x32 (BaudRate, 100), ComputedBaudRate);
DEBUG ((DEBUG_INFO, "ClockRate = %d\n", ClockRate));
DEBUG ((DEBUG_INFO, "ClockRate = %d\n", ClockRate));
DEBUG ((DEBUG_INFO, "Divisor = %ld\n", ComputedDivisor));
DEBUG ((DEBUG_INFO, "BaudRate/Actual (%ld/%d) = %d%%\n", BaudRate, ComputedBaudRate, Percent));
@@ -147,18 +153,23 @@ VerifyUartParameters (
if (ActualBaudRate != NULL) {
*ActualBaudRate = BaudRate;
}
if (Divisor != NULL) {
*Divisor = ComputedDivisor;
}
return TRUE;
}
if (ComputedBaudRate < BaudRate) {
if (ActualBaudRate != NULL) {
*ActualBaudRate = ComputedBaudRate;
}
if (Divisor != NULL) {
*Divisor = ComputedDivisor;
}
return TRUE;
}
@@ -170,22 +181,25 @@ VerifyUartParameters (
if (ComputedDivisor == MAX_UINT16) {
return FALSE;
}
ComputedDivisor++;
ComputedBaudRate = ClockRate / ((UINT16) ComputedDivisor << 4);
ComputedBaudRate = ClockRate / ((UINT16)ComputedDivisor << 4);
if (ComputedBaudRate == 0) {
return FALSE;
}
DEBUG ((DEBUG_INFO, "ClockRate = %d\n", ClockRate));
DEBUG ((DEBUG_INFO, "ClockRate = %d\n", ClockRate));
DEBUG ((DEBUG_INFO, "Divisor = %ld\n", ComputedDivisor));
DEBUG ((DEBUG_INFO, "BaudRate/Actual (%ld/%d) = %d%%\n", BaudRate, ComputedBaudRate, Percent));
if (ActualBaudRate != NULL) {
*ActualBaudRate = ComputedBaudRate;
}
if (Divisor != NULL) {
*Divisor = ComputedDivisor;
}
return TRUE;
}
@@ -198,10 +212,10 @@ VerifyUartParameters (
**/
BOOLEAN
SerialFifoFull (
IN SERIAL_DEV_FIFO *Fifo
IN SERIAL_DEV_FIFO *Fifo
)
{
return (BOOLEAN) (((Fifo->Tail + 1) % SERIAL_MAX_FIFO_SIZE) == Fifo->Head);
return (BOOLEAN)(((Fifo->Tail + 1) % SERIAL_MAX_FIFO_SIZE) == Fifo->Head);
}
/**
@@ -213,11 +227,11 @@ SerialFifoFull (
**/
BOOLEAN
SerialFifoEmpty (
IN SERIAL_DEV_FIFO *Fifo
IN SERIAL_DEV_FIFO *Fifo
)
{
return (BOOLEAN) (Fifo->Head == Fifo->Tail);
return (BOOLEAN)(Fifo->Head == Fifo->Tail);
}
/**
@@ -231,8 +245,8 @@ SerialFifoEmpty (
**/
EFI_STATUS
SerialFifoAdd (
IN OUT SERIAL_DEV_FIFO *Fifo,
IN UINT8 Data
IN OUT SERIAL_DEV_FIFO *Fifo,
IN UINT8 Data
)
{
//
@@ -241,11 +255,12 @@ SerialFifoAdd (
if (SerialFifoFull (Fifo)) {
return EFI_OUT_OF_RESOURCES;
}
//
// FIFO is not full can add data
//
Fifo->Data[Fifo->Tail] = Data;
Fifo->Tail = (Fifo->Tail + 1) % SERIAL_MAX_FIFO_SIZE;
Fifo->Tail = (Fifo->Tail + 1) % SERIAL_MAX_FIFO_SIZE;
return EFI_SUCCESS;
}
@@ -261,8 +276,8 @@ SerialFifoAdd (
**/
EFI_STATUS
SerialFifoRemove (
IN OUT SERIAL_DEV_FIFO *Fifo,
OUT UINT8 *Data
IN OUT SERIAL_DEV_FIFO *Fifo,
OUT UINT8 *Data
)
{
//
@@ -271,10 +286,11 @@ SerialFifoRemove (
if (SerialFifoEmpty (Fifo)) {
return EFI_OUT_OF_RESOURCES;
}
//
// FIFO is not empty, can remove data
//
*Data = Fifo->Data[Fifo->Head];
*Data = Fifo->Data[Fifo->Head];
Fifo->Head = (Fifo->Head + 1) % SERIAL_MAX_FIFO_SIZE;
return EFI_SUCCESS;
}
@@ -291,16 +307,16 @@ SerialFifoRemove (
**/
EFI_STATUS
SerialReceiveTransmit (
IN SERIAL_DEV *SerialDevice
IN SERIAL_DEV *SerialDevice
)
{
SERIAL_PORT_LSR Lsr;
UINT8 Data;
BOOLEAN ReceiveFifoFull;
SERIAL_PORT_MSR Msr;
SERIAL_PORT_MCR Mcr;
UINTN TimeOut;
SERIAL_PORT_LSR Lsr;
UINT8 Data;
BOOLEAN ReceiveFifoFull;
SERIAL_PORT_MSR Msr;
SERIAL_PORT_MCR Mcr;
UINTN TimeOut;
Data = 0;
@@ -326,13 +342,15 @@ SerialReceiveTransmit (
// if receive buffer is available.
//
if (SerialDevice->HardwareFlowControl &&
!FeaturePcdGet(PcdSerialUseHalfHandshake)&&
!FeaturePcdGet (PcdSerialUseHalfHandshake) &&
!ReceiveFifoFull
) {
)
{
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.Rts = 1;
WRITE_MCR (SerialDevice, Mcr.Data);
}
do {
Lsr.Data = READ_LSR (SerialDevice);
@@ -342,13 +360,13 @@ SerialReceiveTransmit (
if ((Lsr.Bits.Dr == 1) && !ReceiveFifoFull) {
ReceiveFifoFull = SerialFifoFull (&SerialDevice->Receive);
if (!ReceiveFifoFull) {
if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Oe == 1 || Lsr.Bits.Pe == 1 || Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {
if ((Lsr.Bits.FIFOe == 1) || (Lsr.Bits.Oe == 1) || (Lsr.Bits.Pe == 1) || (Lsr.Bits.Fe == 1) || (Lsr.Bits.Bi == 1)) {
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
EFI_ERROR_CODE,
EFI_P_EC_INPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT,
SerialDevice->DevicePath
);
if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Pe == 1|| Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {
if ((Lsr.Bits.FIFOe == 1) || (Lsr.Bits.Pe == 1) || (Lsr.Bits.Fe == 1) || (Lsr.Bits.Bi == 1)) {
Data = READ_RBR (SerialDevice);
continue;
}
@@ -363,15 +381,15 @@ SerialReceiveTransmit (
// tell the peer to stop sending data.
//
if (SerialDevice->HardwareFlowControl &&
!FeaturePcdGet(PcdSerialUseHalfHandshake) &&
!FeaturePcdGet (PcdSerialUseHalfHandshake) &&
SerialFifoFull (&SerialDevice->Receive)
) {
)
{
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.Rts = 0;
WRITE_MCR (SerialDevice, Mcr.Data);
}
continue;
} else {
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
@@ -381,10 +399,11 @@ SerialReceiveTransmit (
);
}
}
//
// Do the write
//
if (Lsr.Bits.Thre == 1 && !SerialFifoEmpty (&SerialDevice->Transmit)) {
if ((Lsr.Bits.Thre == 1) && !SerialFifoEmpty (&SerialDevice->Transmit)) {
//
// Make sure the transmit data will not be missed
//
@@ -392,17 +411,18 @@ SerialReceiveTransmit (
//
// For half handshake flow control assert RTS before sending.
//
if (FeaturePcdGet(PcdSerialUseHalfHandshake)) {
if (FeaturePcdGet (PcdSerialUseHalfHandshake)) {
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.Rts= 0;
Mcr.Bits.Rts = 0;
WRITE_MCR (SerialDevice, Mcr.Data);
}
//
// Wait for CTS
//
TimeOut = 0;
Msr.Data = READ_MSR (SerialDevice);
while ((Msr.Bits.Dcd == 1) && ((Msr.Bits.Cts == 0) ^ FeaturePcdGet(PcdSerialUseHalfHandshake))) {
TimeOut = 0;
Msr.Data = READ_MSR (SerialDevice);
while ((Msr.Bits.Dcd == 1) && ((Msr.Bits.Cts == 0) ^ FeaturePcdGet (PcdSerialUseHalfHandshake))) {
gBS->Stall (TIMEOUT_STALL_INTERVAL);
TimeOut++;
if (TimeOut > 5) {
@@ -412,7 +432,7 @@ SerialReceiveTransmit (
Msr.Data = READ_MSR (SerialDevice);
}
if ((Msr.Bits.Dcd == 0) || ((Msr.Bits.Cts == 1) ^ FeaturePcdGet(PcdSerialUseHalfHandshake))) {
if ((Msr.Bits.Dcd == 0) || ((Msr.Bits.Cts == 1) ^ FeaturePcdGet (PcdSerialUseHalfHandshake))) {
SerialFifoRemove (&SerialDevice->Transmit, &Data);
WRITE_THR (SerialDevice, Data);
}
@@ -420,8 +440,8 @@ SerialReceiveTransmit (
//
// For half handshake flow control, tell DCE we are done.
//
if (FeaturePcdGet(PcdSerialUseHalfHandshake)) {
Mcr.Data = READ_MCR (SerialDevice);
if (FeaturePcdGet (PcdSerialUseHalfHandshake)) {
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.Rts = 1;
WRITE_MCR (SerialDevice, Mcr.Data);
}
@@ -484,12 +504,13 @@ SerialFlushTransmitFifo (
// in the rest of this function that may send additional characters to this
// UART device invalidating the flush operation.
//
Elapsed = 0;
Elapsed = 0;
Lsr.Data = READ_LSR (SerialDevice);
while (Lsr.Bits.Temt == 0 || Lsr.Bits.Thre == 0) {
if (Elapsed >= Timeout) {
return EFI_TIMEOUT;
}
gBS->Stall (TIMEOUT_STALL_INTERVAL);
Elapsed += TIMEOUT_STALL_INTERVAL;
Lsr.Data = READ_LSR (SerialDevice);
@@ -501,6 +522,7 @@ SerialFlushTransmitFifo (
//
// Interface Functions
//
/**
Reset serial device.
@@ -516,14 +538,14 @@ SerialReset (
IN EFI_SERIAL_IO_PROTOCOL *This
)
{
EFI_STATUS Status;
SERIAL_DEV *SerialDevice;
SERIAL_PORT_LCR Lcr;
SERIAL_PORT_IER Ier;
SERIAL_PORT_MCR Mcr;
SERIAL_PORT_FCR Fcr;
EFI_TPL Tpl;
UINT32 Control;
EFI_STATUS Status;
SERIAL_DEV *SerialDevice;
SERIAL_PORT_LCR Lcr;
SERIAL_PORT_IER Ier;
SERIAL_PORT_MCR Mcr;
SERIAL_PORT_FCR Fcr;
EFI_TPL Tpl;
UINT32 Control;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
@@ -557,17 +579,17 @@ SerialReset (
//
// Turn off all interrupts
//
Ier.Data = READ_IER (SerialDevice);
Ier.Bits.Ravie = 0;
Ier.Bits.Theie = 0;
Ier.Bits.Rie = 0;
Ier.Bits.Mie = 0;
Ier.Data = READ_IER (SerialDevice);
Ier.Bits.Ravie = 0;
Ier.Bits.Theie = 0;
Ier.Bits.Rie = 0;
Ier.Bits.Mie = 0;
WRITE_IER (SerialDevice, Ier.Data);
//
// Reset the FIFO
//
Fcr.Data = 0;
Fcr.Data = 0;
Fcr.Bits.TrFIFOE = 0;
WRITE_FCR (SerialDevice, Fcr.Data);
@@ -588,12 +610,13 @@ SerialReset (
//
// Enable FIFO
//
Fcr.Bits.TrFIFOE = 1;
Fcr.Bits.TrFIFOE = 1;
if (SerialDevice->ReceiveFifoDepth > 16) {
Fcr.Bits.TrFIFO64 = 1;
}
Fcr.Bits.ResetRF = 1;
Fcr.Bits.ResetTF = 1;
Fcr.Bits.ResetRF = 1;
Fcr.Bits.ResetTF = 1;
WRITE_FCR (SerialDevice, Fcr.Data);
//
@@ -604,15 +627,16 @@ SerialReset (
This->Mode->BaudRate,
This->Mode->ReceiveFifoDepth,
This->Mode->Timeout,
(EFI_PARITY_TYPE) This->Mode->Parity,
(UINT8) This->Mode->DataBits,
(EFI_STOP_BITS_TYPE) This->Mode->StopBits
(EFI_PARITY_TYPE)This->Mode->Parity,
(UINT8)This->Mode->DataBits,
(EFI_STOP_BITS_TYPE)This->Mode->StopBits
);
if (EFI_ERROR (Status)) {
gBS->RestoreTPL (Tpl);
return EFI_DEVICE_ERROR;
}
//
// Go set the current control bits
//
@@ -620,9 +644,11 @@ SerialReset (
if (SerialDevice->HardwareFlowControl) {
Control |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE;
}
if (SerialDevice->SoftwareLoopbackEnable) {
Control |= EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE;
}
Status = This->SetControl (
This,
Control
@@ -636,7 +662,7 @@ SerialReset (
//
// Reset the software FIFO
//
SerialDevice->Receive.Head = SerialDevice->Receive.Tail = 0;
SerialDevice->Receive.Head = SerialDevice->Receive.Tail = 0;
SerialDevice->Transmit.Head = SerialDevice->Transmit.Tail = 0;
gBS->RestoreTPL (Tpl);
@@ -675,12 +701,12 @@ SerialSetAttributes (
IN EFI_STOP_BITS_TYPE StopBits
)
{
EFI_STATUS Status;
SERIAL_DEV *SerialDevice;
UINT64 Divisor;
SERIAL_PORT_LCR Lcr;
UART_DEVICE_PATH *Uart;
EFI_TPL Tpl;
EFI_STATUS Status;
SERIAL_DEV *SerialDevice;
UINT64 Divisor;
SERIAL_PORT_LCR Lcr;
UART_DEVICE_PATH *Uart;
EFI_TPL Tpl;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
@@ -700,7 +726,7 @@ SerialSetAttributes (
}
if (Parity == DefaultParity) {
Parity = (EFI_PARITY_TYPE) PcdGet8 (PcdUartDefaultParity);
Parity = (EFI_PARITY_TYPE)PcdGet8 (PcdUartDefaultParity);
}
if (DataBits == 0) {
@@ -708,7 +734,7 @@ SerialSetAttributes (
}
if (StopBits == DefaultStopBits) {
StopBits = (EFI_STOP_BITS_TYPE) PcdGet8 (PcdUartDefaultStopBits);
StopBits = (EFI_STOP_BITS_TYPE)PcdGet8 (PcdUartDefaultStopBits);
}
if (!VerifyUartParameters (SerialDevice->ClockRate, BaudRate, DataBits, Parity, StopBits, &Divisor, &BaudRate)) {
@@ -744,8 +770,8 @@ SerialSetAttributes (
//
// Write the divisor to the serial port
//
WRITE_DLL (SerialDevice, (UINT8) Divisor);
WRITE_DLM (SerialDevice, (UINT8) ((UINT16) Divisor >> 8));
WRITE_DLL (SerialDevice, (UINT8)Divisor);
WRITE_DLM (SerialDevice, (UINT8)((UINT16)Divisor >> 8));
//
// Put serial port back in normal mode and set remaining attributes.
@@ -753,98 +779,100 @@ SerialSetAttributes (
Lcr.Bits.DLab = 0;
switch (Parity) {
case NoParity:
Lcr.Bits.ParEn = 0;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 0;
break;
case NoParity:
Lcr.Bits.ParEn = 0;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 0;
break;
case EvenParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 1;
Lcr.Bits.SticPar = 0;
break;
case EvenParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 1;
Lcr.Bits.SticPar = 0;
break;
case OddParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 0;
break;
case OddParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 0;
break;
case SpaceParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 1;
Lcr.Bits.SticPar = 1;
break;
case SpaceParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 1;
Lcr.Bits.SticPar = 1;
break;
case MarkParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 1;
break;
case MarkParity:
Lcr.Bits.ParEn = 1;
Lcr.Bits.EvenPar = 0;
Lcr.Bits.SticPar = 1;
break;
default:
break;
default:
break;
}
switch (StopBits) {
case OneStopBit:
Lcr.Bits.StopB = 0;
break;
case OneStopBit:
Lcr.Bits.StopB = 0;
break;
case OneFiveStopBits:
case TwoStopBits:
Lcr.Bits.StopB = 1;
break;
case OneFiveStopBits:
case TwoStopBits:
Lcr.Bits.StopB = 1;
break;
default:
break;
default:
break;
}
//
// DataBits
//
Lcr.Bits.SerialDB = (UINT8) ((DataBits - 5) & 0x03);
Lcr.Bits.SerialDB = (UINT8)((DataBits - 5) & 0x03);
WRITE_LCR (SerialDevice, Lcr.Data);
//
// Set the Serial I/O mode
//
This->Mode->BaudRate = BaudRate;
This->Mode->ReceiveFifoDepth = ReceiveFifoDepth;
This->Mode->Timeout = Timeout;
This->Mode->Parity = Parity;
This->Mode->DataBits = DataBits;
This->Mode->StopBits = StopBits;
This->Mode->BaudRate = BaudRate;
This->Mode->ReceiveFifoDepth = ReceiveFifoDepth;
This->Mode->Timeout = Timeout;
This->Mode->Parity = Parity;
This->Mode->DataBits = DataBits;
This->Mode->StopBits = StopBits;
//
// See if Device Path Node has actually changed
//
if (SerialDevice->UartDevicePath.BaudRate == BaudRate &&
SerialDevice->UartDevicePath.DataBits == DataBits &&
SerialDevice->UartDevicePath.Parity == Parity &&
SerialDevice->UartDevicePath.StopBits == StopBits
) {
if ((SerialDevice->UartDevicePath.BaudRate == BaudRate) &&
(SerialDevice->UartDevicePath.DataBits == DataBits) &&
(SerialDevice->UartDevicePath.Parity == Parity) &&
(SerialDevice->UartDevicePath.StopBits == StopBits)
)
{
gBS->RestoreTPL (Tpl);
return EFI_SUCCESS;
}
//
// Update the device path
//
SerialDevice->UartDevicePath.BaudRate = BaudRate;
SerialDevice->UartDevicePath.DataBits = DataBits;
SerialDevice->UartDevicePath.Parity = (UINT8) Parity;
SerialDevice->UartDevicePath.StopBits = (UINT8) StopBits;
SerialDevice->UartDevicePath.Parity = (UINT8)Parity;
SerialDevice->UartDevicePath.StopBits = (UINT8)StopBits;
Status = EFI_SUCCESS;
if (SerialDevice->Handle != NULL) {
//
// Skip the optional Controller device path node
//
Uart = SkipControllerDevicePathNode (
(EFI_DEVICE_PATH_PROTOCOL *) (
(UINT8 *) SerialDevice->DevicePath + GetDevicePathSize (SerialDevice->ParentDevicePath) - END_DEVICE_PATH_LENGTH
),
(EFI_DEVICE_PATH_PROTOCOL *)(
(UINT8 *)SerialDevice->DevicePath + GetDevicePathSize (SerialDevice->ParentDevicePath) - END_DEVICE_PATH_LENGTH
),
NULL,
NULL
);
@@ -879,11 +907,11 @@ SerialSetControl (
IN UINT32 Control
)
{
SERIAL_DEV *SerialDevice;
SERIAL_PORT_MCR Mcr;
EFI_TPL Tpl;
UART_FLOW_CONTROL_DEVICE_PATH *FlowControl;
EFI_STATUS Status;
SERIAL_DEV *SerialDevice;
SERIAL_PORT_MCR Mcr;
EFI_TPL Tpl;
UART_FLOW_CONTROL_DEVICE_PATH *FlowControl;
EFI_STATUS Status;
//
// The control bits that can be set are :
@@ -900,7 +928,8 @@ SerialSetControl (
//
if ((Control & (~(EFI_SERIAL_REQUEST_TO_SEND | EFI_SERIAL_DATA_TERMINAL_READY |
EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE | EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE |
EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0) {
EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0)
{
return EFI_UNSUPPORTED;
}
@@ -915,12 +944,12 @@ SerialSetControl (
//
SerialFlushTransmitFifo (SerialDevice);
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.DtrC = 0;
Mcr.Bits.Rts = 0;
Mcr.Bits.Lme = 0;
Mcr.Data = READ_MCR (SerialDevice);
Mcr.Bits.DtrC = 0;
Mcr.Bits.Rts = 0;
Mcr.Bits.Lme = 0;
SerialDevice->SoftwareLoopbackEnable = FALSE;
SerialDevice->HardwareFlowControl = FALSE;
SerialDevice->HardwareFlowControl = FALSE;
if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {
Mcr.Bits.DtrC = 1;
@@ -946,14 +975,15 @@ SerialSetControl (
Status = EFI_SUCCESS;
if (SerialDevice->Handle != NULL) {
FlowControl = (UART_FLOW_CONTROL_DEVICE_PATH *) (
(UINTN) SerialDevice->DevicePath
+ GetDevicePathSize (SerialDevice->ParentDevicePath)
- END_DEVICE_PATH_LENGTH
+ sizeof (UART_DEVICE_PATH)
);
FlowControl = (UART_FLOW_CONTROL_DEVICE_PATH *)(
(UINTN)SerialDevice->DevicePath
+ GetDevicePathSize (SerialDevice->ParentDevicePath)
- END_DEVICE_PATH_LENGTH
+ sizeof (UART_DEVICE_PATH)
);
if (IsUartFlowControlDevicePathNode (FlowControl) &&
((BOOLEAN) (ReadUnaligned32 (&FlowControl->FlowControlMap) == UART_FLOW_CONTROL_HARDWARE) != SerialDevice->HardwareFlowControl)) {
((BOOLEAN)(ReadUnaligned32 (&FlowControl->FlowControlMap) == UART_FLOW_CONTROL_HARDWARE) != SerialDevice->HardwareFlowControl))
{
//
// Flow Control setting is changed, need to reinstall device path protocol
//
@@ -988,16 +1018,16 @@ SerialGetControl (
OUT UINT32 *Control
)
{
SERIAL_DEV *SerialDevice;
SERIAL_PORT_MSR Msr;
SERIAL_PORT_MCR Mcr;
EFI_TPL Tpl;
SERIAL_DEV *SerialDevice;
SERIAL_PORT_MSR Msr;
SERIAL_PORT_MCR Mcr;
EFI_TPL Tpl;
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
SerialDevice = SERIAL_DEV_FROM_THIS (This);
SerialDevice = SERIAL_DEV_FROM_THIS (This);
*Control = 0;
*Control = 0;
//
// Read the Modem Status Register
@@ -1019,6 +1049,7 @@ SerialGetControl (
if (Msr.Bits.Dcd == 1) {
*Control |= EFI_SERIAL_CARRIER_DETECT;
}
//
// Read the Modem Control Register
//
@@ -1039,6 +1070,7 @@ SerialGetControl (
if (SerialDevice->HardwareFlowControl) {
*Control |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE;
}
//
// Update FIFO status
//
@@ -1097,9 +1129,9 @@ SerialWrite (
UINTN Timeout;
UINTN BitsPerCharacter;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
Elapsed = 0;
ActualWrite = 0;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
Elapsed = 0;
ActualWrite = 0;
if (*BufferSize == 0) {
return EFI_SUCCESS;
@@ -1115,9 +1147,9 @@ SerialWrite (
return EFI_DEVICE_ERROR;
}
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
CharBuffer = (UINT8 *) Buffer;
CharBuffer = (UINT8 *)Buffer;
//
// Compute the number of bits in a single character. This is a start bit,
@@ -1143,10 +1175,10 @@ SerialWrite (
Timeout = MAX (
This->Mode->Timeout,
(UINTN)DivU64x64Remainder (
BitsPerCharacter * (SerialDevice->TransmitFifoDepth + 1) * 1000000,
This->Mode->BaudRate,
NULL
)
BitsPerCharacter * (SerialDevice->TransmitFifoDepth + 1) * 1000000,
This->Mode->BaudRate,
NULL
)
);
for (Index = 0; Index < *BufferSize; Index++) {
@@ -1208,8 +1240,8 @@ SerialRead (
EFI_STATUS Status;
EFI_TPL Tpl;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
Elapsed = 0;
SerialDevice = SERIAL_DEV_FROM_THIS (This);
Elapsed = 0;
if (*BufferSize == 0) {
return EFI_SUCCESS;
@@ -1219,9 +1251,9 @@ SerialRead (
return EFI_DEVICE_ERROR;
}
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
Tpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = SerialReceiveTransmit (SerialDevice);
Status = SerialReceiveTransmit (SerialDevice);
if (EFI_ERROR (Status)) {
*BufferSize = 0;
@@ -1237,7 +1269,7 @@ SerialRead (
return EFI_DEVICE_ERROR;
}
CharBuffer = (UINT8 *) Buffer;
CharBuffer = (UINT8 *)Buffer;
for (Index = 0; Index < *BufferSize; Index++) {
while (SerialFifoRemove (&SerialDevice->Receive, &(CharBuffer[Index])) != EFI_SUCCESS) {
//
@@ -1261,6 +1293,7 @@ SerialRead (
return EFI_DEVICE_ERROR;
}
}
//
// Successful read so reset timeout
//
@@ -1283,12 +1316,12 @@ SerialRead (
**/
BOOLEAN
SerialPresent (
IN SERIAL_DEV *SerialDevice
IN SERIAL_DEV *SerialDevice
)
{
UINT8 Temp;
BOOLEAN Status;
UINT8 Temp;
BOOLEAN Status;
Status = TRUE;
@@ -1307,6 +1340,7 @@ SerialPresent (
if (READ_SCR (SerialDevice) != 0x55) {
Status = FALSE;
}
//
// Restore SCR
//
@@ -1325,23 +1359,36 @@ SerialPresent (
**/
UINT8
SerialReadRegister (
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset
)
{
UINT8 Data;
EFI_STATUS Status;
UINT8 Data;
EFI_STATUS Status;
if (SerialDev->PciDeviceInfo == NULL) {
return IoRead8 ((UINTN) SerialDev->BaseAddress + Offset * SerialDev->RegisterStride);
return IoRead8 ((UINTN)SerialDev->BaseAddress + Offset * SerialDev->RegisterStride);
} else {
if (SerialDev->MmioAccess) {
Status = SerialDev->PciDeviceInfo->PciIo->Mem.Read (SerialDev->PciDeviceInfo->PciIo, EfiPciIoWidthUint8, EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, 1, &Data);
Status = SerialDev->PciDeviceInfo->PciIo->Mem.Read (
SerialDev->PciDeviceInfo->PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride,
1,
&Data
);
} else {
Status = SerialDev->PciDeviceInfo->PciIo->Io.Read (SerialDev->PciDeviceInfo->PciIo, EfiPciIoWidthUint8, EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, 1, &Data);
Status = SerialDev->PciDeviceInfo->PciIo->Io.Read (
SerialDev->PciDeviceInfo->PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride,
1,
&Data
);
}
ASSERT_EFI_ERROR (Status);
return Data;
}
@@ -1356,23 +1403,36 @@ SerialReadRegister (
**/
VOID
SerialWriteRegister (
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset,
IN UINT8 Data
IN SERIAL_DEV *SerialDev,
IN UINT32 Offset,
IN UINT8 Data
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (SerialDev->PciDeviceInfo == NULL) {
IoWrite8 ((UINTN) SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, Data);
IoWrite8 ((UINTN)SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, Data);
} else {
if (SerialDev->MmioAccess) {
Status = SerialDev->PciDeviceInfo->PciIo->Mem.Write (SerialDev->PciDeviceInfo->PciIo, EfiPciIoWidthUint8, EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, 1, &Data);
Status = SerialDev->PciDeviceInfo->PciIo->Mem.Write (
SerialDev->PciDeviceInfo->PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride,
1,
&Data
);
} else {
Status = SerialDev->PciDeviceInfo->PciIo->Io.Write (SerialDev->PciDeviceInfo->PciIo, EfiPciIoWidthUint8, EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride, 1, &Data);
Status = SerialDev->PciDeviceInfo->PciIo->Io.Write (
SerialDev->PciDeviceInfo->PciIo,
EfiPciIoWidthUint8,
EFI_PCI_IO_PASS_THROUGH_BAR,
SerialDev->BaseAddress + Offset * SerialDev->RegisterStride,
1,
&Data
);
}
ASSERT_EFI_ERROR (Status);
}
}