#include <Library/IoLib.h>\r
#include <Library/SerialPortLib.h>\r
\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
// UART Register Offsets\r
-//---------------------------------------------\r
-#define BAUD_LOW_OFFSET 0x00\r
-#define BAUD_HIGH_OFFSET 0x01\r
-#define IER_OFFSET 0x01\r
-#define LCR_SHADOW_OFFSET 0x01\r
-#define FCR_SHADOW_OFFSET 0x02\r
-#define IR_CONTROL_OFFSET 0x02\r
-#define FCR_OFFSET 0x02\r
-#define EIR_OFFSET 0x02\r
-#define BSR_OFFSET 0x03\r
-#define LCR_OFFSET 0x03\r
-#define MCR_OFFSET 0x04\r
-#define LSR_OFFSET 0x05\r
-#define MSR_OFFSET 0x06\r
-\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
+#define BAUD_LOW_OFFSET 0x00\r
+#define BAUD_HIGH_OFFSET 0x01\r
+#define IER_OFFSET 0x01\r
+#define LCR_SHADOW_OFFSET 0x01\r
+#define FCR_SHADOW_OFFSET 0x02\r
+#define IR_CONTROL_OFFSET 0x02\r
+#define FCR_OFFSET 0x02\r
+#define EIR_OFFSET 0x02\r
+#define BSR_OFFSET 0x03\r
+#define LCR_OFFSET 0x03\r
+#define MCR_OFFSET 0x04\r
+#define LSR_OFFSET 0x05\r
+#define MSR_OFFSET 0x06\r
+\r
+// ---------------------------------------------\r
// UART Register Bit Defines\r
-//---------------------------------------------\r
-#define LSR_TXRDY 0x20\r
-#define LSR_RXDA 0x01\r
-#define DLAB 0x01\r
-#define MCR_DTRC 0x01\r
-#define MCR_RTS 0x02\r
-#define MSR_CTS 0x10\r
-#define MSR_DSR 0x20\r
-#define MSR_RI 0x40\r
-#define MSR_DCD 0x80\r
-\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
+#define LSR_TXRDY 0x20\r
+#define LSR_RXDA 0x01\r
+#define DLAB 0x01\r
+#define MCR_DTRC 0x01\r
+#define MCR_RTS 0x02\r
+#define MSR_CTS 0x10\r
+#define MSR_DSR 0x20\r
+#define MSR_RI 0x40\r
+#define MSR_DCD 0x80\r
+\r
+// ---------------------------------------------\r
// UART Settings\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
UINT16 gUartBase = 0x3F8;\r
UINTN gBps = 115200;\r
UINT8 gData = 8;\r
//\r
// Map 5..8 to 0..3\r
//\r
- Data = (UINT8) (gData - (UINT8) 5);\r
+ Data = (UINT8)(gData - (UINT8)5);\r
\r
//\r
// Calculate divisor for baud generator\r
//\r
// Set communications format\r
//\r
- OutputData = (UINT8) ((DLAB << 7) | (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
+ OutputData = (UINT8)((DLAB << 7) | (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
//\r
// Configure baud rate\r
//\r
- IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));\r
- IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));\r
+ IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8)(Divisor >> 8));\r
+ IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8)(Divisor & 0xff));\r
\r
//\r
// Switch back to bank 0\r
//\r
- OutputData = (UINT8) ( (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
+ OutputData = (UINT8)((gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
return RETURN_SUCCESS;\r
UINTN\r
EFIAPI\r
SerialPortWrite (\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
-)\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
+ )\r
{\r
UINTN Result;\r
UINT8 Data;\r
// Wait for the serial port to be ready.\r
//\r
do {\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
} while ((Data & LSR_TXRDY) == 0);\r
- IoWrite8 ((UINT16) gUartBase, *Buffer++);\r
+\r
+ IoWrite8 ((UINT16)gUartBase, *Buffer++);\r
}\r
\r
return Result;\r
}\r
\r
-\r
/**\r
Reads data from a serial device into a buffer.\r
\r
UINTN\r
EFIAPI\r
SerialPortRead (\r
- OUT UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
-)\r
+ OUT UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
+ )\r
{\r
UINTN Result;\r
UINT8 Data;\r
// Wait for the serial port to be ready.\r
//\r
do {\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
} while ((Data & LSR_RXDA) == 0);\r
\r
- *Buffer++ = IoRead8 ((UINT16) gUartBase);\r
+ *Buffer++ = IoRead8 ((UINT16)gUartBase);\r
}\r
\r
return Result;\r
//\r
// Read the serial port status.\r
//\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
\r
- return (BOOLEAN) ((Data & LSR_RXDA) != 0);\r
+ return (BOOLEAN)((Data & LSR_RXDA) != 0);\r
}\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
SerialPortSetControl (\r
- IN UINT32 Control\r
+ IN UINT32 Control\r
)\r
{\r
- UINT8 Mcr;\r
+ UINT8 Mcr;\r
\r
//\r
// First determine the parameter is invalid.\r
//\r
// Read the Modem Control Register.\r
//\r
- Mcr = IoRead8 ((UINT16) gUartBase + MCR_OFFSET);\r
+ Mcr = IoRead8 ((UINT16)gUartBase + MCR_OFFSET);\r
Mcr &= (~(MCR_DTRC | MCR_RTS));\r
\r
if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {\r
//\r
// Write the Modem Control Register.\r
//\r
- IoWrite8 ((UINT16) gUartBase + MCR_OFFSET, Mcr);\r
+ IoWrite8 ((UINT16)gUartBase + MCR_OFFSET, Mcr);\r
\r
return RETURN_SUCCESS;\r
}\r
RETURN_STATUS\r
EFIAPI\r
SerialPortGetControl (\r
- OUT UINT32 *Control\r
+ OUT UINT32 *Control\r
)\r
{\r
- UINT8 Msr;\r
- UINT8 Mcr;\r
- UINT8 Lsr;\r
+ UINT8 Msr;\r
+ UINT8 Mcr;\r
+ UINT8 Lsr;\r
\r
*Control = 0;\r
\r
//\r
// Read the Modem Status Register.\r
//\r
- Msr = IoRead8 ((UINT16) gUartBase + MSR_OFFSET);\r
+ Msr = IoRead8 ((UINT16)gUartBase + MSR_OFFSET);\r
\r
if ((Msr & MSR_CTS) == MSR_CTS) {\r
*Control |= EFI_SERIAL_CLEAR_TO_SEND;\r
//\r
// Read the Modem Control Register.\r
//\r
- Mcr = IoRead8 ((UINT16) gUartBase + MCR_OFFSET);\r
+ Mcr = IoRead8 ((UINT16)gUartBase + MCR_OFFSET);\r
\r
if ((Mcr & MCR_DTRC) == MCR_DTRC) {\r
*Control |= EFI_SERIAL_DATA_TERMINAL_READY;\r
//\r
// Read the Line Status Register.\r
//\r
- Lsr = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Lsr = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
\r
if ((Lsr & LSR_TXRDY) == LSR_TXRDY) {\r
*Control |= EFI_SERIAL_OUTPUT_BUFFER_EMPTY;\r
RETURN_STATUS\r
EFIAPI\r
SerialPortSetAttributes (\r
- IN OUT UINT64 *BaudRate,\r
- IN OUT UINT32 *ReceiveFifoDepth,\r
- IN OUT UINT32 *Timeout,\r
- IN OUT EFI_PARITY_TYPE *Parity,\r
- IN OUT UINT8 *DataBits,\r
- IN OUT EFI_STOP_BITS_TYPE *StopBits\r
+ IN OUT UINT64 *BaudRate,\r
+ IN OUT UINT32 *ReceiveFifoDepth,\r
+ IN OUT UINT32 *Timeout,\r
+ IN OUT EFI_PARITY_TYPE *Parity,\r
+ IN OUT UINT8 *DataBits,\r
+ IN OUT EFI_STOP_BITS_TYPE *StopBits\r
)\r
{\r
- UINTN Divisor;\r
- UINT8 OutputData;\r
- UINT8 LcrData;\r
- UINT8 LcrParity;\r
- UINT8 LcrStop;\r
+ UINTN Divisor;\r
+ UINT8 OutputData;\r
+ UINT8 LcrData;\r
+ UINT8 LcrParity;\r
+ UINT8 LcrStop;\r
\r
//\r
// Check for default settings and fill in actual values.\r
//\r
// Map 5..8 to 0..3\r
//\r
- LcrData = (UINT8) (*DataBits - (UINT8) 5);\r
+ LcrData = (UINT8)(*DataBits - (UINT8)5);\r
\r
switch (*Parity) {\r
case NoParity:\r
//\r
// Calculate divisor for baud generator\r
//\r
- Divisor = 115200 / (UINTN) *BaudRate;\r
+ Divisor = 115200 / (UINTN)*BaudRate;\r
\r
//\r
// Set communications format\r
//\r
- OutputData = (UINT8) ((DLAB << 7) | (gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
+ OutputData = (UINT8)((DLAB << 7) | (gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
//\r
// Configure baud rate\r
//\r
- IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));\r
- IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));\r
+ IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8)(Divisor >> 8));\r
+ IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8)(Divisor & 0xff));\r
\r
//\r
// Switch back to bank 0\r
//\r
- OutputData = (UINT8) ((gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
+ OutputData = (UINT8)((gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
return RETURN_SUCCESS;\r
}\r
-\r