SpcrPl011.aslc 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /** @file
  2. * SPCR Table
  3. *
  4. * Copyright (c) 2019 Pete Batard <pete@akeo.ie>
  5. * Copyright (c) 2014-2021, ARM Limited. All rights reserved.
  6. *
  7. * SPDX-License-Identifier: BSD-2-Clause-Patent
  8. *
  9. **/
  10. #include <IndustryStandard/Acpi.h>
  11. #include <IndustryStandard/Bcm2836.h>
  12. #include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
  13. #include <Library/AcpiLib.h>
  14. #include <Library/PcdLib.h>
  15. #include "AcpiTables.h"
  16. #define RPI_UART_FLOW_CONTROL_NONE 0
  17. #define RPI_UART_INTERFACE_TYPE EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART
  18. #define RPI_UART_BASE_ADDRESS BCM2836_PL011_UART_BASE_ADDRESS
  19. #define RPI_UART_INTERRUPT BCM2836_PL011_UART_INTERRUPT
  20. STATIC EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = {
  21. ACPI_HEADER (
  22. EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
  23. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE,
  24. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION
  25. ),
  26. // UINT8 InterfaceType;
  27. RPI_UART_INTERFACE_TYPE,
  28. // UINT8 Reserved1[3];
  29. {
  30. EFI_ACPI_RESERVED_BYTE,
  31. EFI_ACPI_RESERVED_BYTE,
  32. EFI_ACPI_RESERVED_BYTE
  33. },
  34. // EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE BaseAddress;
  35. ARM_GAS32 (RPI_UART_BASE_ADDRESS),
  36. // UINT8 InterruptType;
  37. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC,
  38. // UINT8 Irq;
  39. 0, // Not used on ARM
  40. // UINT32 GlobalSystemInterrupt;
  41. RPI_UART_INTERRUPT,
  42. // UINT8 BaudRate;
  43. #if (FixedPcdGet64 (PcdUartDefaultBaudRate) == 9600)
  44. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_9600,
  45. #elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 19200)
  46. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_19200,
  47. #elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 57600)
  48. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,
  49. #elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 115200)
  50. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200,
  51. #else
  52. #error Unsupported SPCR Baud Rate
  53. #endif
  54. // UINT8 Parity;
  55. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,
  56. // UINT8 StopBits;
  57. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_STOP_BITS_1,
  58. // UINT8 FlowControl;
  59. RPI_UART_FLOW_CONTROL_NONE,
  60. // UINT8 TerminalType;
  61. EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMINAL_TYPE_VT_UTF8,
  62. // UINT8 Reserved2;
  63. EFI_ACPI_RESERVED_BYTE,
  64. // UINT16 PciDeviceId;
  65. 0xFFFF,
  66. // UINT16 PciVendorId;
  67. 0xFFFF,
  68. // UINT8 PciBusNumber;
  69. 0x00,
  70. // UINT8 PciDeviceNumber;
  71. 0x00,
  72. // UINT8 PciFunctionNumber;
  73. 0x00,
  74. // UINT32 PciFlags;
  75. 0x00000000,
  76. // UINT8 PciSegment;
  77. 0x00,
  78. // UINT32 Reserved3;
  79. EFI_ACPI_RESERVED_DWORD
  80. };
  81. //
  82. // Reference the table being generated to prevent the optimizer from removing the
  83. // data structure from the executable
  84. //
  85. VOID* CONST ReferenceAcpiTable = &Spcr;