GdbSerialLib.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /** @file
  2. Basic serial IO abstaction for GDB
  3. Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <Uefi.h>
  7. #include <Library/GdbSerialLib.h>
  8. #include <Library/PcdLib.h>
  9. #include <Library/IoLib.h>
  10. #include <Library/DebugLib.h>
  11. #include <Library/OmapLib.h>
  12. #include <Omap3530/Omap3530.h>
  13. RETURN_STATUS
  14. EFIAPI
  15. GdbSerialLibConstructor (
  16. VOID
  17. )
  18. {
  19. return RETURN_SUCCESS;
  20. }
  21. RETURN_STATUS
  22. EFIAPI
  23. GdbSerialInit (
  24. IN UINT64 BaudRate,
  25. IN UINT8 Parity,
  26. IN UINT8 DataBits,
  27. IN UINT8 StopBits
  28. )
  29. {
  30. return RETURN_SUCCESS;
  31. }
  32. BOOLEAN
  33. EFIAPI
  34. GdbIsCharAvailable (
  35. VOID
  36. )
  37. {
  38. UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
  39. if ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_NOT_EMPTY) {
  40. return TRUE;
  41. } else {
  42. return FALSE;
  43. }
  44. }
  45. CHAR8
  46. EFIAPI
  47. GdbGetChar (
  48. VOID
  49. )
  50. {
  51. UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
  52. UINT32 RBR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_RBR_REG;
  53. CHAR8 Char;
  54. while ((MmioRead8(LSR) & UART_LSR_RX_FIFO_E_MASK) == UART_LSR_RX_FIFO_E_EMPTY);
  55. Char = MmioRead8(RBR);
  56. return Char;
  57. }
  58. VOID
  59. EFIAPI
  60. GdbPutChar (
  61. IN CHAR8 Char
  62. )
  63. {
  64. UINT32 LSR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_LSR_REG;
  65. UINT32 THR = UartBase(PcdGet32(PcdOmap35xxConsoleUart)) + UART_THR_REG;
  66. while ((MmioRead8(LSR) & UART_LSR_TX_FIFO_E_MASK) == UART_LSR_TX_FIFO_E_NOT_EMPTY);
  67. MmioWrite8(THR, Char);
  68. }
  69. VOID
  70. GdbPutString (
  71. IN CHAR8 *String
  72. )
  73. {
  74. while (*String != '\0') {
  75. GdbPutChar (*String);
  76. String++;
  77. }
  78. }