/** @file * DBG2 Table * * Copyright (c) 2012-2016, ARM Limited. All rights reserved. * * This program and the accompanying materials * are licensed and made available under the terms and conditions of the BSD License * which accompanies this distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. * **/ #include "ArmPlatform.h" #include #include #include #include #include #pragma pack(1) #define DBG2_NUM_DEBUG_PORTS 1 #define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1 #define DBG2_NAMESPACESTRING_FIELD_SIZE 8 #define PL011_UART_LENGTH 0x1000 #define NAME_STR_UART1 {'C', 'O', 'M', '1', '\0', '\0', '\0', '\0'} typedef struct { EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device; EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister; UINT32 AddressSize; UINT8 NameSpaceString[DBG2_NAMESPACESTRING_FIELD_SIZE]; } DBG2_DEBUG_DEVICE_INFORMATION; typedef struct { EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE Description; DBG2_DEBUG_DEVICE_INFORMATION Dbg2DeviceInfo[DBG2_NUM_DEBUG_PORTS]; } DBG2_TABLE; #define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAddrLen, UartNameStr) { \ { \ EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION, /* UINT8 Revision */ \ sizeof (DBG2_DEBUG_DEVICE_INFORMATION), /* UINT16 Length */ \ NumReg, /* UINT8 NumberofGenericAddressRegisters */ \ DBG2_NAMESPACESTRING_FIELD_SIZE, /* UINT16 NameSpaceStringLength */ \ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString), /* UINT16 NameSpaceStringOffset */ \ 0, /* UINT16 OemDataLength */ \ 0, /* UINT16 OemDataOffset */ \ EFI_ACPI_DBG2_PORT_TYPE_SERIAL, /* UINT16 Port Type */ \ SubType, /* UINT16 Port Subtype */ \ {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, /* UINT8 Reserved[2] */ \ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), /* UINT16 BaseAddressRegister Offset */ \ OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize) /* UINT16 AddressSize Offset */ \ }, \ ARM_GAS32 (UartBase), /* EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */ \ UartAddrLen, /* UINT32 AddressSize */ \ UartNameStr /* UINT8 NameSpaceString[MAX_DBG2_NAME_LEN] */ \ } STATIC DBG2_TABLE Dbg2 = { { ARM_ACPI_HEADER (EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATURE, DBG2_TABLE, EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION), OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo), DBG2_NUM_DEBUG_PORTS /* UINT32 NumberDbgDeviceInfo */ }, { /* * Kernel Debug Port */ DBG2_DEBUG_PORT_DDI (DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS, EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART, FixedPcdGet64 (PcdSerialDbgRegisterBase), PL011_UART_LENGTH, NAME_STR_UART1), } }; #pragma pack() // // Reference the table being generated to prevent the optimizer from removing // the data structure from the executable // VOID* CONST ReferenceAcpiTable = &Dbg2;