+++ /dev/null
-/** @file\r
- Basic serial IO abstaction for GDB\r
-\r
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\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
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-#include <Library/GdbSerialLib.h>\r
-#include <Library/PcdLib.h>\r
-#include <Library/IoLib.h>\r
-#include <Drivers/PL011Uart.h>\r
-\r
-RETURN_STATUS\r
-EFIAPI\r
-GdbSerialLibConstructor (\r
- VOID\r
- )\r
-{\r
- return GdbSerialInit (115200, 0, 8, 1);\r
-}\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
- )\r
-{\r
- if ((Parity != 0) || (DataBits != 8) || (StopBits != 1)) {\r
- return RETURN_UNSUPPORTED;\r
- }\r
-\r
- if (BaudRate != 115200) {\r
- // Could add support for different Baud rates....\r
- return RETURN_UNSUPPORTED;\r
- }\r
-\r
- UINT32 Base = PcdGet32 (PcdGdbUartBase);\r
-\r
- // initialize baud rate generator to 115200 based on EB clock REFCLK24MHZ\r
- MmioWrite32 (Base + UARTIBRD, UART_115200_IDIV);\r
- MmioWrite32 (Base + UARTFBRD, UART_115200_FDIV);\r
-\r
- // no parity, 1 stop, no fifo, 8 data bits\r
- MmioWrite32 (Base + UARTLCR_H, 0x60);\r
-\r
- // clear any pending errors\r
- MmioWrite32 (Base + UARTECR, 0);\r
-\r
- // enable tx, rx, and uart overall\r
- MmioWrite32 (Base + UARTCR, 0x301);\r
-\r
- return RETURN_SUCCESS;\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-GdbIsCharAvailable (\r
- VOID\r
- )\r
-{\r
- UINT32 FR = PcdGet32 (PcdGdbUartBase) + UARTFR;\r
-\r
- if ((MmioRead32 (FR) & UART_RX_EMPTY_FLAG_MASK) == 0) {\r
- return TRUE;\r
- } else {\r
- return FALSE;\r
- }\r
-}\r
-\r
-CHAR8\r
-EFIAPI\r
-GdbGetChar (\r
- VOID\r
- )\r
-{\r
- UINT32 FR = PcdGet32 (PcdGdbUartBase) + UARTFR;\r
- UINT32 DR = PcdGet32 (PcdGdbUartBase) + UARTDR;\r
-\r
- while ((MmioRead32 (FR) & UART_RX_EMPTY_FLAG_MASK) == 0);\r
- return MmioRead8 (DR);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-GdbPutChar (\r
- IN CHAR8 Char\r
- )\r
-{\r
- UINT32 FR = PcdGet32 (PcdGdbUartBase) + UARTFR;\r
- UINT32 DR = PcdGet32 (PcdGdbUartBase) + UARTDR;\r
-\r
- while ((MmioRead32 (FR) & UART_TX_EMPTY_FLAG_MASK) != 0);\r
- MmioWrite8 (DR, Char);\r
- return;\r
-}\r
-\r
-VOID\r
-GdbPutString (\r
- IN CHAR8 *String\r
- )\r
-{\r
- while (*String != '\0') {\r
- GdbPutChar (*String);\r
- String++;\r
- }\r
-}\r