Dbg2.aslc 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /** @file
  2. * DBG2 Table
  3. *
  4. * Copyright (c) 2012-2016, ARM Limited. All rights reserved.
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause-Patent
  7. *
  8. **/
  9. #include "ArmPlatform.h"
  10. #include <Library/AcpiLib.h>
  11. #include <Library/ArmLib.h>
  12. #include <Library/PcdLib.h>
  13. #include <IndustryStandard/Acpi.h>
  14. #include <IndustryStandard/DebugPort2Table.h>
  15. #pragma pack(1)
  16. #define DBG2_NUM_DEBUG_PORTS 1
  17. #define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1
  18. #define DBG2_NAMESPACESTRING_FIELD_SIZE 8
  19. #define PL011_UART_LENGTH 0x1000
  20. #define NAME_STR_UART1 {'C', 'O', 'M', '1', '\0', '\0', '\0', '\0'}
  21. typedef struct {
  22. EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device;
  23. EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister;
  24. UINT32 AddressSize;
  25. UINT8 NameSpaceString[DBG2_NAMESPACESTRING_FIELD_SIZE];
  26. } DBG2_DEBUG_DEVICE_INFORMATION;
  27. typedef struct {
  28. EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE Description;
  29. DBG2_DEBUG_DEVICE_INFORMATION Dbg2DeviceInfo[DBG2_NUM_DEBUG_PORTS];
  30. } DBG2_TABLE;
  31. #define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAddrLen, UartNameStr) { \
  32. { \
  33. EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION, /* UINT8 Revision */ \
  34. sizeof (DBG2_DEBUG_DEVICE_INFORMATION), /* UINT16 Length */ \
  35. NumReg, /* UINT8 NumberofGenericAddressRegisters */ \
  36. DBG2_NAMESPACESTRING_FIELD_SIZE, /* UINT16 NameSpaceStringLength */ \
  37. OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString), /* UINT16 NameSpaceStringOffset */ \
  38. 0, /* UINT16 OemDataLength */ \
  39. 0, /* UINT16 OemDataOffset */ \
  40. EFI_ACPI_DBG2_PORT_TYPE_SERIAL, /* UINT16 Port Type */ \
  41. SubType, /* UINT16 Port Subtype */ \
  42. {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, /* UINT8 Reserved[2] */ \
  43. OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), /* UINT16 BaseAddressRegister Offset */ \
  44. OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize) /* UINT16 AddressSize Offset */ \
  45. }, \
  46. ARM_GAS32 (UartBase), /* EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \
  47. UartAddrLen, /* UINT32 AddressSize */ \
  48. UartNameStr /* UINT8 NameSpaceString[MAX_DBG2_NAME_LEN] */ \
  49. }
  50. STATIC DBG2_TABLE Dbg2 = {
  51. {
  52. ARM_ACPI_HEADER (EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATURE,
  53. DBG2_TABLE,
  54. EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION),
  55. OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo),
  56. DBG2_NUM_DEBUG_PORTS /* UINT32 NumberDbgDeviceInfo */
  57. },
  58. {
  59. /*
  60. * Kernel Debug Port
  61. */
  62. DBG2_DEBUG_PORT_DDI (DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS,
  63. EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART,
  64. FixedPcdGet64 (PcdSerialDbgRegisterBase),
  65. PL011_UART_LENGTH,
  66. NAME_STR_UART1),
  67. }
  68. };
  69. #pragma pack()
  70. //
  71. // Reference the table being generated to prevent the optimizer from removing
  72. // the data structure from the executable
  73. //
  74. VOID* CONST ReferenceAcpiTable = &Dbg2;