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:
committed by
mergify[bot]
parent
7c7184e201
commit
1436aea4d5
@@ -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
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user