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
GdbSerialLibConstructor(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE * SystemTable)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
GdbSerialInit(IN UINT64 BaudRate,IN UINT8 Parity,IN UINT8 DataBits,IN UINT8 StopBits)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
GdbIsCharAvailable(VOID)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
GdbGetChar(VOID)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
GdbPutChar(IN CHAR8 Char)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
GdbPutString(IN CHAR8 * String)91 GdbPutString (
92 IN CHAR8 *String
93 )
94 {
95 while (*String != '\0') {
96 GdbPutChar (*String);
97 String++;
98 }
99 }
100
101
102
103
104