Lines Matching refs:iommu

29     u16 seg, u8 bus, u8 dev, u8 func, struct amd_iommu *iommu)  in get_iommu_msi_capabilities()  argument
40 iommu->msi.msi_attrib.type = PCI_CAP_ID_MSI; in get_iommu_msi_capabilities()
41 iommu->msi.msi_attrib.pos = pos; in get_iommu_msi_capabilities()
42 iommu->msi.msi_attrib.is_64 = 1; in get_iommu_msi_capabilities()
47 u16 seg, u8 bus, u8 dev, u8 func, u16 cap_ptr, struct amd_iommu *iommu) in get_iommu_capabilities() argument
51 iommu->cap.header = pci_conf_read32(seg, bus, dev, func, cap_ptr); in get_iommu_capabilities()
52 type = get_field_from_reg_u32(iommu->cap.header, PCI_CAP_TYPE_MASK, in get_iommu_capabilities()
61 void __init get_iommu_features(struct amd_iommu *iommu) in get_iommu_features() argument
79 ASSERT( iommu->mmio_base ); in get_iommu_features()
81 if ( !iommu_has_cap(iommu, PCI_CAP_EFRSUP_SHIFT) ) in get_iommu_features()
83 iommu->features = 0; in get_iommu_features()
87 low = readl(iommu->mmio_base + IOMMU_EXT_FEATURE_MMIO_OFFSET); in get_iommu_features()
88 high = readl(iommu->mmio_base + IOMMU_EXT_FEATURE_MMIO_OFFSET + 4); in get_iommu_features()
90 iommu->features = ((u64)high << 32) | low; in get_iommu_features()
96 if ( amd_iommu_has_feature(iommu, i) ) in get_iommu_features()
105 struct amd_iommu *iommu; in amd_iommu_detect_one_acpi() local
122 iommu = xzalloc(struct amd_iommu); in amd_iommu_detect_one_acpi()
123 if ( !iommu ) in amd_iommu_detect_one_acpi()
129 spin_lock_init(&iommu->lock); in amd_iommu_detect_one_acpi()
130 INIT_LIST_HEAD(&iommu->ats_devices); in amd_iommu_detect_one_acpi()
132 iommu->seg = ivhd_block->pci_segment_group; in amd_iommu_detect_one_acpi()
133 iommu->bdf = ivhd_block->header.device_id; in amd_iommu_detect_one_acpi()
134 iommu->cap_offset = ivhd_block->capability_offset; in amd_iommu_detect_one_acpi()
135 iommu->mmio_base_phys = ivhd_block->base_address; in amd_iommu_detect_one_acpi()
138 iommu->ht_flags = ivhd_block->header.flags; in amd_iommu_detect_one_acpi()
140 bus = PCI_BUS(iommu->bdf); in amd_iommu_detect_one_acpi()
141 dev = PCI_SLOT(iommu->bdf); in amd_iommu_detect_one_acpi()
142 func = PCI_FUNC(iommu->bdf); in amd_iommu_detect_one_acpi()
144 rt = get_iommu_capabilities(iommu->seg, bus, dev, func, in amd_iommu_detect_one_acpi()
145 iommu->cap_offset, iommu); in amd_iommu_detect_one_acpi()
149 rt = get_iommu_msi_capabilities(iommu->seg, bus, dev, func, iommu); in amd_iommu_detect_one_acpi()
153 rt = pci_ro_device(iommu->seg, bus, PCI_DEVFN(dev, func)); in amd_iommu_detect_one_acpi()
157 iommu->seg, bus, dev, func, rt); in amd_iommu_detect_one_acpi()
159 list_add_tail(&iommu->list, &amd_iommu_head); in amd_iommu_detect_one_acpi()
164 xfree(iommu); in amd_iommu_detect_one_acpi()