Home | History | Annotate | Download | only in AcpiTables
      1 /** @file
      2 *  DBG2 Table
      3 *
      4 *  Copyright (c) 2012-2016, ARM Limited. All rights reserved.
      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 "ArmPlatform.h"
     17 #include <Library/AcpiLib.h>
     18 #include <Library/ArmLib.h>
     19 #include <Library/PcdLib.h>
     20 #include <IndustryStandard/Acpi.h>
     21 #include <IndustryStandard/DebugPort2Table.h>
     22 
     23 #pragma pack(1)
     24 
     25 #define DBG2_NUM_DEBUG_PORTS                       1
     26 #define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS   1
     27 #define DBG2_NAMESPACESTRING_FIELD_SIZE            8
     28 #define PL011_UART_LENGTH                          0x1000
     29 
     30 #define NAME_STR_UART1     {'C', 'O', 'M', '1', '\0', '\0', '\0', '\0'}
     31 
     32 typedef struct {
     33   EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device;
     34   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE        BaseAddressRegister;
     35   UINT32                                        AddressSize;
     36   UINT8                                         NameSpaceString[DBG2_NAMESPACESTRING_FIELD_SIZE];
     37 } DBG2_DEBUG_DEVICE_INFORMATION;
     38 
     39 typedef struct {
     40   EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE       Description;
     41   DBG2_DEBUG_DEVICE_INFORMATION                 Dbg2DeviceInfo[DBG2_NUM_DEBUG_PORTS];
     42 } DBG2_TABLE;
     43 
     44 
     45 #define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAddrLen, UartNameStr) {                                    \
     46     {                                                                                                                 \
     47       EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,         /* UINT8     Revision */                        \
     48       sizeof (DBG2_DEBUG_DEVICE_INFORMATION),                         /* UINT16    Length */                          \
     49       NumReg,                                                         /* UINT8     NumberofGenericAddressRegisters */ \
     50       DBG2_NAMESPACESTRING_FIELD_SIZE,                                /* UINT16    NameSpaceStringLength */           \
     51       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString),     /* UINT16    NameSpaceStringOffset */           \
     52       0,                                                              /* UINT16    OemDataLength */                   \
     53       0,                                                              /* UINT16    OemDataOffset */                   \
     54       EFI_ACPI_DBG2_PORT_TYPE_SERIAL,                                 /* UINT16    Port Type */                       \
     55       SubType,                                                        /* UINT16    Port Subtype */                    \
     56       {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE},               /* UINT8     Reserved[2] */                     \
     57       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), /* UINT16    BaseAddressRegister Offset */      \
     58       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize)          /* UINT16    AddressSize Offset */              \
     59     },                                                                                                                \
     60     ARM_GAS32 (UartBase),                            /* EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \
     61     UartAddrLen,                                     /* UINT32  AddressSize */                                        \
     62     UartNameStr                                      /* UINT8   NameSpaceString[MAX_DBG2_NAME_LEN] */                 \
     63   }
     64 
     65 
     66 STATIC DBG2_TABLE Dbg2 = {
     67   {
     68     ARM_ACPI_HEADER (EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATURE,
     69                        DBG2_TABLE,
     70                        EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION),
     71     OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo),
     72     DBG2_NUM_DEBUG_PORTS                                              /* UINT32  NumberDbgDeviceInfo */
     73   },
     74   {
     75     /*
     76      * Kernel Debug Port
     77      */
     78     DBG2_DEBUG_PORT_DDI (DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS,
     79                           EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART,
     80                           FixedPcdGet64 (PcdSerialDbgRegisterBase),
     81                           PL011_UART_LENGTH,
     82                           NAME_STR_UART1),
     83   }
     84 };
     85 
     86 #pragma pack()
     87 
     88 //
     89 // Reference the table being generated to prevent the optimizer from removing
     90 // the data structure from the executable
     91 //
     92 VOID* CONST ReferenceAcpiTable = &Dbg2;
     93