]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/Acpi10.h
MdePkg: Definitions for Extended Interrupt Flags
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Acpi10.h
index 591cbbb3dd5d7400d36867a7df1cba91d79f1fda..7ac9b967b54dcc92f2c20366bf1ff08d67c4c971 100644 (file)
@@ -1,19 +1,16 @@
-/** @file   \r
+/** @file\r
   ACPI 1.0b definitions from the ACPI Specification, revision 1.0b\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution.  \r
-The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php.                                          \r
-    \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2020, Arm Limited. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #ifndef _ACPI_1_0_H_\r
 #define _ACPI_1_0_H_\r
 \r
+#include <IndustryStandard/AcpiAml.h>\r
+\r
 ///\r
 /// Common table header, this prefaces all ACPI tables, including FACS, but\r
 /// excluding the RSD PTR structure.\r
@@ -41,17 +38,59 @@ typedef struct {
 #pragma pack()\r
 \r
 //\r
-// Define for Desriptor\r
+// Define for Descriptor\r
+//\r
+#define ACPI_SMALL_ITEM_FLAG                   0x00\r
+#define ACPI_LARGE_ITEM_FLAG                   0x01\r
+\r
+//\r
+// Small Item Descriptor Name\r
+//\r
+#define ACPI_SMALL_IRQ_DESCRIPTOR_NAME                       0x04\r
+#define ACPI_SMALL_DMA_DESCRIPTOR_NAME                       0x05\r
+#define ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME           0x06\r
+#define ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME             0x07\r
+#define ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME                   0x08\r
+#define ACPI_SMALL_FIXED_IO_PORT_DESCRIPTOR_NAME             0x09\r
+#define ACPI_SMALL_VENDOR_DEFINED_DESCRIPTOR_NAME            0x0E\r
+#define ACPI_SMALL_END_TAG_DESCRIPTOR_NAME                   0x0F\r
+\r
+//\r
+// Large Item Descriptor Name\r
 //\r
+#define ACPI_LARGE_24_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x01\r
+#define ACPI_LARGE_VENDOR_DEFINED_DESCRIPTOR_NAME            0x04\r
+#define ACPI_LARGE_32_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x05\r
+#define ACPI_LARGE_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR_NAME 0x06\r
+#define ACPI_LARGE_DWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x07\r
+#define ACPI_LARGE_WORD_ADDRESS_SPACE_DESCRIPTOR_NAME        0x08\r
+#define ACPI_LARGE_EXTENDED_IRQ_DESCRIPTOR_NAME              0x09\r
+#define ACPI_LARGE_QWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x0A\r
+\r
+//\r
+// Small Item Descriptor Value\r
+//\r
+#define ACPI_IRQ_NOFLAG_DESCRIPTOR                0x22\r
+#define ACPI_IRQ_DESCRIPTOR                       0x23\r
 #define ACPI_DMA_DESCRIPTOR                       0x2A\r
+#define ACPI_START_DEPENDENT_DESCRIPTOR           0x30\r
+#define ACPI_START_DEPENDENT_EX_DESCRIPTOR        0x31\r
+#define ACPI_END_DEPENDENT_DESCRIPTOR             0x38\r
 #define ACPI_IO_PORT_DESCRIPTOR                   0x47\r
 #define ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR    0x4B\r
-#define ACPI_IRQ_NOFLAG_DESCRIPTOR                0x22\r
-#define ACPI_IRQ_DESCRIPTOR                       0x23\r
+#define ACPI_END_TAG_DESCRIPTOR                   0x79\r
+\r
+//\r
+// Large Item Descriptor Value\r
+//\r
+#define ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR       0x81\r
 #define ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR       0x85\r
 #define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR 0x86\r
+#define ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR       0x87\r
+#define ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR        0x88\r
+#define ACPI_EXTENDED_INTERRUPT_DESCRIPTOR        0x89\r
+#define ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR       0x8A\r
 #define ACPI_ADDRESS_SPACE_DESCRIPTOR             0x8A\r
-#define ACPI_END_TAG_DESCRIPTOR                   0x79\r
 \r
 //\r
 // Resource Type\r
@@ -71,7 +110,7 @@ typedef struct {
 #pragma pack(1)\r
 \r
 ///\r
-/// The commond definition of QWORD, DWORD, and WORD\r
+/// The common definition of QWORD, DWORD, and WORD\r
 /// Address Space Descriptors.\r
 ///\r
 typedef PACKED struct {\r
@@ -87,19 +126,19 @@ typedef PACKED struct {
   UINT64  AddrLen;\r
 } EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;\r
 \r
-typedef union {\r
+typedef PACKED union {\r
   UINT8     Byte;\r
-  struct {\r
+  PACKED struct {\r
     UINT8 Length : 3;\r
     UINT8 Name : 4;\r
     UINT8 Type : 1;\r
   } Bits;\r
 } ACPI_SMALL_RESOURCE_HEADER;\r
 \r
-typedef struct {\r
-  union {\r
+typedef PACKED struct {\r
+  PACKED union {\r
     UINT8 Byte;\r
-    struct{\r
+    PACKED struct {\r
       UINT8 Name : 7;\r
       UINT8 Type : 1;\r
     }Bits;\r
@@ -154,6 +193,18 @@ typedef PACKED struct {
   UINT8                        Length;\r
 } EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR;\r
 \r
+///\r
+/// 24-Bit Memory Range Descriptor\r
+///\r
+typedef PACKED struct {\r
+  ACPI_LARGE_RESOURCE_HEADER    Header;\r
+  UINT8                         Information;\r
+  UINT16                        BaseAddressMin;\r
+  UINT16                        BaseAddressMax;\r
+  UINT16                        Alignment;\r
+  UINT16                        Length;\r
+} EFI_ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR;\r
+\r
 ///\r
 /// 32-Bit Memory Range Descriptor\r
 ///\r
@@ -175,6 +226,62 @@ typedef PACKED struct {
   UINT32                        BaseAddress;\r
   UINT32                        Length;\r
 } EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;\r
+\r
+///\r
+/// QWORD Address Space Descriptor\r
+///\r
+typedef PACKED struct {\r
+  ACPI_LARGE_RESOURCE_HEADER    Header;\r
+  UINT8                         ResType;\r
+  UINT8                         GenFlag;\r
+  UINT8                         SpecificFlag;\r
+  UINT64                        AddrSpaceGranularity;\r
+  UINT64                        AddrRangeMin;\r
+  UINT64                        AddrRangeMax;\r
+  UINT64                        AddrTranslationOffset;\r
+  UINT64                        AddrLen;\r
+} EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR;\r
+\r
+///\r
+/// DWORD Address Space Descriptor\r
+///\r
+typedef PACKED struct {\r
+  ACPI_LARGE_RESOURCE_HEADER    Header;\r
+  UINT8                         ResType;\r
+  UINT8                         GenFlag;\r
+  UINT8                         SpecificFlag;\r
+  UINT32                        AddrSpaceGranularity;\r
+  UINT32                        AddrRangeMin;\r
+  UINT32                        AddrRangeMax;\r
+  UINT32                        AddrTranslationOffset;\r
+  UINT32                        AddrLen;\r
+} EFI_ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR;\r
+\r
+///\r
+/// WORD Address Space Descriptor\r
+///\r
+typedef PACKED struct {\r
+  ACPI_LARGE_RESOURCE_HEADER    Header;\r
+  UINT8                         ResType;\r
+  UINT8                         GenFlag;\r
+  UINT8                         SpecificFlag;\r
+  UINT16                        AddrSpaceGranularity;\r
+  UINT16                        AddrRangeMin;\r
+  UINT16                        AddrRangeMax;\r
+  UINT16                        AddrTranslationOffset;\r
+  UINT16                        AddrLen;\r
+} EFI_ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR;\r
+\r
+///\r
+/// Extended Interrupt Descriptor\r
+///\r
+typedef PACKED struct {\r
+  ACPI_LARGE_RESOURCE_HEADER    Header;\r
+  UINT8                         InterruptVectorFlags;\r
+  UINT8                         InterruptTableLength;\r
+  UINT32                        InterruptNumber[1];\r
+} EFI_ACPI_EXTENDED_INTERRUPT_DESCRIPTOR;\r
+\r
 #pragma pack()\r
 \r
 ///\r
@@ -245,14 +352,14 @@ typedef struct {
 #define   EFI_ACPI_DMA_SPEED_TYPE_A                     0x20\r
 #define   EFI_ACPI_DMA_SPEED_TYPE_B                     0x40\r
 #define   EFI_ACPI_DMA_SPEED_TYPE_F                     0x60\r
-                                               \r
+\r
 #define EFI_ACPI_DMA_BUS_MASTER_MASK                    0x04\r
 #define   EFI_ACPI_DMA_BUS_MASTER                       0x04\r
 \r
 #define EFI_ACPI_DMA_TRANSFER_TYPE_MASK                 0x03\r
 #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT              0x00\r
 #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT_AND_16_BIT   0x01\r
-#define   EFI_ACPI_DMA_TRANSFER_TYPE_16_BIT             0x10\r
+#define   EFI_ACPI_DMA_TRANSFER_TYPE_16_BIT             0x02\r
 \r
 //\r
 // IO Information\r
@@ -270,6 +377,16 @@ typedef struct {
 #define   EFI_ACPI_MEMORY_WRITABLE                      0x01\r
 #define   EFI_ACPI_MEMORY_NON_WRITABLE                  0x00\r
 \r
+//\r
+// Interrupt Vector Flags definitions for Extended Interrupt Descriptor\r
+// Ref ACPI specification 6.4.3.6\r
+//\r
+#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_PRODUCER_CONSUMER_MASK   BIT0\r
+#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_MODE_MASK                BIT1\r
+#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_POLARITY_MASK            BIT2\r
+#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_SHARABLE_MASK            BIT3\r
+#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_WAKE_CAPABLITY_MASK      BIT4\r
+\r
 //\r
 // Ensure proper structure formats\r
 //\r
@@ -291,7 +408,7 @@ typedef struct {
 \r
 //\r
 // Root System Description Table\r
-// No definition needed as it is a common description table header, the same with \r
+// No definition needed as it is a common description table header, the same with\r
 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.\r
 //\r
 \r
@@ -351,6 +468,9 @@ typedef struct {
 ///\r
 #define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x01\r
 \r
+#define EFI_ACPI_1_0_INT_MODE_DUAL_PIC         0\r
+#define EFI_ACPI_1_0_INT_MODE_MULTIPLE_APIC    1\r
+\r
 //\r
 // Fixed ACPI Description Table Fixed Feature Flags\r
 // All other bits are reserved and must be set to 0.\r