Home | History | Annotate | Download | only in GdbSerialLib
      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   IN EFI_HANDLE        ImageHandle,
     28   IN EFI_SYSTEM_TABLE  *SystemTable
     29   )
     30 {
     31   return RETURN_SUCCESS;
     32 }
     33 
     34 RETURN_STATUS
     35 EFIAPI
     36 GdbSerialInit (
     37   IN UINT64     BaudRate,
     38   IN UINT8      Parity,
     39   IN UINT8      DataBits,
     40   IN UINT8      StopBits
     41   )
     42 {
     43   return RETURN_SUCCESS;
     44 }
     45 
     46 BOOLEAN
     47 EFIAPI
     48 GdbIsCharAvailable (
     49   VOID
     50   )
     51 {
     52   UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
     53 
     54   if ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_NOT_EMPTY) {
     55     return TRUE;
     56   } else {
     57     return FALSE;
     58   }
     59 }
     60 
     61 CHAR8
     62 EFIAPI
     63 GdbGetChar (
     64   VOID
     65   )
     66 {
     67   UINT32  LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
     68   UINT32  RBR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_RBR_REG;
     69   CHAR8   Char;
     70 
     71   while ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_EMPTY);
     72   Char = MmioRead8(RBR);
     73 
     74   return Char;
     75 }
     76 
     77 VOID
     78 EFIAPI
     79 GdbPutChar (
     80   IN  CHAR8   Char
     81   )
     82 {
     83   UINT32  LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
     84   UINT32  THR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_THR_REG;
     85 
     86   while ((MmioRead8(LSR) & UART_LSR_TX_FIFO_E_MASK) == UART_LSR_TX_FIFO_E_NOT_EMPTY);
     87   MmioWrite8(THR, Char);
     88 }
     89 
     90 VOID
     91 GdbPutString (
     92   IN CHAR8  *String
     93   )
     94 {
     95   while (*String != '\0') {
     96     GdbPutChar (*String);
     97     String++;
     98   }
     99 }
    100 
    101 
    102 
    103 
    104