>>> On 03.11.11 at 16:48, Wei Wang <wei.wang2@xxxxxxx> wrote:
> # HG changeset patch
> # User Wei Wang <wei.wang2@xxxxxxx>
> # Date 1320334760 -3600
> # Node ID f1b4373838dd5e082755201745f87654e2eaa59f
> # Parent 1bf06c8d2c70e9af610e12a7592c466a799b0de1
> ats: Add new ATS helper functions
>
> Signed-off-by Wei Wang <wei.wang2@xxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> diff -r 1bf06c8d2c70 -r f1b4373838dd xen/drivers/passthrough/ats.h
> --- a/xen/drivers/passthrough/ats.h Thu Nov 03 16:35:53 2011 +0100
> +++ b/xen/drivers/passthrough/ats.h Thu Nov 03 16:39:20 2011 +0100
> @@ -16,6 +16,8 @@
> #ifndef _ATS_H_
> #define _ATS_H_
>
> +#include <xen/pci_regs.h>
> +
> struct pci_ats_dev {
> struct list_head list;
> u16 seg;
> @@ -36,6 +38,28 @@ 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);
> +struct pci_ats_dev *get_ats_device(int seg, int bus, int devfn);
> +
> +static inline 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;
> +}
> +
> +static inline int pci_ats_device(int seg, int bus, int devfn)
> +{
> + if ( !ats_enabled )
> + return 0;
> +
> + return pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS);
> +}
>
> #else
>
> @@ -50,6 +74,22 @@ static inline void disable_ats_device(in
> {
> BUG();
> }
> +
> +static inline int pci_ats_enabled(int seg, int bus, int devfn)
> +{
> + return 0;
> +}
> +
> +static inline int pci_ats_device(int seg, int bus, int devfn)
> +{
> + return 0;
> +}
> +
> +static inline struct pci_ats_dev *get_ats_device(int seg, int bus, int
> devfn)
> +{
> + return NULL;
> +}
> +
> #endif
>
> #endif /* _ATS_H_ */
> diff -r 1bf06c8d2c70 -r f1b4373838dd xen/drivers/passthrough/x86/ats.c
> --- a/xen/drivers/passthrough/x86/ats.c Thu Nov 03 16:35:53 2011 +0100
> +++ b/xen/drivers/passthrough/x86/ats.c Thu Nov 03 16:39:20 2011 +0100
> @@ -134,3 +134,19 @@ void disable_ats_device(int seg, int bus
> dprintk(XENLOG_INFO, "%04x:%02x:%02x.%u: ATS is disabled\n",
> seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
> }
> +
> +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;
> +}
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|