+typedef PACKED union {\r
+ UINT8 Byte;\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 PACKED struct {\r
+ PACKED union {\r
+ UINT8 Byte;\r
+ PACKED struct {\r
+ UINT8 Name : 7;\r
+ UINT8 Type : 1;\r
+ }Bits;\r
+ } Header;\r
+ UINT16 Length;\r
+} ACPI_LARGE_RESOURCE_HEADER;\r
+\r
+///\r
+/// IRQ Descriptor.\r
+///\r
+typedef PACKED struct {\r
+ ACPI_SMALL_RESOURCE_HEADER Header;\r
+ UINT16 Mask;\r
+} EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR;\r
+\r
+///\r
+/// IRQ Descriptor.\r
+///\r
+typedef PACKED struct {\r
+ ACPI_SMALL_RESOURCE_HEADER Header;\r
+ UINT16 Mask;\r
+ UINT8 Information;\r
+} EFI_ACPI_IRQ_DESCRIPTOR;\r
+\r
+///\r
+/// DMA Descriptor.\r
+///\r
+typedef PACKED struct {\r
+ ACPI_SMALL_RESOURCE_HEADER Header;\r
+ UINT8 ChannelMask;\r
+ UINT8 Information;\r
+} EFI_ACPI_DMA_DESCRIPTOR;\r
+\r
+///\r
+/// I/O Port Descriptor\r
+///\r
+typedef PACKED struct {\r
+ ACPI_SMALL_RESOURCE_HEADER Header;\r
+ UINT8 Information;\r
+ UINT16 BaseAddressMin;\r
+ UINT16 BaseAddressMax;\r
+ UINT8 Alignment;\r
+ UINT8 Length;\r
+} EFI_ACPI_IO_PORT_DESCRIPTOR;\r
+\r
+///\r
+/// Fixed Location I/O Port Descriptor.\r
+///\r
+typedef PACKED struct {\r
+ ACPI_SMALL_RESOURCE_HEADER Header;\r
+ UINT16 BaseAddress;\r
+ 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
+typedef PACKED struct {\r
+ ACPI_LARGE_RESOURCE_HEADER Header;\r
+ UINT8 Information;\r
+ UINT32 BaseAddressMin;\r
+ UINT32 BaseAddressMax;\r
+ UINT32 Alignment;\r
+ UINT32 Length;\r
+} EFI_ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR;\r
+\r
+///\r
+/// Fixed 32-Bit Fixed Memory Range Descriptor\r
+///\r
+typedef PACKED struct {\r
+ ACPI_LARGE_RESOURCE_HEADER Header;\r
+ UINT8 Information;\r
+ 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
+/// The End tag identifies an end of resource data.\r
+///\r