/* * SPEAr platform shared irq layer header file * * Copyright (C) 2009-2012 ST Microelectronics * Viresh Kumar <viresh.linux@gmail.com> * * This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any * warranty of any kind, whether express or implied. */ #ifndef __SPEAR_SHIRQ_H #define __SPEAR_SHIRQ_H #include <linux/irq.h> #include <linux/types.h> /* * struct shirq_regs: shared irq register configuration * * enb_reg: enable register offset * reset_to_enb: val 1 indicates, we need to clear bit for enabling interrupt * status_reg: status register offset * status_reg_mask: status register valid mask * clear_reg: clear register offset * reset_to_clear: val 1 indicates, we need to clear bit for clearing interrupt */ struct shirq_regs { u32 enb_reg; u32 reset_to_enb; u32 status_reg; u32 clear_reg; u32 reset_to_clear; }; /* * struct spear_shirq: shared irq structure * * irq: hardware irq number * irq_base: base irq in linux domain * irq_nr: no. of shared interrupts in a particular block * irq_bit_off: starting bit offset in the status register * invalid_irq: irq group is currently disabled * base: base address of shared irq register * regs: register configuration for shared irq block */ struct spear_shirq { u32 irq; u32 irq_base; u32 irq_nr; u32 irq_bit_off; int invalid_irq; void __iomem *base; struct shirq_regs regs; }; int __init spear300_shirq_of_init(struct device_node *np, struct device_node *parent); int __init spear310_shirq_of_init(struct device_node *np, struct device_node *parent); int __init spear320_shirq_of_init(struct device_node *np, struct device_node *parent); #endif /* __SPEAR_SHIRQ_H */