diff options
author | rrs <rrs@FreeBSD.org> | 2010-02-20 16:30:29 +0000 |
---|---|---|
committer | rrs <rrs@FreeBSD.org> | 2010-02-20 16:30:29 +0000 |
commit | c3a2e02803a9c8498b9d463374d0a78a037c4a57 (patch) | |
tree | d1f56abf0589eb2bade888e5ee80ccc8890df5c7 /sys/mips/rmi/interrupt.h | |
parent | 238d0be5d06d3c6bd1f038e62fdbe89fec04081c (diff) | |
download | FreeBSD-src-c3a2e02803a9c8498b9d463374d0a78a037c4a57.zip FreeBSD-src-c3a2e02803a9c8498b9d463374d0a78a037c4a57.tar.gz |
Some fixes to the current RMI interrupt handling, changes in this patch are:
- (cleanup) remove rmi specific 'struct mips_intrhand' - this is no
longer needed since 'struct intr_event' have all the required hooks
- add xlr_cpu_establish_hardintr, which has args for pre/post ithread
and filter hooks, so that the PCI code can add the PCI controller
interrupt ack code here
- make 'cpu_establish_hardintr' use the above function.
- (fix) change type of eirr/eimr from register_t to uint64_t. These
have to be 64bit otherwise we cannot handle interrupts from 32.
- (fix) use eimr to mask eirr before checking interrupts, so that we
will not handle masked interrupts.
Obtained from: C. Jayachandran - c.jayachandran@gmail.com
Diffstat (limited to 'sys/mips/rmi/interrupt.h')
-rw-r--r-- | sys/mips/rmi/interrupt.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/mips/rmi/interrupt.h b/sys/mips/rmi/interrupt.h index 013a8e9..247dc9f 100644 --- a/sys/mips/rmi/interrupt.h +++ b/sys/mips/rmi/interrupt.h @@ -25,7 +25,7 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * + *__FBSDID("$FreeBSD$") * RMI_BSD */ #ifndef _RMI_INTERRUPT_H_ #define _RMI_INTERRUPT_H_ @@ -39,4 +39,14 @@ #define IRQ_MSGRING 6 #define IRQ_TIMER 7 +/* + * XLR needs custom pre and post handlers for PCI/PCI-e interrupts + * XXX: maybe follow i386 intsrc model + */ +void xlr_cpu_establish_hardintr(const char *, driver_filter_t *, + driver_intr_t *, void *, int, int, void **, void (*)(void *), + void (*)(void *), void (*)(void *), int (*)(void *, u_char)); +void xlr_mask_hard_irq(void *); +void xlr_unmask_hard_irq(void *); + #endif /* _RMI_INTERRUPT_H_ */ |