1 /* $NetBSD: if_sip.c,v 1.32 2001/06/03 03:55:10 thorpej Exp $ */ 2 3 /*- 4 * Copyright (c) 2001 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the NetBSD 21 * Foundation, Inc. and its contributors. 22 * 4. Neither the name of The NetBSD Foundation nor the names of its 23 * contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39 /*- 40 * Copyright (c) 1999 Network Computer, Inc. 41 * All rights reserved. 42 * 43 * Redistribution and use in source and binary forms, with or without 44 * modification, are permitted provided that the following conditions 45 * are met: 46 * 1. Redistributions of source code must retain the above copyright 47 * notice, this list of conditions and the following disclaimer. 48 * 2. Redistributions in binary form must reproduce the above copyright 49 * notice, this list of conditions and the following disclaimer in the 50 * documentation and/or other materials provided with the distribution. 51 * 3. Neither the name of Network Computer, Inc. nor the names of its 52 * contributors may be used to endorse or promote products derived 53 * from this software without specific prior written permission. 54 * 55 * THIS SOFTWARE IS PROVIDED BY NETWORK COMPUTER, INC. AND CONTRIBUTORS 56 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 57 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 58 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 59 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 60 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 61 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 62 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 63 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 64 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 65 * POSSIBILITY OF SUCH DAMAGE. 66 */ 67 68 /* 69 * Device driver for the Silicon Integrated Systems SiS 900, 70 * SiS 7016 10/100, National Semiconductor DP83815 10/100, and 71 * National Semiconductor DP83820 10/100/1000 PCI Ethernet 72 * controllers. 73 * 74 * Originally written to support the SiS 900 by Jason R. Thorpe for 75 * Network Computer, Inc. 76 * 77 * TODO: 78 * 79 * - Support the 10-bit interface on the DP83820 (for fiber). 80 * 81 * - Support jumbo packets on the DP83820. 82 * 83 * - Reduce the interrupt load. 84 */ 85 86 #include "opt_inet.h" 87 #include "opt_ns.h" 88 #include "bpfilter.h" 89 90 #include <sys/param.h> 91 #include <sys/systm.h> 92 #include <sys/callout.h> 93 #include <sys/mbuf.h> 94 #include <sys/malloc.h> 95 #include <sys/kernel.h> 96 #include <sys/socket.h> 97 #include <sys/ioctl.h> 98 #include <sys/errno.h> 99 #include <sys/device.h> 100 #include <sys/queue.h> 101 102 #include <uvm/uvm_extern.h> /* for PAGE_SIZE */ 103 104 #include <net/if.h> 105 #include <net/if_dl.h> 106 #include <net/if_media.h> 107 #include <net/if_ether.h> 108 109 #if NBPFILTER > 0 110 #include <net/bpf.h> 111 #endif 112 113 #ifdef INET 114 #include <netinet/in.h> 115 #include <netinet/if_inarp.h> 116 #endif 117 118 #ifdef NS 119 #include <netns/ns.h> 120 #include <netns/ns_if.h> 121 #endif 122 123 #include <machine/bus.h> 124 #include <machine/intr.h> 125 #include <machine/endian.h> 126 127 #include <dev/mii/mii.h> 128 #include <dev/mii/miivar.h> 129 #ifdef DP83820 130 #include <dev/mii/mii_bitbang.h> 131 #endif /* DP83820 */ 132 133 #include <dev/pci/pcireg.h> 134 #include <dev/pci/pcivar.h> 135 #include <dev/pci/pcidevs.h> 136 137 #include <dev/pci/if_sipreg.h> 138 139 #ifdef DP83820 /* DP83820 Gigabit Ethernet */ 140 #define SIP_DECL(x) __CONCAT(gsip_,x) 141 #else /* SiS900 and DP83815 */ 142 #define SIP_DECL(x) __CONCAT(sip_,x) 143 #endif 144 145 #define SIP_STR(x) __STRING(SIP_DECL(x)) 146 147 /* 148 * Transmit descriptor list size. This is arbitrary, but allocate 149 * enough descriptors for 128 pending transmissions, and 8 segments 150 * per packet. This MUST work out to a power of 2. 151 */ 152 #define SIP_NTXSEGS 8 153 154 #define SIP_TXQUEUELEN 256 155 #define SIP_NTXDESC (SIP_TXQUEUELEN * SIP_NTXSEGS) 156 #define SIP_NTXDESC_MASK (SIP_NTXDESC - 1) 157 #define SIP_NEXTTX(x) (((x) + 1) & SIP_NTXDESC_MASK) 158 159 /* 160 * Receive descriptor list size. We have one Rx buffer per incoming 161 * packet, so this logic is a little simpler. 162 */ 163 #define SIP_NRXDESC 128 164 #define SIP_NRXDESC_MASK (SIP_NRXDESC - 1) 165 #define SIP_NEXTRX(x) (((x) + 1) & SIP_NRXDESC_MASK) 166 167 /* 168 * Control structures are DMA'd to the SiS900 chip. We allocate them in 169 * a single clump that maps to a single DMA segment to make several things 170 * easier. 171 */ 172 struct sip_control_data { 173 /* 174 * The transmit descriptors. 175 */ 176 struct sip_desc scd_txdescs[SIP_NTXDESC]; 177 178 /* 179 * The receive descriptors. 180 */ 181 struct sip_desc scd_rxdescs[SIP_NRXDESC]; 182 }; 183 184 #define SIP_CDOFF(x) offsetof(struct sip_control_data, x) 185 #define SIP_CDTXOFF(x) SIP_CDOFF(scd_txdescs[(x)]) 186 #define SIP_CDRXOFF(x) SIP_CDOFF(scd_rxdescs[(x)]) 187 188 /* 189 * Software state for transmit jobs. 190 */ 191 struct sip_txsoft { 192 struct mbuf *txs_mbuf; /* head of our mbuf chain */ 193 bus_dmamap_t txs_dmamap; /* our DMA map */ 194 int txs_firstdesc; /* first descriptor in packet */ 195 int txs_lastdesc; /* last descriptor in packet */ 196 SIMPLEQ_ENTRY(sip_txsoft) txs_q; 197 }; 198 199 SIMPLEQ_HEAD(sip_txsq, sip_txsoft); 200 201 /* 202 * Software state for receive jobs. 203 */ 204 struct sip_rxsoft { 205 struct mbuf *rxs_mbuf; /* head of our mbuf chain */ 206 bus_dmamap_t rxs_dmamap; /* our DMA map */ 207 }; 208 209 /* 210 * Software state per device. 211 */ 212 struct sip_softc { 213 struct device sc_dev; /* generic device information */ 214 bus_space_tag_t sc_st; /* bus space tag */ 215 bus_space_handle_t sc_sh; /* bus space handle */ 216 bus_dma_tag_t sc_dmat; /* bus DMA tag */ 217 struct ethercom sc_ethercom; /* ethernet common data */ 218 void *sc_sdhook; /* shutdown hook */ 219 220 const struct sip_product *sc_model; /* which model are we? */ 221 222 void *sc_ih; /* interrupt cookie */ 223 224 struct mii_data sc_mii; /* MII/media information */ 225 226 struct callout sc_tick_ch; /* tick callout */ 227 228 bus_dmamap_t sc_cddmamap; /* control data DMA map */ 229 #define sc_cddma sc_cddmamap->dm_segs[0].ds_addr 230 231 /* 232 * Software state for transmit and receive descriptors. 233 */ 234 struct sip_txsoft sc_txsoft[SIP_TXQUEUELEN]; 235 struct sip_rxsoft sc_rxsoft[SIP_NRXDESC]; 236 237 /* 238 * Control data structures. 239 */ 240 struct sip_control_data *sc_control_data; 241 #define sc_txdescs sc_control_data->scd_txdescs 242 #define sc_rxdescs sc_control_data->scd_rxdescs 243 244 #ifdef SIP_EVENT_COUNTERS 245 /* 246 * Event counters. 247 */ 248 struct evcnt sc_ev_txsstall; /* Tx stalled due to no txs */ 249 struct evcnt sc_ev_txdstall; /* Tx stalled due to no txd */ 250 struct evcnt sc_ev_txintr; /* Tx interrupts */ 251 struct evcnt sc_ev_rxintr; /* Rx interrupts */ 252 #ifdef DP83820 253 struct evcnt sc_ev_rxipsum; /* IP checksums checked in-bound */ 254 struct evcnt sc_ev_rxtcpsum; /* TCP checksums checked in-bound */ 255 struct evcnt sc_ev_rxudpsum; /* UDP checksums checked in-boudn */ 256 struct evcnt sc_ev_txipsum; /* IP checksums comp. out-bound */ 257 struct evcnt sc_ev_txtcpsum; /* TCP checksums comp. out-bound */ 258 struct evcnt sc_ev_txudpsum; /* UDP checksums comp. out-bound */ 259 #endif /* DP83820 */ 260 #endif /* SIP_EVENT_COUNTERS */ 261 262 u_int32_t sc_txcfg; /* prototype TXCFG register */ 263 u_int32_t sc_rxcfg; /* prototype RXCFG register */ 264 u_int32_t sc_imr; /* prototype IMR register */ 265 u_int32_t sc_rfcr; /* prototype RFCR register */ 266 267 u_int32_t sc_cfg; /* prototype CFG register */ 268 269 #ifdef DP83820 270 u_int32_t sc_gpior; /* prototype GPIOR register */ 271 #endif /* DP83820 */ 272 273 u_int32_t sc_tx_fill_thresh; /* transmit fill threshold */ 274 u_int32_t sc_tx_drain_thresh; /* transmit drain threshold */ 275 276 u_int32_t sc_rx_drain_thresh; /* receive drain threshold */ 277 278 int sc_flags; /* misc. flags; see below */ 279 280 int sc_txfree; /* number of free Tx descriptors */ 281 int sc_txnext; /* next ready Tx descriptor */ 282 283 struct sip_txsq sc_txfreeq; /* free Tx descsofts */ 284 struct sip_txsq sc_txdirtyq; /* dirty Tx descsofts */ 285 286 int sc_rxptr; /* next ready Rx descriptor/descsoft */ 287 }; 288 289 /* sc_flags */ 290 #define SIPF_PAUSED 0x00000001 /* paused (802.3x flow control) */ 291 292 #ifdef SIP_EVENT_COUNTERS 293 #define SIP_EVCNT_INCR(ev) (ev)->ev_count++ 294 #else 295 #define SIP_EVCNT_INCR(ev) /* nothing */ 296 #endif 297 298 #define SIP_CDTXADDR(sc, x) ((sc)->sc_cddma + SIP_CDTXOFF((x))) 299 #define SIP_CDRXADDR(sc, x) ((sc)->sc_cddma + SIP_CDRXOFF((x))) 300 301 #define SIP_CDTXSYNC(sc, x, n, ops) \ 302 do { \ 303 int __x, __n; \ 304 \ 305 __x = (x); \ 306 __n = (n); \ 307 \ 308 /* If it will wrap around, sync to the end of the ring. */ \ 309 if ((__x + __n) > SIP_NTXDESC) { \ 310 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \ 311 SIP_CDTXOFF(__x), sizeof(struct sip_desc) * \ 312 (SIP_NTXDESC - __x), (ops)); \ 313 __n -= (SIP_NTXDESC - __x); \ 314 __x = 0; \ 315 } \ 316 \ 317 /* Now sync whatever is left. */ \ 318 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \ 319 SIP_CDTXOFF(__x), sizeof(struct sip_desc) * __n, (ops)); \ 320 } while (0) 321 322 #define SIP_CDRXSYNC(sc, x, ops) \ 323 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \ 324 SIP_CDRXOFF((x)), sizeof(struct sip_desc), (ops)) 325 326 /* 327 * Note we rely on MCLBYTES being a power of two below. 328 */ 329 #ifdef DP83820 330 #define SIP_INIT_RXDESC_EXTSTS __sipd->sipd_extsts = 0; 331 #else 332 #define SIP_INIT_RXDESC_EXTSTS /* nothing */ 333 #endif 334 #define SIP_INIT_RXDESC(sc, x) \ 335 do { \ 336 struct sip_rxsoft *__rxs = &(sc)->sc_rxsoft[(x)]; \ 337 struct sip_desc *__sipd = &(sc)->sc_rxdescs[(x)]; \ 338 \ 339 __sipd->sipd_link = htole32(SIP_CDRXADDR((sc), SIP_NEXTRX((x)))); \ 340 __sipd->sipd_bufptr = htole32(__rxs->rxs_dmamap->dm_segs[0].ds_addr); \ 341 __sipd->sipd_cmdsts = htole32(CMDSTS_INTR | \ 342 ((MCLBYTES - 1) & CMDSTS_SIZE_MASK)); \ 343 SIP_INIT_RXDESC_EXTSTS \ 344 SIP_CDRXSYNC((sc), (x), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); \ 345 } while (0) 346 347 #define SIP_TIMEOUT 1000 348 349 void SIP_DECL(start)(struct ifnet *); 350 void SIP_DECL(watchdog)(struct ifnet *); 351 int SIP_DECL(ioctl)(struct ifnet *, u_long, caddr_t); 352 int SIP_DECL(init)(struct ifnet *); 353 void SIP_DECL(stop)(struct ifnet *, int); 354 355 void SIP_DECL(shutdown)(void *); 356 357 void SIP_DECL(reset)(struct sip_softc *); 358 void SIP_DECL(rxdrain)(struct sip_softc *); 359 int SIP_DECL(add_rxbuf)(struct sip_softc *, int); 360 void SIP_DECL(read_eeprom)(struct sip_softc *, int, int, u_int16_t *); 361 void SIP_DECL(tick)(void *); 362 363 #if !defined(DP83820) 364 void SIP_DECL(sis900_set_filter)(struct sip_softc *); 365 #endif /* ! DP83820 */ 366 void SIP_DECL(dp83815_set_filter)(struct sip_softc *); 367 368 #if defined(DP83820) 369 void SIP_DECL(dp83820_read_macaddr)(struct sip_softc *, u_int8_t *); 370 #else 371 void SIP_DECL(sis900_read_macaddr)(struct sip_softc *, u_int8_t *); 372 void SIP_DECL(dp83815_read_macaddr)(struct sip_softc *, u_int8_t *); 373 #endif /* DP83820 */ 374 375 int SIP_DECL(intr)(void *); 376 void SIP_DECL(txintr)(struct sip_softc *); 377 void SIP_DECL(rxintr)(struct sip_softc *); 378 379 #if defined(DP83820) 380 int SIP_DECL(dp83820_mii_readreg)(struct device *, int, int); 381 void SIP_DECL(dp83820_mii_writereg)(struct device *, int, int, int); 382 void SIP_DECL(dp83820_mii_statchg)(struct device *); 383 #else 384 int SIP_DECL(sis900_mii_readreg)(struct device *, int, int); 385 void SIP_DECL(sis900_mii_writereg)(struct device *, int, int, int); 386 void SIP_DECL(sis900_mii_statchg)(struct device *); 387 388 int SIP_DECL(dp83815_mii_readreg)(struct device *, int, int); 389 void SIP_DECL(dp83815_mii_writereg)(struct device *, int, int, int); 390 void SIP_DECL(dp83815_mii_statchg)(struct device *); 391 #endif /* DP83820 */ 392 393 int SIP_DECL(mediachange)(struct ifnet *); 394 void SIP_DECL(mediastatus)(struct ifnet *, struct ifmediareq *); 395 396 int SIP_DECL(match)(struct device *, struct cfdata *, void *); 397 void SIP_DECL(attach)(struct device *, struct device *, void *); 398 399 int SIP_DECL(copy_small) = 0; 400 401 struct cfattach SIP_DECL(ca) = { 402 sizeof(struct sip_softc), SIP_DECL(match), SIP_DECL(attach), 403 }; 404 405 /* 406 * Descriptions of the variants of the SiS900. 407 */ 408 struct sip_variant { 409 int (*sipv_mii_readreg)(struct device *, int, int); 410 void (*sipv_mii_writereg)(struct device *, int, int, int); 411 void (*sipv_mii_statchg)(struct device *); 412 void (*sipv_set_filter)(struct sip_softc *); 413 void (*sipv_read_macaddr)(struct sip_softc *, u_int8_t *); 414 }; 415 416 #if defined(DP83820) 417 u_int32_t SIP_DECL(dp83820_mii_bitbang_read)(struct device *); 418 void SIP_DECL(dp83820_mii_bitbang_write)(struct device *, u_int32_t); 419 420 const struct mii_bitbang_ops SIP_DECL(dp83820_mii_bitbang_ops) = { 421 SIP_DECL(dp83820_mii_bitbang_read), 422 SIP_DECL(dp83820_mii_bitbang_write), 423 { 424 EROMAR_MDIO, /* MII_BIT_MDO */ 425 EROMAR_MDIO, /* MII_BIT_MDI */ 426 EROMAR_MDC, /* MII_BIT_MDC */ 427 EROMAR_MDDIR, /* MII_BIT_DIR_HOST_PHY */ 428 0, /* MII_BIT_DIR_PHY_HOST */ 429 } 430 }; 431 #endif /* DP83820 */ 432 433 #if defined(DP83820) 434 const struct sip_variant SIP_DECL(variant_dp83820) = { 435 SIP_DECL(dp83820_mii_readreg), 436 SIP_DECL(dp83820_mii_writereg), 437 SIP_DECL(dp83820_mii_statchg), 438 SIP_DECL(dp83815_set_filter), 439 SIP_DECL(dp83820_read_macaddr), 440 }; 441 #else 442 const struct sip_variant SIP_DECL(variant_sis900) = { 443 SIP_DECL(sis900_mii_readreg), 444 SIP_DECL(sis900_mii_writereg), 445 SIP_DECL(sis900_mii_statchg), 446 SIP_DECL(sis900_set_filter), 447 SIP_DECL(sis900_read_macaddr), 448 }; 449 450 const struct sip_variant SIP_DECL(variant_dp83815) = { 451 SIP_DECL(dp83815_mii_readreg), 452 SIP_DECL(dp83815_mii_writereg), 453 SIP_DECL(dp83815_mii_statchg), 454 SIP_DECL(dp83815_set_filter), 455 SIP_DECL(dp83815_read_macaddr), 456 }; 457 #endif /* DP83820 */ 458 459 /* 460 * Devices supported by this driver. 461 */ 462 const struct sip_product { 463 pci_vendor_id_t sip_vendor; 464 pci_product_id_t sip_product; 465 const char *sip_name; 466 const struct sip_variant *sip_variant; 467 } SIP_DECL(products)[] = { 468 #if defined(DP83820) 469 { PCI_VENDOR_NS, PCI_PRODUCT_NS_DP83820, 470 "NatSemi DP83820 Gigabit Ethernet", 471 &SIP_DECL(variant_dp83820) }, 472 #else 473 { PCI_VENDOR_SIS, PCI_PRODUCT_SIS_900, 474 "SiS 900 10/100 Ethernet", 475 &SIP_DECL(variant_sis900) }, 476 { PCI_VENDOR_SIS, PCI_PRODUCT_SIS_7016, 477 "SiS 7016 10/100 Ethernet", 478 &SIP_DECL(variant_sis900) }, 479 480 { PCI_VENDOR_NS, PCI_PRODUCT_NS_DP83815, 481 "NatSemi DP83815 10/100 Ethernet", 482 &SIP_DECL(variant_dp83815) }, 483 #endif /* DP83820 */ 484 485 { 0, 0, 486 NULL, 487 NULL }, 488 }; 489 490 static const struct sip_product * 491 SIP_DECL(lookup)(const struct pci_attach_args *pa) 492 { 493 const struct sip_product *sip; 494 495 for (sip = SIP_DECL(products); sip->sip_name != NULL; sip++) { 496 if (PCI_VENDOR(pa->pa_id) == sip->sip_vendor && 497 PCI_PRODUCT(pa->pa_id) == sip->sip_product) 498 return (sip); 499 } 500 return (NULL); 501 } 502 503 int 504 SIP_DECL(match)(struct device *parent, struct cfdata *cf, void *aux) 505 { 506 struct pci_attach_args *pa = aux; 507 508 if (SIP_DECL(lookup)(pa) != NULL) 509 return (1); 510 511 return (0); 512 } 513 514 void 515 SIP_DECL(attach)(struct device *parent, struct device *self, void *aux) 516 { 517 struct sip_softc *sc = (struct sip_softc *) self; 518 struct pci_attach_args *pa = aux; 519 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 520 pci_chipset_tag_t pc = pa->pa_pc; 521 pci_intr_handle_t ih; 522 const char *intrstr = NULL; 523 bus_space_tag_t iot, memt; 524 bus_space_handle_t ioh, memh; 525 bus_dma_segment_t seg; 526 int ioh_valid, memh_valid; 527 int i, rseg, error; 528 const struct sip_product *sip; 529 pcireg_t pmode; 530 u_int8_t enaddr[ETHER_ADDR_LEN]; 531 int pmreg; 532 #ifdef DP83820 533 pcireg_t memtype; 534 u_int32_t reg; 535 #endif /* DP83820 */ 536 537 callout_init(&sc->sc_tick_ch); 538 539 sip = SIP_DECL(lookup)(pa); 540 if (sip == NULL) { 541 printf("\n"); 542 panic(SIP_STR(attach) ": impossible"); 543 } 544 545 printf(": %s\n", sip->sip_name); 546 547 sc->sc_model = sip; 548 549 /* 550 * Map the device. 551 */ 552 ioh_valid = (pci_mapreg_map(pa, SIP_PCI_CFGIOA, 553 PCI_MAPREG_TYPE_IO, 0, 554 &iot, &ioh, NULL, NULL) == 0); 555 #ifdef DP83820 556 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, SIP_PCI_CFGMA); 557 switch (memtype) { 558 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT: 559 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_64BIT: 560 memh_valid = (pci_mapreg_map(pa, SIP_PCI_CFGMA, 561 memtype, 0, &memt, &memh, NULL, NULL) == 0); 562 break; 563 default: 564 memh_valid = 0; 565 } 566 #else 567 memh_valid = (pci_mapreg_map(pa, SIP_PCI_CFGMA, 568 PCI_MAPREG_TYPE_MEM|PCI_MAPREG_MEM_TYPE_32BIT, 0, 569 &memt, &memh, NULL, NULL) == 0); 570 #endif /* DP83820 */ 571 572 if (memh_valid) { 573 sc->sc_st = memt; 574 sc->sc_sh = memh; 575 } else if (ioh_valid) { 576 sc->sc_st = iot; 577 sc->sc_sh = ioh; 578 } else { 579 printf("%s: unable to map device registers\n", 580 sc->sc_dev.dv_xname); 581 return; 582 } 583 584 sc->sc_dmat = pa->pa_dmat; 585 586 /* Enable bus mastering. */ 587 pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, 588 pci_conf_read(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG) | 589 PCI_COMMAND_MASTER_ENABLE); 590 591 /* Get it out of power save mode if needed. */ 592 if (pci_get_capability(pc, pa->pa_tag, PCI_CAP_PWRMGMT, &pmreg, 0)) { 593 pmode = pci_conf_read(pc, pa->pa_tag, pmreg + 4) & 0x3; 594 if (pmode == 3) { 595 /* 596 * The card has lost all configuration data in 597 * this state, so punt. 598 */ 599 printf("%s: unable to wake up from power state D3\n", 600 sc->sc_dev.dv_xname); 601 return; 602 } 603 if (pmode != 0) { 604 printf("%s: waking up from power state D%d\n", 605 sc->sc_dev.dv_xname, pmode); 606 pci_conf_write(pc, pa->pa_tag, pmreg + 4, 0); 607 } 608 } 609 610 /* 611 * Map and establish our interrupt. 612 */ 613 if (pci_intr_map(pa, &ih)) { 614 printf("%s: unable to map interrupt\n", sc->sc_dev.dv_xname); 615 return; 616 } 617 intrstr = pci_intr_string(pc, ih); 618 sc->sc_ih = pci_intr_establish(pc, ih, IPL_NET, SIP_DECL(intr), sc); 619 if (sc->sc_ih == NULL) { 620 printf("%s: unable to establish interrupt", 621 sc->sc_dev.dv_xname); 622 if (intrstr != NULL) 623 printf(" at %s", intrstr); 624 printf("\n"); 625 return; 626 } 627 printf("%s: interrupting at %s\n", sc->sc_dev.dv_xname, intrstr); 628 629 SIMPLEQ_INIT(&sc->sc_txfreeq); 630 SIMPLEQ_INIT(&sc->sc_txdirtyq); 631 632 /* 633 * Allocate the control data structures, and create and load the 634 * DMA map for it. 635 */ 636 if ((error = bus_dmamem_alloc(sc->sc_dmat, 637 sizeof(struct sip_control_data), PAGE_SIZE, 0, &seg, 1, &rseg, 638 0)) != 0) { 639 printf("%s: unable to allocate control data, error = %d\n", 640 sc->sc_dev.dv_xname, error); 641 goto fail_0; 642 } 643 644 if ((error = bus_dmamem_map(sc->sc_dmat, &seg, rseg, 645 sizeof(struct sip_control_data), (caddr_t *)&sc->sc_control_data, 646 BUS_DMA_COHERENT)) != 0) { 647 printf("%s: unable to map control data, error = %d\n", 648 sc->sc_dev.dv_xname, error); 649 goto fail_1; 650 } 651 652 if ((error = bus_dmamap_create(sc->sc_dmat, 653 sizeof(struct sip_control_data), 1, 654 sizeof(struct sip_control_data), 0, 0, &sc->sc_cddmamap)) != 0) { 655 printf("%s: unable to create control data DMA map, " 656 "error = %d\n", sc->sc_dev.dv_xname, error); 657 goto fail_2; 658 } 659 660 if ((error = bus_dmamap_load(sc->sc_dmat, sc->sc_cddmamap, 661 sc->sc_control_data, sizeof(struct sip_control_data), NULL, 662 0)) != 0) { 663 printf("%s: unable to load control data DMA map, error = %d\n", 664 sc->sc_dev.dv_xname, error); 665 goto fail_3; 666 } 667 668 /* 669 * Create the transmit buffer DMA maps. 670 */ 671 for (i = 0; i < SIP_TXQUEUELEN; i++) { 672 if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES, 673 SIP_NTXSEGS, MCLBYTES, 0, 0, 674 &sc->sc_txsoft[i].txs_dmamap)) != 0) { 675 printf("%s: unable to create tx DMA map %d, " 676 "error = %d\n", sc->sc_dev.dv_xname, i, error); 677 goto fail_4; 678 } 679 } 680 681 /* 682 * Create the receive buffer DMA maps. 683 */ 684 for (i = 0; i < SIP_NRXDESC; i++) { 685 if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES, 1, 686 MCLBYTES, 0, 0, &sc->sc_rxsoft[i].rxs_dmamap)) != 0) { 687 printf("%s: unable to create rx DMA map %d, " 688 "error = %d\n", sc->sc_dev.dv_xname, i, error); 689 goto fail_5; 690 } 691 sc->sc_rxsoft[i].rxs_mbuf = NULL; 692 } 693 694 /* 695 * Reset the chip to a known state. 696 */ 697 SIP_DECL(reset)(sc); 698 699 /* 700 * Read the Ethernet address from the EEPROM. This might 701 * also fetch other stuff from the EEPROM and stash it 702 * in the softc. 703 */ 704 sc->sc_cfg = 0; 705 (*sip->sip_variant->sipv_read_macaddr)(sc, enaddr); 706 707 printf("%s: Ethernet address %s\n", sc->sc_dev.dv_xname, 708 ether_sprintf(enaddr)); 709 710 /* 711 * Initialize the configuration register: aggressive PCI 712 * bus request algorithm, default backoff, default OW timer, 713 * default parity error detection. 714 * 715 * NOTE: "Big endian mode" is useless on the SiS900 and 716 * friends -- it affects packet data, not descriptors. 717 */ 718 #ifdef DP83820 719 reg = bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_CFG); 720 if (reg & CFG_PCI64_DET) { 721 printf("%s: 64-bit PCI slot detected\n", sc->sc_dev.dv_xname); 722 /* 723 * XXX Need some PCI flags indicating support for 724 * XXX 64-bit addressing (SAC or DAC) and 64-bit 725 * XXX data path. 726 */ 727 } 728 if (sc->sc_cfg & (CFG_TBI_EN|CFG_EXT_125)) { 729 const char *sep = ""; 730 printf("%s: using ", sc->sc_dev.dv_xname); 731 if (sc->sc_cfg & CFG_EXT_125) { 732 printf("%s125MHz clock", sep); 733 sep = ", "; 734 } 735 if (sc->sc_cfg & CFG_TBI_EN) { 736 printf("%sten-bit interface", sep); 737 sep = ", "; 738 } 739 printf("\n"); 740 } 741 if ((pa->pa_flags & PCI_FLAGS_MRM_OKAY) == 0) 742 sc->sc_cfg |= CFG_MRM_DIS; 743 if ((pa->pa_flags & PCI_FLAGS_MWI_OKAY) == 0) 744 sc->sc_cfg |= CFG_MWI_DIS; 745 746 /* 747 * Use the extended descriptor format on the DP83820. This 748 * gives us an interface to VLAN tagging and IPv4/TCP/UDP 749 * checksumming. 750 */ 751 sc->sc_cfg |= CFG_EXTSTS_EN; 752 #endif /* DP83820 */ 753 754 /* 755 * Initialize our media structures and probe the MII. 756 */ 757 sc->sc_mii.mii_ifp = ifp; 758 sc->sc_mii.mii_readreg = sip->sip_variant->sipv_mii_readreg; 759 sc->sc_mii.mii_writereg = sip->sip_variant->sipv_mii_writereg; 760 sc->sc_mii.mii_statchg = sip->sip_variant->sipv_mii_statchg; 761 ifmedia_init(&sc->sc_mii.mii_media, 0, SIP_DECL(mediachange), 762 SIP_DECL(mediastatus)); 763 #ifdef DP83820 764 if (sc->sc_cfg & CFG_TBI_EN) { 765 /* Using ten-bit interface. */ 766 printf("%s: TBI -- FIXME\n", sc->sc_dev.dv_xname); 767 } else { 768 mii_attach(&sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, 769 MII_OFFSET_ANY, 0); 770 if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) { 771 ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE, 772 0, NULL); 773 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE); 774 } else 775 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_AUTO); 776 } 777 #else 778 mii_attach(&sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, 779 MII_OFFSET_ANY, 0); 780 if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) { 781 ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE, 0, NULL); 782 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE); 783 } else 784 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_AUTO); 785 #endif /* DP83820 */ 786 787 ifp = &sc->sc_ethercom.ec_if; 788 strcpy(ifp->if_xname, sc->sc_dev.dv_xname); 789 ifp->if_softc = sc; 790 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 791 ifp->if_ioctl = SIP_DECL(ioctl); 792 ifp->if_start = SIP_DECL(start); 793 ifp->if_watchdog = SIP_DECL(watchdog); 794 ifp->if_init = SIP_DECL(init); 795 ifp->if_stop = SIP_DECL(stop); 796 IFQ_SET_READY(&ifp->if_snd); 797 798 /* 799 * We can support 802.1Q VLAN-sized frames. 800 */ 801 sc->sc_ethercom.ec_capabilities |= ETHERCAP_VLAN_MTU; 802 803 #ifdef DP83820 804 /* 805 * And the DP83820 can do VLAN tagging in hardware. 806 */ 807 sc->sc_ethercom.ec_capabilities |= ETHERCAP_VLAN_HWTAGGING; 808 809 /* 810 * The DP83820 can do IPv4, TCPv4, and UDPv4 checksums 811 * in hardware. 812 */ 813 ifp->if_capabilities |= IFCAP_CSUM_IPv4 | IFCAP_CSUM_TCPv4 | 814 IFCAP_CSUM_UDPv4; 815 #endif /* DP83820 */ 816 817 /* 818 * Attach the interface. 819 */ 820 if_attach(ifp); 821 ether_ifattach(ifp, enaddr); 822 823 #ifdef SIP_EVENT_COUNTERS 824 /* 825 * Attach event counters. 826 */ 827 evcnt_attach_dynamic(&sc->sc_ev_txsstall, EVCNT_TYPE_MISC, 828 NULL, sc->sc_dev.dv_xname, "txsstall"); 829 evcnt_attach_dynamic(&sc->sc_ev_txdstall, EVCNT_TYPE_MISC, 830 NULL, sc->sc_dev.dv_xname, "txdstall"); 831 evcnt_attach_dynamic(&sc->sc_ev_txintr, EVCNT_TYPE_INTR, 832 NULL, sc->sc_dev.dv_xname, "txintr"); 833 evcnt_attach_dynamic(&sc->sc_ev_rxintr, EVCNT_TYPE_INTR, 834 NULL, sc->sc_dev.dv_xname, "rxintr"); 835 #ifdef DP83820 836 evcnt_attach_dynamic(&sc->sc_ev_rxipsum, EVCNT_TYPE_MISC, 837 NULL, sc->sc_dev.dv_xname, "rxipsum"); 838 evcnt_attach_dynamic(&sc->sc_ev_rxtcpsum, EVCNT_TYPE_MISC, 839 NULL, sc->sc_dev.dv_xname, "rxtcpsum"); 840 evcnt_attach_dynamic(&sc->sc_ev_rxudpsum, EVCNT_TYPE_MISC, 841 NULL, sc->sc_dev.dv_xname, "rxudpsum"); 842 evcnt_attach_dynamic(&sc->sc_ev_txipsum, EVCNT_TYPE_MISC, 843 NULL, sc->sc_dev.dv_xname, "txipsum"); 844 evcnt_attach_dynamic(&sc->sc_ev_txtcpsum, EVCNT_TYPE_MISC, 845 NULL, sc->sc_dev.dv_xname, "txtcpsum"); 846 evcnt_attach_dynamic(&sc->sc_ev_txudpsum, EVCNT_TYPE_MISC, 847 NULL, sc->sc_dev.dv_xname, "txudpsum"); 848 #endif /* DP83820 */ 849 #endif /* SIP_EVENT_COUNTERS */ 850 851 /* 852 * Make sure the interface is shutdown during reboot. 853 */ 854 sc->sc_sdhook = shutdownhook_establish(SIP_DECL(shutdown), sc); 855 if (sc->sc_sdhook == NULL) 856 printf("%s: WARNING: unable to establish shutdown hook\n", 857 sc->sc_dev.dv_xname); 858 return; 859 860 /* 861 * Free any resources we've allocated during the failed attach 862 * attempt. Do this in reverse order and fall through. 863 */ 864 fail_5: 865 for (i = 0; i < SIP_NRXDESC; i++) { 866 if (sc->sc_rxsoft[i].rxs_dmamap != NULL) 867 bus_dmamap_destroy(sc->sc_dmat, 868 sc->sc_rxsoft[i].rxs_dmamap); 869 } 870 fail_4: 871 for (i = 0; i < SIP_TXQUEUELEN; i++) { 872 if (sc->sc_txsoft[i].txs_dmamap != NULL) 873 bus_dmamap_destroy(sc->sc_dmat, 874 sc->sc_txsoft[i].txs_dmamap); 875 } 876 bus_dmamap_unload(sc->sc_dmat, sc->sc_cddmamap); 877 fail_3: 878 bus_dmamap_destroy(sc->sc_dmat, sc->sc_cddmamap); 879 fail_2: 880 bus_dmamem_unmap(sc->sc_dmat, (caddr_t)sc->sc_control_data, 881 sizeof(struct sip_control_data)); 882 fail_1: 883 bus_dmamem_free(sc->sc_dmat, &seg, rseg); 884 fail_0: 885 return; 886 } 887 888 /* 889 * sip_shutdown: 890 * 891 * Make sure the interface is stopped at reboot time. 892 */ 893 void 894 SIP_DECL(shutdown)(void *arg) 895 { 896 struct sip_softc *sc = arg; 897 898 SIP_DECL(stop)(&sc->sc_ethercom.ec_if, 1); 899 } 900 901 /* 902 * sip_start: [ifnet interface function] 903 * 904 * Start packet transmission on the interface. 905 */ 906 void 907 SIP_DECL(start)(struct ifnet *ifp) 908 { 909 struct sip_softc *sc = ifp->if_softc; 910 struct mbuf *m0, *m; 911 struct sip_txsoft *txs; 912 bus_dmamap_t dmamap; 913 int error, firsttx, nexttx, lasttx, ofree, seg; 914 #ifdef DP83820 915 u_int32_t extsts; 916 #endif 917 918 /* 919 * If we've been told to pause, don't transmit any more packets. 920 */ 921 if (sc->sc_flags & SIPF_PAUSED) 922 ifp->if_flags |= IFF_OACTIVE; 923 924 if ((ifp->if_flags & (IFF_RUNNING|IFF_OACTIVE)) != IFF_RUNNING) 925 return; 926 927 /* 928 * Remember the previous number of free descriptors and 929 * the first descriptor we'll use. 930 */ 931 ofree = sc->sc_txfree; 932 firsttx = sc->sc_txnext; 933 934 /* 935 * Loop through the send queue, setting up transmit descriptors 936 * until we drain the queue, or use up all available transmit 937 * descriptors. 938 */ 939 for (;;) { 940 /* Get a work queue entry. */ 941 if ((txs = SIMPLEQ_FIRST(&sc->sc_txfreeq)) == NULL) { 942 SIP_EVCNT_INCR(&sc->sc_ev_txsstall); 943 break; 944 } 945 946 /* 947 * Grab a packet off the queue. 948 */ 949 IFQ_POLL(&ifp->if_snd, m0); 950 if (m0 == NULL) 951 break; 952 m = NULL; 953 954 dmamap = txs->txs_dmamap; 955 956 /* 957 * Load the DMA map. If this fails, the packet either 958 * didn't fit in the alloted number of segments, or we 959 * were short on resources. In this case, we'll copy 960 * and try again. 961 */ 962 if (bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, m0, 963 BUS_DMA_NOWAIT) != 0) { 964 MGETHDR(m, M_DONTWAIT, MT_DATA); 965 if (m == NULL) { 966 printf("%s: unable to allocate Tx mbuf\n", 967 sc->sc_dev.dv_xname); 968 break; 969 } 970 if (m0->m_pkthdr.len > MHLEN) { 971 MCLGET(m, M_DONTWAIT); 972 if ((m->m_flags & M_EXT) == 0) { 973 printf("%s: unable to allocate Tx " 974 "cluster\n", sc->sc_dev.dv_xname); 975 m_freem(m); 976 break; 977 } 978 } 979 m_copydata(m0, 0, m0->m_pkthdr.len, mtod(m, caddr_t)); 980 m->m_pkthdr.len = m->m_len = m0->m_pkthdr.len; 981 error = bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, 982 m, BUS_DMA_NOWAIT); 983 if (error) { 984 printf("%s: unable to load Tx buffer, " 985 "error = %d\n", sc->sc_dev.dv_xname, error); 986 break; 987 } 988 } 989 990 /* 991 * Ensure we have enough descriptors free to describe 992 * the packet. Note, we always reserve one descriptor 993 * at the end of the ring as a termination point, to 994 * prevent wrap-around. 995 */ 996 if (dmamap->dm_nsegs > (sc->sc_txfree - 1)) { 997 /* 998 * Not enough free descriptors to transmit this 999 * packet. We haven't committed anything yet, 1000 * so just unload the DMA map, put the packet 1001 * back on the queue, and punt. Notify the upper 1002 * layer that there are not more slots left. 1003 * 1004 * XXX We could allocate an mbuf and copy, but 1005 * XXX is it worth it? 1006 */ 1007 ifp->if_flags |= IFF_OACTIVE; 1008 bus_dmamap_unload(sc->sc_dmat, dmamap); 1009 if (m != NULL) 1010 m_freem(m); 1011 SIP_EVCNT_INCR(&sc->sc_ev_txdstall); 1012 break; 1013 } 1014 1015 IFQ_DEQUEUE(&ifp->if_snd, m0); 1016 if (m != NULL) { 1017 m_freem(m0); 1018 m0 = m; 1019 } 1020 1021 /* 1022 * WE ARE NOW COMMITTED TO TRANSMITTING THE PACKET. 1023 */ 1024 1025 /* Sync the DMA map. */ 1026 bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize, 1027 BUS_DMASYNC_PREWRITE); 1028 1029 /* 1030 * Initialize the transmit descriptors. 1031 */ 1032 for (nexttx = sc->sc_txnext, seg = 0; 1033 seg < dmamap->dm_nsegs; 1034 seg++, nexttx = SIP_NEXTTX(nexttx)) { 1035 /* 1036 * If this is the first descriptor we're 1037 * enqueueing, don't set the OWN bit just 1038 * yet. That could cause a race condition. 1039 * We'll do it below. 1040 */ 1041 sc->sc_txdescs[nexttx].sipd_bufptr = 1042 htole32(dmamap->dm_segs[seg].ds_addr); 1043 sc->sc_txdescs[nexttx].sipd_cmdsts = 1044 htole32((nexttx == firsttx ? 0 : CMDSTS_OWN) | 1045 CMDSTS_MORE | dmamap->dm_segs[seg].ds_len); 1046 #ifdef DP83820 1047 sc->sc_txdescs[nexttx].sipd_extsts = 0; 1048 #endif /* DP83820 */ 1049 lasttx = nexttx; 1050 } 1051 1052 /* Clear the MORE bit on the last segment. */ 1053 sc->sc_txdescs[lasttx].sipd_cmdsts &= htole32(~CMDSTS_MORE); 1054 1055 #ifdef DP83820 1056 /* 1057 * If VLANs are enabled and the packet has a VLAN tag, set 1058 * up the descriptor to encapsulate the packet for us. 1059 * 1060 * This apparently has to be on the last descriptor of 1061 * the packet. 1062 */ 1063 if (sc->sc_ethercom.ec_nvlans != 0 && 1064 (m = m_aux_find(m0, AF_LINK, ETHERTYPE_VLAN)) != NULL) { 1065 sc->sc_txdescs[lasttx].sipd_extsts |= 1066 htole32(EXTSTS_VPKT | 1067 htons(*mtod(m, int *) & EXTSTS_VTCI)); 1068 } 1069 1070 /* 1071 * If the upper-layer has requested IPv4/TCPv4/UDPv4 1072 * checksumming, set up the descriptor to do this work 1073 * for us. 1074 * 1075 * This apparently has to be on the first descriptor of 1076 * the packet. 1077 * 1078 * Byte-swap constants so the compiler can optimize. 1079 */ 1080 extsts = 0; 1081 if (m0->m_pkthdr.csum_flags & M_CSUM_IPv4) { 1082 KDASSERT(ifp->if_capenable & IFCAP_CSUM_IPv4); 1083 SIP_EVCNT_INCR(&sc->sc_ev_txipsum); 1084 extsts |= htole32(EXTSTS_IPPKT); 1085 } 1086 if (m0->m_pkthdr.csum_flags & M_CSUM_TCPv4) { 1087 KDASSERT(ifp->if_capenable & IFCAP_CSUM_TCPv4); 1088 SIP_EVCNT_INCR(&sc->sc_ev_txtcpsum); 1089 extsts |= htole32(EXTSTS_TCPPKT); 1090 } else if (m0->m_pkthdr.csum_flags & M_CSUM_UDPv4) { 1091 KDASSERT(ifp->if_capenable & IFCAP_CSUM_UDPv4); 1092 SIP_EVCNT_INCR(&sc->sc_ev_txudpsum); 1093 extsts |= htole32(EXTSTS_UDPPKT); 1094 } 1095 sc->sc_txdescs[sc->sc_txnext].sipd_extsts |= extsts; 1096 #endif /* DP83820 */ 1097 1098 /* Sync the descriptors we're using. */ 1099 SIP_CDTXSYNC(sc, sc->sc_txnext, dmamap->dm_nsegs, 1100 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); 1101 1102 /* 1103 * Store a pointer to the packet so we can free it later, 1104 * and remember what txdirty will be once the packet is 1105 * done. 1106 */ 1107 txs->txs_mbuf = m0; 1108 txs->txs_firstdesc = sc->sc_txnext; 1109 txs->txs_lastdesc = lasttx; 1110 1111 /* Advance the tx pointer. */ 1112 sc->sc_txfree -= dmamap->dm_nsegs; 1113 sc->sc_txnext = nexttx; 1114 1115 SIMPLEQ_REMOVE_HEAD(&sc->sc_txfreeq, txs, txs_q); 1116 SIMPLEQ_INSERT_TAIL(&sc->sc_txdirtyq, txs, txs_q); 1117 1118 #if NBPFILTER > 0 1119 /* 1120 * Pass the packet to any BPF listeners. 1121 */ 1122 if (ifp->if_bpf) 1123 bpf_mtap(ifp->if_bpf, m0); 1124 #endif /* NBPFILTER > 0 */ 1125 } 1126 1127 if (txs == NULL || sc->sc_txfree == 0) { 1128 /* No more slots left; notify upper layer. */ 1129 ifp->if_flags |= IFF_OACTIVE; 1130 } 1131 1132 if (sc->sc_txfree != ofree) { 1133 /* 1134 * Cause a descriptor interrupt to happen on the 1135 * last packet we enqueued. 1136 */ 1137 sc->sc_txdescs[lasttx].sipd_cmdsts |= htole32(CMDSTS_INTR); 1138 SIP_CDTXSYNC(sc, lasttx, 1, 1139 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); 1140 1141 /* 1142 * The entire packet chain is set up. Give the 1143 * first descrptor to the chip now. 1144 */ 1145 sc->sc_txdescs[firsttx].sipd_cmdsts |= htole32(CMDSTS_OWN); 1146 SIP_CDTXSYNC(sc, firsttx, 1, 1147 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); 1148 1149 /* 1150 * Start the transmit process. Note, the manual says 1151 * that if there are no pending transmissions in the 1152 * chip's internal queue (indicated by TXE being clear), 1153 * then the driver software must set the TXDP to the 1154 * first descriptor to be transmitted. However, if we 1155 * do this, it causes serious performance degredation on 1156 * the DP83820 under load, not setting TXDP doesn't seem 1157 * to adversely affect the SiS 900 or DP83815. 1158 * 1159 * Well, I guess it wouldn't be the first time a manual 1160 * has lied -- and they could be speaking of the NULL- 1161 * terminated descriptor list case, rather than OWN- 1162 * terminated rings. 1163 */ 1164 #if 0 1165 if ((bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_CR) & 1166 CR_TXE) == 0) { 1167 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_TXDP, 1168 SIP_CDTXADDR(sc, firsttx)); 1169 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_CR, CR_TXE); 1170 } 1171 #else 1172 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_CR, CR_TXE); 1173 #endif 1174 1175 /* Set a watchdog timer in case the chip flakes out. */ 1176 ifp->if_timer = 5; 1177 } 1178 } 1179 1180 /* 1181 * sip_watchdog: [ifnet interface function] 1182 * 1183 * Watchdog timer handler. 1184 */ 1185 void 1186 SIP_DECL(watchdog)(struct ifnet *ifp) 1187 { 1188 struct sip_softc *sc = ifp->if_softc; 1189 1190 /* 1191 * The chip seems to ignore the CMDSTS_INTR bit sometimes! 1192 * If we get a timeout, try and sweep up transmit descriptors. 1193 * If we manage to sweep them all up, ignore the lack of 1194 * interrupt. 1195 */ 1196 SIP_DECL(txintr)(sc); 1197 1198 if (sc->sc_txfree != SIP_NTXDESC) { 1199 printf("%s: device timeout\n", sc->sc_dev.dv_xname); 1200 ifp->if_oerrors++; 1201 1202 /* Reset the interface. */ 1203 (void) SIP_DECL(init)(ifp); 1204 } else if (ifp->if_flags & IFF_DEBUG) 1205 printf("%s: recovered from device timeout\n", 1206 sc->sc_dev.dv_xname); 1207 1208 /* Try to get more packets going. */ 1209 SIP_DECL(start)(ifp); 1210 } 1211 1212 /* 1213 * sip_ioctl: [ifnet interface function] 1214 * 1215 * Handle control requests from the operator. 1216 */ 1217 int 1218 SIP_DECL(ioctl)(struct ifnet *ifp, u_long cmd, caddr_t data) 1219 { 1220 struct sip_softc *sc = ifp->if_softc; 1221 struct ifreq *ifr = (struct ifreq *)data; 1222 int s, error; 1223 1224 s = splnet(); 1225 1226 switch (cmd) { 1227 case SIOCSIFMEDIA: 1228 case SIOCGIFMEDIA: 1229 error = ifmedia_ioctl(ifp, ifr, &sc->sc_mii.mii_media, cmd); 1230 break; 1231 1232 default: 1233 error = ether_ioctl(ifp, cmd, data); 1234 if (error == ENETRESET) { 1235 /* 1236 * Multicast list has changed; set the hardware filter 1237 * accordingly. 1238 */ 1239 (*sc->sc_model->sip_variant->sipv_set_filter)(sc); 1240 error = 0; 1241 } 1242 break; 1243 } 1244 1245 /* Try to get more packets going. */ 1246 SIP_DECL(start)(ifp); 1247 1248 splx(s); 1249 return (error); 1250 } 1251 1252 /* 1253 * sip_intr: 1254 * 1255 * Interrupt service routine. 1256 */ 1257 int 1258 SIP_DECL(intr)(void *arg) 1259 { 1260 struct sip_softc *sc = arg; 1261 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 1262 u_int32_t isr; 1263 int handled = 0; 1264 1265 for (;;) { 1266 /* Reading clears interrupt. */ 1267 isr = bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_ISR); 1268 if ((isr & sc->sc_imr) == 0) 1269 break; 1270 1271 handled = 1; 1272 1273 if (isr & (ISR_RXORN|ISR_RXIDLE|ISR_RXDESC)) { 1274 SIP_EVCNT_INCR(&sc->sc_ev_rxintr); 1275 1276 /* Grab any new packets. */ 1277 SIP_DECL(rxintr)(sc); 1278 1279 if (isr & ISR_RXORN) { 1280 printf("%s: receive FIFO overrun\n", 1281 sc->sc_dev.dv_xname); 1282 1283 /* XXX adjust rx_drain_thresh? */ 1284 } 1285 1286 if (isr & ISR_RXIDLE) { 1287 printf("%s: receive ring overrun\n", 1288 sc->sc_dev.dv_xname); 1289 1290 /* Get the receive process going again. */ 1291 bus_space_write_4(sc->sc_st, sc->sc_sh, 1292 SIP_RXDP, SIP_CDRXADDR(sc, sc->sc_rxptr)); 1293 bus_space_write_4(sc->sc_st, sc->sc_sh, 1294 SIP_CR, CR_RXE); 1295 } 1296 } 1297 1298 if (isr & (ISR_TXURN|ISR_TXDESC)) { 1299 SIP_EVCNT_INCR(&sc->sc_ev_txintr); 1300 1301 /* Sweep up transmit descriptors. */ 1302 SIP_DECL(txintr)(sc); 1303 1304 if (isr & ISR_TXURN) { 1305 u_int32_t thresh; 1306 1307 printf("%s: transmit FIFO underrun", 1308 sc->sc_dev.dv_xname); 1309 1310 thresh = sc->sc_tx_drain_thresh + 1; 1311 if (thresh <= TXCFG_DRTH && 1312 (thresh * 32) <= (SIP_TXFIFO_SIZE - 1313 (sc->sc_tx_fill_thresh * 32))) { 1314 printf("; increasing Tx drain " 1315 "threshold to %u bytes\n", 1316 thresh * 32); 1317 sc->sc_tx_drain_thresh = thresh; 1318 (void) SIP_DECL(init)(ifp); 1319 } else { 1320 (void) SIP_DECL(init)(ifp); 1321 printf("\n"); 1322 } 1323 } 1324 } 1325 1326 #if !defined(DP83820) 1327 if (sc->sc_imr & (ISR_PAUSE_END|ISR_PAUSE_ST)) { 1328 if (isr & ISR_PAUSE_ST) { 1329 sc->sc_flags |= SIPF_PAUSED; 1330 ifp->if_flags |= IFF_OACTIVE; 1331 } 1332 if (isr & ISR_PAUSE_END) { 1333 sc->sc_flags &= ~SIPF_PAUSED; 1334 ifp->if_flags &= ~IFF_OACTIVE; 1335 } 1336 } 1337 #endif /* ! DP83820 */ 1338 1339 if (isr & ISR_HIBERR) { 1340 #define PRINTERR(bit, str) \ 1341 if (isr & (bit)) \ 1342 printf("%s: %s\n", sc->sc_dev.dv_xname, str) 1343 PRINTERR(ISR_DPERR, "parity error"); 1344 PRINTERR(ISR_SSERR, "system error"); 1345 PRINTERR(ISR_RMABT, "master abort"); 1346 PRINTERR(ISR_RTABT, "target abort"); 1347 PRINTERR(ISR_RXSOVR, "receive status FIFO overrun"); 1348 (void) SIP_DECL(init)(ifp); 1349 #undef PRINTERR 1350 } 1351 } 1352 1353 /* Try to get more packets going. */ 1354 SIP_DECL(start)(ifp); 1355 1356 return (handled); 1357 } 1358 1359 /* 1360 * sip_txintr: 1361 * 1362 * Helper; handle transmit interrupts. 1363 */ 1364 void 1365 SIP_DECL(txintr)(struct sip_softc *sc) 1366 { 1367 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 1368 struct sip_txsoft *txs; 1369 u_int32_t cmdsts; 1370 1371 if ((sc->sc_flags & SIPF_PAUSED) == 0) 1372 ifp->if_flags &= ~IFF_OACTIVE; 1373 1374 /* 1375 * Go through our Tx list and free mbufs for those 1376 * frames which have been transmitted. 1377 */ 1378 while ((txs = SIMPLEQ_FIRST(&sc->sc_txdirtyq)) != NULL) { 1379 SIP_CDTXSYNC(sc, txs->txs_firstdesc, txs->txs_dmamap->dm_nsegs, 1380 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); 1381 1382 cmdsts = le32toh(sc->sc_txdescs[txs->txs_lastdesc].sipd_cmdsts); 1383 if (cmdsts & CMDSTS_OWN) 1384 break; 1385 1386 SIMPLEQ_REMOVE_HEAD(&sc->sc_txdirtyq, txs, txs_q); 1387 1388 sc->sc_txfree += txs->txs_dmamap->dm_nsegs; 1389 1390 bus_dmamap_sync(sc->sc_dmat, txs->txs_dmamap, 1391 0, txs->txs_dmamap->dm_mapsize, BUS_DMASYNC_POSTWRITE); 1392 bus_dmamap_unload(sc->sc_dmat, txs->txs_dmamap); 1393 m_freem(txs->txs_mbuf); 1394 txs->txs_mbuf = NULL; 1395 1396 SIMPLEQ_INSERT_TAIL(&sc->sc_txfreeq, txs, txs_q); 1397 1398 /* 1399 * Check for errors and collisions. 1400 */ 1401 if (cmdsts & 1402 (CMDSTS_Tx_TXA|CMDSTS_Tx_TFU|CMDSTS_Tx_ED|CMDSTS_Tx_EC)) { 1403 if (ifp->if_flags & IFF_DEBUG) { 1404 if (CMDSTS_Tx_ED) 1405 printf("%s: excessive deferral\n", 1406 sc->sc_dev.dv_xname); 1407 if (CMDSTS_Tx_EC) { 1408 printf("%s: excessive collisions\n", 1409 sc->sc_dev.dv_xname); 1410 ifp->if_collisions += 16; 1411 } 1412 } 1413 } else { 1414 /* Packet was transmitted successfully. */ 1415 ifp->if_opackets++; 1416 ifp->if_collisions += CMDSTS_COLLISIONS(cmdsts); 1417 } 1418 } 1419 1420 /* 1421 * If there are no more pending transmissions, cancel the watchdog 1422 * timer. 1423 */ 1424 if (txs == NULL) 1425 ifp->if_timer = 0; 1426 } 1427 1428 /* 1429 * sip_rxintr: 1430 * 1431 * Helper; handle receive interrupts. 1432 */ 1433 void 1434 SIP_DECL(rxintr)(struct sip_softc *sc) 1435 { 1436 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 1437 struct sip_rxsoft *rxs; 1438 struct mbuf *m; 1439 u_int32_t cmdsts; 1440 #ifdef DP83820 1441 u_int32_t extsts; 1442 #endif /* DP83820 */ 1443 int i, len; 1444 1445 for (i = sc->sc_rxptr;; i = SIP_NEXTRX(i)) { 1446 rxs = &sc->sc_rxsoft[i]; 1447 1448 SIP_CDRXSYNC(sc, i, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); 1449 1450 cmdsts = le32toh(sc->sc_rxdescs[i].sipd_cmdsts); 1451 #ifdef DP83820 1452 extsts = le32toh(sc->sc_rxdescs[i].sipd_extsts); 1453 #endif /* DP83820 */ 1454 1455 /* 1456 * NOTE: OWN is set if owned by _consumer_. We're the 1457 * consumer of the receive ring, so if the bit is clear, 1458 * we have processed all of the packets. 1459 */ 1460 if ((cmdsts & CMDSTS_OWN) == 0) { 1461 /* 1462 * We have processed all of the receive buffers. 1463 */ 1464 break; 1465 } 1466 1467 #if !defined(DP83820) 1468 /* 1469 * If any collisions were seen on the wire, count one. 1470 */ 1471 if (cmdsts & CMDSTS_Rx_COL) 1472 ifp->if_collisions++; 1473 #endif /* ! DP83820 */ 1474 1475 /* 1476 * If an error occurred, update stats, clear the status 1477 * word, and leave the packet buffer in place. It will 1478 * simply be reused the next time the ring comes around. 1479 */ 1480 if (cmdsts & (CMDSTS_Rx_RXA|CMDSTS_Rx_LONG|CMDSTS_Rx_RUNT| 1481 CMDSTS_Rx_ISE|CMDSTS_Rx_CRCE|CMDSTS_Rx_FAE)) { 1482 ifp->if_ierrors++; 1483 if ((cmdsts & CMDSTS_Rx_RXA) != 0 && 1484 (cmdsts & CMDSTS_Rx_RXO) == 0) { 1485 /* Receive overrun handled elsewhere. */ 1486 printf("%s: receive descriptor error\n", 1487 sc->sc_dev.dv_xname); 1488 } 1489 #define PRINTERR(bit, str) \ 1490 if (cmdsts & (bit)) \ 1491 printf("%s: %s\n", sc->sc_dev.dv_xname, str) 1492 PRINTERR(CMDSTS_Rx_LONG, "packet too long"); 1493 PRINTERR(CMDSTS_Rx_RUNT, "runt packet"); 1494 PRINTERR(CMDSTS_Rx_ISE, "invalid symbol error"); 1495 PRINTERR(CMDSTS_Rx_CRCE, "CRC error"); 1496 PRINTERR(CMDSTS_Rx_FAE, "frame alignment error"); 1497 #undef PRINTERR 1498 SIP_INIT_RXDESC(sc, i); 1499 continue; 1500 } 1501 1502 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 1503 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_POSTREAD); 1504 1505 /* 1506 * No errors; receive the packet. Note, the SiS 900 1507 * includes the CRC with every packet. 1508 */ 1509 len = CMDSTS_SIZE(cmdsts); 1510 1511 #ifdef __NO_STRICT_ALIGNMENT 1512 /* 1513 * If the packet is small enough to fit in a 1514 * single header mbuf, allocate one and copy 1515 * the data into it. This greatly reduces 1516 * memory consumption when we receive lots 1517 * of small packets. 1518 * 1519 * Otherwise, we add a new buffer to the receive 1520 * chain. If this fails, we drop the packet and 1521 * recycle the old buffer. 1522 */ 1523 if (SIP_DECL(copy_small) != 0 && len <= MHLEN) { 1524 MGETHDR(m, M_DONTWAIT, MT_DATA); 1525 if (m == NULL) 1526 goto dropit; 1527 memcpy(mtod(m, caddr_t), 1528 mtod(rxs->rxs_mbuf, caddr_t), len); 1529 SIP_INIT_RXDESC(sc, i); 1530 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 1531 rxs->rxs_dmamap->dm_mapsize, 1532 BUS_DMASYNC_PREREAD); 1533 } else { 1534 m = rxs->rxs_mbuf; 1535 if (SIP_DECL(add_rxbuf)(sc, i) != 0) { 1536 dropit: 1537 ifp->if_ierrors++; 1538 SIP_INIT_RXDESC(sc, i); 1539 bus_dmamap_sync(sc->sc_dmat, 1540 rxs->rxs_dmamap, 0, 1541 rxs->rxs_dmamap->dm_mapsize, 1542 BUS_DMASYNC_PREREAD); 1543 continue; 1544 } 1545 } 1546 #else 1547 /* 1548 * The SiS 900's receive buffers must be 4-byte aligned. 1549 * But this means that the data after the Ethernet header 1550 * is misaligned. We must allocate a new buffer and 1551 * copy the data, shifted forward 2 bytes. 1552 */ 1553 MGETHDR(m, M_DONTWAIT, MT_DATA); 1554 if (m == NULL) { 1555 dropit: 1556 ifp->if_ierrors++; 1557 SIP_INIT_RXDESC(sc, i); 1558 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 1559 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD); 1560 continue; 1561 } 1562 if (len > (MHLEN - 2)) { 1563 MCLGET(m, M_DONTWAIT); 1564 if ((m->m_flags & M_EXT) == 0) { 1565 m_freem(m); 1566 goto dropit; 1567 } 1568 } 1569 m->m_data += 2; 1570 1571 /* 1572 * Note that we use clusters for incoming frames, so the 1573 * buffer is virtually contiguous. 1574 */ 1575 memcpy(mtod(m, caddr_t), mtod(rxs->rxs_mbuf, caddr_t), len); 1576 1577 /* Allow the receive descriptor to continue using its mbuf. */ 1578 SIP_INIT_RXDESC(sc, i); 1579 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 1580 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD); 1581 #endif /* __NO_STRICT_ALIGNMENT */ 1582 1583 ifp->if_ipackets++; 1584 m->m_flags |= M_HASFCS; 1585 m->m_pkthdr.rcvif = ifp; 1586 m->m_pkthdr.len = m->m_len = len; 1587 1588 #if NBPFILTER > 0 1589 /* 1590 * Pass this up to any BPF listeners, but only 1591 * pass if up the stack if it's for us. 1592 */ 1593 if (ifp->if_bpf) 1594 bpf_mtap(ifp->if_bpf, m); 1595 #endif /* NBPFILTER > 0 */ 1596 1597 #ifdef DP83820 1598 /* 1599 * If VLANs are enabled, VLAN packets have been unwrapped 1600 * for us. Associate the tag with the packet. 1601 */ 1602 if (sc->sc_ethercom.ec_nvlans != 0 && 1603 (extsts & EXTSTS_VPKT) != 0) { 1604 struct mbuf *vtag; 1605 1606 vtag = m_aux_add(m, AF_LINK, ETHERTYPE_VLAN); 1607 if (vtag == NULL) { 1608 printf("%s: unable to allocate VLAN tag\n", 1609 sc->sc_dev.dv_xname); 1610 m_freem(m); 1611 continue; 1612 } 1613 1614 *mtod(vtag, int *) = ntohs(extsts & EXTSTS_VTCI); 1615 vtag->m_len = sizeof(int); 1616 } 1617 1618 /* 1619 * Set the incoming checksum information for the 1620 * packet. 1621 */ 1622 if ((extsts & EXTSTS_IPPKT) != 0) { 1623 SIP_EVCNT_INCR(&sc->sc_ev_rxipsum); 1624 m->m_pkthdr.csum_flags |= M_CSUM_IPv4; 1625 if (extsts & EXTSTS_Rx_IPERR) 1626 m->m_pkthdr.csum_flags |= M_CSUM_IPv4_BAD; 1627 if (extsts & EXTSTS_TCPPKT) { 1628 SIP_EVCNT_INCR(&sc->sc_ev_rxtcpsum); 1629 m->m_pkthdr.csum_flags |= M_CSUM_TCPv4; 1630 if (extsts & EXTSTS_Rx_TCPERR) 1631 m->m_pkthdr.csum_flags |= 1632 M_CSUM_TCP_UDP_BAD; 1633 } else if (extsts & EXTSTS_UDPPKT) { 1634 SIP_EVCNT_INCR(&sc->sc_ev_rxudpsum); 1635 m->m_pkthdr.csum_flags |= M_CSUM_UDPv4; 1636 if (extsts & EXTSTS_Rx_UDPERR) 1637 m->m_pkthdr.csum_flags |= 1638 M_CSUM_TCP_UDP_BAD; 1639 } 1640 } 1641 #endif /* DP83820 */ 1642 1643 /* Pass it on. */ 1644 (*ifp->if_input)(ifp, m); 1645 } 1646 1647 /* Update the receive pointer. */ 1648 sc->sc_rxptr = i; 1649 } 1650 1651 /* 1652 * sip_tick: 1653 * 1654 * One second timer, used to tick the MII. 1655 */ 1656 void 1657 SIP_DECL(tick)(void *arg) 1658 { 1659 struct sip_softc *sc = arg; 1660 int s; 1661 1662 s = splnet(); 1663 mii_tick(&sc->sc_mii); 1664 splx(s); 1665 1666 callout_reset(&sc->sc_tick_ch, hz, SIP_DECL(tick), sc); 1667 } 1668 1669 /* 1670 * sip_reset: 1671 * 1672 * Perform a soft reset on the SiS 900. 1673 */ 1674 void 1675 SIP_DECL(reset)(struct sip_softc *sc) 1676 { 1677 bus_space_tag_t st = sc->sc_st; 1678 bus_space_handle_t sh = sc->sc_sh; 1679 int i; 1680 1681 bus_space_write_4(st, sh, SIP_CR, CR_RST); 1682 1683 for (i = 0; i < SIP_TIMEOUT; i++) { 1684 if ((bus_space_read_4(st, sh, SIP_CR) & CR_RST) == 0) 1685 break; 1686 delay(2); 1687 } 1688 1689 if (i == SIP_TIMEOUT) 1690 printf("%s: reset failed to complete\n", sc->sc_dev.dv_xname); 1691 1692 delay(1000); 1693 1694 #ifdef DP83820 1695 /* 1696 * Set the general purpose I/O bits. Do it here in case we 1697 * need to have GPIO set up to talk to the media interface. 1698 */ 1699 bus_space_write_4(st, sh, SIP_GPIOR, sc->sc_gpior); 1700 delay(1000); 1701 #endif /* DP83820 */ 1702 } 1703 1704 /* 1705 * sip_init: [ ifnet interface function ] 1706 * 1707 * Initialize the interface. Must be called at splnet(). 1708 */ 1709 int 1710 SIP_DECL(init)(struct ifnet *ifp) 1711 { 1712 struct sip_softc *sc = ifp->if_softc; 1713 bus_space_tag_t st = sc->sc_st; 1714 bus_space_handle_t sh = sc->sc_sh; 1715 struct sip_txsoft *txs; 1716 struct sip_rxsoft *rxs; 1717 struct sip_desc *sipd; 1718 u_int32_t reg; 1719 int i, error = 0; 1720 1721 /* 1722 * Cancel any pending I/O. 1723 */ 1724 SIP_DECL(stop)(ifp, 0); 1725 1726 /* 1727 * Reset the chip to a known state. 1728 */ 1729 SIP_DECL(reset)(sc); 1730 1731 #if !defined(DP83820) 1732 if (sc->sc_model->sip_vendor == PCI_VENDOR_NS && 1733 sc->sc_model->sip_product == PCI_PRODUCT_NS_DP83815) { 1734 /* 1735 * DP83815 manual, page 78: 1736 * 4.4 Recommended Registers Configuration 1737 * For optimum performance of the DP83815, version noted 1738 * as DP83815CVNG (SRR = 203h), the listed register 1739 * modifications must be followed in sequence... 1740 * 1741 * It's not clear if this should be 302h or 203h because that 1742 * chip name is listed as SRR 302h in the description of the 1743 * SRR register. However, my revision 302h DP83815 on the 1744 * Netgear FA311 purchased in 02/2001 needs these settings 1745 * to avoid tons of errors in AcceptPerfectMatch (non- 1746 * IFF_PROMISC) mode. I do not know if other revisions need 1747 * this set or not. [briggs -- 09 March 2001] 1748 * 1749 * Note that only the low-order 12 bits of 0xe4 are documented 1750 * and that this sets reserved bits in that register. 1751 */ 1752 reg = bus_space_read_4(st, sh, SIP_NS_SRR); 1753 if (reg == 0x302) { 1754 bus_space_write_4(st, sh, 0x00cc, 0x0001); 1755 bus_space_write_4(st, sh, 0x00e4, 0x189C); 1756 bus_space_write_4(st, sh, 0x00fc, 0x0000); 1757 bus_space_write_4(st, sh, 0x00f4, 0x5040); 1758 bus_space_write_4(st, sh, 0x00f8, 0x008c); 1759 } 1760 } 1761 #endif /* ! DP83820 */ 1762 1763 /* 1764 * Initialize the transmit descriptor ring. 1765 */ 1766 for (i = 0; i < SIP_NTXDESC; i++) { 1767 sipd = &sc->sc_txdescs[i]; 1768 memset(sipd, 0, sizeof(struct sip_desc)); 1769 sipd->sipd_link = htole32(SIP_CDTXADDR(sc, SIP_NEXTTX(i))); 1770 } 1771 SIP_CDTXSYNC(sc, 0, SIP_NTXDESC, 1772 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); 1773 sc->sc_txfree = SIP_NTXDESC; 1774 sc->sc_txnext = 0; 1775 1776 /* 1777 * Initialize the transmit job descriptors. 1778 */ 1779 SIMPLEQ_INIT(&sc->sc_txfreeq); 1780 SIMPLEQ_INIT(&sc->sc_txdirtyq); 1781 for (i = 0; i < SIP_TXQUEUELEN; i++) { 1782 txs = &sc->sc_txsoft[i]; 1783 txs->txs_mbuf = NULL; 1784 SIMPLEQ_INSERT_TAIL(&sc->sc_txfreeq, txs, txs_q); 1785 } 1786 1787 /* 1788 * Initialize the receive descriptor and receive job 1789 * descriptor rings. 1790 */ 1791 for (i = 0; i < SIP_NRXDESC; i++) { 1792 rxs = &sc->sc_rxsoft[i]; 1793 if (rxs->rxs_mbuf == NULL) { 1794 if ((error = SIP_DECL(add_rxbuf)(sc, i)) != 0) { 1795 printf("%s: unable to allocate or map rx " 1796 "buffer %d, error = %d\n", 1797 sc->sc_dev.dv_xname, i, error); 1798 /* 1799 * XXX Should attempt to run with fewer receive 1800 * XXX buffers instead of just failing. 1801 */ 1802 SIP_DECL(rxdrain)(sc); 1803 goto out; 1804 } 1805 } 1806 } 1807 sc->sc_rxptr = 0; 1808 1809 /* 1810 * Set the configuration register; it's already initialized 1811 * in sip_attach(). 1812 */ 1813 bus_space_write_4(st, sh, SIP_CFG, sc->sc_cfg); 1814 1815 /* 1816 * Initialize the transmit fill and drain thresholds if 1817 * we have never done so. 1818 */ 1819 if (sc->sc_tx_fill_thresh == 0) { 1820 /* 1821 * XXX This value should be tuned. This is the 1822 * minimum (32 bytes), and we may be able to 1823 * improve performance by increasing it. 1824 */ 1825 sc->sc_tx_fill_thresh = 1; 1826 } 1827 if (sc->sc_tx_drain_thresh == 0) { 1828 /* 1829 * Start at a drain threshold of 512 bytes. We will 1830 * increase it if a DMA underrun occurs. 1831 * 1832 * XXX The minimum value of this variable should be 1833 * tuned. We may be able to improve performance 1834 * by starting with a lower value. That, however, 1835 * may trash the first few outgoing packets if the 1836 * PCI bus is saturated. 1837 */ 1838 sc->sc_tx_drain_thresh = 512 / 32; 1839 } 1840 1841 /* 1842 * Initialize the prototype TXCFG register. 1843 */ 1844 sc->sc_txcfg = TXCFG_ATP | TXCFG_MXDMA_512 | 1845 (sc->sc_tx_fill_thresh << TXCFG_FLTH_SHIFT) | 1846 sc->sc_tx_drain_thresh; 1847 bus_space_write_4(st, sh, SIP_TXCFG, sc->sc_txcfg); 1848 1849 /* 1850 * Initialize the receive drain threshold if we have never 1851 * done so. 1852 */ 1853 if (sc->sc_rx_drain_thresh == 0) { 1854 /* 1855 * XXX This value should be tuned. This is set to the 1856 * maximum of 248 bytes, and we may be able to improve 1857 * performance by decreasing it (although we should never 1858 * set this value lower than 2; 14 bytes are required to 1859 * filter the packet). 1860 */ 1861 sc->sc_rx_drain_thresh = RXCFG_DRTH >> RXCFG_DRTH_SHIFT; 1862 } 1863 1864 /* 1865 * Initialize the prototype RXCFG register. 1866 */ 1867 sc->sc_rxcfg = RXCFG_MXDMA_512 | 1868 (sc->sc_rx_drain_thresh << RXCFG_DRTH_SHIFT); 1869 bus_space_write_4(st, sh, SIP_RXCFG, sc->sc_rxcfg); 1870 1871 /* Set up the receive filter. */ 1872 (*sc->sc_model->sip_variant->sipv_set_filter)(sc); 1873 1874 #ifdef DP83820 1875 /* 1876 * Initialize the VLAN/IP receive control register. 1877 * We enable checksum computation on all incoming 1878 * packets, and do not reject packets w/ bad checksums. 1879 */ 1880 reg = 0; 1881 if (ifp->if_capenable & 1882 (IFCAP_CSUM_IPv4|IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4)) 1883 reg |= VRCR_IPEN; 1884 if (sc->sc_ethercom.ec_nvlans != 0) 1885 reg |= VRCR_VTDEN|VRCR_VTREN; 1886 bus_space_write_4(st, sh, SIP_VRCR, reg); 1887 1888 /* 1889 * Initialize the VLAN/IP transmit control register. 1890 * We enable outgoing checksum computation on a 1891 * per-packet basis. 1892 */ 1893 reg = 0; 1894 if (ifp->if_capenable & 1895 (IFCAP_CSUM_IPv4|IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4)) 1896 reg |= VTCR_PPCHK; 1897 if (sc->sc_ethercom.ec_nvlans != 0) 1898 reg |= VTCR_VPPTI; 1899 bus_space_write_4(st, sh, SIP_VTCR, reg); 1900 1901 /* 1902 * If we're using VLANs, initialize the VLAN data register. 1903 * To understand why we bswap the VLAN Ethertype, see section 1904 * 4.2.36 of the DP83820 manual. 1905 */ 1906 if (sc->sc_ethercom.ec_nvlans != 0) 1907 bus_space_write_4(st, sh, SIP_VDR, bswap16(ETHERTYPE_VLAN)); 1908 #endif /* DP83820 */ 1909 1910 /* 1911 * Give the transmit and receive rings to the chip. 1912 */ 1913 bus_space_write_4(st, sh, SIP_TXDP, SIP_CDTXADDR(sc, sc->sc_txnext)); 1914 bus_space_write_4(st, sh, SIP_RXDP, SIP_CDRXADDR(sc, sc->sc_rxptr)); 1915 1916 /* 1917 * Initialize the interrupt mask. 1918 */ 1919 sc->sc_imr = ISR_DPERR|ISR_SSERR|ISR_RMABT|ISR_RTABT|ISR_RXSOVR| 1920 ISR_TXURN|ISR_TXDESC|ISR_RXORN|ISR_RXIDLE|ISR_RXDESC; 1921 bus_space_write_4(st, sh, SIP_IMR, sc->sc_imr); 1922 1923 /* 1924 * Set the current media. Do this after initializing the prototype 1925 * IMR, since sip_mii_statchg() modifies the IMR for 802.3x flow 1926 * control. 1927 */ 1928 mii_mediachg(&sc->sc_mii); 1929 1930 /* 1931 * Enable interrupts. 1932 */ 1933 bus_space_write_4(st, sh, SIP_IER, IER_IE); 1934 1935 /* 1936 * Start the transmit and receive processes. 1937 */ 1938 bus_space_write_4(st, sh, SIP_CR, CR_RXE | CR_TXE); 1939 1940 /* 1941 * Start the one second MII clock. 1942 */ 1943 callout_reset(&sc->sc_tick_ch, hz, SIP_DECL(tick), sc); 1944 1945 /* 1946 * ...all done! 1947 */ 1948 ifp->if_flags |= IFF_RUNNING; 1949 ifp->if_flags &= ~IFF_OACTIVE; 1950 1951 out: 1952 if (error) 1953 printf("%s: interface not running\n", sc->sc_dev.dv_xname); 1954 return (error); 1955 } 1956 1957 /* 1958 * sip_drain: 1959 * 1960 * Drain the receive queue. 1961 */ 1962 void 1963 SIP_DECL(rxdrain)(struct sip_softc *sc) 1964 { 1965 struct sip_rxsoft *rxs; 1966 int i; 1967 1968 for (i = 0; i < SIP_NRXDESC; i++) { 1969 rxs = &sc->sc_rxsoft[i]; 1970 if (rxs->rxs_mbuf != NULL) { 1971 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap); 1972 m_freem(rxs->rxs_mbuf); 1973 rxs->rxs_mbuf = NULL; 1974 } 1975 } 1976 } 1977 1978 /* 1979 * sip_stop: [ ifnet interface function ] 1980 * 1981 * Stop transmission on the interface. 1982 */ 1983 void 1984 SIP_DECL(stop)(struct ifnet *ifp, int disable) 1985 { 1986 struct sip_softc *sc = ifp->if_softc; 1987 bus_space_tag_t st = sc->sc_st; 1988 bus_space_handle_t sh = sc->sc_sh; 1989 struct sip_txsoft *txs; 1990 u_int32_t cmdsts = 0; /* DEBUG */ 1991 1992 /* 1993 * Stop the one second clock. 1994 */ 1995 callout_stop(&sc->sc_tick_ch); 1996 1997 /* Down the MII. */ 1998 mii_down(&sc->sc_mii); 1999 2000 /* 2001 * Disable interrupts. 2002 */ 2003 bus_space_write_4(st, sh, SIP_IER, 0); 2004 2005 /* 2006 * Stop receiver and transmitter. 2007 */ 2008 bus_space_write_4(st, sh, SIP_CR, CR_RXD | CR_TXD); 2009 2010 /* 2011 * Release any queued transmit buffers. 2012 */ 2013 while ((txs = SIMPLEQ_FIRST(&sc->sc_txdirtyq)) != NULL) { 2014 if ((ifp->if_flags & IFF_DEBUG) != 0 && 2015 SIMPLEQ_NEXT(txs, txs_q) == NULL && 2016 (le32toh(sc->sc_txdescs[txs->txs_lastdesc].sipd_cmdsts) & 2017 CMDSTS_INTR) == 0) 2018 printf("%s: sip_stop: last descriptor does not " 2019 "have INTR bit set\n", sc->sc_dev.dv_xname); 2020 SIMPLEQ_REMOVE_HEAD(&sc->sc_txdirtyq, txs, txs_q); 2021 #ifdef DIAGNOSTIC 2022 if (txs->txs_mbuf == NULL) { 2023 printf("%s: dirty txsoft with no mbuf chain\n", 2024 sc->sc_dev.dv_xname); 2025 panic("sip_stop"); 2026 } 2027 #endif 2028 cmdsts |= /* DEBUG */ 2029 le32toh(sc->sc_txdescs[txs->txs_lastdesc].sipd_cmdsts); 2030 bus_dmamap_unload(sc->sc_dmat, txs->txs_dmamap); 2031 m_freem(txs->txs_mbuf); 2032 txs->txs_mbuf = NULL; 2033 SIMPLEQ_INSERT_TAIL(&sc->sc_txfreeq, txs, txs_q); 2034 } 2035 2036 if (disable) 2037 SIP_DECL(rxdrain)(sc); 2038 2039 /* 2040 * Mark the interface down and cancel the watchdog timer. 2041 */ 2042 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); 2043 ifp->if_timer = 0; 2044 2045 if ((ifp->if_flags & IFF_DEBUG) != 0 && 2046 (cmdsts & CMDSTS_INTR) == 0 && sc->sc_txfree != SIP_NTXDESC) 2047 printf("%s: sip_stop: no INTR bits set in dirty tx " 2048 "descriptors\n", sc->sc_dev.dv_xname); 2049 } 2050 2051 /* 2052 * sip_read_eeprom: 2053 * 2054 * Read data from the serial EEPROM. 2055 */ 2056 void 2057 SIP_DECL(read_eeprom)(struct sip_softc *sc, int word, int wordcnt, 2058 u_int16_t *data) 2059 { 2060 bus_space_tag_t st = sc->sc_st; 2061 bus_space_handle_t sh = sc->sc_sh; 2062 u_int16_t reg; 2063 int i, x; 2064 2065 for (i = 0; i < wordcnt; i++) { 2066 /* Send CHIP SELECT. */ 2067 reg = EROMAR_EECS; 2068 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2069 2070 /* Shift in the READ opcode. */ 2071 for (x = 3; x > 0; x--) { 2072 if (SIP_EEPROM_OPC_READ & (1 << (x - 1))) 2073 reg |= EROMAR_EEDI; 2074 else 2075 reg &= ~EROMAR_EEDI; 2076 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2077 bus_space_write_4(st, sh, SIP_EROMAR, 2078 reg | EROMAR_EESK); 2079 delay(4); 2080 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2081 delay(4); 2082 } 2083 2084 /* Shift in address. */ 2085 for (x = 6; x > 0; x--) { 2086 if ((word + i) & (1 << (x - 1))) 2087 reg |= EROMAR_EEDI; 2088 else 2089 reg &= ~EROMAR_EEDI; 2090 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2091 bus_space_write_4(st, sh, SIP_EROMAR, 2092 reg | EROMAR_EESK); 2093 delay(4); 2094 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2095 delay(4); 2096 } 2097 2098 /* Shift out data. */ 2099 reg = EROMAR_EECS; 2100 data[i] = 0; 2101 for (x = 16; x > 0; x--) { 2102 bus_space_write_4(st, sh, SIP_EROMAR, 2103 reg | EROMAR_EESK); 2104 delay(4); 2105 if (bus_space_read_4(st, sh, SIP_EROMAR) & EROMAR_EEDO) 2106 data[i] |= (1 << (x - 1)); 2107 bus_space_write_4(st, sh, SIP_EROMAR, reg); 2108 delay(4); 2109 } 2110 2111 /* Clear CHIP SELECT. */ 2112 bus_space_write_4(st, sh, SIP_EROMAR, 0); 2113 delay(4); 2114 } 2115 } 2116 2117 /* 2118 * sip_add_rxbuf: 2119 * 2120 * Add a receive buffer to the indicated descriptor. 2121 */ 2122 int 2123 SIP_DECL(add_rxbuf)(struct sip_softc *sc, int idx) 2124 { 2125 struct sip_rxsoft *rxs = &sc->sc_rxsoft[idx]; 2126 struct mbuf *m; 2127 int error; 2128 2129 MGETHDR(m, M_DONTWAIT, MT_DATA); 2130 if (m == NULL) 2131 return (ENOBUFS); 2132 2133 MCLGET(m, M_DONTWAIT); 2134 if ((m->m_flags & M_EXT) == 0) { 2135 m_freem(m); 2136 return (ENOBUFS); 2137 } 2138 2139 if (rxs->rxs_mbuf != NULL) 2140 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap); 2141 2142 rxs->rxs_mbuf = m; 2143 2144 error = bus_dmamap_load(sc->sc_dmat, rxs->rxs_dmamap, 2145 m->m_ext.ext_buf, m->m_ext.ext_size, NULL, BUS_DMA_NOWAIT); 2146 if (error) { 2147 printf("%s: can't load rx DMA map %d, error = %d\n", 2148 sc->sc_dev.dv_xname, idx, error); 2149 panic("sip_add_rxbuf"); /* XXX */ 2150 } 2151 2152 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 2153 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD); 2154 2155 SIP_INIT_RXDESC(sc, idx); 2156 2157 return (0); 2158 } 2159 2160 #if !defined(DP83820) 2161 /* 2162 * sip_sis900_set_filter: 2163 * 2164 * Set up the receive filter. 2165 */ 2166 void 2167 SIP_DECL(sis900_set_filter)(struct sip_softc *sc) 2168 { 2169 bus_space_tag_t st = sc->sc_st; 2170 bus_space_handle_t sh = sc->sc_sh; 2171 struct ethercom *ec = &sc->sc_ethercom; 2172 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 2173 struct ether_multi *enm; 2174 u_int8_t *cp; 2175 struct ether_multistep step; 2176 u_int32_t crc, mchash[8]; 2177 2178 /* 2179 * Initialize the prototype RFCR. 2180 */ 2181 sc->sc_rfcr = RFCR_RFEN; 2182 if (ifp->if_flags & IFF_BROADCAST) 2183 sc->sc_rfcr |= RFCR_AAB; 2184 if (ifp->if_flags & IFF_PROMISC) { 2185 sc->sc_rfcr |= RFCR_AAP; 2186 goto allmulti; 2187 } 2188 2189 /* 2190 * Set up the multicast address filter by passing all multicast 2191 * addresses through a CRC generator, and then using the high-order 2192 * 6 bits as an index into the 128 bit multicast hash table (only 2193 * the lower 16 bits of each 32 bit multicast hash register are 2194 * valid). The high order bits select the register, while the 2195 * rest of the bits select the bit within the register. 2196 */ 2197 2198 memset(mchash, 0, sizeof(mchash)); 2199 2200 ETHER_FIRST_MULTI(step, ec, enm); 2201 while (enm != NULL) { 2202 if (bcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) { 2203 /* 2204 * We must listen to a range of multicast addresses. 2205 * For now, just accept all multicasts, rather than 2206 * trying to set only those filter bits needed to match 2207 * the range. (At this time, the only use of address 2208 * ranges is for IP multicast routing, for which the 2209 * range is big enough to require all bits set.) 2210 */ 2211 goto allmulti; 2212 } 2213 2214 crc = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN); 2215 2216 /* Just want the 7 most significant bits. */ 2217 crc >>= 25; 2218 2219 /* Set the corresponding bit in the hash table. */ 2220 mchash[crc >> 4] |= 1 << (crc & 0xf); 2221 2222 ETHER_NEXT_MULTI(step, enm); 2223 } 2224 2225 ifp->if_flags &= ~IFF_ALLMULTI; 2226 goto setit; 2227 2228 allmulti: 2229 ifp->if_flags |= IFF_ALLMULTI; 2230 sc->sc_rfcr |= RFCR_AAM; 2231 2232 setit: 2233 #define FILTER_EMIT(addr, data) \ 2234 bus_space_write_4(st, sh, SIP_RFCR, (addr)); \ 2235 delay(1); \ 2236 bus_space_write_4(st, sh, SIP_RFDR, (data)); \ 2237 delay(1) 2238 2239 /* 2240 * Disable receive filter, and program the node address. 2241 */ 2242 cp = LLADDR(ifp->if_sadl); 2243 FILTER_EMIT(RFCR_RFADDR_NODE0, (cp[1] << 8) | cp[0]); 2244 FILTER_EMIT(RFCR_RFADDR_NODE2, (cp[3] << 8) | cp[2]); 2245 FILTER_EMIT(RFCR_RFADDR_NODE4, (cp[5] << 8) | cp[4]); 2246 2247 if ((ifp->if_flags & IFF_ALLMULTI) == 0) { 2248 /* 2249 * Program the multicast hash table. 2250 */ 2251 FILTER_EMIT(RFCR_RFADDR_MC0, mchash[0]); 2252 FILTER_EMIT(RFCR_RFADDR_MC1, mchash[1]); 2253 FILTER_EMIT(RFCR_RFADDR_MC2, mchash[2]); 2254 FILTER_EMIT(RFCR_RFADDR_MC3, mchash[3]); 2255 FILTER_EMIT(RFCR_RFADDR_MC4, mchash[4]); 2256 FILTER_EMIT(RFCR_RFADDR_MC5, mchash[5]); 2257 FILTER_EMIT(RFCR_RFADDR_MC6, mchash[6]); 2258 FILTER_EMIT(RFCR_RFADDR_MC7, mchash[7]); 2259 } 2260 #undef FILTER_EMIT 2261 2262 /* 2263 * Re-enable the receiver filter. 2264 */ 2265 bus_space_write_4(st, sh, SIP_RFCR, sc->sc_rfcr); 2266 } 2267 #endif /* ! DP83820 */ 2268 2269 /* 2270 * sip_dp83815_set_filter: 2271 * 2272 * Set up the receive filter. 2273 */ 2274 void 2275 SIP_DECL(dp83815_set_filter)(struct sip_softc *sc) 2276 { 2277 bus_space_tag_t st = sc->sc_st; 2278 bus_space_handle_t sh = sc->sc_sh; 2279 struct ethercom *ec = &sc->sc_ethercom; 2280 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 2281 struct ether_multi *enm; 2282 u_int8_t *cp; 2283 struct ether_multistep step; 2284 u_int32_t crc, hash, slot, bit; 2285 #ifdef DP83820 2286 #define MCHASH_NWORDS 128 2287 #else 2288 #define MCHASH_NWORDS 32 2289 #endif /* DP83820 */ 2290 u_int16_t mchash[MCHASH_NWORDS]; 2291 int i; 2292 2293 /* 2294 * Initialize the prototype RFCR. 2295 * Enable the receive filter, and accept on 2296 * Perfect (destination address) Match 2297 * If IFF_BROADCAST, also accept all broadcast packets. 2298 * If IFF_PROMISC, accept all unicast packets (and later, set 2299 * IFF_ALLMULTI and accept all multicast, too). 2300 */ 2301 sc->sc_rfcr = RFCR_RFEN | RFCR_APM; 2302 if (ifp->if_flags & IFF_BROADCAST) 2303 sc->sc_rfcr |= RFCR_AAB; 2304 if (ifp->if_flags & IFF_PROMISC) { 2305 sc->sc_rfcr |= RFCR_AAP; 2306 goto allmulti; 2307 } 2308 2309 #ifdef DP83820 2310 /* 2311 * Set up the DP83820 multicast address filter by passing all multicast 2312 * addresses through a CRC generator, and then using the high-order 2313 * 11 bits as an index into the 2048 bit multicast hash table. The 2314 * high-order 7 bits select the slot, while the low-order 4 bits 2315 * select the bit within the slot. Note that only the low 16-bits 2316 * of each filter word are used, and there are 128 filter words. 2317 */ 2318 #else 2319 /* 2320 * Set up the DP83815 multicast address filter by passing all multicast 2321 * addresses through a CRC generator, and then using the high-order 2322 * 9 bits as an index into the 512 bit multicast hash table. The 2323 * high-order 5 bits select the slot, while the low-order 4 bits 2324 * select the bit within the slot. Note that only the low 16-bits 2325 * of each filter word are used, and there are 32 filter words. 2326 */ 2327 #endif /* DP83820 */ 2328 2329 memset(mchash, 0, sizeof(mchash)); 2330 2331 ifp->if_flags &= ~IFF_ALLMULTI; 2332 ETHER_FIRST_MULTI(step, ec, enm); 2333 if (enm != NULL) { 2334 while (enm != NULL) { 2335 if (memcmp(enm->enm_addrlo, enm->enm_addrhi, 2336 ETHER_ADDR_LEN)) { 2337 /* 2338 * We must listen to a range of multicast addresses. 2339 * For now, just accept all multicasts, rather than 2340 * trying to set only those filter bits needed to match 2341 * the range. (At this time, the only use of address 2342 * ranges is for IP multicast routing, for which the 2343 * range is big enough to require all bits set.) 2344 */ 2345 goto allmulti; 2346 } 2347 2348 #ifdef DP83820 2349 crc = ether_crc32_be(enm->enm_addrlo, ETHER_ADDR_LEN); 2350 2351 /* Just want the 11 most significant bits. */ 2352 hash = crc >> 21; 2353 #else 2354 crc = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN); 2355 2356 /* Just want the 9 most significant bits. */ 2357 hash = crc >> 23; 2358 #endif /* DP83820 */ 2359 slot = hash >> 4; 2360 bit = hash & 0xf; 2361 2362 /* Set the corresponding bit in the hash table. */ 2363 mchash[slot] |= 1 << bit; 2364 2365 ETHER_NEXT_MULTI(step, enm); 2366 } 2367 2368 sc->sc_rfcr |= RFCR_MHEN; 2369 } 2370 goto setit; 2371 2372 allmulti: 2373 ifp->if_flags |= IFF_ALLMULTI; 2374 sc->sc_rfcr |= RFCR_AAM; 2375 2376 setit: 2377 #define FILTER_EMIT(addr, data) \ 2378 bus_space_write_4(st, sh, SIP_RFCR, (addr)); \ 2379 delay(1); \ 2380 bus_space_write_4(st, sh, SIP_RFDR, (data)); \ 2381 delay(1); 2382 2383 /* 2384 * Disable receive filter, and program the node address. 2385 */ 2386 cp = LLADDR(ifp->if_sadl); 2387 FILTER_EMIT(RFCR_NS_RFADDR_PMATCH0, (cp[1] << 8) | cp[0]); 2388 FILTER_EMIT(RFCR_NS_RFADDR_PMATCH2, (cp[3] << 8) | cp[2]); 2389 FILTER_EMIT(RFCR_NS_RFADDR_PMATCH4, (cp[5] << 8) | cp[4]); 2390 2391 if ((ifp->if_flags & IFF_ALLMULTI) == 0) { 2392 /* 2393 * Program the multicast hash table. 2394 */ 2395 for (i = 0; i < MCHASH_NWORDS; i++) 2396 FILTER_EMIT(RFCR_NS_RFADDR_FILTMEM + (i * 2), 2397 mchash[i]); 2398 } 2399 #undef FILTER_EMIT 2400 #undef MCHASH_NWORDS 2401 2402 /* 2403 * Re-enable the receiver filter. 2404 */ 2405 bus_space_write_4(st, sh, SIP_RFCR, sc->sc_rfcr); 2406 } 2407 2408 #if defined(DP83820) 2409 /* 2410 * sip_dp83820_mii_readreg: [mii interface function] 2411 * 2412 * Read a PHY register on the MII of the DP83820. 2413 */ 2414 int 2415 SIP_DECL(dp83820_mii_readreg)(struct device *self, int phy, int reg) 2416 { 2417 2418 return (mii_bitbang_readreg(self, &SIP_DECL(dp83820_mii_bitbang_ops), 2419 phy, reg)); 2420 } 2421 2422 /* 2423 * sip_dp83820_mii_writereg: [mii interface function] 2424 * 2425 * Write a PHY register on the MII of the DP83820. 2426 */ 2427 void 2428 SIP_DECL(dp83820_mii_writereg)(struct device *self, int phy, int reg, int val) 2429 { 2430 2431 mii_bitbang_writereg(self, &SIP_DECL(dp83820_mii_bitbang_ops), 2432 phy, reg, val); 2433 } 2434 2435 /* 2436 * sip_dp83815_mii_statchg: [mii interface function] 2437 * 2438 * Callback from MII layer when media changes. 2439 */ 2440 void 2441 SIP_DECL(dp83820_mii_statchg)(struct device *self) 2442 { 2443 struct sip_softc *sc = (struct sip_softc *) self; 2444 u_int32_t cfg; 2445 2446 /* 2447 * Update TXCFG for full-duplex operation. 2448 */ 2449 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0) 2450 sc->sc_txcfg |= (TXCFG_CSI | TXCFG_HBI); 2451 else 2452 sc->sc_txcfg &= ~(TXCFG_CSI | TXCFG_HBI); 2453 2454 /* 2455 * Update RXCFG for full-duplex or loopback. 2456 */ 2457 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0 || 2458 IFM_SUBTYPE(sc->sc_mii.mii_media_active) == IFM_LOOP) 2459 sc->sc_rxcfg |= RXCFG_ATX; 2460 else 2461 sc->sc_rxcfg &= ~RXCFG_ATX; 2462 2463 /* 2464 * Update CFG for MII/GMII. 2465 */ 2466 if (sc->sc_ethercom.ec_if.if_baudrate == IF_Mbps(1000)) 2467 cfg = sc->sc_cfg | CFG_MODE_1000; 2468 else 2469 cfg = sc->sc_cfg; 2470 2471 /* 2472 * XXX 802.3x flow control. 2473 */ 2474 2475 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_CFG, cfg); 2476 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_TXCFG, sc->sc_txcfg); 2477 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_RXCFG, sc->sc_rxcfg); 2478 } 2479 2480 /* 2481 * sip_dp83820_mii_bitbang_read: [mii bit-bang interface function] 2482 * 2483 * Read the MII serial port for the MII bit-bang module. 2484 */ 2485 u_int32_t 2486 SIP_DECL(dp83820_mii_bitbang_read)(struct device *self) 2487 { 2488 struct sip_softc *sc = (void *) self; 2489 2490 return (bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_EROMAR)); 2491 } 2492 2493 /* 2494 * sip_dp83820_mii_bitbang_write: [mii big-bang interface function] 2495 * 2496 * Write the MII serial port for the MII bit-bang module. 2497 */ 2498 void 2499 SIP_DECL(dp83820_mii_bitbang_write)(struct device *self, u_int32_t val) 2500 { 2501 struct sip_softc *sc = (void *) self; 2502 2503 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_EROMAR, val); 2504 } 2505 #else /* ! DP83820 */ 2506 /* 2507 * sip_sis900_mii_readreg: [mii interface function] 2508 * 2509 * Read a PHY register on the MII. 2510 */ 2511 int 2512 SIP_DECL(sis900_mii_readreg)(struct device *self, int phy, int reg) 2513 { 2514 struct sip_softc *sc = (struct sip_softc *) self; 2515 u_int32_t enphy; 2516 2517 /* 2518 * The SiS 900 has only an internal PHY on the MII. Only allow 2519 * MII address 0. 2520 */ 2521 if (sc->sc_model->sip_product == PCI_PRODUCT_SIS_900 && phy != 0) 2522 return (0); 2523 2524 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_ENPHY, 2525 (phy << ENPHY_PHYADDR_SHIFT) | (reg << ENPHY_REGADDR_SHIFT) | 2526 ENPHY_RWCMD | ENPHY_ACCESS); 2527 do { 2528 enphy = bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_ENPHY); 2529 } while (enphy & ENPHY_ACCESS); 2530 return ((enphy & ENPHY_PHYDATA) >> ENPHY_DATA_SHIFT); 2531 } 2532 2533 /* 2534 * sip_sis900_mii_writereg: [mii interface function] 2535 * 2536 * Write a PHY register on the MII. 2537 */ 2538 void 2539 SIP_DECL(sis900_mii_writereg)(struct device *self, int phy, int reg, int val) 2540 { 2541 struct sip_softc *sc = (struct sip_softc *) self; 2542 u_int32_t enphy; 2543 2544 /* 2545 * The SiS 900 has only an internal PHY on the MII. Only allow 2546 * MII address 0. 2547 */ 2548 if (sc->sc_model->sip_product == PCI_PRODUCT_SIS_900 && phy != 0) 2549 return; 2550 2551 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_ENPHY, 2552 (val << ENPHY_DATA_SHIFT) | (phy << ENPHY_PHYADDR_SHIFT) | 2553 (reg << ENPHY_REGADDR_SHIFT) | ENPHY_ACCESS); 2554 do { 2555 enphy = bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_ENPHY); 2556 } while (enphy & ENPHY_ACCESS); 2557 } 2558 2559 /* 2560 * sip_sis900_mii_statchg: [mii interface function] 2561 * 2562 * Callback from MII layer when media changes. 2563 */ 2564 void 2565 SIP_DECL(sis900_mii_statchg)(struct device *self) 2566 { 2567 struct sip_softc *sc = (struct sip_softc *) self; 2568 u_int32_t flowctl; 2569 2570 /* 2571 * Update TXCFG for full-duplex operation. 2572 */ 2573 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0) 2574 sc->sc_txcfg |= (TXCFG_CSI | TXCFG_HBI); 2575 else 2576 sc->sc_txcfg &= ~(TXCFG_CSI | TXCFG_HBI); 2577 2578 /* 2579 * Update RXCFG for full-duplex or loopback. 2580 */ 2581 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0 || 2582 IFM_SUBTYPE(sc->sc_mii.mii_media_active) == IFM_LOOP) 2583 sc->sc_rxcfg |= RXCFG_ATX; 2584 else 2585 sc->sc_rxcfg &= ~RXCFG_ATX; 2586 2587 /* 2588 * Update IMR for use of 802.3x flow control. 2589 */ 2590 if ((sc->sc_mii.mii_media_active & IFM_FLOW) != 0) { 2591 sc->sc_imr |= (ISR_PAUSE_END|ISR_PAUSE_ST); 2592 flowctl = FLOWCTL_FLOWEN; 2593 } else { 2594 sc->sc_imr &= ~(ISR_PAUSE_END|ISR_PAUSE_ST); 2595 flowctl = 0; 2596 } 2597 2598 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_TXCFG, sc->sc_txcfg); 2599 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_RXCFG, sc->sc_rxcfg); 2600 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_IMR, sc->sc_imr); 2601 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_FLOWCTL, flowctl); 2602 } 2603 2604 /* 2605 * sip_dp83815_mii_readreg: [mii interface function] 2606 * 2607 * Read a PHY register on the MII. 2608 */ 2609 int 2610 SIP_DECL(dp83815_mii_readreg)(struct device *self, int phy, int reg) 2611 { 2612 struct sip_softc *sc = (struct sip_softc *) self; 2613 u_int32_t val; 2614 2615 /* 2616 * The DP83815 only has an internal PHY. Only allow 2617 * MII address 0. 2618 */ 2619 if (phy != 0) 2620 return (0); 2621 2622 /* 2623 * Apparently, after a reset, the DP83815 can take a while 2624 * to respond. During this recovery period, the BMSR returns 2625 * a value of 0. Catch this -- it's not supposed to happen 2626 * (the BMSR has some hardcoded-to-1 bits), and wait for the 2627 * PHY to come back to life. 2628 * 2629 * This works out because the BMSR is the first register 2630 * read during the PHY probe process. 2631 */ 2632 do { 2633 val = bus_space_read_4(sc->sc_st, sc->sc_sh, SIP_NS_PHY(reg)); 2634 } while (reg == MII_BMSR && val == 0); 2635 2636 return (val & 0xffff); 2637 } 2638 2639 /* 2640 * sip_dp83815_mii_writereg: [mii interface function] 2641 * 2642 * Write a PHY register to the MII. 2643 */ 2644 void 2645 SIP_DECL(dp83815_mii_writereg)(struct device *self, int phy, int reg, int val) 2646 { 2647 struct sip_softc *sc = (struct sip_softc *) self; 2648 2649 /* 2650 * The DP83815 only has an internal PHY. Only allow 2651 * MII address 0. 2652 */ 2653 if (phy != 0) 2654 return; 2655 2656 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_NS_PHY(reg), val); 2657 } 2658 2659 /* 2660 * sip_dp83815_mii_statchg: [mii interface function] 2661 * 2662 * Callback from MII layer when media changes. 2663 */ 2664 void 2665 SIP_DECL(dp83815_mii_statchg)(struct device *self) 2666 { 2667 struct sip_softc *sc = (struct sip_softc *) self; 2668 2669 /* 2670 * Update TXCFG for full-duplex operation. 2671 */ 2672 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0) 2673 sc->sc_txcfg |= (TXCFG_CSI | TXCFG_HBI); 2674 else 2675 sc->sc_txcfg &= ~(TXCFG_CSI | TXCFG_HBI); 2676 2677 /* 2678 * Update RXCFG for full-duplex or loopback. 2679 */ 2680 if ((sc->sc_mii.mii_media_active & IFM_FDX) != 0 || 2681 IFM_SUBTYPE(sc->sc_mii.mii_media_active) == IFM_LOOP) 2682 sc->sc_rxcfg |= RXCFG_ATX; 2683 else 2684 sc->sc_rxcfg &= ~RXCFG_ATX; 2685 2686 /* 2687 * XXX 802.3x flow control. 2688 */ 2689 2690 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_TXCFG, sc->sc_txcfg); 2691 bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_RXCFG, sc->sc_rxcfg); 2692 } 2693 #endif /* DP83820 */ 2694 2695 #if defined(DP83820) 2696 void 2697 SIP_DECL(dp83820_read_macaddr)(struct sip_softc *sc, u_int8_t *enaddr) 2698 { 2699 u_int16_t eeprom_data[SIP_DP83820_EEPROM_LENGTH / 2]; 2700 u_int8_t cksum, *e, match; 2701 int i; 2702 2703 /* 2704 * EEPROM data format for the DP83820 can be found in 2705 * the DP83820 manual, section 4.2.4. 2706 */ 2707 2708 SIP_DECL(read_eeprom)(sc, 0, 2709 sizeof(eeprom_data) / sizeof(eeprom_data[0]), eeprom_data); 2710 2711 match = eeprom_data[SIP_DP83820_EEPROM_CHECKSUM / 2] >> 8; 2712 match = ~(match - 1); 2713 2714 cksum = 0x55; 2715 e = (u_int8_t *) eeprom_data; 2716 for (i = 0; i < SIP_DP83820_EEPROM_CHECKSUM; i++) 2717 cksum += *e++; 2718 2719 if (cksum != match) 2720 printf("%s: Checksum (%x) mismatch (%x)", 2721 sc->sc_dev.dv_xname, cksum, match); 2722 2723 enaddr[0] = eeprom_data[SIP_DP83820_EEPROM_PMATCH2 / 2] & 0xff; 2724 enaddr[1] = eeprom_data[SIP_DP83820_EEPROM_PMATCH2 / 2] >> 8; 2725 enaddr[2] = eeprom_data[SIP_DP83820_EEPROM_PMATCH1 / 2] & 0xff; 2726 enaddr[3] = eeprom_data[SIP_DP83820_EEPROM_PMATCH1 / 2] >> 8; 2727 enaddr[4] = eeprom_data[SIP_DP83820_EEPROM_PMATCH0 / 2] & 0xff; 2728 enaddr[5] = eeprom_data[SIP_DP83820_EEPROM_PMATCH0 / 2] >> 8; 2729 2730 /* Get the GPIOR bits. */ 2731 sc->sc_gpior = eeprom_data[0x04]; 2732 2733 /* Get various CFG related bits. */ 2734 if ((eeprom_data[0x05] >> 0) & 1) 2735 sc->sc_cfg |= CFG_EXT_125; 2736 if ((eeprom_data[0x05] >> 9) & 1) 2737 sc->sc_cfg |= CFG_TBI_EN; 2738 } 2739 #else /* ! DP83820 */ 2740 void 2741 SIP_DECL(sis900_read_macaddr)(struct sip_softc *sc, u_int8_t *enaddr) 2742 { 2743 u_int16_t myea[ETHER_ADDR_LEN / 2]; 2744 2745 SIP_DECL(read_eeprom)(sc, SIP_EEPROM_ETHERNET_ID0 >> 1, 2746 sizeof(myea) / sizeof(myea[0]), myea); 2747 2748 enaddr[0] = myea[0] & 0xff; 2749 enaddr[1] = myea[0] >> 8; 2750 enaddr[2] = myea[1] & 0xff; 2751 enaddr[3] = myea[1] >> 8; 2752 enaddr[4] = myea[2] & 0xff; 2753 enaddr[5] = myea[2] >> 8; 2754 } 2755 2756 /* Table and macro to bit-reverse an octet. */ 2757 static const u_int8_t bbr4[] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; 2758 #define bbr(v) ((bbr4[(v)&0xf] << 4) | bbr4[((v)>>4) & 0xf]) 2759 2760 void 2761 SIP_DECL(dp83815_read_macaddr)(struct sip_softc *sc, u_int8_t *enaddr) 2762 { 2763 u_int16_t eeprom_data[SIP_DP83815_EEPROM_LENGTH / 2], *ea; 2764 u_int8_t cksum, *e, match; 2765 int i; 2766 2767 SIP_DECL(read_eeprom)(sc, 0, sizeof(eeprom_data) / 2768 sizeof(eeprom_data[0]), eeprom_data); 2769 2770 match = eeprom_data[SIP_DP83815_EEPROM_CHECKSUM/2] >> 8; 2771 match = ~(match - 1); 2772 2773 cksum = 0x55; 2774 e = (u_int8_t *) eeprom_data; 2775 for (i=0 ; i<SIP_DP83815_EEPROM_CHECKSUM ; i++) { 2776 cksum += *e++; 2777 } 2778 if (cksum != match) { 2779 printf("%s: Checksum (%x) mismatch (%x)", 2780 sc->sc_dev.dv_xname, cksum, match); 2781 } 2782 2783 /* 2784 * Unrolled because it makes slightly more sense this way. 2785 * The DP83815 stores the MAC address in bit 0 of word 6 2786 * through bit 15 of word 8. 2787 */ 2788 ea = &eeprom_data[6]; 2789 enaddr[0] = ((*ea & 0x1) << 7); 2790 ea++; 2791 enaddr[0] |= ((*ea & 0xFE00) >> 9); 2792 enaddr[1] = ((*ea & 0x1FE) >> 1); 2793 enaddr[2] = ((*ea & 0x1) << 7); 2794 ea++; 2795 enaddr[2] |= ((*ea & 0xFE00) >> 9); 2796 enaddr[3] = ((*ea & 0x1FE) >> 1); 2797 enaddr[4] = ((*ea & 0x1) << 7); 2798 ea++; 2799 enaddr[4] |= ((*ea & 0xFE00) >> 9); 2800 enaddr[5] = ((*ea & 0x1FE) >> 1); 2801 2802 /* 2803 * In case that's not weird enough, we also need to reverse 2804 * the bits in each byte. This all actually makes more sense 2805 * if you think about the EEPROM storage as an array of bits 2806 * being shifted into bytes, but that's not how we're looking 2807 * at it here... 2808 */ 2809 for (i = 0; i < 6 ;i++) 2810 enaddr[i] = bbr(enaddr[i]); 2811 } 2812 #endif /* DP83820 */ 2813 2814 /* 2815 * sip_mediastatus: [ifmedia interface function] 2816 * 2817 * Get the current interface media status. 2818 */ 2819 void 2820 SIP_DECL(mediastatus)(struct ifnet *ifp, struct ifmediareq *ifmr) 2821 { 2822 struct sip_softc *sc = ifp->if_softc; 2823 2824 mii_pollstat(&sc->sc_mii); 2825 ifmr->ifm_status = sc->sc_mii.mii_media_status; 2826 ifmr->ifm_active = sc->sc_mii.mii_media_active; 2827 } 2828 2829 /* 2830 * sip_mediachange: [ifmedia interface function] 2831 * 2832 * Set hardware to newly-selected media. 2833 */ 2834 int 2835 SIP_DECL(mediachange)(struct ifnet *ifp) 2836 { 2837 struct sip_softc *sc = ifp->if_softc; 2838 2839 if (ifp->if_flags & IFF_UP) 2840 mii_mediachg(&sc->sc_mii); 2841 return (0); 2842 } 2843