Get rid of kvtop().
Change inb() and outb() to use bus_space*().
This commit is contained in:
parent
028c5b7e9c
commit
8c48760400
@ -346,7 +346,7 @@ ar_attach(device_t device)
|
||||
}
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(hc->iobase);
|
||||
ARC_SET_OFF(hc);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@ -386,6 +386,9 @@ ar_allocate_ioport(device_t device, int rid, u_long size)
|
||||
if (hc->res_ioport == NULL) {
|
||||
goto errexit;
|
||||
}
|
||||
hc->bt = rman_get_bustag(hc->res_ioport);
|
||||
hc->bh = rman_get_bushandle(hc->res_ioport);
|
||||
|
||||
return (0);
|
||||
|
||||
errexit:
|
||||
@ -501,7 +504,7 @@ arintr(void *arg)
|
||||
if(hc->bustype == AR_BUS_PCI)
|
||||
arisr = hc->orbase[AR_ISTAT * 4];
|
||||
else
|
||||
arisr = inb(hc->iobase + AR_ISTAT);
|
||||
arisr = ar_inb(hc, AR_ISTAT);
|
||||
|
||||
while(arisr & AR_BD_INT) {
|
||||
TRC(printf("arisr = %x\n", arisr));
|
||||
@ -518,7 +521,7 @@ arintr(void *arg)
|
||||
sca = hc->sca[scano];
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
|
||||
isr0 = sca->isr0;
|
||||
isr1 = sca->isr1;
|
||||
@ -548,12 +551,12 @@ arintr(void *arg)
|
||||
if(hc->bustype == AR_BUS_PCI)
|
||||
arisr = hc->orbase[AR_ISTAT * 4];
|
||||
else
|
||||
arisr = inb(hc->iobase + AR_ISTAT);
|
||||
arisr = ar_inb(hc, AR_ISTAT);
|
||||
}
|
||||
}
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(hc->iobase);
|
||||
ARC_SET_OFF(hc);
|
||||
}
|
||||
|
||||
|
||||
@ -576,7 +579,7 @@ ar_xmit(struct ar_softc *sc)
|
||||
dmac = &sc->sca->dmac[DMAC_TXCH(sc->scachan)];
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
dmac->cda = (u_short)(sc->block[sc->txb_next_tx].txdesc & 0xffff);
|
||||
|
||||
dmac->eda = (u_short)(sc->block[sc->txb_next_tx].txeda & 0xffff);
|
||||
@ -594,7 +597,7 @@ ar_xmit(struct ar_softc *sc)
|
||||
sc->out_dog = DOG_HOLDOFF; /* give ourself some breathing space*/
|
||||
#endif /* NETGRAPH */
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(sc->hc->iobase);
|
||||
ARC_SET_OFF(sc->hc);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -665,7 +668,7 @@ arstart(struct ar_softc *sc)
|
||||
* 16K window.
|
||||
*/
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->block[0].txdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->block[0].txdesc);
|
||||
|
||||
/*
|
||||
* We stay in this loop until there is nothing in the
|
||||
@ -760,7 +763,7 @@ arstart(struct ar_softc *sc)
|
||||
ar_xmit(sc);
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(sc->hc->iobase);
|
||||
ARC_SET_OFF(sc->hc);
|
||||
|
||||
goto top_arstart;
|
||||
}
|
||||
@ -829,7 +832,7 @@ arwatchdog(struct ar_softc *sc)
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
/* XXX if(sc->ifsppp.pp_if.if_flags & IFF_DEBUG) */
|
||||
printf("ar%d: transmit failed, "
|
||||
@ -881,7 +884,7 @@ ar_up(struct ar_softc *sc)
|
||||
* Enable interrupts.
|
||||
*/
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
/* XXX
|
||||
* What about using AUTO mode in msci->md0 ???
|
||||
@ -896,7 +899,7 @@ ar_up(struct ar_softc *sc)
|
||||
sc->hc->orbase[sc->hc->txc_dtr_off[sc->scano]] =
|
||||
sc->hc->txc_dtr[sc->scano];
|
||||
else
|
||||
outb(sc->hc->iobase + sc->hc->txc_dtr_off[sc->scano],
|
||||
ar_outb(sc->hc, sc->hc->txc_dtr_off[sc->scano],
|
||||
sc->hc->txc_dtr[sc->scano]);
|
||||
}
|
||||
|
||||
@ -910,11 +913,11 @@ ar_up(struct ar_softc *sc)
|
||||
|
||||
msci->cmd = SCA_CMD_RXENABLE;
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
inb(sc->hc->iobase + AR_ID_5); /* XXX slow it down a bit. */
|
||||
ar_inb(sc->hc, AR_ID_5); /* XXX slow it down a bit. */
|
||||
msci->cmd = SCA_CMD_TXENABLE;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(sc->hc->iobase);
|
||||
ARC_SET_OFF(sc->hc);
|
||||
#ifdef NETGRAPH
|
||||
untimeout(ngar_watchdog_frame, sc, sc->handle);
|
||||
sc->handle = timeout(ngar_watchdog_frame, sc, hz);
|
||||
@ -941,10 +944,10 @@ ar_down(struct ar_softc *sc)
|
||||
* Disable interrupts.
|
||||
*/
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
msci->cmd = SCA_CMD_RXDISABLE;
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
inb(sc->hc->iobase + AR_ID_5); /* XXX slow it down a bit. */
|
||||
ar_inb(sc->hc, AR_ID_5); /* XXX slow it down a bit. */
|
||||
msci->cmd = SCA_CMD_TXDISABLE;
|
||||
|
||||
if(sc->hc->handshake & AR_SHSK_RTS)
|
||||
@ -956,7 +959,7 @@ ar_down(struct ar_softc *sc)
|
||||
sc->hc->orbase[sc->hc->txc_dtr_off[sc->scano]] =
|
||||
sc->hc->txc_dtr[sc->scano];
|
||||
else
|
||||
outb(sc->hc->iobase + sc->hc->txc_dtr_off[sc->scano],
|
||||
ar_outb(sc->hc, sc->hc->txc_dtr_off[sc->scano],
|
||||
sc->hc->txc_dtr[sc->scano]);
|
||||
}
|
||||
|
||||
@ -969,7 +972,7 @@ ar_down(struct ar_softc *sc)
|
||||
}
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_OFF(sc->hc->iobase);
|
||||
ARC_SET_OFF(sc->hc);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1078,6 +1081,7 @@ arc_init(struct ar_hardc *hc)
|
||||
u_int next;
|
||||
u_int descneeded;
|
||||
u_char isr, mar;
|
||||
u_long memst;
|
||||
|
||||
MALLOC(sc, struct ar_softc *, hc->numports * sizeof(struct ar_softc),
|
||||
M_DEVBUF, M_WAITOK | M_ZERO);
|
||||
@ -1102,31 +1106,32 @@ arc_init(struct ar_hardc *hc)
|
||||
hc->orbase[AR_TXC_DTR0 * 4] = ~AR_TXC_DTR_NOTRESET &
|
||||
hc->txc_dtr[0];
|
||||
else
|
||||
outb(hc->iobase + AR_TXC_DTR0, ~AR_TXC_DTR_NOTRESET &
|
||||
ar_outb(hc, AR_TXC_DTR0, ~AR_TXC_DTR_NOTRESET &
|
||||
hc->txc_dtr[0]);
|
||||
DELAY(2);
|
||||
if(hc->bustype == AR_BUS_PCI)
|
||||
hc->orbase[AR_TXC_DTR0 * 4] = hc->txc_dtr[0];
|
||||
else
|
||||
outb(hc->iobase + AR_TXC_DTR0, hc->txc_dtr[0]);
|
||||
ar_outb(hc, AR_TXC_DTR0, hc->txc_dtr[0]);
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA) {
|
||||
/*
|
||||
* Configure the card.
|
||||
* Mem address, irq,
|
||||
*/
|
||||
mar = kvtop(hc->mem_start) >> 16;
|
||||
memst = rman_get_start(hc->res_memory);
|
||||
mar = memst >> 16;
|
||||
isr = irqtable[hc->isa_irq] << 1;
|
||||
if(isr == 0)
|
||||
printf("ar%d: Warning illegal interrupt %d\n",
|
||||
hc->cunit, hc->isa_irq);
|
||||
isr = isr | ((kvtop(hc->mem_start) & 0xc000) >> 10);
|
||||
isr = isr | ((memst & 0xc000) >> 10);
|
||||
|
||||
hc->sca[0] = (sca_regs *)hc->mem_start;
|
||||
hc->sca[1] = (sca_regs *)hc->mem_start;
|
||||
|
||||
outb(hc->iobase + AR_MEM_SEL, mar);
|
||||
outb(hc->iobase + AR_INT_SEL, isr | AR_INTS_CEN);
|
||||
ar_outb(hc, AR_MEM_SEL, mar);
|
||||
ar_outb(hc, AR_INT_SEL, isr | AR_INTS_CEN);
|
||||
}
|
||||
|
||||
if(hc->bustype == AR_BUS_PCI && hc->interface[0] == AR_IFACE_PIM)
|
||||
@ -1156,12 +1161,12 @@ arc_init(struct ar_hardc *hc)
|
||||
if(hc->bustype == AR_BUS_PCI)
|
||||
hc->orbase[AR_TXC_DTR0 * 4] = hc->txc_dtr[0];
|
||||
else
|
||||
outb(hc->iobase + AR_TXC_DTR0, hc->txc_dtr[0]);
|
||||
ar_outb(hc, AR_TXC_DTR0, hc->txc_dtr[0]);
|
||||
if(hc->numports > NCHAN) {
|
||||
if(hc->bustype == AR_BUS_PCI)
|
||||
hc->orbase[AR_TXC_DTR2 * 4] = hc->txc_dtr[1];
|
||||
else
|
||||
outb(hc->iobase + AR_TXC_DTR2, hc->txc_dtr[1]);
|
||||
ar_outb(hc, AR_TXC_DTR2, hc->txc_dtr[1]);
|
||||
}
|
||||
|
||||
chanmem = hc->memsize / hc->numports;
|
||||
@ -1228,7 +1233,7 @@ ar_init_sca(struct ar_hardc *hc, int scano)
|
||||
|
||||
sca = hc->sca[scano];
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
|
||||
/*
|
||||
* Do the wait registers.
|
||||
@ -1294,7 +1299,7 @@ ar_init_msci(struct ar_softc *sc)
|
||||
msci = &sc->sca->msci[sc->scachan];
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
msci->cmd = SCA_CMD_RESET;
|
||||
|
||||
@ -1368,7 +1373,7 @@ ar_init_rx_dmac(struct ar_softc *sc)
|
||||
dmac = &sc->sca->dmac[DMAC_RXCH(sc->scachan)];
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->rxdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->rxdesc);
|
||||
|
||||
rxd = (sca_descriptor *)(sc->hc->mem_start + (sc->rxdesc&sc->hc->winmsk));
|
||||
rxda_d = (u_int)sc->hc->mem_start - (sc->rxdesc & ~sc->hc->winmsk);
|
||||
@ -1396,7 +1401,7 @@ ar_init_rx_dmac(struct ar_softc *sc)
|
||||
sc->rxhind = 0;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
dmac->dsr = 0; /* Disable DMA transfer */
|
||||
dmac->dcr = SCA_DCR_ABRT;
|
||||
@ -1434,7 +1439,7 @@ ar_init_tx_dmac(struct ar_softc *sc)
|
||||
dmac = &sc->sca->dmac[DMAC_TXCH(sc->scachan)];
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->block[0].txdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->block[0].txdesc);
|
||||
|
||||
for(blk = 0; blk < AR_TX_BLOCKS; blk++) {
|
||||
blkp = &sc->block[blk];
|
||||
@ -1465,7 +1470,7 @@ ar_init_tx_dmac(struct ar_softc *sc)
|
||||
}
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
dmac->dsr = 0; /* Disable DMA */
|
||||
dmac->dcr = SCA_DCR_ABRT;
|
||||
@ -1498,13 +1503,13 @@ ar_packet_avail(struct ar_softc *sc,
|
||||
sca_descriptor *cda;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
dmac = &sc->sca->dmac[DMAC_RXCH(sc->scachan)];
|
||||
cda = (sca_descriptor *)(sc->hc->mem_start +
|
||||
((((u_int)dmac->sarb << 16) + dmac->cda) & sc->hc->winmsk));
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->rxdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->rxdesc);
|
||||
rxdesc = (sca_descriptor *)
|
||||
(sc->hc->mem_start + (sc->rxdesc & sc->hc->winmsk));
|
||||
endp = rxdesc;
|
||||
@ -1561,7 +1566,7 @@ ar_copy_rxbuf(struct mbuf *m,
|
||||
while(len) {
|
||||
tlen = (len < AR_BUF_SIZ) ? len : AR_BUF_SIZ;
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, rxdata);
|
||||
ARC_SET_MEM(sc->hc, rxdata);
|
||||
bcopy(sc->hc->mem_start + (rxdata & sc->hc->winmsk),
|
||||
mtod(m, caddr_t) + off,
|
||||
tlen);
|
||||
@ -1570,7 +1575,7 @@ ar_copy_rxbuf(struct mbuf *m,
|
||||
len -= tlen;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->rxdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->rxdesc);
|
||||
rxdesc->len = 0;
|
||||
rxdesc->stat = 0xff;
|
||||
|
||||
@ -1599,7 +1604,7 @@ ar_eat_packet(struct ar_softc *sc, int single)
|
||||
u_char stat;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
dmac = &sc->sca->dmac[DMAC_RXCH(sc->scachan)];
|
||||
cda = (sca_descriptor *)(sc->hc->mem_start +
|
||||
((((u_int)dmac->sarb << 16) + dmac->cda) & sc->hc->winmsk));
|
||||
@ -1610,7 +1615,7 @@ ar_eat_packet(struct ar_softc *sc, int single)
|
||||
* Increment the descriptor.
|
||||
*/
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase, sc->rxdesc);
|
||||
ARC_SET_MEM(sc->hc, sc->rxdesc);
|
||||
rxdesc = (sca_descriptor *)
|
||||
(sc->hc->mem_start + (sc->rxdesc & sc->hc->winmsk));
|
||||
endp = rxdesc;
|
||||
@ -1651,7 +1656,7 @@ ar_eat_packet(struct ar_softc *sc, int single)
|
||||
* Update the eda to the previous descriptor.
|
||||
*/
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
rxdesc = (sca_descriptor *)sc->rxdesc;
|
||||
rxdesc = &rxdesc[(sc->rxhind + sc->rxmax - 2 ) % sc->rxmax];
|
||||
@ -1719,7 +1724,7 @@ ar_get_packets(struct ar_softc *sc)
|
||||
sc->rxhind = (sc->rxhind + i) % sc->rxmax;
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
rxdesc = (sca_descriptor *)sc->rxdesc;
|
||||
rxdesc =
|
||||
@ -1750,7 +1755,7 @@ ar_get_packets(struct ar_softc *sc)
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(sc->hc->iobase, sc->scano);
|
||||
ARC_SET_SCA(sc->hc, sc->scano);
|
||||
|
||||
TRCL(printf("ar%d: Receive error chan %d, "
|
||||
"stat %x, msci st3 %x,"
|
||||
@ -1806,7 +1811,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
dmac = &sca->dmac[DMAC_TXCH(mch)];
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
|
||||
dsr = dmac->dsr;
|
||||
dmac->dsr = dsr;
|
||||
@ -1877,7 +1882,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
dmac = &sca->dmac[DMAC_RXCH(mch)];
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
|
||||
dsr = dmac->dsr;
|
||||
dmac->dsr = dsr;
|
||||
@ -1900,7 +1905,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
int i;
|
||||
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
printf("AR: RXINTR isr1 %x, dsr %x, "
|
||||
"no data %d pkts, orxhind %d.\n",
|
||||
dotxstart,
|
||||
@ -1920,7 +1925,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
dmac->eda);
|
||||
|
||||
if(sc->hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_MEM(sc->hc->iobase,
|
||||
ARC_SET_MEM(sc->hc,
|
||||
sc->rxdesc);
|
||||
rxdesc = (sca_descriptor *)
|
||||
(sc->hc->mem_start +
|
||||
@ -1951,7 +1956,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
/* Buffer overflow */
|
||||
if(dsr & SCA_DSR_BOF) {
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
printf("ar%d: RX DMA Buffer overflow, "
|
||||
"rxpkts %lu, rxind %d, "
|
||||
"cda %x, eda %x, dsr %x.\n",
|
||||
@ -1976,7 +1981,7 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
sc->ierrors[2]++;
|
||||
#endif /* NETGRAPH */
|
||||
if(hc->bustype == AR_BUS_ISA)
|
||||
ARC_SET_SCA(hc->iobase, scano);
|
||||
ARC_SET_SCA(hc, scano);
|
||||
sca->msci[mch].cmd = SCA_CMD_RXMSGREJ;
|
||||
dmac->dsr = SCA_DSR_DE;
|
||||
|
||||
|
@ -101,12 +101,15 @@ static int
|
||||
ar_isa_probe(device_t device)
|
||||
{
|
||||
int error;
|
||||
u_long membase, memsize, port_start, port_count;
|
||||
u_long membase, memsize;
|
||||
struct ar_hardc *hc;
|
||||
|
||||
error = ISA_PNP_PROBE(device_get_parent(device), device, ar_ids);
|
||||
if(error == ENXIO || error == 0)
|
||||
return (error);
|
||||
|
||||
hc = (struct ar_hardc *)device_get_softc(device);
|
||||
|
||||
if((error = ar_allocate_ioport(device, 0, ARC_IO_SIZ))) {
|
||||
return (ENXIO);
|
||||
}
|
||||
@ -117,17 +120,14 @@ ar_isa_probe(device_t device)
|
||||
* XXX For now I just check the undocumented ports
|
||||
* for "570". We will probably have to do more checking.
|
||||
*/
|
||||
error = bus_get_resource(device, SYS_RES_IOPORT, 0, &port_start,
|
||||
&port_count);
|
||||
|
||||
if((inb(port_start + AR_ID_5) != '5') ||
|
||||
(inb(port_start + AR_ID_7) != '7') ||
|
||||
(inb(port_start + AR_ID_0) != '0')) {
|
||||
if((ar_inb(hc, AR_ID_5) != '5') ||
|
||||
(ar_inb(hc, AR_ID_7) != '7') ||
|
||||
(ar_inb(hc, AR_ID_0) != '0')) {
|
||||
ar_deallocate_resources(device);
|
||||
return (ENXIO);
|
||||
}
|
||||
membase = bus_get_resource_start(device, SYS_RES_MEMORY, 0);
|
||||
memsize = inb(port_start + AR_REV);
|
||||
memsize = ar_inb(hc, AR_REV);
|
||||
memsize = 1 << ((memsize & AR_WSIZ_MSK) >> AR_WSIZ_SHFT);
|
||||
memsize *= ARC_WIN_SIZ;
|
||||
error = bus_set_resource(device, SYS_RES_MEMORY, 0, membase, memsize);
|
||||
@ -153,12 +153,8 @@ ar_isa_attach(device_t device)
|
||||
hc = (struct ar_hardc *)device_get_softc(device);
|
||||
if(ar_allocate_ioport(device, 0, ARC_IO_SIZ))
|
||||
return (ENXIO);
|
||||
hc->bt = rman_get_bustag(hc->res_ioport);
|
||||
hc->bh = rman_get_bushandle(hc->res_ioport);
|
||||
|
||||
hc->iobase = rman_get_start(hc->res_ioport);
|
||||
|
||||
tmp = inb(hc->iobase + AR_BMI);
|
||||
tmp = ar_inb(hc, AR_BMI);
|
||||
hc->bustype = tmp & AR_BUS_MSK;
|
||||
hc->memsize = (tmp & AR_MEM_MSK) >> AR_MEM_SHFT;
|
||||
hc->memsize = 1 << hc->memsize;
|
||||
@ -167,13 +163,13 @@ ar_isa_attach(device_t device)
|
||||
hc->interface[1] = hc->interface[0];
|
||||
hc->interface[2] = hc->interface[0];
|
||||
hc->interface[3] = hc->interface[0];
|
||||
tmp = inb(hc->iobase + AR_REV);
|
||||
tmp = ar_inb(hc, AR_REV);
|
||||
hc->revision = tmp & AR_REV_MSK;
|
||||
hc->winsize = 1 << ((tmp & AR_WSIZ_MSK) >> AR_WSIZ_SHFT);
|
||||
hc->winsize *= ARC_WIN_SIZ;
|
||||
hc->winmsk = hc->winsize - 1;
|
||||
hc->numports = inb(hc->iobase + AR_PNUM);
|
||||
hc->handshake = inb(hc->iobase + AR_HNDSH);
|
||||
hc->numports = ar_inb(hc, AR_PNUM);
|
||||
hc->handshake = ar_inb(hc, AR_HNDSH);
|
||||
|
||||
if(ar_allocate_memory(device, 0, hc->winsize))
|
||||
return (ENXIO);
|
||||
@ -227,12 +223,6 @@ ar_isa_attach(device_t device)
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
********************************* END ************************************
|
||||
*/
|
||||
|
@ -107,7 +107,6 @@ ar_pci_attach(device_t device)
|
||||
{
|
||||
int error;
|
||||
u_int i, tmp;
|
||||
u_char *inten;
|
||||
struct ar_hardc *hc;
|
||||
|
||||
hc = (struct ar_hardc *)device_get_softc(device);
|
||||
@ -125,13 +124,11 @@ ar_pci_attach(device_t device)
|
||||
if(error)
|
||||
goto errexit;
|
||||
|
||||
hc->plx_mem = rman_get_virtual(hc->res_plx_memory);
|
||||
hc->mem_start = rman_get_virtual(hc->res_memory);
|
||||
|
||||
hc->cunit = device_get_unit(device);
|
||||
hc->sca[0] = (sca_regs *)(hc->mem_start + AR_PCI_SCA_1_OFFSET);
|
||||
hc->sca[1] = (sca_regs *)(hc->mem_start + AR_PCI_SCA_2_OFFSET);
|
||||
hc->iobase = 0;
|
||||
hc->orbase = (u_char *)(hc->mem_start + AR_PCI_ORBASE_OFFSET);
|
||||
|
||||
tmp = hc->orbase[AR_BMI * 4];
|
||||
@ -159,8 +156,8 @@ ar_pci_attach(device_t device)
|
||||
ar_attach(device);
|
||||
|
||||
/* Magic to enable the card to generate interrupts. */
|
||||
inten = (u_char *)hc->plx_mem;
|
||||
inten[0x69] = 0x09;
|
||||
bus_space_write_1(rman_get_bustag(hc->res_plx_memory),
|
||||
rman_get_bushandle(hc->res_plx_memory), 0x69, 0x09);
|
||||
|
||||
return (0);
|
||||
|
||||
|
@ -169,21 +169,19 @@
|
||||
|
||||
#define ARC_GET_WIN(addr) ((addr >> ARC_WIN_SHFT) & AR_WIN_MSK)
|
||||
|
||||
#define ARC_SET_MEM(iobase,win) outb(iobase+AR_MSCA_EN, AR_ENA_MEM | \
|
||||
#define ARC_SET_MEM(hc,win) ar_outb(hc, AR_MSCA_EN, AR_ENA_MEM | \
|
||||
ARC_GET_WIN(win))
|
||||
#define ARC_SET_SCA(iobase,ch) outb(iobase+AR_MSCA_EN, AR_ENA_MEM | \
|
||||
#define ARC_SET_SCA(hc,ch) ar_outb(hc, AR_MSCA_EN, AR_ENA_MEM | \
|
||||
AR_ENA_SCA | (ch ? AR_SEL_SCA_1:AR_SEL_SCA_0))
|
||||
#define ARC_SET_OFF(iobase) outb(iobase+AR_MSCA_EN, 0)
|
||||
#define ARC_SET_OFF(hc) ar_outb(hc, AR_MSCA_EN, 0)
|
||||
|
||||
struct ar_hardc {
|
||||
int cunit;
|
||||
struct ar_softc *sc;
|
||||
u_short iobase;
|
||||
int isa_irq;
|
||||
int numports;
|
||||
caddr_t mem_start;
|
||||
caddr_t mem_end;
|
||||
caddr_t plx_mem;
|
||||
u_char *orbase;
|
||||
|
||||
u_int memsize; /* in bytes */
|
||||
@ -224,4 +222,10 @@ int ar_deallocate_resources(device_t device);
|
||||
int ar_attach(device_t device);
|
||||
int ar_detach (device_t);
|
||||
|
||||
#define ar_inb(hc, port) \
|
||||
bus_space_read_1((hc)->bt, (hc)->bh, (port))
|
||||
|
||||
#define ar_outb(hc, port, value) \
|
||||
bus_space_write_1((hc)->bt, (hc)->bh, (port), (value))
|
||||
|
||||
#endif /* _IF_ARREGS_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user