2007-06-28 09:00:39 +02:00
|
|
|
/*++
|
|
|
|
|
|
|
|
Copyright (c) 2007, Intel Corporation
|
|
|
|
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.
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
|
|
DMARemappingReportingTable.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
The definition for ACPI DMA-Remapping Reporting (DMAR) Table.
|
|
|
|
It is defined in "Intel VT for Direct IO Architecture Specification".
|
|
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#ifndef _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
|
|
|
|
#define _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
|
|
|
|
|
|
|
|
#include "AcpiCommon.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// "DMAR" DMAR Description Table Signature
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DMAR_DESCRIPTION_TABLE_SIGNATURE 0x52414d44
|
|
|
|
|
|
|
|
//
|
|
|
|
// DMAR Revision
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DMAR_DESCRIPTION_TABLE_REVISION 0x01
|
|
|
|
|
|
|
|
//
|
|
|
|
// Ensure proper structure formats
|
|
|
|
//
|
|
|
|
#pragma pack (1)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA Remapping Structure Types
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_DRHD 0
|
|
|
|
#define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_RMRR 1
|
|
|
|
#define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_ATSR 2
|
2009-09-16 11:44:55 +02:00
|
|
|
#define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_RHSA 3
|
2007-06-28 09:00:39 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA Remapping Structure Header
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Type;
|
|
|
|
UINT16 Length;
|
|
|
|
} EFI_ACPI_DMAR_STRUCTURE_HEADER;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA-Remapping PCI Path
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT8 Device;
|
|
|
|
UINT8 Function;
|
|
|
|
} EFI_ACPI_DMAR_PCI_PATH;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA-Remapping Device Scope Entry Structure
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_ENDPOINT 0x01
|
|
|
|
#define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_BRIDGE 0x02
|
|
|
|
#define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_IOAPIC 0x03
|
|
|
|
#define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_MSI_CAPABLE_HPET 0x04
|
|
|
|
typedef struct {
|
|
|
|
UINT8 DeviceScopeEntryType;
|
|
|
|
UINT8 Length;
|
|
|
|
UINT16 Reserved_2;
|
|
|
|
UINT8 EnumerationID;
|
|
|
|
UINT8 StartingBusNumber;
|
|
|
|
} EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA-Remapping Hardware Definition (DRHD) Structure
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_SET 0x1
|
|
|
|
#define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_CLEAR 0x0
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Type;
|
|
|
|
UINT16 Length;
|
|
|
|
UINT8 Flags;
|
|
|
|
UINT8 Reserved_5;
|
|
|
|
UINT16 SegmentNumber;
|
|
|
|
UINT64 RegisterBaseAddress;
|
|
|
|
} EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for Reserved Memory Region Reporting (RMRR) Structure
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Type;
|
|
|
|
UINT16 Length;
|
|
|
|
UINT8 Reserved_4[2];
|
|
|
|
UINT16 SegmentNumber;
|
|
|
|
UINT64 ReservedMemoryRegionBaseAddress;
|
|
|
|
UINT64 ReservedMemoryRegionLimitAddress;
|
|
|
|
} EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for Root Port ATS Capability Reporting (ATSR) Structure
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_SET 0x1
|
|
|
|
#define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_CLEAR 0x0
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Type;
|
|
|
|
UINT16 Length;
|
|
|
|
UINT8 Flags;
|
|
|
|
UINT8 Reserved_5;
|
|
|
|
UINT16 SegmentNumber;
|
|
|
|
} EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
|
|
|
|
|
2009-09-16 11:44:55 +02:00
|
|
|
//
|
|
|
|
// Definition for Remapping Hardware Static Affinity(RHSA) Structure
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Type;
|
|
|
|
UINT16 Length;
|
|
|
|
UINT32 Reserved;
|
|
|
|
UINT64 RegisterBaseAddress;
|
|
|
|
UINT32 ProximityDomain;
|
|
|
|
} EFI_ACPI_DMAR_REMAPPING_HARDWARE_STATIC_AFFINITY_STRUCTURE;
|
|
|
|
|
2007-06-28 09:00:39 +02:00
|
|
|
//
|
|
|
|
// Definition for DMA Remapping Structure
|
|
|
|
//
|
|
|
|
typedef union {
|
|
|
|
EFI_ACPI_DMAR_STRUCTURE_HEADER DMARStructureHeader;
|
|
|
|
EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE DMARHardwareUnitDefinition;
|
|
|
|
EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE DMARReservedMemoryRegionReporting;
|
|
|
|
EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE DMARRootPortATSCapabilityReporting;
|
|
|
|
} EFI_ACPI_DMA_REMAPPING_STRUCTURE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Definition for DMA-Remapping Reporting ACPI Table
|
|
|
|
//
|
2008-03-27 05:30:20 +01:00
|
|
|
#define EFI_ACPI_DMAR_TABLE_FLAGS_INTR_REMAP_CLEAR 0x00
|
2007-06-28 09:00:39 +02:00
|
|
|
#define EFI_ACPI_DMAR_TABLE_FLAGS_INTR_REMAP_SET 0x01
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DESCRIPTION_HEADER Header;
|
|
|
|
UINT8 HostAddressWidth;
|
|
|
|
UINT8 Flags;
|
|
|
|
UINT8 Reserved_38[10];
|
|
|
|
} EFI_ACPI_DMAR_DESCRIPTION_TABLE;
|
|
|
|
|
|
|
|
//
|
|
|
|
// The Platform specific definition can be as follows:
|
|
|
|
// NOTE: we use /**/ as comment for user convenience to copy it.
|
|
|
|
//
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
//
|
|
|
|
// Dmar.h
|
|
|
|
//
|
|
|
|
|
|
|
|
#define EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES 0x01 // user need to update
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE Header;
|
|
|
|
EFI_ACPI_DMAR_PCI_PATH PciPath[EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES];
|
|
|
|
} EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
|
|
|
|
|
|
|
|
#define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY 0x01 // user need to update
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Header;
|
|
|
|
EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY];
|
|
|
|
} EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
|
|
|
|
|
|
|
|
#define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY 0x01 // user need to update
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Header;
|
|
|
|
EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY];
|
|
|
|
} EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
|
|
|
|
|
|
|
|
#define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY 0x01 // user need to update
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Header;
|
|
|
|
EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY];
|
|
|
|
} EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
|
|
|
|
|
|
|
|
#define EFI_ACPI_DMAR_DHRD_ENTRY_COUNT 0x1 // user need to update
|
|
|
|
#define EFI_ACPI_DMAR_RMRR_ENTRY_COUNT 0x1 // user need to update
|
|
|
|
#define EFI_ACPI_DMAR_ATSR_ENTRY_COUNT 0x1 // user need to update
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_DMAR_DESCRIPTION_TABLE Header;
|
|
|
|
|
|
|
|
#if EFI_ACPI_3_0_DMAR_DHRD_ENTRY_COUNT > 0
|
|
|
|
EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Dhrd[EFI_ACPI_DMAR_DHRD_ENTRY_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if EFI_ACPI_3_0_DMAR_RMRR_ENTRY_COUNT > 0
|
|
|
|
EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Rmrr[EFI_ACPI_DMAR_RMRR_ENTRY_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if EFI_ACPI_3_0_DMAR_ATSR_ENTRY_COUNT > 0
|
|
|
|
EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Atsr[EFI_ACPI_DMAR_ATSR_ENTRY_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
} EFI_ACPI_3_0_DMA_REMAPPING_REPORTING_TABLE;
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|