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-ia64-devel

Re: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for

To: "Xu, Anthony" <anthony.xu@xxxxxxxxx>
Subject: Re: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for VTD/ia64
From: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Date: Tue, 21 Oct 2008 18:38:12 +0900
Cc: xen-ia64-devel <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Tue, 21 Oct 2008 02:38:17 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <F7C8A4D3A9905B45A80E4C194793FA6501B2E1F5E1@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
References: <F7C8A4D3A9905B45A80E4C194793FA6501B2E1F5E1@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.6i
On Tue, Oct 21, 2008 at 11:02:08AM +0800, Xu, Anthony wrote:
> Add head files and helper functions for VTD/ia64.
> 
> Signed-off-by; Anthony Xu < anthony.xu@xxxxxxxxx >
> 
> 
> #Cset 18649 -- 18653 in xen-devel tree are needed.
> So you may need to pull from xen-devel, then apply this patch.
> 
> Thanks,
> Anthony
> 
> 
> 

This looks mostly good. Except hvm_{pci, isa}_xxx() should be
defined under xen/arch/ia64/vmx/.

thanks,

> Add head files and helper functions for VTD/ia64
> 
> Signed-off-by; Anthony Xu < anthony.xu@xxxxxxxxx >
> 
> 
> 
> 
> 
> 
> diff -r fc74f8f81e1e xen/arch/ia64/linux-xen/irq_ia64.c
> --- a/xen/arch/ia64/linux-xen/irq_ia64.c      Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/linux-xen/irq_ia64.c      Tue Oct 21 10:37:33 2008 +0800
> @@ -334,3 +334,49 @@
>  
>       writeq(ipi_data, ipi_addr);
>  }
> +
> +void hvm_pci_intx_assert(
> +             struct domain *d, unsigned int device, unsigned int intx)
> +{
> +     struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
> +     unsigned int gsi;
> +
> +     ASSERT((device <= 31) && (intx <= 3));
> +
> +     if ( __test_and_set_bit(device*4 + intx, &hvm_irq->pci_intx.i) )
> +             return;
> +     gsi = hvm_pci_intx_gsi(device, intx);
> +     if ( ++hvm_irq->gsi_assert_count[gsi] == 1 ){
> +             viosapic_set_irq(d, gsi, 1);
> +     }
> +}
> +
> +void hvm_pci_intx_deassert(
> +             struct domain *d, unsigned int device, unsigned int intx)
> +{
> +     struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
> +     unsigned int gsi;
> +
> +     ASSERT((device <= 31) && (intx <= 3));
> +
> +     if ( !__test_and_clear_bit(device*4 + intx, &hvm_irq->pci_intx.i) )
> +             return;
> +
> +    gsi = hvm_pci_intx_gsi(device, intx);    
> +
> +     if (--hvm_irq->gsi_assert_count[gsi] == 0)
> +             viosapic_set_irq(d, gsi, 0);
> +}
> +
> +void hvm_isa_irq_assert(
> +             struct domain *d, unsigned int isa_irq)
> +{
> +     /* dummy */
> +}
> +
> +
> +void hvm_isa_irq_deassert(
> +             struct domain *d, unsigned int isa_irq)
> +{
> +     /* dummy */
> +}
> diff -r fc74f8f81e1e xen/arch/ia64/vmx/viosapic.c
> --- a/xen/arch/ia64/vmx/viosapic.c    Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/vmx/viosapic.c    Tue Oct 21 10:37:33 2008 +0800
> @@ -314,10 +314,6 @@
>  out:    
>      spin_unlock(&viosapic->lock);
>  }
> -
> -#define hvm_pci_intx_gsi(dev, intx)  \
> -    (((((dev) << 2) + ((dev) >> 3) + (intx)) & 31) + 16)
> -        
>  
>  void viosapic_set_pci_irq(struct domain *d, int device, int intx, int level)
>  {
> diff -r fc74f8f81e1e xen/arch/ia64/xen/mm.c
> --- a/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:37:33 2008 +0800
> @@ -3414,18 +3414,6 @@
>      __xencomm_mark_dirty(current->domain, addr, len);
>  }
>  
> -int iommu_map_page(struct domain *d, unsigned long gfn, unsigned long mfn)
> -{
> -    /* STUB to compile */
> -    return -ENOSYS;
> -}
> -
> -int iommu_unmap_page(struct domain *d, unsigned long gfn)
> -{
> -    /* STUB to compile */
> -    return -ENOSYS;
> -}
> -
>  /*
>   * Local variables:
>   * mode: C
> diff -r fc74f8f81e1e xen/arch/ia64/xen/xensetup.c
> --- a/xen/arch/ia64/xen/xensetup.c    Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/xen/xensetup.c    Tue Oct 21 10:37:33 2008 +0800
> @@ -740,3 +740,15 @@
>      }
>  }
>  
> +int xen_in_range(paddr_t start, paddr_t end)
> +{
> +    start = max_t(paddr_t, start, xen_pstart);
> +    end = min_t(paddr_t, end, xen_pstart + XENHEAP_DEFAULT_SIZE);
> + 
> +    return start < end; 
> +}
> +
> +int tboot_in_range(paddr_t start, paddr_t end)
> +{
> +    return 0;
> +}
> diff -r fc74f8f81e1e xen/include/asm-ia64/domain.h
> --- a/xen/include/asm-ia64/domain.h   Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/include/asm-ia64/domain.h   Tue Oct 21 10:37:33 2008 +0800
> @@ -42,6 +42,8 @@
>  /* Cleanly crash the current domain with a message.  */
>  extern void panic_domain(struct pt_regs *, const char *, ...)
>       __attribute__ ((noreturn, format (printf, 2, 3)));
> +
> +#define has_arch_pdevs(d)    (!list_empty(&(d)->arch.pdev_list))
>  
>  struct mm_struct {
>       volatile pgd_t * pgd;
> @@ -166,6 +168,7 @@
>      unsigned char rid_bits;          /* number of virtual rid bits (default: 
> 18) */
>      int breakimm;               /* The imm value for hypercalls.  */
>  
> +    struct list_head pdev_list;
>      struct virtual_platform_def     vmx_platform;
>  #define      hvm_domain vmx_platform /* platform defs are not vmx specific */
>  
> diff -r fc74f8f81e1e xen/include/asm-ia64/linux-xen/asm/iosapic.h
> --- a/xen/include/asm-ia64/linux-xen/asm/iosapic.h    Tue Oct 21 10:20:39 
> 2008 +0800
> +++ b/xen/include/asm-ia64/linux-xen/asm/iosapic.h    Tue Oct 21 10:37:33 
> 2008 +0800
> @@ -175,5 +175,8 @@
>  extern unsigned long ia64_xen_vector[];
>  #endif /* XEN */
>  
> +#define IO_APIC_BASE(idx) ((unsigned int *)iosapic_lists[idx].addr)
> +#define IO_APIC_ID(idx)   (iosapic_lists[idx].id)
> +
>  # endif /* !__ASSEMBLY__ */
>  #endif /* __ASM_IA64_IOSAPIC_H */
> diff -r fc74f8f81e1e xen/include/asm-ia64/linux/asm/hw_irq.h
> --- a/xen/include/asm-ia64/linux/asm/hw_irq.h Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/include/asm-ia64/linux/asm/hw_irq.h Tue Oct 21 10:37:33 2008 +0800
> @@ -124,13 +124,6 @@
>       return irq_desc + irq;
>  }
>  
> -/* Extract the IA-64 vector that corresponds to IRQ.  */
> -static inline ia64_vector
> -irq_to_vector (int irq)
> -{
> -     return (ia64_vector) irq;
> -}
> -
>  /*
>   * Convert the local IA-64 vector to the corresponding irq number.  This 
> translation is
>   * done in the context of the interrupt domain that the currently executing 
> CPU belongs
> diff -r fc74f8f81e1e xen/include/asm-ia64/vmx_platform.h
> --- a/xen/include/asm-ia64/vmx_platform.h     Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/include/asm-ia64/vmx_platform.h     Tue Oct 21 10:37:33 2008 +0800
> @@ -21,8 +21,10 @@
>  
>  #include <public/xen.h>
>  #include <public/hvm/params.h>
> +#include <asm/hvm/irq.h>
>  #include <asm/viosapic.h>
>  #include <asm/hvm/vacpi.h>
> +#include <xen/hvm/iommu.h>
>  
>  struct vmx_ioreq_page {
>      spinlock_t          lock;
> @@ -41,6 +43,9 @@
>      /* One IOSAPIC now... */
>      struct viosapic             viosapic;
>      struct vacpi                vacpi;
> +    /* Pass-throgh VT-d */
> +    struct hvm_irq              irq;
> +    struct hvm_iommu            hvm_iommu;
>  } vir_plat_t;
>  
>  static inline int __fls(uint32_t word)
> 
> 
-- 
yamahata

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel