Tsubai has convinced me that openpic_init() should remain machine-dependant
as the details might differ between archs, and passing the various options leads to some clutter.
This commit is contained in:
parent
5d05ca039b
commit
e96035c57c
@ -1,3 +1,5 @@
|
||||
/* $NetBSD: openpicreg.h,v 1.1 2001/02/02 06:11:53 briggs Exp $ */
|
||||
/* $NetBSD: openpicreg.h,v 1.2 2001/02/05 19:22:24 briggs Exp $ */
|
||||
|
||||
void openpic_init __P((void));
|
||||
|
||||
#include <powerpc/openpicreg.h>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: extintr.c,v 1.25 2001/02/04 17:46:33 briggs Exp $ */
|
||||
/* $NetBSD: extintr.c,v 1.26 2001/02/05 19:22:24 briggs Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1995 Per Fogelstrom
|
||||
@ -676,9 +676,49 @@ softintr(ipl)
|
||||
}
|
||||
|
||||
void
|
||||
macppc_openpic_init()
|
||||
openpic_init()
|
||||
{
|
||||
openpic_init(macppc_openpic_base, ICU_LEN);
|
||||
int irq;
|
||||
u_int x;
|
||||
|
||||
openpic_base = (volatile unsigned char *) macppc_openpic_base;
|
||||
|
||||
/* disable all interrupts */
|
||||
for (irq = 0; irq < 256; irq++)
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), OPENPIC_IMASK);
|
||||
|
||||
openpic_set_priority(0, 15);
|
||||
|
||||
/* we don't need 8259 pass through mode */
|
||||
x = openpic_read(OPENPIC_CONFIG);
|
||||
x |= OPENPIC_CONFIG_8259_PASSTHRU_DISABLE;
|
||||
openpic_write(OPENPIC_CONFIG, x);
|
||||
|
||||
/* send all interrupts to cpu 0 */
|
||||
for (irq = 0; irq < ICU_LEN; irq++)
|
||||
openpic_write(OPENPIC_IDEST(irq), 1 << 0);
|
||||
|
||||
for (irq = 0; irq < ICU_LEN; irq++) {
|
||||
x = irq;
|
||||
x |= OPENPIC_IMASK;
|
||||
x |= OPENPIC_POLARITY_POSITIVE;
|
||||
x |= OPENPIC_SENSE_LEVEL;
|
||||
x |= 8 << OPENPIC_PRIORITY_SHIFT;
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), x);
|
||||
}
|
||||
|
||||
/* XXX set spurious intr vector */
|
||||
|
||||
openpic_set_priority(0, 0);
|
||||
|
||||
/* clear all pending interrunts */
|
||||
for (irq = 0; irq < 256; irq++) {
|
||||
openpic_read_irq(0);
|
||||
openpic_eoi(0);
|
||||
}
|
||||
|
||||
for (irq = 0; irq < ICU_LEN; irq++)
|
||||
openpic_disable_irq(irq);
|
||||
|
||||
install_extint(ext_intr_openpic);
|
||||
}
|
||||
@ -743,7 +783,7 @@ init_interrupt()
|
||||
goto failed;
|
||||
|
||||
macppc_openpic_base = (void *)(obio_base + reg[0]);
|
||||
macppc_openpic_init();
|
||||
openpic_init();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: openpic.h,v 1.2 2001/02/04 17:38:10 briggs Exp $ */
|
||||
/* $NetBSD: openpic.h,v 1.3 2001/02/05 19:22:23 briggs Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 Tsubai Masanari. All rights reserved.
|
||||
@ -30,7 +30,7 @@
|
||||
|
||||
#include <machine/openpicreg.h>
|
||||
|
||||
void openpic_init __P((unsigned char *, int));
|
||||
/* void openpic_init(): defined in machdep code, must set openpic_base */
|
||||
void openpic_enable_irq __P((int, int));
|
||||
void openpic_disable_irq __P((int));
|
||||
void openpic_set_priority __P((int, int));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: openpicreg.h,v 1.1 2001/02/02 06:11:52 briggs Exp $ */
|
||||
/* $NetBSD: openpicreg.h,v 1.2 2001/02/05 19:22:23 briggs Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 Tsubai Masanari. All rights reserved.
|
||||
@ -74,12 +74,6 @@
|
||||
#define OPENPIC_IDEST(irq) (0x10010 + (irq) * 0x20)
|
||||
#endif
|
||||
|
||||
#ifndef OPENPIC_INIT_SRC
|
||||
#define OPENPIC_INIT_SRC(irq) \
|
||||
((irq) | OPENPIC_IMASK | OPENPIC_POLARITY_POSITIVE | \
|
||||
OPENPIC_SENSE_LEVEL | (8 << OPENPIC_PRIORITY_SHIFT))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PROCESSOR register (IDU base + 0x20000)
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: openpic.c,v 1.2 2001/02/04 17:35:28 briggs Exp $ */
|
||||
/* $NetBSD: openpic.c,v 1.3 2001/02/05 19:22:24 briggs Exp $ */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
@ -6,51 +6,6 @@
|
||||
|
||||
volatile unsigned char *openpic_base;
|
||||
|
||||
void
|
||||
openpic_init(unsigned char *base, int topirq)
|
||||
{
|
||||
int irq, maxirq;
|
||||
u_int x;
|
||||
|
||||
openpic_base = (volatile unsigned char *) base;
|
||||
|
||||
x = openpic_read(OPENPIC_FEATURE);
|
||||
maxirq = (x >> 16) & 0x7ff;
|
||||
|
||||
/* disable all interrupts */
|
||||
for (irq = 0; irq < maxirq; irq++)
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), OPENPIC_IMASK);
|
||||
|
||||
openpic_set_priority(0, 15);
|
||||
|
||||
/* we don't need 8259 pass through mode */
|
||||
x = openpic_read(OPENPIC_CONFIG);
|
||||
x |= OPENPIC_CONFIG_8259_PASSTHRU_DISABLE;
|
||||
openpic_write(OPENPIC_CONFIG, x);
|
||||
|
||||
/* send all interrupts to cpu 0 */
|
||||
for (irq = 0; irq < topirq; irq++)
|
||||
openpic_write(OPENPIC_IDEST(irq), 1 << 0);
|
||||
|
||||
for (irq = 0; irq < topirq; irq++) {
|
||||
x = OPENPIC_INIT_SRC(irq);
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), x);
|
||||
}
|
||||
|
||||
openpic_write(OPENPIC_SPURIOUS_VECTOR, 0xff);
|
||||
|
||||
openpic_set_priority(0, 0);
|
||||
|
||||
/* clear all pending interrunts */
|
||||
for (irq = 0; irq < maxirq; irq++) {
|
||||
openpic_read_irq(0);
|
||||
openpic_eoi(0);
|
||||
}
|
||||
|
||||
for (irq = 0; irq < topirq; irq++)
|
||||
openpic_disable_irq(irq);
|
||||
}
|
||||
|
||||
void
|
||||
openpic_enable_irq(irq, type)
|
||||
int irq, type;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: openpicreg.h,v 1.1 2001/02/04 18:32:14 briggs Exp $ */
|
||||
/* $NetBSD: openpicreg.h,v 1.2 2001/02/05 19:22:24 briggs Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2001 Wasabi Systems, Inc.
|
||||
@ -60,4 +60,6 @@
|
||||
|
||||
#define OPENPIC_IDEST(irq) OPENPIC_SRC_VECTOR(irq) + 0x10
|
||||
|
||||
void openpic_init __P((unsigned char *));
|
||||
|
||||
#include <powerpc/openpicreg.h>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: extintr.c,v 1.1 2001/02/04 18:32:17 briggs Exp $ */
|
||||
/* $NetBSD: extintr.c,v 1.2 2001/02/05 19:22:25 briggs Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1995 Per Fogelstrom
|
||||
@ -422,3 +422,48 @@ do_pending_int()
|
||||
processing = 0;
|
||||
asm volatile("mtmsr %0" :: "r"(emsr));
|
||||
}
|
||||
|
||||
void
|
||||
openpic_init(unsigned char *base)
|
||||
{
|
||||
int irq, maxirq;
|
||||
u_int x;
|
||||
|
||||
openpic_base = (volatile unsigned char *) base;
|
||||
|
||||
x = openpic_read(OPENPIC_FEATURE);
|
||||
maxirq = (x >> 16) & 0x7ff;
|
||||
|
||||
/* disable all interrupts */
|
||||
for (irq = 0; irq < maxirq; irq++)
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), OPENPIC_IMASK);
|
||||
|
||||
openpic_set_priority(0, 15);
|
||||
|
||||
/* we don't need 8259 pass through mode */
|
||||
x = openpic_read(OPENPIC_CONFIG);
|
||||
x |= OPENPIC_CONFIG_8259_PASSTHRU_DISABLE;
|
||||
openpic_write(OPENPIC_CONFIG, x);
|
||||
|
||||
/* send all interrupts to cpu 0 */
|
||||
for (irq = 0; irq < ICU_LEN; irq++)
|
||||
openpic_write(OPENPIC_IDEST(irq), 1 << 0);
|
||||
|
||||
for (irq = 0; irq < ICU_LEN; irq++) {
|
||||
x = OPENPIC_INIT_SRC(irq);
|
||||
openpic_write(OPENPIC_SRC_VECTOR(irq), x);
|
||||
}
|
||||
|
||||
openpic_write(OPENPIC_SPURIOUS_VECTOR, 0xff);
|
||||
|
||||
openpic_set_priority(0, 0);
|
||||
|
||||
/* clear all pending interrunts */
|
||||
for (irq = 0; irq < maxirq; irq++) {
|
||||
openpic_read_irq(0);
|
||||
openpic_eoi(0);
|
||||
}
|
||||
|
||||
for (irq = 0; irq < ICU_LEN; irq++)
|
||||
openpic_disable_irq(irq);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.1 2001/02/04 18:32:18 briggs Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.2 2001/02/05 19:22:25 briggs Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||
@ -335,7 +335,7 @@ initppc(startkernel, endkernel, args, btinfo)
|
||||
out32rb(SANDPOINT_PCI_CONFIG_DATA, SANDPOINT_BUS_SPACE_EUMB);
|
||||
out32rb(SANDPOINT_PCI_CONFIG_ADDR, 0);
|
||||
|
||||
openpic_init(eumb_base + 0x40000, ICU_LEN);
|
||||
openpic_init(eumb_base + 0x40000);
|
||||
#if (NISA > 0)
|
||||
isa_intr_init();
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user