Support for clearing interrupts on a Rasterops Colorboard 364.
Thanks go to Michel Chalufour <michelc@tiac.net> for grovelling around for me.
This commit is contained in:
parent
3f7423a432
commit
5230506ca5
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: grf_mv.c,v 1.23 1997/05/02 00:54:29 briggs Exp $ */
|
/* $NetBSD: grf_mv.c,v 1.24 1997/05/03 02:29:54 briggs Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Allen Briggs. All rights reserved.
|
* Copyright (c) 1995 Allen Briggs. All rights reserved.
|
||||||
@ -56,6 +56,7 @@ static void grfmv_intr_generic __P((void *vsc, int slot));
|
|||||||
static void grfmv_intr_radius __P((void *vsc, int slot));
|
static void grfmv_intr_radius __P((void *vsc, int slot));
|
||||||
static void grfmv_intr_cti __P((void *vsc, int slot));
|
static void grfmv_intr_cti __P((void *vsc, int slot));
|
||||||
static void grfmv_intr_cb264 __P((void *vsc, int slot));
|
static void grfmv_intr_cb264 __P((void *vsc, int slot));
|
||||||
|
static void grfmv_intr_cb364 __P((void *vsc, int slot));
|
||||||
|
|
||||||
static int grfmv_mode __P((struct grf_softc *gp, int cmd, void *arg));
|
static int grfmv_mode __P((struct grf_softc *gp, int cmd, void *arg));
|
||||||
static caddr_t grfmv_phys __P((struct grf_softc *gp, vm_offset_t addr));
|
static caddr_t grfmv_phys __P((struct grf_softc *gp, vm_offset_t addr));
|
||||||
@ -237,9 +238,11 @@ grfmv_attach(parent, self, aux)
|
|||||||
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cti, sc);
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cti, sc);
|
||||||
break;
|
break;
|
||||||
case NUBUS_DRHW_CB264:
|
case NUBUS_DRHW_CB264:
|
||||||
case NUBUS_DRHW_CB364:
|
|
||||||
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb264, sc);
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb264, sc);
|
||||||
break;
|
break;
|
||||||
|
case NUBUS_DRHW_CB364:
|
||||||
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb364, sc);
|
||||||
|
break;
|
||||||
case NUBUS_DRHW_SE30:
|
case NUBUS_DRHW_SE30:
|
||||||
/* Do nothing--SE/30 interrupts are disabled */
|
/* Do nothing--SE/30 interrupts are disabled */
|
||||||
break;
|
break;
|
||||||
@ -410,3 +413,94 @@ grfmv_intr_cb264(vsc, slot)
|
|||||||
movl #0x1,a0@(0xff6014)"
|
movl #0x1,a0@(0xff6014)"
|
||||||
: : "g" (slotbase) : "a0","d0","d1");
|
: : "g" (slotbase) : "a0","d0","d1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Support for the Colorboard 364 might be more complex than it needs to
|
||||||
|
* be. If we can find more information about this card, this might be
|
||||||
|
* significantly simplified. Contributions welcome... :-)
|
||||||
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static void
|
||||||
|
grfmv_intr_cb364(vsc, slot)
|
||||||
|
void *vsc;
|
||||||
|
int slot;
|
||||||
|
{
|
||||||
|
struct grfbus_softc *sc;
|
||||||
|
volatile char *slotbase;
|
||||||
|
|
||||||
|
sc = (struct grfbus_softc *)vsc;
|
||||||
|
slotbase = (volatile char *)sc->sc_slot.virtual_base;
|
||||||
|
asm volatile(" movl %0,a0
|
||||||
|
movl a0@(0xfe6028),d0
|
||||||
|
andl #0x2,d0
|
||||||
|
beq _cb364_intr4
|
||||||
|
movql #0x3,d0
|
||||||
|
movl a0@(0xfe6018),d1
|
||||||
|
movl #0x3,a0@(0xfe6018)
|
||||||
|
movw a0@(0xfe7010),d2
|
||||||
|
movl d1,a0@(0xfe6018)
|
||||||
|
movl a0@(0xfe6020),d1
|
||||||
|
btst #0x06,d2
|
||||||
|
beq _cb364_intr0
|
||||||
|
btst #0x00,d1
|
||||||
|
beq _cb364_intr5
|
||||||
|
bsr _cb364_intr1
|
||||||
|
bra _cb364_intr_out
|
||||||
|
_cb364_intr0:
|
||||||
|
btst #0x00,d1
|
||||||
|
bne _cb364_intr5
|
||||||
|
bsr _cb364_intr1
|
||||||
|
bra _cb364_intr_out
|
||||||
|
_cb364_intr1:
|
||||||
|
movl d0,a0@(0xfe600c)
|
||||||
|
nop
|
||||||
|
tstb d0
|
||||||
|
beq _cb364_intr3
|
||||||
|
movl #0x0002,a0@(0xfe6040)
|
||||||
|
movl #0x0105,a0@(0xfe6048)
|
||||||
|
movl #0x000e,a0@(0xfe604c)
|
||||||
|
movl #0x00c3,a0@(0xfe6058)
|
||||||
|
movl #0x0061,a0@(0xfe605c)
|
||||||
|
btst #0x06,d2
|
||||||
|
beq _cb364_intr2
|
||||||
|
movl #0x001c,a0@(0xfe6050)
|
||||||
|
movl #0x00bc,a0@(0xfe6054)
|
||||||
|
movl #0x0012,a0@(0xfe6060)
|
||||||
|
movl #0x000e,a0@(0xfe6044)
|
||||||
|
movl #0x00c3,a0@(0xfe6064)
|
||||||
|
movl #0x0061,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr2:
|
||||||
|
movl #0x0016,a0@(0xfe6050)
|
||||||
|
movl #0x00b6,a0@(0xfe6054)
|
||||||
|
movl #0x0011,a0@(0xfe6060)
|
||||||
|
movl #0x0101,a0@(0xfe6044)
|
||||||
|
movl #0x00bf,a0@(0xfe6064)
|
||||||
|
movl #0x0001,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr3:
|
||||||
|
movl #0x0002,a0@(0xfe6040)
|
||||||
|
movl #0x0209,a0@(0xfe6044)
|
||||||
|
movl #0x020c,a0@(0xfe6048)
|
||||||
|
movl #0x000f,a0@(0xfe604c)
|
||||||
|
movl #0x0027,a0@(0xfe6050)
|
||||||
|
movl #0x00c7,a0@(0xfe6054)
|
||||||
|
movl #0x00d7,a0@(0xfe6058)
|
||||||
|
movl #0x006b,a0@(0xfe605c)
|
||||||
|
movl #0x0029,a0@(0xfe6060)
|
||||||
|
oril #0x0040,a0@(0xfe6064)
|
||||||
|
movl #0x0000,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr4:
|
||||||
|
movq #0x00,d0
|
||||||
|
_cb364_intr5:
|
||||||
|
movl a0@(0xfe600c),d1
|
||||||
|
andl #0x3,d1
|
||||||
|
cmpl d1,d0
|
||||||
|
beq _cb364_intr_out
|
||||||
|
bsr _cb364_intr1
|
||||||
|
_cb364_intr_out:
|
||||||
|
movl #0x1,a0@(0xfe6014)
|
||||||
|
_cb364_intr_quit:
|
||||||
|
" : : "g" (slotbase) : "a0","d0","d1","d2");
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: grf_nubus.c,v 1.23 1997/05/02 00:54:29 briggs Exp $ */
|
/* $NetBSD: grf_nubus.c,v 1.24 1997/05/03 02:29:54 briggs Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Allen Briggs. All rights reserved.
|
* Copyright (c) 1995 Allen Briggs. All rights reserved.
|
||||||
@ -56,6 +56,7 @@ static void grfmv_intr_generic __P((void *vsc, int slot));
|
|||||||
static void grfmv_intr_radius __P((void *vsc, int slot));
|
static void grfmv_intr_radius __P((void *vsc, int slot));
|
||||||
static void grfmv_intr_cti __P((void *vsc, int slot));
|
static void grfmv_intr_cti __P((void *vsc, int slot));
|
||||||
static void grfmv_intr_cb264 __P((void *vsc, int slot));
|
static void grfmv_intr_cb264 __P((void *vsc, int slot));
|
||||||
|
static void grfmv_intr_cb364 __P((void *vsc, int slot));
|
||||||
|
|
||||||
static int grfmv_mode __P((struct grf_softc *gp, int cmd, void *arg));
|
static int grfmv_mode __P((struct grf_softc *gp, int cmd, void *arg));
|
||||||
static caddr_t grfmv_phys __P((struct grf_softc *gp, vm_offset_t addr));
|
static caddr_t grfmv_phys __P((struct grf_softc *gp, vm_offset_t addr));
|
||||||
@ -237,9 +238,11 @@ grfmv_attach(parent, self, aux)
|
|||||||
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cti, sc);
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cti, sc);
|
||||||
break;
|
break;
|
||||||
case NUBUS_DRHW_CB264:
|
case NUBUS_DRHW_CB264:
|
||||||
case NUBUS_DRHW_CB364:
|
|
||||||
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb264, sc);
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb264, sc);
|
||||||
break;
|
break;
|
||||||
|
case NUBUS_DRHW_CB364:
|
||||||
|
add_nubus_intr(sc->sc_slot.slot, grfmv_intr_cb364, sc);
|
||||||
|
break;
|
||||||
case NUBUS_DRHW_SE30:
|
case NUBUS_DRHW_SE30:
|
||||||
/* Do nothing--SE/30 interrupts are disabled */
|
/* Do nothing--SE/30 interrupts are disabled */
|
||||||
break;
|
break;
|
||||||
@ -410,3 +413,94 @@ grfmv_intr_cb264(vsc, slot)
|
|||||||
movl #0x1,a0@(0xff6014)"
|
movl #0x1,a0@(0xff6014)"
|
||||||
: : "g" (slotbase) : "a0","d0","d1");
|
: : "g" (slotbase) : "a0","d0","d1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Support for the Colorboard 364 might be more complex than it needs to
|
||||||
|
* be. If we can find more information about this card, this might be
|
||||||
|
* significantly simplified. Contributions welcome... :-)
|
||||||
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static void
|
||||||
|
grfmv_intr_cb364(vsc, slot)
|
||||||
|
void *vsc;
|
||||||
|
int slot;
|
||||||
|
{
|
||||||
|
struct grfbus_softc *sc;
|
||||||
|
volatile char *slotbase;
|
||||||
|
|
||||||
|
sc = (struct grfbus_softc *)vsc;
|
||||||
|
slotbase = (volatile char *)sc->sc_slot.virtual_base;
|
||||||
|
asm volatile(" movl %0,a0
|
||||||
|
movl a0@(0xfe6028),d0
|
||||||
|
andl #0x2,d0
|
||||||
|
beq _cb364_intr4
|
||||||
|
movql #0x3,d0
|
||||||
|
movl a0@(0xfe6018),d1
|
||||||
|
movl #0x3,a0@(0xfe6018)
|
||||||
|
movw a0@(0xfe7010),d2
|
||||||
|
movl d1,a0@(0xfe6018)
|
||||||
|
movl a0@(0xfe6020),d1
|
||||||
|
btst #0x06,d2
|
||||||
|
beq _cb364_intr0
|
||||||
|
btst #0x00,d1
|
||||||
|
beq _cb364_intr5
|
||||||
|
bsr _cb364_intr1
|
||||||
|
bra _cb364_intr_out
|
||||||
|
_cb364_intr0:
|
||||||
|
btst #0x00,d1
|
||||||
|
bne _cb364_intr5
|
||||||
|
bsr _cb364_intr1
|
||||||
|
bra _cb364_intr_out
|
||||||
|
_cb364_intr1:
|
||||||
|
movl d0,a0@(0xfe600c)
|
||||||
|
nop
|
||||||
|
tstb d0
|
||||||
|
beq _cb364_intr3
|
||||||
|
movl #0x0002,a0@(0xfe6040)
|
||||||
|
movl #0x0105,a0@(0xfe6048)
|
||||||
|
movl #0x000e,a0@(0xfe604c)
|
||||||
|
movl #0x00c3,a0@(0xfe6058)
|
||||||
|
movl #0x0061,a0@(0xfe605c)
|
||||||
|
btst #0x06,d2
|
||||||
|
beq _cb364_intr2
|
||||||
|
movl #0x001c,a0@(0xfe6050)
|
||||||
|
movl #0x00bc,a0@(0xfe6054)
|
||||||
|
movl #0x0012,a0@(0xfe6060)
|
||||||
|
movl #0x000e,a0@(0xfe6044)
|
||||||
|
movl #0x00c3,a0@(0xfe6064)
|
||||||
|
movl #0x0061,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr2:
|
||||||
|
movl #0x0016,a0@(0xfe6050)
|
||||||
|
movl #0x00b6,a0@(0xfe6054)
|
||||||
|
movl #0x0011,a0@(0xfe6060)
|
||||||
|
movl #0x0101,a0@(0xfe6044)
|
||||||
|
movl #0x00bf,a0@(0xfe6064)
|
||||||
|
movl #0x0001,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr3:
|
||||||
|
movl #0x0002,a0@(0xfe6040)
|
||||||
|
movl #0x0209,a0@(0xfe6044)
|
||||||
|
movl #0x020c,a0@(0xfe6048)
|
||||||
|
movl #0x000f,a0@(0xfe604c)
|
||||||
|
movl #0x0027,a0@(0xfe6050)
|
||||||
|
movl #0x00c7,a0@(0xfe6054)
|
||||||
|
movl #0x00d7,a0@(0xfe6058)
|
||||||
|
movl #0x006b,a0@(0xfe605c)
|
||||||
|
movl #0x0029,a0@(0xfe6060)
|
||||||
|
oril #0x0040,a0@(0xfe6064)
|
||||||
|
movl #0x0000,a0@(0xfe6020)
|
||||||
|
rts
|
||||||
|
_cb364_intr4:
|
||||||
|
movq #0x00,d0
|
||||||
|
_cb364_intr5:
|
||||||
|
movl a0@(0xfe600c),d1
|
||||||
|
andl #0x3,d1
|
||||||
|
cmpl d1,d0
|
||||||
|
beq _cb364_intr_out
|
||||||
|
bsr _cb364_intr1
|
||||||
|
_cb364_intr_out:
|
||||||
|
movl #0x1,a0@(0xfe6014)
|
||||||
|
_cb364_intr_quit:
|
||||||
|
" : : "g" (slotbase) : "a0","d0","d1","d2");
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user