1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
/*
** macints.h -- Macintosh Linux interrupt handling structs and prototypes
**
** Copyright 1997 by Michael Schmitz
**
** This file is subject to the terms and conditions of the GNU General Public
** License. See the file COPYING in the main directory of this archive
** for more details.
**
*/
#ifndef _ASM_MACINTS_H_
#define _ASM_MACINTS_H_
#include <asm/irq.h>
/*
** Macintosh Interrupt sources.
**
** Note: these are all routed via the generic VIA interrupt routine!
**
*/
#define SRC_VIA1 0
#define SRC_VIA2 1
#define VIA1_SOURCE_BASE 8
#define VIA2_SOURCE_BASE 16
#define RBV_SOURCE_BASE 24
#define MAC_SCC_SOURCE_BASE 32
#define NUBUS_SOURCE_BASE 56
#define NUBUS_MAX_SOURCES 8
/* FIXME: sources not contigous ... */
#define NUM_MAC_SOURCES (NUBUS_SOURCE_BASE+NUBUS_MAX_SOURCES-VIA1_SOURCE_BASE)
#define IRQ_SRC_MASK (VIA1_SOURCE_BASE|VIA2_SOURCE_BASE|MAC_SCC_SOURCE_BASE)
#define IRQ_IDX_MASK 7
/*
* quick hack to adapt old MACHSPEC-aware source
*/
#define IRQ_IDX(irq) (irq)
/* interrupt service types */
#define IRQ_TYPE_SLOW 0
#define IRQ_TYPE_FAST 1
#define IRQ_TYPE_PRIO 2
#define IRQ_SPURIOUS (0)
/* auto-vector interrupts */
#define IRQ_AUTO_1 (1)
#define IRQ_AUTO_2 (2)
#define IRQ_AUTO_3 (3)
#define IRQ_AUTO_4 (4)
#define IRQ_AUTO_5 (5)
#define IRQ_AUTO_6 (6)
#define IRQ_AUTO_7 (7)
/* VIA1 interrupts */
#define IRQ_VIA1_0 (8) /* one second int. */
#define IRQ_VIA1_1 (9) /* VBlank int. */
#define IRQ_MAC_VBL IRQ_VIA1_1
#define IRQ_VIA1_2 (10) /* ADB SR shifts complete */
#define IRQ_MAC_ADB IRQ_VIA1_2
#define IRQ_MAC_ADB_SR IRQ_VIA1_2
#define IRQ_VIA1_3 (11) /* ADB SR CB2 ?? */
#define IRQ_MAC_ADB_SD IRQ_VIA1_3
#define IRQ_VIA1_4 (12) /* ADB SR ext. clock pulse */
#define IRQ_MAC_ADB_CL IRQ_VIA1_4
#define IRQ_VIA1_5 (13)
#define IRQ_MAC_TIMER_2 IRQ_VIA1_5
#define IRQ_VIA1_6 (14)
#define IRQ_MAC_TIMER_1 IRQ_VIA1_6
#define IRQ_VIA1_7 (15)
/* VIA2 interrupts */
#define IRQ_VIA2_0 (16)
#define IRQ_MAC_SCSIDRQ IRQ_VIA2_0
#define IRQ_VIA2_1 (17)
#define IRQ_MAC_NUBUS IRQ_VIA2_1
#define IRQ_VIA2_2 (18)
#define IRQ_VIA2_3 (19)
#define IRQ_MAC_SCSI IRQ_VIA2_3
#define IRQ_VIA2_4 (20)
#define IRQ_VIA2_5 (21)
#define IRQ_VIA2_6 (22)
#define IRQ_VIA2_7 (23)
#if 0
/* RBV interrupts */
#define IRQ_RBV_0 (24)
#define IRQ_RBV_1 (25)
#define IRQ_RBV_2 (26)
#define IRQ_RBV_3 (27)
#define IRQ_RBV_4 (28)
#define IRQ_RBV_5 (29)
#define IRQ_RBV_6 (30)
#define IRQ_RBV_7 (31)
#endif
/* Level 3 (PSC, AV Macs only) interrupts */
#define IRQ_PSC3_0 (24)
#define IRQ_MAC_MACE IRQ_PSC3_0
#define IRQ_PSC3_1 (25)
#define IRQ_PSC3_2 (26)
#define IRQ_PSC3_3 (27)
/* Level 4 (SCC) interrupts */
#define IRQ_SCC (32)
#define IRQ_SCCB (33)
#define IRQ_SCCA (34)
#if 0 /* FIXME: are there multiple interrupt conditions on the SCC ?? */
/* SCC interrupts */
#define IRQ_SCCB_TX (32)
#define IRQ_SCCB_STAT (33)
#define IRQ_SCCB_RX (34)
#define IRQ_SCCB_SPCOND (35)
#define IRQ_SCCA_TX (36)
#define IRQ_SCCA_STAT (37)
#define IRQ_SCCA_RX (38)
#define IRQ_SCCA_SPCOND (39)
#endif
/* Level 4 (PSC, AV Macs only) interrupts */
#define IRQ_PSC4_0 (32)
#define IRQ_PSC4_1 (33)
#define IRQ_PSC4_2 (34)
#define IRQ_PSC4_3 (35)
#define IRQ_MAC_MACE_DMA IRQ_PSC4_3
/* Level 5 (PSC, AV Macs only) interrupts */
#define IRQ_PSC5_0 (40)
#define IRQ_PSC5_1 (41)
#define IRQ_PSC5_2 (42)
#define IRQ_PSC5_3 (43)
/* Level 6 (PSC, AV Macs only) interrupts */
#define IRQ_PSC6_0 (48)
#define IRQ_PSC6_1 (49)
#define IRQ_PSC6_2 (50)
#define IRQ_PSC6_3 (51)
/* Nubus interrupts (cascaded to VIA2) */
#define IRQ_NUBUS_1 (56)
#define INT_CLK 24576 /* CLK while int_clk =2.456MHz and divide = 100 */
#define INT_TICKS 246 /* to make sched_time = 99.902... HZ */
#define VIA_ENABLE 0
#define VIA_PENDING 1
#define VIA_SERVICE 2
#define VIA_MASK 3
/*
* Utility functions for setting/clearing bits in the interrupt registers of
* the VIA.
*/
void mac_enable_irq( unsigned irq );
void mac_disable_irq( unsigned irq );
void mac_turnon_irq( unsigned irq );
void mac_turnoff_irq( unsigned irq );
void mac_clear_pending_irq( unsigned irq );
int mac_irq_pending( unsigned irq );
int nubus_request_irq(int slot, void *dev_id, void (*handler)(int,void *,struct pt_regs *));
int nubus_free_irq(int slot);
unsigned long mac_register_nubus_int( void );
void mac_unregister_nubus_int( unsigned long );
extern void mac_default_handler(int irq, void *dev_id, struct pt_regs *regs);
extern void via1_irq(int irq, void *dev_id, struct pt_regs *regs);
extern void via2_irq(int irq, void *dev_id, struct pt_regs *regs);
extern void rbv_irq(int irq, void *dev_id, struct pt_regs *regs);
extern void mac_bang(int irq, void *dev_id, struct pt_regs *regs);
extern void mac_SCC_handler(int irq, void *dev_id, struct pt_regs *regs);
#endif /* asm/macints.h */
|