[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] amd iommu: Use pci access function to detect msi capabilities
# HG changeset patch # User Wei Wang <wei.wang2@xxxxxxx> # Date 1321009315 -3600 # Node ID 223b10f17d31c55249fac07be41328f7a12569cb # Parent a095cf28f2b6eeb8f5873c18eb18d4d7e5544e2c amd iommu: Use pci access function to detect msi capabilities Signed-off-by: Wei Wang <wei.wang2@xxxxxxx> Committed-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r a095cf28f2b6 -r 223b10f17d31 xen/drivers/passthrough/amd/iommu_detect.c --- a/xen/drivers/passthrough/amd/iommu_detect.c Fri Nov 11 10:14:22 2011 +0100 +++ b/xen/drivers/passthrough/amd/iommu_detect.c Fri Nov 11 12:01:55 2011 +0100 @@ -30,38 +30,19 @@ static int __init get_iommu_msi_capabilities( u16 seg, u8 bus, u8 dev, u8 func, struct amd_iommu *iommu) { - int cap_ptr, cap_id; - u32 cap_header; + int pos; u16 control; - int count = 0; - cap_ptr = pci_conf_read8(seg, bus, dev, func, - PCI_CAPABILITY_LIST); + pos = pci_find_cap_offset(seg, bus, dev, func, PCI_CAP_ID_MSI); - while ( cap_ptr >= PCI_MIN_CAP_OFFSET && - count < PCI_MAX_CAP_BLOCKS ) - { - cap_ptr &= PCI_CAP_PTR_MASK; - cap_header = pci_conf_read32(seg, bus, dev, func, cap_ptr); - cap_id = get_field_from_reg_u32(cap_header, - PCI_CAP_ID_MASK, PCI_CAP_ID_SHIFT); - - if ( cap_id == PCI_CAP_ID_MSI ) - { - iommu->msi_cap = cap_ptr; - break; - } - cap_ptr = get_field_from_reg_u32(cap_header, - PCI_CAP_NEXT_PTR_MASK, PCI_CAP_NEXT_PTR_SHIFT); - count++; - } - - if ( !iommu->msi_cap ) + if ( !pos ) return -ENODEV; - AMD_IOMMU_DEBUG("Found MSI capability block \n"); + AMD_IOMMU_DEBUG("Found MSI capability block at %#x\n", pos); + + iommu->msi_cap = pos; control = pci_conf_read16(seg, bus, dev, func, - iommu->msi_cap + PCI_MSI_FLAGS); + iommu->msi_cap + PCI_MSI_FLAGS); iommu->maskbit = control & PCI_MSI_FLAGS_MASKBIT; return 0; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |