/* * SPEAr platform shared irq layer source file * * Copyright (C) 2009-2012 ST Microelectronics * Viresh Kumar <vireshk@kernel.org> * * Copyright (C) 2012 ST Microelectronics * Shiraz Hashim <shiraz.linux.kernel@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.
*/ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
/* * struct spear_shirq: shared irq structure * * base: Base register address * status_reg: Status register offset for chained interrupt handler * mask_reg: Mask register offset for irq chip * mask: Mask to apply to the status register * virq_base: Base virtual interrupt number * nr_irqs: Number of interrupts handled by this block * offset: Bit offset of the first interrupt * irq_chip: Interrupt controller chip used for this instance, * if NULL group is disabled, but accounted
*/ struct spear_shirq { void __iomem *base;
u32 status_reg;
u32 mask_reg;
u32 mask;
u32 virq_base;
u32 nr_irqs;
u32 offset; struct irq_chip *irq_chip;
};
for (i = 0; i < shirq->nr_irqs; i++) {
irq_set_chip_and_handler(shirq->virq_base + i,
shirq->irq_chip, handle_simple_irq);
irq_set_chip_data(shirq->virq_base + i, shirq);
}
}
staticint __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr, struct device_node *np)
{ int i, parent_irq, virq_base, hwirq = 0, nr_irqs = 0; struct irq_domain *shirq_domain; void __iomem *base;
base = of_iomap(np, 0); if (!base) {
pr_err("%s: failed to map shirq registers\n", __func__); return -ENXIO;
}
for (i = 0; i < block_nr; i++)
nr_irqs += shirq_blocks[i]->nr_irqs;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.