summaryrefslogtreecommitdiff
path: root/sys/alpha
diff options
context:
space:
mode:
authorBernd Walter <ticso@FreeBSD.org>2002-04-17 14:08:22 +0000
committerBernd Walter <ticso@FreeBSD.org>2002-04-17 14:08:22 +0000
commit27c5b6c8f148ff1f2c8442f7ef34e991869e2e15 (patch)
tree527633c4876e09d48a970d41d6dac5c5d1361e32 /sys/alpha
parent70abba50b651a7c7f7bf8b620b4077371273ce9b (diff)
Notes
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/dec_axppci_33.c58
-rw-r--r--sys/alpha/pci/lca_pci.c15
2 files changed, 26 insertions, 47 deletions
diff --git a/sys/alpha/alpha/dec_axppci_33.c b/sys/alpha/alpha/dec_axppci_33.c
index 27a16d8f9e17..6650f5f677bc 100644
--- a/sys/alpha/alpha/dec_axppci_33.c
+++ b/sys/alpha/alpha/dec_axppci_33.c
@@ -55,7 +55,7 @@ static int comcnrate = CONSPEED;
void dec_axppci_33_init(void);
static void dec_axppci_33_cons_init(void);
-static void dec_axppci_33_intr_map(void *);
+static int dec_axppci_33_intr_route (device_t, device_t, int);
extern int siocnattach(int, int);
extern int siogdbattach(int, int);
@@ -93,7 +93,8 @@ dec_axppci_33_init()
platform.iobus = "lca";
platform.cons_init = dec_axppci_33_cons_init;
- platform.pci_intr_map = dec_axppci_33_intr_map;
+ platform.pci_intr_route = dec_axppci_33_intr_route;
+ platform.pci_intr_map = NULL;
lca_init();
@@ -167,16 +168,13 @@ dec_axppci_33_cons_init()
#define SIO_PCIREG_PIRQ_RTCTRL 0x60 /* PIRQ0 Route Control */
-void
-dec_axppci_33_intr_map(void *arg)
+static int
+dec_axppci_33_intr_route(device_t pcib, device_t dev, int pin)
{
- pcicfgregs *cfg;
int pirq;
u_int32_t pirqreg;
u_int8_t pirqline;
- cfg = (pcicfgregs *)arg;
-
#ifndef DIAGNOSTIC
pirq = 0; /* XXX gcc -Wuninitialized */
#endif
@@ -185,23 +183,22 @@ dec_axppci_33_intr_map(void *arg)
* Slot->interrupt translation. Taken from NetBSD.
*/
- if (cfg->intpin == 0) {
+ if (pin == 0) {
/* No IRQ used. */
- return;
+ return -1;
}
- if (cfg->intpin > 4) {
- printf("dec_axppci_33_intr_map: bad interrupt pin %d\n",
- cfg->intpin);
- return;
+ if (pin > 4) {
+ printf("dec_axppci_33_intr_route: bad interrupt pin %d\n", pin);
+ return -1;
}
- switch (cfg->slot) {
+ switch (pci_get_slot(dev)) {
case 6: /* NCR SCSI */
pirq = 3;
break;
case 11: /* slot 1 */
- switch (cfg->intpin) {
+ switch (pin) {
case 1:
case 4:
pirq = 0;
@@ -214,14 +211,14 @@ dec_axppci_33_intr_map(void *arg)
break;
#ifdef DIAGNOSTIC
default: /* XXX gcc -Wuninitialized */
- panic("dec_axppci_33_intr_map: bogus PCI pin %d\n",
- cfg->intpin);
+ panic("dec_axppci_33_intr_route: bogus PCI pin %d\n",
+ pin);
#endif
};
break;
case 12: /* slot 2 */
- switch (cfg->intpin) {
+ switch (pin) {
case 1:
case 4:
pirq = 1;
@@ -234,14 +231,14 @@ dec_axppci_33_intr_map(void *arg)
break;
#ifdef DIAGNOSTIC
default: /* XXX gcc -Wuninitialized */
- panic("dec_axppci_33_intr_map: bogus PCI pin %d\n",
- cfg->intpin);
+ panic("dec_axppci_33_intr_route: bogus PCI pin %d\n",
+ pin);
#endif
};
break;
case 8: /* slot 3 */
- switch (cfg->intpin) {
+ switch (pin) {
case 1:
case 4:
pirq = 2;
@@ -254,33 +251,24 @@ dec_axppci_33_intr_map(void *arg)
break;
#ifdef DIAGNOSTIC
default: /* XXX gcc -Wuninitialized */
- panic("dec_axppci_33_intr_map bogus: PCI pin %d\n",
- cfg->intpin);
+ panic("dec_axppci_33_intr_route bogus: PCI pin %d\n",
+ pin);
#endif
};
break;
default:
- printf("dec_axppci_33_intr_map: weird device number %d\n",
- cfg->slot);
+ printf("dec_axppci_33_intr_route: weird device number %d\n",
+ pci_get_slot(dev));
return;
}
pirqreg = lca_pcib_read_config(0, 0, 7, 0,
SIO_PCIREG_PIRQ_RTCTRL, 4);
-#if 0
- printf("dec_axppci_33_intr_map: device %d pin %c: pirq %d, reg = %x\n",
- device, '@' + cfg->intpin, pirq, pirqreg);
-#endif
pirqline = (pirqreg >> (pirq * 8)) & 0xff;
if ((pirqline & 0x80) != 0)
panic("bad pirqline %d",pirqline);
pirqline &= 0xf;
-#if 0
- printf("dec_axppci_33_intr_map: device %d pin %c: mapped to line %d\n",
- device, '@' + cfg->intpin, pirqline);
-#endif
-
- cfg->intline = pirqline;
+ return(pirqline);
}
diff --git a/sys/alpha/pci/lca_pci.c b/sys/alpha/pci/lca_pci.c
index 82d071beea13..6ab5ae9e7523 100644
--- a/sys/alpha/pci/lca_pci.c
+++ b/sys/alpha/pci/lca_pci.c
@@ -161,19 +161,10 @@ u_int32_t
lca_pcib_read_config(device_t dev, u_int b, u_int s, u_int f,
u_int reg, int width)
{
- pcicfgregs cfg;
- if ((reg == PCIR_INTLINE) && (width == 1) &&
- (platform.pci_intr_map != NULL)) {
- cfg.bus = b;
- cfg.slot = s;
- cfg.func = f;
- cfg.intline = 255;
- cfg.intpin =
- lca_pcib_read_config(dev, b, s, f, PCIR_INTPIN, 1);
- platform.pci_intr_map((void *)&cfg);
- if (cfg.intline != 255)
- return cfg.intline;
+ if ((reg == PCIR_INTLINE) && (width == 1)) {
+ /* SRM left bad value; let intr_route fill them in later */
+ return ~0;
}
switch (width) {