1 /** @file 2 Basic serial IO abstaction for GDB 3 4 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 5 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #include <Uefi.h> 17 #include <Library/GdbSerialLib.h> 18 #include <Library/PcdLib.h> 19 #include <Library/IoLib.h> 20 #include <Library/DebugLib.h> 21 #include <Library/OmapLib.h> 22 #include <Omap3530/Omap3530.h> 23 24 RETURN_STATUS 25 EFIAPI 26 GdbSerialLibConstructor ( 27 VOID 28 ) 29 { 30 return RETURN_SUCCESS; 31 } 32 33 RETURN_STATUS 34 EFIAPI 35 GdbSerialInit ( 36 IN UINT64 BaudRate, 37 IN UINT8 Parity, 38 IN UINT8 DataBits, 39 IN UINT8 StopBits 40 ) 41 { 42 return RETURN_SUCCESS; 43 } 44 45 BOOLEAN 46 EFIAPI 47 GdbIsCharAvailable ( 48 VOID 49 ) 50 { 51 UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG; 52 53 if ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_NOT_EMPTY) { 54 return TRUE; 55 } else { 56 return FALSE; 57 } 58 } 59 60 CHAR8 61 EFIAPI 62 GdbGetChar ( 63 VOID 64 ) 65 { 66 UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG; 67 UINT32 RBR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_RBR_REG; 68 CHAR8 Char; 69 70 while ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_EMPTY); 71 Char = MmioRead8(RBR); 72 73 return Char; 74 } 75 76 VOID 77 EFIAPI 78 GdbPutChar ( 79 IN CHAR8 Char 80 ) 81 { 82 UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG; 83 UINT32 THR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_THR_REG; 84 85 while ((MmioRead8(LSR) & UART_LSR_TX_FIFO_E_MASK) == UART_LSR_TX_FIFO_E_NOT_EMPTY); 86 MmioWrite8(THR, Char); 87 } 88 89 VOID 90 GdbPutString ( 91 IN CHAR8 *String 92 ) 93 { 94 while (*String != '\0') { 95 GdbPutChar (*String); 96 String++; 97 } 98 } 99 100 101 102 103