Basic serial IO abstaction for GDB\r
\r
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
- \r
+\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
\r
/**\r
The constructor function initializes the UART.\r
- \r
+\r
@param ImageHandle The firmware allocated handle for the EFI image.\r
@param SystemTable A pointer to the EFI System Table.\r
- \r
+\r
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.\r
\r
**/\r
UINT8 DataBits;\r
UINT8 Parity;\r
UINT8 StopBits;\r
- \r
+\r
gPort = (UINTN)PcdGet32 (PcdGdbUartPort);\r
- \r
+\r
BaudRate = PcdGet64 (PcdGdbBaudRate);\r
Parity = PcdGet8 (PcdGdbParity);\r
DataBits = PcdGet8 (PcdGdbDataBits);\r
\r
\r
/**\r
- Sets the baud rate, receive FIFO depth, transmit/receice time out, parity, \r
+ Sets the baud rate, receive FIFO depth, transmit/receice time out, parity,\r
data buts, and stop bits on a serial device. This call is optional as the serial\r
port will be set up with defaults base on PCD values.\r
\r
RETURN_STATUS\r
EFIAPI\r
GdbSerialInit (\r
- IN UINT64 BaudRate, \r
- IN UINT8 Parity, \r
- IN UINT8 DataBits, \r
- IN UINT8 StopBits \r
+ IN UINT64 BaudRate,\r
+ IN UINT8 Parity,\r
+ IN UINT8 DataBits,\r
+ IN UINT8 StopBits\r
)\r
{\r
UINTN Divisor;\r
//\r
// We assume the UART has been turned on to decode gPort address range\r
//\r
- \r
+\r
//\r
// Map 5..8 to 0..3\r
//\r
//\r
// Calculate divisor for baud generator\r
//\r
- Divisor = 115200/(UINTN)BaudRate; \r
- \r
+ Divisor = 115200/(UINTN)BaudRate;\r
+\r
//\r
// Set communications format\r
//\r
Check to see if a character is available from GDB. Do not read the character as that is\r
done via GdbGetChar().\r
\r
- @return TRUE - Character availible\r
- @return FALSE - Character not availible\r
- \r
+ @return TRUE - Character available\r
+ @return FALSE - Character not available\r
+\r
**/\r
BOOLEAN\r
EFIAPI\r
GdbIsCharAvailable (\r
VOID\r
- ) \r
+ )\r
{\r
UINT8 Data;\r
- \r
+\r
Data = IoRead8 (gPort + LSR_OFFSET);\r
- \r
+\r
return ((Data & LSR_RXDA) == LSR_RXDA);\r
}\r
\r
Get a character from GDB. This function must be able to run in interrupt context.\r
\r
@return A character from GDB\r
- \r
+\r
**/\r
CHAR8\r
EFIAPI\r
} while ((Data & LSR_RXDA) == 0);\r
\r
Char = IoRead8 (gPort);\r
- \r
+\r
// Make this an EFI_D_INFO after we get everything debugged.\r
DEBUG ((EFI_D_ERROR, "<%c<", Char));\r
return Char;\r
)\r
{\r
UINT8 Data;\r
- \r
+\r
// Make this an EFI_D_INFO after we get everything debugged.\r
DEBUG ((EFI_D_ERROR, ">%c>", Char));\r
- \r
+\r
// Wait for the serial port to be ready\r
do {\r
Data = IoRead8 (gPort + LSR_OFFSET);\r
} while ((Data & LSR_TXRDY) == 0);\r
- \r
+\r
IoWrite8 (gPort, Char);\r
}\r
\r