K 10 svn:author V 5 jceel K 8 svn:date V 27 2014-08-11T16:44:06.307932Z K 7 svn:log V 1344 Initial version of refactored interrupt handling framework for FreeBSD ARM. Currently supports following interrupt controllers: * lpc_intc in lpc port * aintc in ti port * intc in bcm2835 port (Raspberry PI) * ARM GIC It's mainly based on 2012 Google Summer of Code project, adapted for current HEAD and with added SMP (IPI) support. It has been tested on LPC3250, Pandaboard and RPI (both with and without SMP support). Introduces hierarchical interrupt controllers in the system, allowing to easily utilize multiplexers such as GPIOs to serve as interrupt sources. nexus driver is a top-level interrupt controller, exposing single interruprt (IRQ) on ARM. The GIC or any other used interrupt controller setups handler on that interrupt, exposing new IRQs available for other peripherals. In an example SoC, interrupt hierarchy may look like that: nexus0 (1 interrupts) | \-- gic0 (160 interrupts, uses irq nexus0:0) | \-- gpio0 (8 interrupts, uses irq gic0:42) | | | \-- mmcsd0 (uses irqs gpio0:1, gpio0:2) | \-- spi0 (uses irq gpio0:3) | ... \-- gpio1 (8 interrupts, uses irq gic0:43) \-- ehci0 (uses irq gic0:109) ... That change should not break any existing ports in any way, except for need to add 'arm/arm/intr.c' to 'files.*' of existing ports, as it's no longer compiled-in by default. END