|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |