/** @file Protocol used to support ACPI VT-d DMA remapping reporting @copyright Copyright 2006 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __DMA_REMAP_H__ #define __DMA_REMAP_H__ // // Protocol for GUID. // typedef struct _DMA_REMAP_PROTOCOL DMA_REMAP_PROTOCOL; #define DRHD_SIGNATURE (('D'<<24) + ('R'<<16) + ('H'<<8) + 'D') #define RMRR_SIGNATURE (('R'<<24) + ('M'<<16) + ('R'<<8) + 'R') #define ATSR_SIGNATURE (('A'<<24) + ('T'<<16) + ('S'<<8) + 'R') #define RHSA_SIGNATURE (('A'<<24) + ('S'<<16) + ('H'<<8) + 'R') #define ANDD_SIGNATURE (('A'<<24) + ('N'<<16) + ('D'<<8) + 'D') typedef enum { DrhdType, RmrrType, AtsrType, RhsaType } REMAP_TYPE; typedef enum { PciEndpoint = 1, PciBridge = 2 } PCI_DEV_TYPE; typedef struct { UINT8 Device; UINT8 Function; } PCI_NODE; typedef struct { UINT8 DeviceType; UINT8 EnumerationID; UINT8 StartBusNumber; PCI_NODE *PciNode; } DEVICE_SCOPE; typedef struct { UINT32 Signature; UINT8 Flags; UINT16 SegmentNumber; UINT64 RegisterBase; UINTN DeviceScopeNumber; DEVICE_SCOPE *DeviceScope; } DMAR_DRHD; typedef struct { UINT32 Signature; UINT16 SegmentNumber; UINT64 RsvdMemBase; UINT64 RsvdMemLimit; UINTN DeviceScopeNumber; DEVICE_SCOPE *DeviceScope; } DMAR_RMRR; typedef struct { UINT32 Signature; UINT8 Flags; UINT16 SegmentNumber; UINTN DeviceScopeNumber; UINT32 ATSRPresentBit; DEVICE_SCOPE *DeviceScope; } DMAR_ATSR; typedef struct { UINT32 Signature; UINT64 RegisterBase; UINT32 Domian; UINT16 RhsaCount; } DMAR_RHSA; typedef EFI_STATUS (EFIAPI *INSERT_DMA_REMAP) ( IN DMA_REMAP_PROTOCOL *This, IN REMAP_TYPE RemapType, IN VOID *RemapEntry ); typedef EFI_STATUS (EFIAPI *GET_DMAR_TABLE) ( IN DMA_REMAP_PROTOCOL *This, IN VOID **DmarTable ); typedef struct _DMA_REMAP_PROTOCOL { BOOLEAN VTdSupport; BOOLEAN DmaCtrlOptIn; BOOLEAN InterruptRemap; BOOLEAN X2ApicOptOut; BOOLEAN ATS; INSERT_DMA_REMAP InsertDmaRemap; GET_DMAR_TABLE GetDmarTable; } DMA_REMAP_PROTOCOL; extern EFI_GUID gDmaRemapProtocolGuid; #endif