]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c
DynamicTablesPkg: Apply uncrustify changes
[mirror_edk2.git] / DynamicTablesPkg / Library / Acpi / Arm / AcpiDbg2LibArm / Dbg2Generator.c
index d902bbc8463921624f1a6333e8d6bd84c6cb38f2..3d513dbd1fbe8c47d270a9e639b2797098201d91 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   DBG2 Table Generator\r
 \r
-  Copyright (c) 2017 - 2020, Arm Limited. All rights reserved.<BR>\r
+  Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR>\r
 \r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -40,48 +40,48 @@ Requirements:
 \r
 /** The number of debug ports represented by the Table.\r
 */\r
-#define DBG2_NUM_DEBUG_PORTS                       1\r
+#define DBG2_NUM_DEBUG_PORTS  1\r
 \r
 /** The number of Generic Address Registers\r
     presented in the debug device information.\r
 */\r
-#define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS   1\r
+#define DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS  1\r
 \r
 /** The index for the debug port 0 in the Debug port information list.\r
 */\r
-#define INDEX_DBG_PORT0                            0\r
+#define INDEX_DBG_PORT0  0\r
 \r
 /** A string representing the name of the debug port 0.\r
 */\r
-#define NAME_STR_DBG_PORT0                         "COM0"\r
+#define NAME_STR_DBG_PORT0  "COM0"\r
 \r
 /** An UID representing the debug port 0.\r
 */\r
-#define UID_DBG_PORT0                              0\r
+#define UID_DBG_PORT0  0\r
 \r
 /** The length of the namespace string.\r
 */\r
-#define DBG2_NAMESPACESTRING_FIELD_SIZE            sizeof (NAME_STR_DBG_PORT0)\r
+#define DBG2_NAMESPACESTRING_FIELD_SIZE  sizeof (NAME_STR_DBG_PORT0)\r
 \r
 /** The PL011 UART address range length.\r
 */\r
-#define PL011_UART_LENGTH                          0x1000\r
+#define PL011_UART_LENGTH  0x1000\r
 \r
 /** A structure that provides the OS with the required information\r
     for initializing a debugger connection.\r
 */\r
 typedef struct {\r
   /// The debug device information for the platform\r
-  EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device;\r
+  EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT    Dbg2Device;\r
 \r
   /// The base address register for the serial port\r
-  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE        BaseAddressRegister;\r
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE           BaseAddressRegister;\r
 \r
   /// The address size\r
-  UINT32 AddressSize;\r
+  UINT32                                           AddressSize;\r
 \r
   /// The debug port name string\r
-  UINT8  NameSpaceString[DBG2_NAMESPACESTRING_FIELD_SIZE];\r
+  UINT8                                            NameSpaceString[DBG2_NAMESPACESTRING_FIELD_SIZE];\r
 } DBG2_DEBUG_DEVICE_INFORMATION;\r
 \r
 /** A structure representing the information about the debug port(s)\r
@@ -89,10 +89,10 @@ typedef struct {
 */\r
 typedef struct {\r
   /// The DBG2 table header\r
-  EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE Description;\r
+  EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE    Description;\r
 \r
   /// Debug port information list\r
-  DBG2_DEBUG_DEVICE_INFORMATION       Dbg2DeviceInfo[DBG2_NUM_DEBUG_PORTS];\r
+  DBG2_DEBUG_DEVICE_INFORMATION              Dbg2DeviceInfo[DBG2_NUM_DEBUG_PORTS];\r
 } DBG2_TABLE;\r
 \r
 /** A helper macro used for initializing the debug port device\r
@@ -104,42 +104,42 @@ typedef struct {
   @param [in]  UartNameStr  The UART port name string.\r
 **/\r
 #define DBG2_DEBUG_PORT_DDI(                                          \\r
-          SubType,                                                    \\r
-          UartBase,                                                   \\r
-          UartAddrLen,                                                \\r
-          UartNameStr                                                 \\r
-          ) {                                                         \\r
+                                                                      SubType,                                                    \\r
+                                                                      UartBase,                                                   \\r
+                                                                      UartAddrLen,                                                \\r
+                                                                      UartNameStr                                                 \\r
+                                                                      )  {\\r
     {                                                                 \\r
-      /* UINT8     Revision */                                        \\r
+  /* UINT8     Revision */                                        \\r
       EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,         \\r
-      /* UINT16    Length */                                          \\r
+  /* UINT16    Length */                                          \\r
       sizeof (DBG2_DEBUG_DEVICE_INFORMATION),                         \\r
-      /* UINT8     NumberofGenericAddressRegisters */                 \\r
+  /* UINT8     NumberofGenericAddressRegisters */                 \\r
       DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS,                       \\r
-      /* UINT16    NameSpaceStringLength */                           \\r
+  /* UINT16    NameSpaceStringLength */                           \\r
       DBG2_NAMESPACESTRING_FIELD_SIZE,                                \\r
-      /* UINT16    NameSpaceStringOffset */                           \\r
+  /* UINT16    NameSpaceStringOffset */                           \\r
       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString),     \\r
-      /* UINT16    OemDataLength */                                   \\r
+  /* UINT16    OemDataLength */                                   \\r
       0,                                                              \\r
-      /* UINT16    OemDataOffset */                                   \\r
+  /* UINT16    OemDataOffset */                                   \\r
       0,                                                              \\r
-      /* UINT16    Port Type */                                       \\r
+  /* UINT16    Port Type */                                       \\r
       EFI_ACPI_DBG2_PORT_TYPE_SERIAL,                                 \\r
-      /* UINT16    Port Subtype */                                    \\r
+  /* UINT16    Port Subtype */                                    \\r
       SubType,                                                        \\r
-      /* UINT8     Reserved[2] */                                     \\r
+  /* UINT8     Reserved[2] */                                     \\r
       {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE},               \\r
-      /* UINT16    BaseAddressRegister Offset */                      \\r
+  /* UINT16    BaseAddressRegister Offset */                      \\r
       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), \\r
-      /* UINT16    AddressSize Offset */                              \\r
+  /* UINT16    AddressSize Offset */                              \\r
       OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize)          \\r
     },                                                                \\r
-    /* EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */  \\r
+  /* EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE BaseAddressRegister */  \\r
     ARM_GAS32 (UartBase),                                             \\r
-    /* UINT32  AddressSize */                                         \\r
+  /* UINT32  AddressSize */                                         \\r
     UartAddrLen,                                                      \\r
-    /* UINT8   NameSpaceString[MAX_DBG2_NAME_LEN] */                  \\r
+  /* UINT8   NameSpaceString[MAX_DBG2_NAME_LEN] */                  \\r
     UartNameStr                                                       \\r
   }\r
 \r
@@ -148,7 +148,7 @@ typedef struct {
   Note: fields marked with "{Template}" will be set dynamically\r
 */\r
 STATIC\r
-DBG2_TABLE AcpiDbg2 = {\r
+DBG2_TABLE  AcpiDbg2 = {\r
   {\r
     ACPI_HEADER (\r
       EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE,\r
@@ -194,7 +194,7 @@ GET_OBJECT_LIST (
 STATIC\r
 EFI_STATUS\r
 SetupDebugUart (\r
-  IN  CONST CM_ARM_SERIAL_PORT_INFO  * CONST SerialPortInfo\r
+  IN  CONST CM_ARM_SERIAL_PORT_INFO  *CONST  SerialPortInfo\r
   )\r
 {\r
   EFI_STATUS          Status;\r
@@ -209,20 +209,20 @@ SetupDebugUart (
   // Initialize the Serial Debug UART\r
   DEBUG ((DEBUG_INFO, "Initializing Serial Debug UART...\n"));\r
   ReceiveFifoDepth = 0; // Use the default value for FIFO depth\r
-  Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);\r
-  DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);\r
-  StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);\r
+  Parity           = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);\r
+  DataBits         = FixedPcdGet8 (PcdUartDefaultDataBits);\r
+  StopBits         = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);\r
 \r
   BaudRate = SerialPortInfo->BaudRate;\r
-  Status = PL011UartInitializePort (\r
-             (UINTN)SerialPortInfo->BaseAddress,\r
-             SerialPortInfo->Clock,\r
-             &BaudRate,\r
-             &ReceiveFifoDepth,\r
-             &Parity,\r
-             &DataBits,\r
-             &StopBits\r
-             );\r
+  Status   = PL011UartInitializePort (\r
+               (UINTN)SerialPortInfo->BaseAddress,\r
+               SerialPortInfo->Clock,\r
+               &BaudRate,\r
+               &ReceiveFifoDepth,\r
+               &Parity,\r
+               &DataBits,\r
+               &StopBits\r
+               );\r
 \r
   ASSERT_EFI_ERROR (Status);\r
   return Status;\r
@@ -245,15 +245,15 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 FreeDbg2TableEx (\r
-  IN      CONST ACPI_TABLE_GENERATOR                   * CONST This,\r
-  IN      CONST CM_STD_OBJ_ACPI_TABLE_INFO             * CONST AcpiTableInfo,\r
-  IN      CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL   * CONST CfgMgrProtocol,\r
-  IN OUT        EFI_ACPI_DESCRIPTION_HEADER          *** CONST Table,\r
+  IN      CONST ACPI_TABLE_GENERATOR                   *CONST  This,\r
+  IN      CONST CM_STD_OBJ_ACPI_TABLE_INFO             *CONST  AcpiTableInfo,\r
+  IN      CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL   *CONST  CfgMgrProtocol,\r
+  IN OUT        EFI_ACPI_DESCRIPTION_HEADER          ***CONST  Table,\r
   IN      CONST UINTN                                          TableCount\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  EFI_ACPI_DESCRIPTION_HEADER    ** TableList;\r
+  EFI_STATUS                   Status;\r
+  EFI_ACPI_DESCRIPTION_HEADER  **TableList;\r
 \r
   ASSERT (This != NULL);\r
   ASSERT (AcpiTableInfo != NULL);\r
@@ -263,7 +263,8 @@ FreeDbg2TableEx (
 \r
   if ((Table == NULL)   ||\r
       (*Table == NULL)  ||\r
-      (TableCount != 2)) {\r
+      (TableCount != 2))\r
+  {\r
     DEBUG ((DEBUG_ERROR, "ERROR: DBG2: Invalid Table Pointer\n"));\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -272,7 +273,8 @@ FreeDbg2TableEx (
 \r
   if ((TableList[1] == NULL) ||\r
       (TableList[1]->Signature !=\r
-       EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)) {\r
+       EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE))\r
+  {\r
     DEBUG ((DEBUG_ERROR, "ERROR: DBG2: Invalid SSDT table pointer.\n"));\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -316,17 +318,17 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 BuildDbg2TableEx (\r
-  IN  CONST ACPI_TABLE_GENERATOR                   *       This,\r
-  IN  CONST CM_STD_OBJ_ACPI_TABLE_INFO             * CONST AcpiTableInfo,\r
-  IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL   * CONST CfgMgrProtocol,\r
-  OUT       EFI_ACPI_DESCRIPTION_HEADER          ***       Table,\r
-  OUT       UINTN                                  * CONST TableCount\r
+  IN  CONST ACPI_TABLE_GENERATOR                           *This,\r
+  IN  CONST CM_STD_OBJ_ACPI_TABLE_INFO             *CONST  AcpiTableInfo,\r
+  IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL   *CONST  CfgMgrProtocol,\r
+  OUT       EFI_ACPI_DESCRIPTION_HEADER                    ***Table,\r
+  OUT       UINTN                                  *CONST  TableCount\r
   )\r
 {\r
-  EFI_STATUS                      Status;\r
-  CM_ARM_SERIAL_PORT_INFO       * SerialPortInfo;\r
-  UINT32                          SerialPortCount;\r
-  EFI_ACPI_DESCRIPTION_HEADER  ** TableList;\r
+  EFI_STATUS                   Status;\r
+  CM_ARM_SERIAL_PORT_INFO      *SerialPortInfo;\r
+  UINT32                       SerialPortCount;\r
+  EFI_ACPI_DESCRIPTION_HEADER  **TableList;\r
 \r
   ASSERT (This != NULL);\r
   ASSERT (AcpiTableInfo != NULL);\r
@@ -337,7 +339,8 @@ BuildDbg2TableEx (
   ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature);\r
 \r
   if ((AcpiTableInfo->AcpiTableRevision < This->MinAcpiTableRevision) ||\r
-      (AcpiTableInfo->AcpiTableRevision > This->AcpiTableRevision)) {\r
+      (AcpiTableInfo->AcpiTableRevision > This->AcpiTableRevision))\r
+  {\r
     DEBUG ((\r
       DEBUG_ERROR,\r
       "ERROR: DBG2: Requested table revision = %d, is not supported."\r
@@ -387,8 +390,8 @@ BuildDbg2TableEx (
   }\r
 \r
   // Allocate a table to store pointers to the DBG2 and SSDT tables.\r
-  TableList = (EFI_ACPI_DESCRIPTION_HEADER**)\r
-              AllocateZeroPool (sizeof (EFI_ACPI_DESCRIPTION_HEADER*) * 2);\r
+  TableList = (EFI_ACPI_DESCRIPTION_HEADER **)\r
+              AllocateZeroPool (sizeof (EFI_ACPI_DESCRIPTION_HEADER *) * 2);\r
   if (TableList == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
     DEBUG ((\r
@@ -403,7 +406,7 @@ BuildDbg2TableEx (
   Status = AddAcpiHeader (\r
              CfgMgrProtocol,\r
              This,\r
-             (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiDbg2,\r
+             (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiDbg2,\r
              AcpiTableInfo,\r
              sizeof (DBG2_TABLE)\r
              );\r
@@ -420,16 +423,39 @@ BuildDbg2TableEx (
   AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].BaseAddressRegister.Address =\r
     SerialPortInfo->BaseAddress;\r
 \r
+  // Set the access size\r
+  if (SerialPortInfo->AccessSize >= EFI_ACPI_6_3_QWORD) {\r
+    Status = EFI_INVALID_PARAMETER;\r
+    DEBUG ((\r
+      DEBUG_ERROR,\r
+      "ERROR: DBG2: Access size must be <= 3 (DWORD). Status = %r\n",\r
+      Status\r
+      ));\r
+    goto error_handler;\r
+  } else if (SerialPortInfo->AccessSize == EFI_ACPI_6_3_UNDEFINED) {\r
+    // 0 Undefined (legacy reasons)\r
+    // Default to DWORD access size as the access\r
+    // size field was introduced at a later date\r
+    // and some ConfigurationManager implementations\r
+    // may not be providing this field data\r
+    AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].BaseAddressRegister.AccessSize =\r
+      EFI_ACPI_6_3_DWORD;\r
+  } else {\r
+    AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].BaseAddressRegister.AccessSize =\r
+      SerialPortInfo->AccessSize;\r
+  }\r
+\r
   // Update the serial port subtype\r
   AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].Dbg2Device.PortSubtype =\r
     SerialPortInfo->PortSubtype;\r
 \r
   if ((SerialPortInfo->PortSubtype ==\r
-      EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART)           ||\r
+       EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART)           ||\r
       (SerialPortInfo->PortSubtype ==\r
-      EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART_2X) ||\r
+       EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART_2X) ||\r
       (SerialPortInfo->PortSubtype ==\r
-      EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART)) {\r
+       EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART))\r
+  {\r
     // Initialize the serial port\r
     Status = SetupDebugUart (SerialPortInfo);\r
     if (EFI_ERROR (Status)) {\r
@@ -442,7 +468,7 @@ BuildDbg2TableEx (
     }\r
   }\r
 \r
-  TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiDbg2;\r
+  TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiDbg2;\r
 \r
   // Build a SSDT table describing the serial port.\r
   Status = BuildSsdtSerialPortTable (\r
@@ -462,7 +488,7 @@ BuildDbg2TableEx (
   }\r
 \r
   *TableCount = 2;\r
-  *Table = TableList;\r
+  *Table      = TableList;\r
 \r
   return Status;\r
 \r
@@ -476,13 +502,13 @@ error_handler:
 \r
 /** This macro defines the DBG2 Table Generator revision.\r
 */\r
-#define DBG2_GENERATOR_REVISION CREATE_REVISION (1, 0)\r
+#define DBG2_GENERATOR_REVISION  CREATE_REVISION (1, 0)\r
 \r
 /** The interface for the DBG2 Table Generator.\r
 */\r
 STATIC\r
 CONST\r
-ACPI_TABLE_GENERATOR Dbg2Generator = {\r
+ACPI_TABLE_GENERATOR  Dbg2Generator = {\r
   // Generator ID\r
   CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdDbg2),\r
   // Generator Description\r
@@ -520,11 +546,12 @@ ACPI_TABLE_GENERATOR Dbg2Generator = {
 EFI_STATUS\r
 EFIAPI\r
 AcpiDbg2LibConstructor (\r
-  IN  EFI_HANDLE           ImageHandle,\r
-  IN  EFI_SYSTEM_TABLE  *  SystemTable\r
+  IN  EFI_HANDLE        ImageHandle,\r
+  IN  EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
   EFI_STATUS  Status;\r
+\r
   Status = RegisterAcpiTableGenerator (&Dbg2Generator);\r
   DEBUG ((DEBUG_INFO, "DBG2: Register Generator. Status = %r\n", Status));\r
   ASSERT_EFI_ERROR (Status);\r
@@ -543,11 +570,12 @@ AcpiDbg2LibConstructor (
 EFI_STATUS\r
 EFIAPI\r
 AcpiDbg2LibDestructor (\r
-  IN  EFI_HANDLE           ImageHandle,\r
-  IN  EFI_SYSTEM_TABLE  *  SystemTable\r
+  IN  EFI_HANDLE        ImageHandle,\r
+  IN  EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
   EFI_STATUS  Status;\r
+\r
   Status = DeregisterAcpiTableGenerator (&Dbg2Generator);\r
   DEBUG ((DEBUG_INFO, "DBG2: Deregister Generator. Status = %r\n", Status));\r
   ASSERT_EFI_ERROR (Status);\r