e58a71d MdeModulePkg/PciHostBridgeDxe: restrict 64-bit DMA to devices that support it

Authored and Committed by Ard Biesheuvel 7 years ago
    MdeModulePkg/PciHostBridgeDxe: restrict 64-bit DMA to devices that support it
    
    Currently, the EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE attribute is completely
    ignored by the PCI host bridge driver, which means that, on an implementation
    that supports DMA above 4 GB, allocations above 4 GB may be provided to
    devices that have not expressed support for it.
    
    So in addition to checking 'RootBridge->DmaAbove4G' to establish whether the
    root bridge itself supports DMA above 4 GB, we must also take into account
    the operation type (EfiPciOperationBusMaster{Read|Write|CommonBuffer}64),
    and the EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE attribute, when mapping and
    allocating DMA memory, respectively.
    
    Contributed-under: TianoCore Contribution Agreement 1.0
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Ruiyu Ni <Ruiyu.ni@intel.com>