[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4 of 6] ats: Add new ATS helper functions
# HG changeset patch # User Wei Wang <wei.wang2@xxxxxxx> # Date 1319472696 -7200 # Node ID 3dc5e805d9142cbe1074610879e258b6fab43409 # Parent 18088bd3e8f6c16b7aef3d8652f2b9878117fcd5 ats: Add new ATS helper functions Signed-off-by Wei Wang <wei.wang2@xxxxxxx> diff -r 18088bd3e8f6 -r 3dc5e805d914 xen/drivers/passthrough/x86/ats.c --- a/xen/drivers/passthrough/x86/ats.c Mon Oct 24 18:11:32 2011 +0200 +++ b/xen/drivers/passthrough/x86/ats.c Mon Oct 24 18:11:36 2011 +0200 @@ -138,3 +138,42 @@ void disable_ats_device(int seg, int bus seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); } +int pci_ats_enabled(int seg, int bus, int devfn) +{ + u32 value; + int pos; + + pos = pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS); + BUG_ON(!pos); + + value = pci_conf_read16(seg, bus, PCI_SLOT(devfn), + PCI_FUNC(devfn), pos + ATS_REG_CTL); + return value & ATS_ENABLE; +} + +int pci_ats_device(int seg, int bus, int devfn) +{ + if ( !ats_enabled ) + return 0; + + if ( !pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS) ) + return 0; + + return 1; +} + +struct pci_ats_dev* get_ats_device(int seg, int bus, int devfn) +{ + struct pci_ats_dev *pdev; + + if ( !pci_ats_device(seg, bus, devfn) ) + return NULL; + + list_for_each_entry ( pdev, &ats_devices, list ) + { + if ( pdev->seg == seg && pdev->bus == bus && pdev->devfn == devfn ) + return pdev; + } + + return NULL; +} diff -r 18088bd3e8f6 -r 3dc5e805d914 xen/drivers/passthrough/x86/ats.h --- a/xen/drivers/passthrough/x86/ats.h Mon Oct 24 18:11:32 2011 +0200 +++ b/xen/drivers/passthrough/x86/ats.h Mon Oct 24 18:11:36 2011 +0200 @@ -34,5 +34,8 @@ extern bool_t ats_enabled; int enable_ats_device(int seg, int bus, int devfn); void disable_ats_device(int seg, int bus, int devfn); +int pci_ats_enabled(int seg, int bus, int devfn); +int pci_ats_device(int seg, int bus, int devfn); +struct pci_ats_dev* get_ats_device(int seg, int bus, int devfn); #endif /* _X86_ATS_H_ */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |