WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 3 of 5] ats: Add new ATS helper functions

To: "Wei Wang" <wei.wang2@xxxxxxx>
Subject: Re: [Xen-devel] [PATCH 3 of 5] ats: Add new ATS helper functions
From: "Jan Beulich" <JBeulich@xxxxxxxx>
Date: Thu, 03 Nov 2011 16:22:05 +0000
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 03 Nov 2011 09:32:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <f1b4373838dd5e082755.1320335330@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1320335327@xxxxxxxxxxxx> <f1b4373838dd5e082755.1320335330@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
>>> 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