Fixes from PR 9838:

Only access board memory using the front-end functions.
Add hook for clearing latched interrupts.
Corrent debugging printf of ethertype on LE systems.
Make it possible to us I82586_DEBUG as a kernel option.

Tested on arm26 and mvme68k.
This commit is contained in:
bjh21 2000-05-11 20:55:03 +00:00
parent ca37c80f5b
commit 2d09335a35
2 changed files with 25 additions and 19 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: i82586.c,v 1.26 2000/03/30 12:45:31 augustss Exp $ */
/* $NetBSD: i82586.c,v 1.27 2000/05/11 20:55:03 bjh21 Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -561,6 +561,8 @@ ie_ack(sc, mask)
bus_space_barrier(sc->bt, sc->bh, 0, 0, BUS_SPACE_BARRIER_READ);
status = (sc->ie_bus_read16)(sc, IE_SCB_STATUS(sc->scb));
i82586_start_cmd(sc, status & mask, 0, 0, 0);
if (sc->intrhook)
sc->intrhook(sc, INTR_ACK);
}
/*
@ -1235,7 +1237,7 @@ ie_readframe(sc, num)
printf("%s: frame from ether %s type 0x%x len %d\n",
sc->sc_dev.dv_xname,
ether_sprintf(eh->ether_shost),
(u_int)eh->ether_type,
(u_int)ntohs(eh->ether_type),
pktlen);
}
#endif
@ -1446,12 +1448,12 @@ i82586_proberam(sc)
/* Put in 16-bit mode */
off = IE_SCP_BUS_USE(sc->scp);
bus_space_write_1(sc->bt, sc->bh, off, 0);
(sc->ie_bus_write16)(sc, off, 0);
bus_space_barrier(sc->bt, sc->bh, off, 1, BUS_SPACE_BARRIER_WRITE);
/* Set the ISCP `busy' bit */
off = IE_ISCP_BUSY(sc->iscp);
bus_space_write_1(sc->bt, sc->bh, off, 1);
(sc->ie_bus_write16)(sc, off, 1);
bus_space_barrier(sc->bt, sc->bh, off, 1, BUS_SPACE_BARRIER_WRITE);
if (sc->hwreset)
@ -1464,7 +1466,7 @@ i82586_proberam(sc)
/* Read back the ISCP `busy' bit; it should be clear by now */
off = IE_ISCP_BUSY(sc->iscp);
bus_space_barrier(sc->bt, sc->bh, off, 1, BUS_SPACE_BARRIER_READ);
result = bus_space_read_1(sc->bt, sc->bh, off) == 0;
result = (sc->ie_bus_read16)(sc, off) == 0;
/* Acknowledge any interrupts we may have caused. */
ie_ack(sc, IE_ST_WHENCE);
@ -1742,21 +1744,22 @@ ie_cfg_setup(sc, cmd, promiscuous, manchester)
int promiscuous, manchester;
{
int cmdresult, status;
u_int8_t buf[IE_CMD_CFG_SZ]; /* XXX malloc? */
*IE_CMD_CFG_CNT(buf) = 0x0c;
*IE_CMD_CFG_FIFO(buf) = 8;
*IE_CMD_CFG_SAVEBAD(buf) = 0x40;
*IE_CMD_CFG_ADDRLEN(buf) = 0x2e;
*IE_CMD_CFG_PRIORITY(buf) = 0;
*IE_CMD_CFG_IFS(buf) = 0x60;
*IE_CMD_CFG_SLOT_LOW(buf) = 0;
*IE_CMD_CFG_SLOT_HIGH(buf) = 0xf2;
*IE_CMD_CFG_PROMISC(buf) = !!promiscuous | manchester << 2;
*IE_CMD_CFG_CRSCDT(buf) = 0;
*IE_CMD_CFG_MINLEN(buf) = 64;
*IE_CMD_CFG_JUNK(buf) = 0xff;
sc->memcopyout(sc, buf, cmd, IE_CMD_CFG_SZ);
setup_simple_command(sc, IE_CMD_CONFIG, cmd);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_CNT(cmd), 0x0c);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_FIFO(cmd), 8);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_SAVEBAD(cmd), 0x40);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_ADDRLEN(cmd), 0x2e);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_PRIORITY(cmd), 0);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_IFS(cmd), 0x60);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_SLOT_LOW(cmd), 0);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_SLOT_HIGH(cmd), 0xf2);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_PROMISC(cmd),
!!promiscuous | manchester << 2);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_CRSCDT(cmd), 0);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_MINLEN(cmd), 64);
bus_space_write_1(sc->bt, sc->bh, IE_CMD_CFG_JUNK(cmd), 0xff);
bus_space_barrier(sc->bt, sc->bh, cmd, IE_CMD_CFG_SZ,
BUS_SPACE_BARRIER_WRITE);

View File

@ -1,4 +1,4 @@
/* $NetBSD: i82586var.h,v 1.13 2000/05/09 22:51:34 pk Exp $ */
/* $NetBSD: i82586var.h,v 1.14 2000/05/11 20:55:04 bjh21 Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -97,7 +97,9 @@
* This sun version based on i386 version 1.30.
*/
#ifndef I82586_DEBUG
#define I82586_DEBUG 0
#endif
/* Debug elements */
#define IED_RINT 0x01
@ -121,6 +123,7 @@
#define INTR_ENTER 0 /* intr hook called on ISR entry */
#define INTR_EXIT 1 /* intr hook called on ISR exit */
#define INTR_LOOP 2 /* intr hook called on ISR loop */
#define INTR_ACK 3 /* intr hook called on ie_ack */
#define CHIP_PROBE 0 /* reset called from chip probe */
#define CARD_RESET 1 /* reset called from card reset */