^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) ** amigaints.h -- Amiga Linux interrupt handling structs and prototypes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) ** Copyright 1992 by Greg Harp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) ** This file is subject to the terms and conditions of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) ** License. See the file COPYING in the main directory of this archive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) ** for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ** Created 10/2/92 by Greg Harp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #ifndef _ASMm68k_AMIGAINTS_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define _ASMm68k_AMIGAINTS_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <asm/irq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ** Amiga Interrupt sources.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) **
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define AUTO_IRQS (8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define AMI_STD_IRQS (14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define CIA_IRQS (5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define AMI_IRQS (32) /* AUTO_IRQS+AMI_STD_IRQS+2*CIA_IRQS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* builtin serial port interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define IRQ_AMIGA_TBE (IRQ_USER+0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define IRQ_AMIGA_RBF (IRQ_USER+11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) /* floppy disk interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define IRQ_AMIGA_DSKBLK (IRQ_USER+1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define IRQ_AMIGA_DSKSYN (IRQ_USER+12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /* software interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define IRQ_AMIGA_SOFT (IRQ_USER+2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) /* interrupts from external hardware */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define IRQ_AMIGA_PORTS IRQ_AUTO_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define IRQ_AMIGA_EXTER IRQ_AUTO_6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /* copper interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define IRQ_AMIGA_COPPER (IRQ_USER+4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /* vertical blanking interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define IRQ_AMIGA_VERTB (IRQ_USER+5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /* Blitter done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define IRQ_AMIGA_BLIT (IRQ_USER+6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /* Audio interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define IRQ_AMIGA_AUD0 (IRQ_USER+7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define IRQ_AMIGA_AUD1 (IRQ_USER+8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define IRQ_AMIGA_AUD2 (IRQ_USER+9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define IRQ_AMIGA_AUD3 (IRQ_USER+10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) /* CIA interrupt sources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define IRQ_AMIGA_CIAA (IRQ_USER+14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define IRQ_AMIGA_CIAA_TA (IRQ_USER+14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define IRQ_AMIGA_CIAA_TB (IRQ_USER+15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define IRQ_AMIGA_CIAA_ALRM (IRQ_USER+16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define IRQ_AMIGA_CIAA_SP (IRQ_USER+17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define IRQ_AMIGA_CIAA_FLG (IRQ_USER+18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define IRQ_AMIGA_CIAB (IRQ_USER+19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define IRQ_AMIGA_CIAB_TA (IRQ_USER+19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define IRQ_AMIGA_CIAB_TB (IRQ_USER+20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define IRQ_AMIGA_CIAB_ALRM (IRQ_USER+21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define IRQ_AMIGA_CIAB_SP (IRQ_USER+22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define IRQ_AMIGA_CIAB_FLG (IRQ_USER+23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) /* INTREQR masks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define IF_SETCLR 0x8000 /* set/clr bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define IF_INTEN 0x4000 /* master interrupt bit in INT* registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define IF_EXTER 0x2000 /* external level 6 and CIA B interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define IF_DSKSYN 0x1000 /* disk sync interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define IF_RBF 0x0800 /* serial receive buffer full interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define IF_AUD3 0x0400 /* audio channel 3 done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define IF_AUD2 0x0200 /* audio channel 2 done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define IF_AUD1 0x0100 /* audio channel 1 done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define IF_AUD0 0x0080 /* audio channel 0 done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define IF_BLIT 0x0040 /* blitter done interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define IF_VERTB 0x0020 /* vertical blanking interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define IF_COPER 0x0010 /* copper interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define IF_PORTS 0x0008 /* external level 2 and CIA A interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define IF_SOFT 0x0004 /* software initiated interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define IF_DSKBLK 0x0002 /* diskblock DMA finished */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define IF_TBE 0x0001 /* serial transmit buffer empty interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* CIA interrupt control register bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define CIA_ICR_TA 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define CIA_ICR_TB 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define CIA_ICR_ALRM 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define CIA_ICR_SP 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define CIA_ICR_FLG 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define CIA_ICR_ALL 0x1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define CIA_ICR_SETCLR 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) extern void amiga_init_IRQ(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) /* to access the interrupt control registers of CIA's use only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) ** these functions, they behave exactly like the amiga os routines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) extern struct ciabase ciaa_base, ciab_base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) extern void cia_init_IRQ(struct ciabase *base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) extern unsigned char cia_set_irq(struct ciabase *base, unsigned char mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) extern unsigned char cia_able_irq(struct ciabase *base, unsigned char mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #endif /* asm-m68k/amigaints.h */