[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC 12/29] xen/arm: Introduce gic_irq_xlate



On Mon, 2013-04-29 at 00:01 +0100, Julien Grall wrote:
> This function translates an interrupt specifier to an IRQ number and IRQ
> type (ie: level trigger, edge trigger,...). It's GIC specific.
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> ---
>  xen/arch/arm/gic.c        |   20 ++++++++++++++++++++
>  xen/arch/arm/setup.c      |    1 +
>  xen/include/asm-arm/gic.h |    4 ++++
>  3 files changed, 25 insertions(+)
> 
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index e03bb67..1f44fea 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -329,6 +329,26 @@ static void __cpuinit gic_hyp_disable(void)
>      GICH[GICH_HCR] = 0;
>  }
>  
> +int gic_irq_xlate(const u32 *intspec, unsigned int intsize,
> +                  unsigned int *out_hwirq,
> +                  unsigned int *out_type)
> +{
> +    if ( intsize < 3 )
> +        return -EINVAL;
> +
> +    /* Get the interrupt number and add 16 to skip over SGIs */
> +    *out_hwirq = intspec[1] + 16;
> +
> +    /* For SPIs, we need to add 16 more to get the GIC irq ID number */
> +    if ( !intspec[0] )
> +        *out_hwirq += 16;
> +
> +    if ( out_type )
> +        *out_type = intspec[2] & IRQ_TYPE_SENSE_MASK;

These defines could replace the hardcoded 0xf08 in make_hypervisor_node?
Super!

> +
> +    return 0;
> +}
> +
>  /* Set up the GIC */
>  void __init gic_init(void)
>  {
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index 77d0879..51f4bba 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -429,6 +429,7 @@ void __init start_xen(unsigned long boot_phys_offset,
>      setup_mm(fdt_paddr, fdt_size);
>  
>      dt_unflatten_host_device_tree();
> +    dt_irq_xlate = gic_irq_xlate;

It feels like this ought to belong in a gic_init function of some sort?

>  
>  #ifdef EARLY_UART_ADDRESS
>      /* TODO Need to get device tree or command line for UART address */
> diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
> index 2fac673..945e8db 100644
> --- a/xen/include/asm-arm/gic.h
> +++ b/xen/include/asm-arm/gic.h
> @@ -187,6 +187,10 @@ extern void send_SGI_allbutself(enum gic_sgi sgi);
>  /* print useful debug info */
>  extern void gic_dump_info(struct vcpu *v);
>  
> +/* IRQ translation function for the device tree */
> +int gic_irq_xlate(const u32 *intspec, unsigned int intsize,
> +                  unsigned int *out_hwirq, unsigned int *out_type);
> +
>  #endif /* __ASSEMBLY__ */
>  #endif
>  



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.