Deleted Added
full compact
32c32
< * $Id: if_xl.c,v 1.75 1999/04/12 20:23:08 wpaul Exp $
---
> * $Id: if_xl.c,v 1.83 1999/04/15 02:34:54 wpaul Exp $
47a48
> * 3Com 3c900B-TPC 10Mbps/RJ-45,BNC
155c156
< "$Id: if_xl.c,v 1.75 1999/04/12 20:23:08 wpaul Exp $";
---
> "$Id: if_xl.c,v 1.83 1999/04/15 02:34:54 wpaul Exp $";
173a175,178
> { TC_VENDORID, TC_DEVICEID_CYCLONE_10BT_TPC,
> "3Com 3c900B-TPC Etherlink XL" },
> { TC_VENDORID, TC_DEVICEID_CYCLONE_10FL,
> "3Com 3c900B-FL Etherlink XL" },
451,452d455
<
<
750a754
> u_int32_t icfg;
751a756,769
> xl_reset(sc);
> XL_SEL_WIN(3);
> icfg = CSR_READ_4(sc, XL_W3_INTERNAL_CFG);
> icfg &= ~XL_ICFG_CONNECTOR_MASK;
> if (sc->xl_media & XL_MEDIAOPT_MII ||
> sc->xl_media & XL_MEDIAOPT_BT4)
> icfg |= (XL_XCVR_MII << XL_ICFG_CONNECTOR_BITS);
> if (sc->xl_media & XL_MEDIAOPT_BTX)
> icfg |= (XL_XCVR_AUTO << XL_ICFG_CONNECTOR_BITS);
> if (sc->xl_media & XL_MEDIAOPT_BFX)
> icfg |= (XL_XCVR_100BFX << XL_ICFG_CONNECTOR_BITS);
> CSR_WRITE_4(sc, XL_W3_INTERNAL_CFG, icfg);
> CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_COAX_STOP);
>
1292a1311,1315
> case TC_DEVICEID_CYCLONE_10BT_TPC: /* 3c900B-TPC */
> sc->xl_media = XL_MEDIAOPT_BT|XL_MEDIAOPT_BNC;
> sc->xl_xcvr = XL_XCVR_10BT;
> printf("xl%d: guessing TPC (BNC/TP)\n", sc->xl_unit);
> break;
1305d1327
< case TC_DEVICEID_CYCLONE_10_100_COMBO: /* 3c905B-COMBO */
1311a1334,1338
> case TC_DEVICEID_CYCLONE_10_100_COMBO: /* 3c905B-COMBO */
> sc->xl_media = XL_MEDIAOPT_BTX|XL_MEDIAOPT_BNC|XL_MEDIAOPT_AUI;
> sc->xl_xcvr = XL_XCVR_AUTO;
> printf("xl%d: guessing 10/100 plus BNC/AUI\n", sc->xl_unit);
> break;
1742a1770
> cd->xl_tx_chain[i].xl_unsent = 0;
1891a1920
> ifp->if_ipackets++;
1973,1974c2002,2004
< !(cur_tx->xl_ptr->xl_status & XL_TXSTAT_DL_COMPLETE)) ||
< CSR_READ_4(sc, XL_DOWNLIST_PTR)) {
---
> !(cur_tx->xl_ptr->xl_status & XL_TXSTAT_DL_COMPLETE)) ||
> (CSR_READ_1(sc, XL_TX_STATUS) & XL_TXSTATUS_COMPLETE) ||
> cur_tx->xl_unsent) {
1978d2007
<
1980a2010
> ifp->if_opackets++;
1992,1993c2022,2023
< if (CSR_READ_4(sc, XL_DMACTL) & XL_DMACTL_DOWN_STALLED ||
< !CSR_READ_4(sc, XL_DOWNLIST_PTR)) {
---
> if (sc->xl_cdata.xl_tx_head->xl_unsent) {
> sc->xl_cdata.xl_tx_head->xl_unsent = 0;
2139,2141d2168
< ifp->if_ipackets += xl_rx_goodframes(xl_stats);
< ifp->if_opackets += xl_tx_goodframes(xl_stats);
<
2325,2339c2352
< /*
< * Queue the packets. If the TX channel is clear, update
< * the downlist pointer register.
< */
< CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_STALL);
< xl_wait(sc);
<
< if (CSR_READ_4(sc, XL_DOWNLIST_PTR)) {
< sc->xl_cdata.xl_tx_tail->xl_next = start_tx;
< sc->xl_cdata.xl_tx_tail->xl_ptr->xl_next =
< vtophys(start_tx->xl_ptr);
< sc->xl_cdata.xl_tx_tail->xl_ptr->xl_status &=
< ~XL_TXSTAT_DL_INTR;
< sc->xl_cdata.xl_tx_tail = cur_tx;
< } else {
---
> if (sc->xl_cdata.xl_tx_head == NULL) {
2342a2356,2360
> CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_UNSTALL);
> } else {
> start_tx->xl_unsent++;
> sc->xl_cdata.xl_tx_tail->xl_next = start_tx;
> sc->xl_cdata.xl_tx_tail = cur_tx;
2344d2361
< CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_UNSTALL);
2346,2347d2362
< XL_SEL_WIN(7);
<
2570a2586,2596
> switch(IFM_SUBTYPE(ifm->ifm_media)) {
> case IFM_100_FX:
> case IFM_10_2:
> case IFM_10_5:
> xl_setmode(sc, ifm->ifm_media);
> return(0);
> break;
> default:
> break;
> }
>