1 /* $NetBSD: if_stge.c,v 1.32 2005/12/11 12:22:49 christos 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 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /* 33 * Device driver for the Sundance Tech. TC9021 10/100/1000 34 * Ethernet controller. 35 */ 36 37 #include <sys/cdefs.h> 38 __FBSDID("$FreeBSD$"); 39 40 #ifdef HAVE_KERNEL_OPTION_HEADERS 41 #include "opt_device_polling.h" 42 #endif 43 44 #include <sys/param.h> 45 #include <sys/systm.h> 46 #include <sys/endian.h> 47 #include <sys/mbuf.h> 48 #include <sys/malloc.h> 49 #include <sys/kernel.h> 50 #include <sys/module.h> 51 #include <sys/socket.h> 52 #include <sys/sockio.h> 53 #include <sys/sysctl.h> 54 #include <sys/taskqueue.h> 55 56 #include <net/bpf.h> 57 #include <net/ethernet.h> 58 #include <net/if.h> 59 #include <net/if_dl.h> 60 #include <net/if_media.h> 61 #include <net/if_types.h> 62 #include <net/if_vlan_var.h> 63 64 #include <machine/bus.h> 65 #include <machine/resource.h> 66 #include <sys/bus.h> 67 #include <sys/rman.h> 68 69 #include <dev/mii/mii.h> 70 #include <dev/mii/miivar.h> 71 72 #include <dev/pci/pcireg.h> 73 #include <dev/pci/pcivar.h> 74 75 #include <dev/stge/if_stgereg.h> 76 77 #define STGE_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP) 78 79 MODULE_DEPEND(stge, pci, 1, 1, 1); 80 MODULE_DEPEND(stge, ether, 1, 1, 1); 81 MODULE_DEPEND(stge, miibus, 1, 1, 1); 82 83 /* "device miibus" required. See GENERIC if you get errors here. */ 84 #include "miibus_if.h" 85 86 /* 87 * Devices supported by this driver. 88 */ 89 static struct stge_product { 90 uint16_t stge_vendorid; 91 uint16_t stge_deviceid; 92 const char *stge_name; 93 } stge_products[] = { 94 { VENDOR_SUNDANCETI, DEVICEID_SUNDANCETI_ST1023, 95 "Sundance ST-1023 Gigabit Ethernet" }, 96 97 { VENDOR_SUNDANCETI, DEVICEID_SUNDANCETI_ST2021, 98 "Sundance ST-2021 Gigabit Ethernet" }, 99 100 { VENDOR_TAMARACK, DEVICEID_TAMARACK_TC9021, 101 "Tamarack TC9021 Gigabit Ethernet" }, 102 103 { VENDOR_TAMARACK, DEVICEID_TAMARACK_TC9021_ALT, 104 "Tamarack TC9021 Gigabit Ethernet" }, 105 106 /* 107 * The Sundance sample boards use the Sundance vendor ID, 108 * but the Tamarack product ID. 109 */ 110 { VENDOR_SUNDANCETI, DEVICEID_TAMARACK_TC9021, 111 "Sundance TC9021 Gigabit Ethernet" }, 112 113 { VENDOR_SUNDANCETI, DEVICEID_TAMARACK_TC9021_ALT, 114 "Sundance TC9021 Gigabit Ethernet" }, 115 116 { VENDOR_DLINK, DEVICEID_DLINK_DL4000, 117 "D-Link DL-4000 Gigabit Ethernet" }, 118 119 { VENDOR_ANTARES, DEVICEID_ANTARES_TC9021, 120 "Antares Gigabit Ethernet" } 121 }; 122 123 static int stge_probe(device_t); 124 static int stge_attach(device_t); 125 static int stge_detach(device_t); 126 static int stge_shutdown(device_t); 127 static int stge_suspend(device_t); 128 static int stge_resume(device_t); 129 130 static int stge_encap(struct stge_softc *, struct mbuf **); 131 static void stge_start(struct ifnet *); 132 static void stge_start_locked(struct ifnet *); 133 static void stge_watchdog(struct stge_softc *); 134 static int stge_ioctl(struct ifnet *, u_long, caddr_t); 135 static void stge_init(void *); 136 static void stge_init_locked(struct stge_softc *); 137 static void stge_vlan_setup(struct stge_softc *); 138 static void stge_stop(struct stge_softc *); 139 static void stge_start_tx(struct stge_softc *); 140 static void stge_start_rx(struct stge_softc *); 141 static void stge_stop_tx(struct stge_softc *); 142 static void stge_stop_rx(struct stge_softc *); 143 144 static void stge_reset(struct stge_softc *, uint32_t); 145 static int stge_eeprom_wait(struct stge_softc *); 146 static void stge_read_eeprom(struct stge_softc *, int, uint16_t *); 147 static void stge_tick(void *); 148 static void stge_stats_update(struct stge_softc *); 149 static void stge_set_filter(struct stge_softc *); 150 static void stge_set_multi(struct stge_softc *); 151 152 static void stge_link_task(void *, int); 153 static void stge_intr(void *); 154 static __inline int stge_tx_error(struct stge_softc *); 155 static void stge_txeof(struct stge_softc *); 156 static int stge_rxeof(struct stge_softc *); 157 static __inline void stge_discard_rxbuf(struct stge_softc *, int); 158 static int stge_newbuf(struct stge_softc *, int); 159 #ifndef __NO_STRICT_ALIGNMENT 160 static __inline struct mbuf *stge_fixup_rx(struct stge_softc *, struct mbuf *); 161 #endif 162 163 static void stge_mii_sync(struct stge_softc *); 164 static void stge_mii_send(struct stge_softc *, uint32_t, int); 165 static int stge_mii_readreg(struct stge_softc *, struct stge_mii_frame *); 166 static int stge_mii_writereg(struct stge_softc *, struct stge_mii_frame *); 167 static int stge_miibus_readreg(device_t, int, int); 168 static int stge_miibus_writereg(device_t, int, int, int); 169 static void stge_miibus_statchg(device_t); 170 static int stge_mediachange(struct ifnet *); 171 static void stge_mediastatus(struct ifnet *, struct ifmediareq *); 172 173 static void stge_dmamap_cb(void *, bus_dma_segment_t *, int, int); 174 static int stge_dma_alloc(struct stge_softc *); 175 static void stge_dma_free(struct stge_softc *); 176 static void stge_dma_wait(struct stge_softc *); 177 static void stge_init_tx_ring(struct stge_softc *); 178 static int stge_init_rx_ring(struct stge_softc *); 179 #ifdef DEVICE_POLLING 180 static int stge_poll(struct ifnet *, enum poll_cmd, int); 181 #endif 182 183 static void stge_setwol(struct stge_softc *); 184 static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int, int); 185 static int sysctl_hw_stge_rxint_nframe(SYSCTL_HANDLER_ARGS); 186 static int sysctl_hw_stge_rxint_dmawait(SYSCTL_HANDLER_ARGS); 187 188 static device_method_t stge_methods[] = { 189 /* Device interface */ 190 DEVMETHOD(device_probe, stge_probe), 191 DEVMETHOD(device_attach, stge_attach), 192 DEVMETHOD(device_detach, stge_detach), 193 DEVMETHOD(device_shutdown, stge_shutdown), 194 DEVMETHOD(device_suspend, stge_suspend), 195 DEVMETHOD(device_resume, stge_resume), 196 197 /* MII interface */ 198 DEVMETHOD(miibus_readreg, stge_miibus_readreg), 199 DEVMETHOD(miibus_writereg, stge_miibus_writereg), 200 DEVMETHOD(miibus_statchg, stge_miibus_statchg), 201 202 { 0, 0 } 203 204 }; 205 206 static driver_t stge_driver = { 207 "stge", 208 stge_methods, 209 sizeof(struct stge_softc) 210 }; 211 212 static devclass_t stge_devclass; 213 214 DRIVER_MODULE(stge, pci, stge_driver, stge_devclass, 0, 0); 215 DRIVER_MODULE(miibus, stge, miibus_driver, miibus_devclass, 0, 0); 216 217 static struct resource_spec stge_res_spec_io[] = { 218 { SYS_RES_IOPORT, PCIR_BAR(0), RF_ACTIVE }, 219 { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, 220 { -1, 0, 0 } 221 }; 222 223 static struct resource_spec stge_res_spec_mem[] = { 224 { SYS_RES_MEMORY, PCIR_BAR(1), RF_ACTIVE }, 225 { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, 226 { -1, 0, 0 } 227 }; 228 229 #define MII_SET(x) \ 230 CSR_WRITE_1(sc, STGE_PhyCtrl, CSR_READ_1(sc, STGE_PhyCtrl) | (x)) 231 #define MII_CLR(x) \ 232 CSR_WRITE_1(sc, STGE_PhyCtrl, CSR_READ_1(sc, STGE_PhyCtrl) & ~(x)) 233 234 /* 235 * Sync the PHYs by setting data bit and strobing the clock 32 times. 236 */ 237 static void 238 stge_mii_sync(struct stge_softc *sc) 239 { 240 int i; 241 242 MII_SET(PC_MgmtDir | PC_MgmtData); 243 244 for (i = 0; i < 32; i++) { 245 MII_SET(PC_MgmtClk); 246 DELAY(1); 247 MII_CLR(PC_MgmtClk); 248 DELAY(1); 249 } 250 } 251 252 /* 253 * Clock a series of bits through the MII. 254 */ 255 static void 256 stge_mii_send(struct stge_softc *sc, uint32_t bits, int cnt) 257 { 258 int i; 259 260 MII_CLR(PC_MgmtClk); 261 262 for (i = (0x1 << (cnt - 1)); i; i >>= 1) { 263 if (bits & i) 264 MII_SET(PC_MgmtData); 265 else 266 MII_CLR(PC_MgmtData); 267 DELAY(1); 268 MII_CLR(PC_MgmtClk); 269 DELAY(1); 270 MII_SET(PC_MgmtClk); 271 } 272 } 273 274 /* 275 * Read an PHY register through the MII. 276 */ 277 static int 278 stge_mii_readreg(struct stge_softc *sc, struct stge_mii_frame *frame) 279 { 280 int i, ack; 281 282 /* 283 * Set up frame for RX. 284 */ 285 frame->mii_stdelim = STGE_MII_STARTDELIM; 286 frame->mii_opcode = STGE_MII_READOP; 287 frame->mii_turnaround = 0; 288 frame->mii_data = 0; 289 290 CSR_WRITE_1(sc, STGE_PhyCtrl, 0 | sc->sc_PhyCtrl); 291 /* 292 * Turn on data xmit. 293 */ 294 MII_SET(PC_MgmtDir); 295 296 stge_mii_sync(sc); 297 298 /* 299 * Send command/address info. 300 */ 301 stge_mii_send(sc, frame->mii_stdelim, 2); 302 stge_mii_send(sc, frame->mii_opcode, 2); 303 stge_mii_send(sc, frame->mii_phyaddr, 5); 304 stge_mii_send(sc, frame->mii_regaddr, 5); 305 306 /* Turn off xmit. */ 307 MII_CLR(PC_MgmtDir); 308 309 /* Idle bit */ 310 MII_CLR((PC_MgmtClk | PC_MgmtData)); 311 DELAY(1); 312 MII_SET(PC_MgmtClk); 313 DELAY(1); 314 315 /* Check for ack */ 316 MII_CLR(PC_MgmtClk); 317 DELAY(1); 318 ack = CSR_READ_1(sc, STGE_PhyCtrl) & PC_MgmtData; 319 MII_SET(PC_MgmtClk); 320 DELAY(1); 321 322 /* 323 * Now try reading data bits. If the ack failed, we still 324 * need to clock through 16 cycles to keep the PHY(s) in sync. 325 */ 326 if (ack) { 327 for(i = 0; i < 16; i++) { 328 MII_CLR(PC_MgmtClk); 329 DELAY(1); 330 MII_SET(PC_MgmtClk); 331 DELAY(1); 332 } 333 goto fail; 334 } 335 336 for (i = 0x8000; i; i >>= 1) { 337 MII_CLR(PC_MgmtClk); 338 DELAY(1); 339 if (!ack) { 340 if (CSR_READ_1(sc, STGE_PhyCtrl) & PC_MgmtData) 341 frame->mii_data |= i; 342 DELAY(1); 343 } 344 MII_SET(PC_MgmtClk); 345 DELAY(1); 346 } 347 348 fail: 349 MII_CLR(PC_MgmtClk); 350 DELAY(1); 351 MII_SET(PC_MgmtClk); 352 DELAY(1); 353 354 if (ack) 355 return(1); 356 return(0); 357 } 358 359 /* 360 * Write to a PHY register through the MII. 361 */ 362 static int 363 stge_mii_writereg(struct stge_softc *sc, struct stge_mii_frame *frame) 364 { 365 366 /* 367 * Set up frame for TX. 368 */ 369 frame->mii_stdelim = STGE_MII_STARTDELIM; 370 frame->mii_opcode = STGE_MII_WRITEOP; 371 frame->mii_turnaround = STGE_MII_TURNAROUND; 372 373 /* 374 * Turn on data output. 375 */ 376 MII_SET(PC_MgmtDir); 377 378 stge_mii_sync(sc); 379 380 stge_mii_send(sc, frame->mii_stdelim, 2); 381 stge_mii_send(sc, frame->mii_opcode, 2); 382 stge_mii_send(sc, frame->mii_phyaddr, 5); 383 stge_mii_send(sc, frame->mii_regaddr, 5); 384 stge_mii_send(sc, frame->mii_turnaround, 2); 385 stge_mii_send(sc, frame->mii_data, 16); 386 387 /* Idle bit. */ 388 MII_SET(PC_MgmtClk); 389 DELAY(1); 390 MII_CLR(PC_MgmtClk); 391 DELAY(1); 392 393 /* 394 * Turn off xmit. 395 */ 396 MII_CLR(PC_MgmtDir); 397 398 return(0); 399 } 400 401 /* 402 * sc_miibus_readreg: [mii interface function] 403 * 404 * Read a PHY register on the MII of the TC9021. 405 */ 406 static int 407 stge_miibus_readreg(device_t dev, int phy, int reg) 408 { 409 struct stge_softc *sc; 410 struct stge_mii_frame frame; 411 int error; 412 413 sc = device_get_softc(dev); 414 415 if (reg == STGE_PhyCtrl) { 416 /* XXX allow ip1000phy read STGE_PhyCtrl register. */ 417 STGE_MII_LOCK(sc); 418 error = CSR_READ_1(sc, STGE_PhyCtrl); 419 STGE_MII_UNLOCK(sc); 420 return (error); 421 } 422 bzero(&frame, sizeof(frame)); 423 frame.mii_phyaddr = phy; 424 frame.mii_regaddr = reg; 425 426 STGE_MII_LOCK(sc); 427 error = stge_mii_readreg(sc, &frame); 428 STGE_MII_UNLOCK(sc); 429 430 if (error != 0) { 431 /* Don't show errors for PHY probe request */ 432 if (reg != 1) 433 device_printf(sc->sc_dev, "phy read fail\n"); 434 return (0); 435 } 436 return (frame.mii_data); 437 } 438 439 /* 440 * stge_miibus_writereg: [mii interface function] 441 * 442 * Write a PHY register on the MII of the TC9021. 443 */ 444 static int 445 stge_miibus_writereg(device_t dev, int phy, int reg, int val) 446 { 447 struct stge_softc *sc; 448 struct stge_mii_frame frame; 449 int error; 450 451 sc = device_get_softc(dev); 452 453 bzero(&frame, sizeof(frame)); 454 frame.mii_phyaddr = phy; 455 frame.mii_regaddr = reg; 456 frame.mii_data = val; 457 458 STGE_MII_LOCK(sc); 459 error = stge_mii_writereg(sc, &frame); 460 STGE_MII_UNLOCK(sc); 461 462 if (error != 0) 463 device_printf(sc->sc_dev, "phy write fail\n"); 464 return (0); 465 } 466 467 /* 468 * stge_miibus_statchg: [mii interface function] 469 * 470 * Callback from MII layer when media changes. 471 */ 472 static void 473 stge_miibus_statchg(device_t dev) 474 { 475 struct stge_softc *sc; 476 477 sc = device_get_softc(dev); 478 taskqueue_enqueue(taskqueue_swi, &sc->sc_link_task); 479 } 480 481 /* 482 * stge_mediastatus: [ifmedia interface function] 483 * 484 * Get the current interface media status. 485 */ 486 static void 487 stge_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) 488 { 489 struct stge_softc *sc; 490 struct mii_data *mii; 491 492 sc = ifp->if_softc; 493 mii = device_get_softc(sc->sc_miibus); 494 495 mii_pollstat(mii); 496 ifmr->ifm_status = mii->mii_media_status; 497 ifmr->ifm_active = mii->mii_media_active; 498 } 499 500 /* 501 * stge_mediachange: [ifmedia interface function] 502 * 503 * Set hardware to newly-selected media. 504 */ 505 static int 506 stge_mediachange(struct ifnet *ifp) 507 { 508 struct stge_softc *sc; 509 struct mii_data *mii; 510 511 sc = ifp->if_softc; 512 mii = device_get_softc(sc->sc_miibus); 513 mii_mediachg(mii); 514 515 return (0); 516 } 517 518 static int 519 stge_eeprom_wait(struct stge_softc *sc) 520 { 521 int i; 522 523 for (i = 0; i < STGE_TIMEOUT; i++) { 524 DELAY(1000); 525 if ((CSR_READ_2(sc, STGE_EepromCtrl) & EC_EepromBusy) == 0) 526 return (0); 527 } 528 return (1); 529 } 530 531 /* 532 * stge_read_eeprom: 533 * 534 * Read data from the serial EEPROM. 535 */ 536 static void 537 stge_read_eeprom(struct stge_softc *sc, int offset, uint16_t *data) 538 { 539 540 if (stge_eeprom_wait(sc)) 541 device_printf(sc->sc_dev, "EEPROM failed to come ready\n"); 542 543 CSR_WRITE_2(sc, STGE_EepromCtrl, 544 EC_EepromAddress(offset) | EC_EepromOpcode(EC_OP_RR)); 545 if (stge_eeprom_wait(sc)) 546 device_printf(sc->sc_dev, "EEPROM read timed out\n"); 547 *data = CSR_READ_2(sc, STGE_EepromData); 548 } 549 550 551 static int 552 stge_probe(device_t dev) 553 { 554 struct stge_product *sp; 555 int i; 556 uint16_t vendor, devid; 557 558 vendor = pci_get_vendor(dev); 559 devid = pci_get_device(dev); 560 sp = stge_products; 561 for (i = 0; i < sizeof(stge_products)/sizeof(stge_products[0]); 562 i++, sp++) { 563 if (vendor == sp->stge_vendorid && 564 devid == sp->stge_deviceid) { 565 device_set_desc(dev, sp->stge_name); 566 return (BUS_PROBE_DEFAULT); 567 } 568 } 569 570 return (ENXIO); 571 } 572 573 static int 574 stge_attach(device_t dev) 575 { 576 struct stge_softc *sc; 577 struct ifnet *ifp; 578 uint8_t enaddr[ETHER_ADDR_LEN]; 579 int error, flags, i; 580 uint16_t cmd; 581 uint32_t val; 582 583 error = 0; 584 sc = device_get_softc(dev); 585 sc->sc_dev = dev; 586 587 mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, 588 MTX_DEF); 589 mtx_init(&sc->sc_mii_mtx, "stge_mii_mutex", NULL, MTX_DEF); 590 callout_init_mtx(&sc->sc_tick_ch, &sc->sc_mtx, 0); 591 TASK_INIT(&sc->sc_link_task, 0, stge_link_task, sc); 592 593 /* 594 * Map the device. 595 */ 596 pci_enable_busmaster(dev); 597 cmd = pci_read_config(dev, PCIR_COMMAND, 2); 598 val = pci_read_config(dev, PCIR_BAR(1), 4); 599 if ((val & 0x01) != 0) 600 sc->sc_spec = stge_res_spec_mem; 601 else { 602 val = pci_read_config(dev, PCIR_BAR(0), 4); 603 if ((val & 0x01) == 0) { 604 device_printf(sc->sc_dev, "couldn't locate IO BAR\n"); 605 error = ENXIO; 606 goto fail; 607 } 608 sc->sc_spec = stge_res_spec_io; 609 } 610 error = bus_alloc_resources(dev, sc->sc_spec, sc->sc_res); 611 if (error != 0) { 612 device_printf(dev, "couldn't allocate %s resources\n", 613 sc->sc_spec == stge_res_spec_mem ? "memory" : "I/O"); 614 goto fail; 615 } 616 sc->sc_rev = pci_get_revid(dev); 617 618 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 619 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, 620 "rxint_nframe", CTLTYPE_INT|CTLFLAG_RW, &sc->sc_rxint_nframe, 0, 621 sysctl_hw_stge_rxint_nframe, "I", "stge rx interrupt nframe"); 622 623 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 624 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, 625 "rxint_dmawait", CTLTYPE_INT|CTLFLAG_RW, &sc->sc_rxint_dmawait, 0, 626 sysctl_hw_stge_rxint_dmawait, "I", "stge rx interrupt dmawait"); 627 628 /* Pull in device tunables. */ 629 sc->sc_rxint_nframe = STGE_RXINT_NFRAME_DEFAULT; 630 error = resource_int_value(device_get_name(dev), device_get_unit(dev), 631 "rxint_nframe", &sc->sc_rxint_nframe); 632 if (error == 0) { 633 if (sc->sc_rxint_nframe < STGE_RXINT_NFRAME_MIN || 634 sc->sc_rxint_nframe > STGE_RXINT_NFRAME_MAX) { 635 device_printf(dev, "rxint_nframe value out of range; " 636 "using default: %d\n", STGE_RXINT_NFRAME_DEFAULT); 637 sc->sc_rxint_nframe = STGE_RXINT_NFRAME_DEFAULT; 638 } 639 } 640 641 sc->sc_rxint_dmawait = STGE_RXINT_DMAWAIT_DEFAULT; 642 error = resource_int_value(device_get_name(dev), device_get_unit(dev), 643 "rxint_dmawait", &sc->sc_rxint_dmawait); 644 if (error == 0) { 645 if (sc->sc_rxint_dmawait < STGE_RXINT_DMAWAIT_MIN || 646 sc->sc_rxint_dmawait > STGE_RXINT_DMAWAIT_MAX) { 647 device_printf(dev, "rxint_dmawait value out of range; " 648 "using default: %d\n", STGE_RXINT_DMAWAIT_DEFAULT); 649 sc->sc_rxint_dmawait = STGE_RXINT_DMAWAIT_DEFAULT; 650 } 651 } 652 653 if ((error = stge_dma_alloc(sc) != 0)) 654 goto fail; 655 656 /* 657 * Determine if we're copper or fiber. It affects how we 658 * reset the card. 659 */ 660 if (CSR_READ_4(sc, STGE_AsicCtrl) & AC_PhyMedia) 661 sc->sc_usefiber = 1; 662 else 663 sc->sc_usefiber = 0; 664 665 /* Load LED configuration from EEPROM. */ 666 stge_read_eeprom(sc, STGE_EEPROM_LEDMode, &sc->sc_led); 667 668 /* 669 * Reset the chip to a known state. 670 */ 671 STGE_LOCK(sc); 672 stge_reset(sc, STGE_RESET_FULL); 673 STGE_UNLOCK(sc); 674 675 /* 676 * Reading the station address from the EEPROM doesn't seem 677 * to work, at least on my sample boards. Instead, since 678 * the reset sequence does AutoInit, read it from the station 679 * address registers. For Sundance 1023 you can only read it 680 * from EEPROM. 681 */ 682 if (pci_get_device(dev) != DEVICEID_SUNDANCETI_ST1023) { 683 uint16_t v; 684 685 v = CSR_READ_2(sc, STGE_StationAddress0); 686 enaddr[0] = v & 0xff; 687 enaddr[1] = v >> 8; 688 v = CSR_READ_2(sc, STGE_StationAddress1); 689 enaddr[2] = v & 0xff; 690 enaddr[3] = v >> 8; 691 v = CSR_READ_2(sc, STGE_StationAddress2); 692 enaddr[4] = v & 0xff; 693 enaddr[5] = v >> 8; 694 sc->sc_stge1023 = 0; 695 } else { 696 uint16_t myaddr[ETHER_ADDR_LEN / 2]; 697 for (i = 0; i <ETHER_ADDR_LEN / 2; i++) { 698 stge_read_eeprom(sc, STGE_EEPROM_StationAddress0 + i, 699 &myaddr[i]); 700 myaddr[i] = le16toh(myaddr[i]); 701 } 702 bcopy(myaddr, enaddr, sizeof(enaddr)); 703 sc->sc_stge1023 = 1; 704 } 705 706 ifp = sc->sc_ifp = if_alloc(IFT_ETHER); 707 if (ifp == NULL) { 708 device_printf(sc->sc_dev, "failed to if_alloc()\n"); 709 error = ENXIO; 710 goto fail; 711 } 712 713 ifp->if_softc = sc; 714 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); 715 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 716 ifp->if_ioctl = stge_ioctl; 717 ifp->if_start = stge_start; 718 ifp->if_init = stge_init; 719 ifp->if_mtu = ETHERMTU; 720 ifp->if_snd.ifq_drv_maxlen = STGE_TX_RING_CNT - 1; 721 IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); 722 IFQ_SET_READY(&ifp->if_snd); 723 /* Revision B3 and earlier chips have checksum bug. */ 724 if (sc->sc_rev >= 0x0c) { 725 ifp->if_hwassist = STGE_CSUM_FEATURES; 726 ifp->if_capabilities = IFCAP_HWCSUM; 727 } else { 728 ifp->if_hwassist = 0; 729 ifp->if_capabilities = 0; 730 } 731 ifp->if_capabilities |= IFCAP_WOL_MAGIC; 732 ifp->if_capenable = ifp->if_capabilities; 733 734 /* 735 * Read some important bits from the PhyCtrl register. 736 */ 737 sc->sc_PhyCtrl = CSR_READ_1(sc, STGE_PhyCtrl) & 738 (PC_PhyDuplexPolarity | PC_PhyLnkPolarity); 739 740 /* Set up MII bus. */ 741 flags = MIIF_DOPAUSE; 742 if (sc->sc_rev >= 0x40 && sc->sc_rev <= 0x4e) 743 flags |= MIIF_MACPRIV0; 744 error = mii_attach(sc->sc_dev, &sc->sc_miibus, ifp, stge_mediachange, 745 stge_mediastatus, BMSR_DEFCAPMASK, MII_PHY_ANY, MII_OFFSET_ANY, 746 flags); 747 if (error != 0) { 748 device_printf(sc->sc_dev, "attaching PHYs failed\n"); 749 goto fail; 750 } 751 752 ether_ifattach(ifp, enaddr); 753 754 /* VLAN capability setup */ 755 ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING; 756 if (sc->sc_rev >= 0x0c) 757 ifp->if_capabilities |= IFCAP_VLAN_HWCSUM; 758 ifp->if_capenable = ifp->if_capabilities; 759 #ifdef DEVICE_POLLING 760 ifp->if_capabilities |= IFCAP_POLLING; 761 #endif 762 /* 763 * Tell the upper layer(s) we support long frames. 764 * Must appear after the call to ether_ifattach() because 765 * ether_ifattach() sets ifi_hdrlen to the default value. 766 */ 767 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); 768 769 /* 770 * The manual recommends disabling early transmit, so we 771 * do. It's disabled anyway, if using IP checksumming, 772 * since the entire packet must be in the FIFO in order 773 * for the chip to perform the checksum. 774 */ 775 sc->sc_txthresh = 0x0fff; 776 777 /* 778 * Disable MWI if the PCI layer tells us to. 779 */ 780 sc->sc_DMACtrl = 0; 781 if ((cmd & PCIM_CMD_MWRICEN) == 0) 782 sc->sc_DMACtrl |= DMAC_MWIDisable; 783 784 /* 785 * Hookup IRQ 786 */ 787 error = bus_setup_intr(dev, sc->sc_res[1], INTR_TYPE_NET | INTR_MPSAFE, 788 NULL, stge_intr, sc, &sc->sc_ih); 789 if (error != 0) { 790 ether_ifdetach(ifp); 791 device_printf(sc->sc_dev, "couldn't set up IRQ\n"); 792 sc->sc_ifp = NULL; 793 goto fail; 794 } 795 796 fail: 797 if (error != 0) 798 stge_detach(dev); 799 800 return (error); 801 } 802 803 static int 804 stge_detach(device_t dev) 805 { 806 struct stge_softc *sc; 807 struct ifnet *ifp; 808 809 sc = device_get_softc(dev); 810 811 ifp = sc->sc_ifp; 812 #ifdef DEVICE_POLLING 813 if (ifp && ifp->if_capenable & IFCAP_POLLING) 814 ether_poll_deregister(ifp); 815 #endif 816 if (device_is_attached(dev)) { 817 STGE_LOCK(sc); 818 /* XXX */ 819 sc->sc_detach = 1; 820 stge_stop(sc); 821 STGE_UNLOCK(sc); 822 callout_drain(&sc->sc_tick_ch); 823 taskqueue_drain(taskqueue_swi, &sc->sc_link_task); 824 ether_ifdetach(ifp); 825 } 826 827 if (sc->sc_miibus != NULL) { 828 device_delete_child(dev, sc->sc_miibus); 829 sc->sc_miibus = NULL; 830 } 831 bus_generic_detach(dev); 832 stge_dma_free(sc); 833 834 if (ifp != NULL) { 835 if_free(ifp); 836 sc->sc_ifp = NULL; 837 } 838 839 if (sc->sc_ih) { 840 bus_teardown_intr(dev, sc->sc_res[1], sc->sc_ih); 841 sc->sc_ih = NULL; 842 } 843 bus_release_resources(dev, sc->sc_spec, sc->sc_res); 844 845 mtx_destroy(&sc->sc_mii_mtx); 846 mtx_destroy(&sc->sc_mtx); 847 848 return (0); 849 } 850 851 struct stge_dmamap_arg { 852 bus_addr_t stge_busaddr; 853 }; 854 855 static void 856 stge_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) 857 { 858 struct stge_dmamap_arg *ctx; 859 860 if (error != 0) 861 return; 862 863 ctx = (struct stge_dmamap_arg *)arg; 864 ctx->stge_busaddr = segs[0].ds_addr; 865 } 866 867 static int 868 stge_dma_alloc(struct stge_softc *sc) 869 { 870 struct stge_dmamap_arg ctx; 871 struct stge_txdesc *txd; 872 struct stge_rxdesc *rxd; 873 int error, i; 874 875 /* create parent tag. */ 876 error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev),/* parent */ 877 1, 0, /* algnmnt, boundary */ 878 STGE_DMA_MAXADDR, /* lowaddr */ 879 BUS_SPACE_MAXADDR, /* highaddr */ 880 NULL, NULL, /* filter, filterarg */ 881 BUS_SPACE_MAXSIZE_32BIT, /* maxsize */ 882 0, /* nsegments */ 883 BUS_SPACE_MAXSIZE_32BIT, /* maxsegsize */ 884 0, /* flags */ 885 NULL, NULL, /* lockfunc, lockarg */ 886 &sc->sc_cdata.stge_parent_tag); 887 if (error != 0) { 888 device_printf(sc->sc_dev, "failed to create parent DMA tag\n"); 889 goto fail; 890 } 891 /* create tag for Tx ring. */ 892 error = bus_dma_tag_create(sc->sc_cdata.stge_parent_tag,/* parent */ 893 STGE_RING_ALIGN, 0, /* algnmnt, boundary */ 894 BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ 895 BUS_SPACE_MAXADDR, /* highaddr */ 896 NULL, NULL, /* filter, filterarg */ 897 STGE_TX_RING_SZ, /* maxsize */ 898 1, /* nsegments */ 899 STGE_TX_RING_SZ, /* maxsegsize */ 900 0, /* flags */ 901 NULL, NULL, /* lockfunc, lockarg */ 902 &sc->sc_cdata.stge_tx_ring_tag); 903 if (error != 0) { 904 device_printf(sc->sc_dev, 905 "failed to allocate Tx ring DMA tag\n"); 906 goto fail; 907 } 908 909 /* create tag for Rx ring. */ 910 error = bus_dma_tag_create(sc->sc_cdata.stge_parent_tag,/* parent */ 911 STGE_RING_ALIGN, 0, /* algnmnt, boundary */ 912 BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ 913 BUS_SPACE_MAXADDR, /* highaddr */ 914 NULL, NULL, /* filter, filterarg */ 915 STGE_RX_RING_SZ, /* maxsize */ 916 1, /* nsegments */ 917 STGE_RX_RING_SZ, /* maxsegsize */ 918 0, /* flags */ 919 NULL, NULL, /* lockfunc, lockarg */ 920 &sc->sc_cdata.stge_rx_ring_tag); 921 if (error != 0) { 922 device_printf(sc->sc_dev, 923 "failed to allocate Rx ring DMA tag\n"); 924 goto fail; 925 } 926 927 /* create tag for Tx buffers. */ 928 error = bus_dma_tag_create(sc->sc_cdata.stge_parent_tag,/* parent */ 929 1, 0, /* algnmnt, boundary */ 930 BUS_SPACE_MAXADDR, /* lowaddr */ 931 BUS_SPACE_MAXADDR, /* highaddr */ 932 NULL, NULL, /* filter, filterarg */ 933 MCLBYTES * STGE_MAXTXSEGS, /* maxsize */ 934 STGE_MAXTXSEGS, /* nsegments */ 935 MCLBYTES, /* maxsegsize */ 936 0, /* flags */ 937 NULL, NULL, /* lockfunc, lockarg */ 938 &sc->sc_cdata.stge_tx_tag); 939 if (error != 0) { 940 device_printf(sc->sc_dev, "failed to allocate Tx DMA tag\n"); 941 goto fail; 942 } 943 944 /* create tag for Rx buffers. */ 945 error = bus_dma_tag_create(sc->sc_cdata.stge_parent_tag,/* parent */ 946 1, 0, /* algnmnt, boundary */ 947 BUS_SPACE_MAXADDR, /* lowaddr */ 948 BUS_SPACE_MAXADDR, /* highaddr */ 949 NULL, NULL, /* filter, filterarg */ 950 MCLBYTES, /* maxsize */ 951 1, /* nsegments */ 952 MCLBYTES, /* maxsegsize */ 953 0, /* flags */ 954 NULL, NULL, /* lockfunc, lockarg */ 955 &sc->sc_cdata.stge_rx_tag); 956 if (error != 0) { 957 device_printf(sc->sc_dev, "failed to allocate Rx DMA tag\n"); 958 goto fail; 959 } 960 961 /* allocate DMA'able memory and load the DMA map for Tx ring. */ 962 error = bus_dmamem_alloc(sc->sc_cdata.stge_tx_ring_tag, 963 (void **)&sc->sc_rdata.stge_tx_ring, BUS_DMA_NOWAIT | 964 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc->sc_cdata.stge_tx_ring_map); 965 if (error != 0) { 966 device_printf(sc->sc_dev, 967 "failed to allocate DMA'able memory for Tx ring\n"); 968 goto fail; 969 } 970 971 ctx.stge_busaddr = 0; 972 error = bus_dmamap_load(sc->sc_cdata.stge_tx_ring_tag, 973 sc->sc_cdata.stge_tx_ring_map, sc->sc_rdata.stge_tx_ring, 974 STGE_TX_RING_SZ, stge_dmamap_cb, &ctx, BUS_DMA_NOWAIT); 975 if (error != 0 || ctx.stge_busaddr == 0) { 976 device_printf(sc->sc_dev, 977 "failed to load DMA'able memory for Tx ring\n"); 978 goto fail; 979 } 980 sc->sc_rdata.stge_tx_ring_paddr = ctx.stge_busaddr; 981 982 /* allocate DMA'able memory and load the DMA map for Rx ring. */ 983 error = bus_dmamem_alloc(sc->sc_cdata.stge_rx_ring_tag, 984 (void **)&sc->sc_rdata.stge_rx_ring, BUS_DMA_NOWAIT | 985 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc->sc_cdata.stge_rx_ring_map); 986 if (error != 0) { 987 device_printf(sc->sc_dev, 988 "failed to allocate DMA'able memory for Rx ring\n"); 989 goto fail; 990 } 991 992 ctx.stge_busaddr = 0; 993 error = bus_dmamap_load(sc->sc_cdata.stge_rx_ring_tag, 994 sc->sc_cdata.stge_rx_ring_map, sc->sc_rdata.stge_rx_ring, 995 STGE_RX_RING_SZ, stge_dmamap_cb, &ctx, BUS_DMA_NOWAIT); 996 if (error != 0 || ctx.stge_busaddr == 0) { 997 device_printf(sc->sc_dev, 998 "failed to load DMA'able memory for Rx ring\n"); 999 goto fail; 1000 } 1001 sc->sc_rdata.stge_rx_ring_paddr = ctx.stge_busaddr; 1002 1003 /* create DMA maps for Tx buffers. */ 1004 for (i = 0; i < STGE_TX_RING_CNT; i++) { 1005 txd = &sc->sc_cdata.stge_txdesc[i]; 1006 txd->tx_m = NULL; 1007 txd->tx_dmamap = 0; 1008 error = bus_dmamap_create(sc->sc_cdata.stge_tx_tag, 0, 1009 &txd->tx_dmamap); 1010 if (error != 0) { 1011 device_printf(sc->sc_dev, 1012 "failed to create Tx dmamap\n"); 1013 goto fail; 1014 } 1015 } 1016 /* create DMA maps for Rx buffers. */ 1017 if ((error = bus_dmamap_create(sc->sc_cdata.stge_rx_tag, 0, 1018 &sc->sc_cdata.stge_rx_sparemap)) != 0) { 1019 device_printf(sc->sc_dev, "failed to create spare Rx dmamap\n"); 1020 goto fail; 1021 } 1022 for (i = 0; i < STGE_RX_RING_CNT; i++) { 1023 rxd = &sc->sc_cdata.stge_rxdesc[i]; 1024 rxd->rx_m = NULL; 1025 rxd->rx_dmamap = 0; 1026 error = bus_dmamap_create(sc->sc_cdata.stge_rx_tag, 0, 1027 &rxd->rx_dmamap); 1028 if (error != 0) { 1029 device_printf(sc->sc_dev, 1030 "failed to create Rx dmamap\n"); 1031 goto fail; 1032 } 1033 } 1034 1035 fail: 1036 return (error); 1037 } 1038 1039 static void 1040 stge_dma_free(struct stge_softc *sc) 1041 { 1042 struct stge_txdesc *txd; 1043 struct stge_rxdesc *rxd; 1044 int i; 1045 1046 /* Tx ring */ 1047 if (sc->sc_cdata.stge_tx_ring_tag) { 1048 if (sc->sc_cdata.stge_tx_ring_map) 1049 bus_dmamap_unload(sc->sc_cdata.stge_tx_ring_tag, 1050 sc->sc_cdata.stge_tx_ring_map); 1051 if (sc->sc_cdata.stge_tx_ring_map && 1052 sc->sc_rdata.stge_tx_ring) 1053 bus_dmamem_free(sc->sc_cdata.stge_tx_ring_tag, 1054 sc->sc_rdata.stge_tx_ring, 1055 sc->sc_cdata.stge_tx_ring_map); 1056 sc->sc_rdata.stge_tx_ring = NULL; 1057 sc->sc_cdata.stge_tx_ring_map = 0; 1058 bus_dma_tag_destroy(sc->sc_cdata.stge_tx_ring_tag); 1059 sc->sc_cdata.stge_tx_ring_tag = NULL; 1060 } 1061 /* Rx ring */ 1062 if (sc->sc_cdata.stge_rx_ring_tag) { 1063 if (sc->sc_cdata.stge_rx_ring_map) 1064 bus_dmamap_unload(sc->sc_cdata.stge_rx_ring_tag, 1065 sc->sc_cdata.stge_rx_ring_map); 1066 if (sc->sc_cdata.stge_rx_ring_map && 1067 sc->sc_rdata.stge_rx_ring) 1068 bus_dmamem_free(sc->sc_cdata.stge_rx_ring_tag, 1069 sc->sc_rdata.stge_rx_ring, 1070 sc->sc_cdata.stge_rx_ring_map); 1071 sc->sc_rdata.stge_rx_ring = NULL; 1072 sc->sc_cdata.stge_rx_ring_map = 0; 1073 bus_dma_tag_destroy(sc->sc_cdata.stge_rx_ring_tag); 1074 sc->sc_cdata.stge_rx_ring_tag = NULL; 1075 } 1076 /* Tx buffers */ 1077 if (sc->sc_cdata.stge_tx_tag) { 1078 for (i = 0; i < STGE_TX_RING_CNT; i++) { 1079 txd = &sc->sc_cdata.stge_txdesc[i]; 1080 if (txd->tx_dmamap) { 1081 bus_dmamap_destroy(sc->sc_cdata.stge_tx_tag, 1082 txd->tx_dmamap); 1083 txd->tx_dmamap = 0; 1084 } 1085 } 1086 bus_dma_tag_destroy(sc->sc_cdata.stge_tx_tag); 1087 sc->sc_cdata.stge_tx_tag = NULL; 1088 } 1089 /* Rx buffers */ 1090 if (sc->sc_cdata.stge_rx_tag) { 1091 for (i = 0; i < STGE_RX_RING_CNT; i++) { 1092 rxd = &sc->sc_cdata.stge_rxdesc[i]; 1093 if (rxd->rx_dmamap) { 1094 bus_dmamap_destroy(sc->sc_cdata.stge_rx_tag, 1095 rxd->rx_dmamap); 1096 rxd->rx_dmamap = 0; 1097 } 1098 } 1099 if (sc->sc_cdata.stge_rx_sparemap) { 1100 bus_dmamap_destroy(sc->sc_cdata.stge_rx_tag, 1101 sc->sc_cdata.stge_rx_sparemap); 1102 sc->sc_cdata.stge_rx_sparemap = 0; 1103 } 1104 bus_dma_tag_destroy(sc->sc_cdata.stge_rx_tag); 1105 sc->sc_cdata.stge_rx_tag = NULL; 1106 } 1107 1108 if (sc->sc_cdata.stge_parent_tag) { 1109 bus_dma_tag_destroy(sc->sc_cdata.stge_parent_tag); 1110 sc->sc_cdata.stge_parent_tag = NULL; 1111 } 1112 } 1113 1114 /* 1115 * stge_shutdown: 1116 * 1117 * Make sure the interface is stopped at reboot time. 1118 */ 1119 static int 1120 stge_shutdown(device_t dev) 1121 { 1122 1123 return (stge_suspend(dev)); 1124 } 1125 1126 static void 1127 stge_setwol(struct stge_softc *sc) 1128 { 1129 struct ifnet *ifp; 1130 uint8_t v; 1131 1132 STGE_LOCK_ASSERT(sc); 1133 1134 ifp = sc->sc_ifp; 1135 v = CSR_READ_1(sc, STGE_WakeEvent); 1136 /* Disable all WOL bits. */ 1137 v &= ~(WE_WakePktEnable | WE_MagicPktEnable | WE_LinkEventEnable | 1138 WE_WakeOnLanEnable); 1139 if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) 1140 v |= WE_MagicPktEnable | WE_WakeOnLanEnable; 1141 CSR_WRITE_1(sc, STGE_WakeEvent, v); 1142 /* Reset Tx and prevent transmission. */ 1143 CSR_WRITE_4(sc, STGE_AsicCtrl, 1144 CSR_READ_4(sc, STGE_AsicCtrl) | AC_TxReset); 1145 /* 1146 * TC9021 automatically reset link speed to 100Mbps when it's put 1147 * into sleep so there is no need to try to resetting link speed. 1148 */ 1149 } 1150 1151 static int 1152 stge_suspend(device_t dev) 1153 { 1154 struct stge_softc *sc; 1155 1156 sc = device_get_softc(dev); 1157 1158 STGE_LOCK(sc); 1159 stge_stop(sc); 1160 sc->sc_suspended = 1; 1161 stge_setwol(sc); 1162 STGE_UNLOCK(sc); 1163 1164 return (0); 1165 } 1166 1167 static int 1168 stge_resume(device_t dev) 1169 { 1170 struct stge_softc *sc; 1171 struct ifnet *ifp; 1172 uint8_t v; 1173 1174 sc = device_get_softc(dev); 1175 1176 STGE_LOCK(sc); 1177 /* 1178 * Clear WOL bits, so special frames wouldn't interfere 1179 * normal Rx operation anymore. 1180 */ 1181 v = CSR_READ_1(sc, STGE_WakeEvent); 1182 v &= ~(WE_WakePktEnable | WE_MagicPktEnable | WE_LinkEventEnable | 1183 WE_WakeOnLanEnable); 1184 CSR_WRITE_1(sc, STGE_WakeEvent, v); 1185 ifp = sc->sc_ifp; 1186 if (ifp->if_flags & IFF_UP) 1187 stge_init_locked(sc); 1188 1189 sc->sc_suspended = 0; 1190 STGE_UNLOCK(sc); 1191 1192 return (0); 1193 } 1194 1195 static void 1196 stge_dma_wait(struct stge_softc *sc) 1197 { 1198 int i; 1199 1200 for (i = 0; i < STGE_TIMEOUT; i++) { 1201 DELAY(2); 1202 if ((CSR_READ_4(sc, STGE_DMACtrl) & DMAC_TxDMAInProg) == 0) 1203 break; 1204 } 1205 1206 if (i == STGE_TIMEOUT) 1207 device_printf(sc->sc_dev, "DMA wait timed out\n"); 1208 } 1209 1210 static int 1211 stge_encap(struct stge_softc *sc, struct mbuf **m_head) 1212 { 1213 struct stge_txdesc *txd; 1214 struct stge_tfd *tfd; 1215 struct mbuf *m; 1216 bus_dma_segment_t txsegs[STGE_MAXTXSEGS]; 1217 int error, i, nsegs, si; 1218 uint64_t csum_flags, tfc; 1219 1220 STGE_LOCK_ASSERT(sc); 1221 1222 if ((txd = STAILQ_FIRST(&sc->sc_cdata.stge_txfreeq)) == NULL) 1223 return (ENOBUFS); 1224 1225 error = bus_dmamap_load_mbuf_sg(sc->sc_cdata.stge_tx_tag, 1226 txd->tx_dmamap, *m_head, txsegs, &nsegs, 0); 1227 if (error == EFBIG) { 1228 m = m_collapse(*m_head, M_DONTWAIT, STGE_MAXTXSEGS); 1229 if (m == NULL) { 1230 m_freem(*m_head); 1231 *m_head = NULL; 1232 return (ENOMEM); 1233 } 1234 *m_head = m; 1235 error = bus_dmamap_load_mbuf_sg(sc->sc_cdata.stge_tx_tag, 1236 txd->tx_dmamap, *m_head, txsegs, &nsegs, 0); 1237 if (error != 0) { 1238 m_freem(*m_head); 1239 *m_head = NULL; 1240 return (error); 1241 } 1242 } else if (error != 0) 1243 return (error); 1244 if (nsegs == 0) { 1245 m_freem(*m_head); 1246 *m_head = NULL; 1247 return (EIO); 1248 } 1249 1250 m = *m_head; 1251 csum_flags = 0; 1252 if ((m->m_pkthdr.csum_flags & STGE_CSUM_FEATURES) != 0) { 1253 if (m->m_pkthdr.csum_flags & CSUM_IP) 1254 csum_flags |= TFD_IPChecksumEnable; 1255 if (m->m_pkthdr.csum_flags & CSUM_TCP) 1256 csum_flags |= TFD_TCPChecksumEnable; 1257 else if (m->m_pkthdr.csum_flags & CSUM_UDP) 1258 csum_flags |= TFD_UDPChecksumEnable; 1259 } 1260 1261 si = sc->sc_cdata.stge_tx_prod; 1262 tfd = &sc->sc_rdata.stge_tx_ring[si]; 1263 for (i = 0; i < nsegs; i++) 1264 tfd->tfd_frags[i].frag_word0 = 1265 htole64(FRAG_ADDR(txsegs[i].ds_addr) | 1266 FRAG_LEN(txsegs[i].ds_len)); 1267 sc->sc_cdata.stge_tx_cnt++; 1268 1269 tfc = TFD_FrameId(si) | TFD_WordAlign(TFD_WordAlign_disable) | 1270 TFD_FragCount(nsegs) | csum_flags; 1271 if (sc->sc_cdata.stge_tx_cnt >= STGE_TX_HIWAT) 1272 tfc |= TFD_TxDMAIndicate; 1273 1274 /* Update producer index. */ 1275 sc->sc_cdata.stge_tx_prod = (si + 1) % STGE_TX_RING_CNT; 1276 1277 /* Check if we have a VLAN tag to insert. */ 1278 if (m->m_flags & M_VLANTAG) 1279 tfc |= (TFD_VLANTagInsert | TFD_VID(m->m_pkthdr.ether_vtag)); 1280 tfd->tfd_control = htole64(tfc); 1281 1282 /* Update Tx Queue. */ 1283 STAILQ_REMOVE_HEAD(&sc->sc_cdata.stge_txfreeq, tx_q); 1284 STAILQ_INSERT_TAIL(&sc->sc_cdata.stge_txbusyq, txd, tx_q); 1285 txd->tx_m = m; 1286 1287 /* Sync descriptors. */ 1288 bus_dmamap_sync(sc->sc_cdata.stge_tx_tag, txd->tx_dmamap, 1289 BUS_DMASYNC_PREWRITE); 1290 bus_dmamap_sync(sc->sc_cdata.stge_tx_ring_tag, 1291 sc->sc_cdata.stge_tx_ring_map, 1292 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1293 1294 return (0); 1295 } 1296 1297 /* 1298 * stge_start: [ifnet interface function] 1299 * 1300 * Start packet transmission on the interface. 1301 */ 1302 static void 1303 stge_start(struct ifnet *ifp) 1304 { 1305 struct stge_softc *sc; 1306 1307 sc = ifp->if_softc; 1308 STGE_LOCK(sc); 1309 stge_start_locked(ifp); 1310 STGE_UNLOCK(sc); 1311 } 1312 1313 static void 1314 stge_start_locked(struct ifnet *ifp) 1315 { 1316 struct stge_softc *sc; 1317 struct mbuf *m_head; 1318 int enq; 1319 1320 sc = ifp->if_softc; 1321 1322 STGE_LOCK_ASSERT(sc); 1323 1324 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != 1325 IFF_DRV_RUNNING || sc->sc_link == 0) 1326 return; 1327 1328 for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd); ) { 1329 if (sc->sc_cdata.stge_tx_cnt >= STGE_TX_HIWAT) { 1330 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 1331 break; 1332 } 1333 1334 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); 1335 if (m_head == NULL) 1336 break; 1337 /* 1338 * Pack the data into the transmit ring. If we 1339 * don't have room, set the OACTIVE flag and wait 1340 * for the NIC to drain the ring. 1341 */ 1342 if (stge_encap(sc, &m_head)) { 1343 if (m_head == NULL) 1344 break; 1345 IFQ_DRV_PREPEND(&ifp->if_snd, m_head); 1346 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 1347 break; 1348 } 1349 1350 enq++; 1351 /* 1352 * If there's a BPF listener, bounce a copy of this frame 1353 * to him. 1354 */ 1355 ETHER_BPF_MTAP(ifp, m_head); 1356 } 1357 1358 if (enq > 0) { 1359 /* Transmit */ 1360 CSR_WRITE_4(sc, STGE_DMACtrl, DMAC_TxDMAPollNow); 1361 1362 /* Set a timeout in case the chip goes out to lunch. */ 1363 sc->sc_watchdog_timer = 5; 1364 } 1365 } 1366 1367 /* 1368 * stge_watchdog: 1369 * 1370 * Watchdog timer handler. 1371 */ 1372 static void 1373 stge_watchdog(struct stge_softc *sc) 1374 { 1375 struct ifnet *ifp; 1376 1377 STGE_LOCK_ASSERT(sc); 1378 1379 if (sc->sc_watchdog_timer == 0 || --sc->sc_watchdog_timer) 1380 return; 1381 1382 ifp = sc->sc_ifp; 1383 if_printf(sc->sc_ifp, "device timeout\n"); 1384 ifp->if_oerrors++; 1385 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1386 stge_init_locked(sc); 1387 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1388 stge_start_locked(ifp); 1389 } 1390 1391 /* 1392 * stge_ioctl: [ifnet interface function] 1393 * 1394 * Handle control requests from the operator. 1395 */ 1396 static int 1397 stge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) 1398 { 1399 struct stge_softc *sc; 1400 struct ifreq *ifr; 1401 struct mii_data *mii; 1402 int error, mask; 1403 1404 sc = ifp->if_softc; 1405 ifr = (struct ifreq *)data; 1406 error = 0; 1407 switch (cmd) { 1408 case SIOCSIFMTU: 1409 if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > STGE_JUMBO_MTU) 1410 error = EINVAL; 1411 else if (ifp->if_mtu != ifr->ifr_mtu) { 1412 ifp->if_mtu = ifr->ifr_mtu; 1413 STGE_LOCK(sc); 1414 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { 1415 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1416 stge_init_locked(sc); 1417 } 1418 STGE_UNLOCK(sc); 1419 } 1420 break; 1421 case SIOCSIFFLAGS: 1422 STGE_LOCK(sc); 1423 if ((ifp->if_flags & IFF_UP) != 0) { 1424 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { 1425 if (((ifp->if_flags ^ sc->sc_if_flags) 1426 & IFF_PROMISC) != 0) 1427 stge_set_filter(sc); 1428 } else { 1429 if (sc->sc_detach == 0) 1430 stge_init_locked(sc); 1431 } 1432 } else { 1433 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) 1434 stge_stop(sc); 1435 } 1436 sc->sc_if_flags = ifp->if_flags; 1437 STGE_UNLOCK(sc); 1438 break; 1439 case SIOCADDMULTI: 1440 case SIOCDELMULTI: 1441 STGE_LOCK(sc); 1442 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) 1443 stge_set_multi(sc); 1444 STGE_UNLOCK(sc); 1445 break; 1446 case SIOCSIFMEDIA: 1447 case SIOCGIFMEDIA: 1448 mii = device_get_softc(sc->sc_miibus); 1449 error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, cmd); 1450 break; 1451 case SIOCSIFCAP: 1452 mask = ifr->ifr_reqcap ^ ifp->if_capenable; 1453 #ifdef DEVICE_POLLING 1454 if ((mask & IFCAP_POLLING) != 0) { 1455 if ((ifr->ifr_reqcap & IFCAP_POLLING) != 0) { 1456 error = ether_poll_register(stge_poll, ifp); 1457 if (error != 0) 1458 break; 1459 STGE_LOCK(sc); 1460 CSR_WRITE_2(sc, STGE_IntEnable, 0); 1461 ifp->if_capenable |= IFCAP_POLLING; 1462 STGE_UNLOCK(sc); 1463 } else { 1464 error = ether_poll_deregister(ifp); 1465 if (error != 0) 1466 break; 1467 STGE_LOCK(sc); 1468 CSR_WRITE_2(sc, STGE_IntEnable, 1469 sc->sc_IntEnable); 1470 ifp->if_capenable &= ~IFCAP_POLLING; 1471 STGE_UNLOCK(sc); 1472 } 1473 } 1474 #endif 1475 if ((mask & IFCAP_HWCSUM) != 0) { 1476 ifp->if_capenable ^= IFCAP_HWCSUM; 1477 if ((IFCAP_HWCSUM & ifp->if_capenable) != 0 && 1478 (IFCAP_HWCSUM & ifp->if_capabilities) != 0) 1479 ifp->if_hwassist = STGE_CSUM_FEATURES; 1480 else 1481 ifp->if_hwassist = 0; 1482 } 1483 if ((mask & IFCAP_WOL) != 0 && 1484 (ifp->if_capabilities & IFCAP_WOL) != 0) { 1485 if ((mask & IFCAP_WOL_MAGIC) != 0) 1486 ifp->if_capenable ^= IFCAP_WOL_MAGIC; 1487 } 1488 if ((mask & IFCAP_VLAN_HWTAGGING) != 0) { 1489 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; 1490 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { 1491 STGE_LOCK(sc); 1492 stge_vlan_setup(sc); 1493 STGE_UNLOCK(sc); 1494 } 1495 } 1496 VLAN_CAPABILITIES(ifp); 1497 break; 1498 default: 1499 error = ether_ioctl(ifp, cmd, data); 1500 break; 1501 } 1502 1503 return (error); 1504 } 1505 1506 static void 1507 stge_link_task(void *arg, int pending) 1508 { 1509 struct stge_softc *sc; 1510 struct mii_data *mii; 1511 uint32_t v, ac; 1512 int i; 1513 1514 sc = (struct stge_softc *)arg; 1515 STGE_LOCK(sc); 1516 1517 mii = device_get_softc(sc->sc_miibus); 1518 if (mii->mii_media_status & IFM_ACTIVE) { 1519 if (IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) 1520 sc->sc_link = 1; 1521 } else 1522 sc->sc_link = 0; 1523 1524 sc->sc_MACCtrl = 0; 1525 if (((mii->mii_media_active & IFM_GMASK) & IFM_FDX) != 0) 1526 sc->sc_MACCtrl |= MC_DuplexSelect; 1527 if (((mii->mii_media_active & IFM_GMASK) & IFM_ETH_RXPAUSE) != 0) 1528 sc->sc_MACCtrl |= MC_RxFlowControlEnable; 1529 if (((mii->mii_media_active & IFM_GMASK) & IFM_ETH_TXPAUSE) != 0) 1530 sc->sc_MACCtrl |= MC_TxFlowControlEnable; 1531 /* 1532 * Update STGE_MACCtrl register depending on link status. 1533 * (duplex, flow control etc) 1534 */ 1535 v = ac = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 1536 v &= ~(MC_DuplexSelect|MC_RxFlowControlEnable|MC_TxFlowControlEnable); 1537 v |= sc->sc_MACCtrl; 1538 CSR_WRITE_4(sc, STGE_MACCtrl, v); 1539 if (((ac ^ sc->sc_MACCtrl) & MC_DuplexSelect) != 0) { 1540 /* Duplex setting changed, reset Tx/Rx functions. */ 1541 ac = CSR_READ_4(sc, STGE_AsicCtrl); 1542 ac |= AC_TxReset | AC_RxReset; 1543 CSR_WRITE_4(sc, STGE_AsicCtrl, ac); 1544 for (i = 0; i < STGE_TIMEOUT; i++) { 1545 DELAY(100); 1546 if ((CSR_READ_4(sc, STGE_AsicCtrl) & AC_ResetBusy) == 0) 1547 break; 1548 } 1549 if (i == STGE_TIMEOUT) 1550 device_printf(sc->sc_dev, "reset failed to complete\n"); 1551 } 1552 STGE_UNLOCK(sc); 1553 } 1554 1555 static __inline int 1556 stge_tx_error(struct stge_softc *sc) 1557 { 1558 uint32_t txstat; 1559 int error; 1560 1561 for (error = 0;;) { 1562 txstat = CSR_READ_4(sc, STGE_TxStatus); 1563 if ((txstat & TS_TxComplete) == 0) 1564 break; 1565 /* Tx underrun */ 1566 if ((txstat & TS_TxUnderrun) != 0) { 1567 /* 1568 * XXX 1569 * There should be a more better way to recover 1570 * from Tx underrun instead of a full reset. 1571 */ 1572 if (sc->sc_nerr++ < STGE_MAXERR) 1573 device_printf(sc->sc_dev, "Tx underrun, " 1574 "resetting...\n"); 1575 if (sc->sc_nerr == STGE_MAXERR) 1576 device_printf(sc->sc_dev, "too many errors; " 1577 "not reporting any more\n"); 1578 error = -1; 1579 break; 1580 } 1581 /* Maximum/Late collisions, Re-enable Tx MAC. */ 1582 if ((txstat & (TS_MaxCollisions|TS_LateCollision)) != 0) 1583 CSR_WRITE_4(sc, STGE_MACCtrl, 1584 (CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK) | 1585 MC_TxEnable); 1586 } 1587 1588 return (error); 1589 } 1590 1591 /* 1592 * stge_intr: 1593 * 1594 * Interrupt service routine. 1595 */ 1596 static void 1597 stge_intr(void *arg) 1598 { 1599 struct stge_softc *sc; 1600 struct ifnet *ifp; 1601 int reinit; 1602 uint16_t status; 1603 1604 sc = (struct stge_softc *)arg; 1605 ifp = sc->sc_ifp; 1606 1607 STGE_LOCK(sc); 1608 1609 #ifdef DEVICE_POLLING 1610 if ((ifp->if_capenable & IFCAP_POLLING) != 0) 1611 goto done_locked; 1612 #endif 1613 status = CSR_READ_2(sc, STGE_IntStatus); 1614 if (sc->sc_suspended || (status & IS_InterruptStatus) == 0) 1615 goto done_locked; 1616 1617 /* Disable interrupts. */ 1618 for (reinit = 0;;) { 1619 status = CSR_READ_2(sc, STGE_IntStatusAck); 1620 status &= sc->sc_IntEnable; 1621 if (status == 0) 1622 break; 1623 /* Host interface errors. */ 1624 if ((status & IS_HostError) != 0) { 1625 device_printf(sc->sc_dev, 1626 "Host interface error, resetting...\n"); 1627 reinit = 1; 1628 goto force_init; 1629 } 1630 1631 /* Receive interrupts. */ 1632 if ((status & IS_RxDMAComplete) != 0) { 1633 stge_rxeof(sc); 1634 if ((status & IS_RFDListEnd) != 0) 1635 CSR_WRITE_4(sc, STGE_DMACtrl, 1636 DMAC_RxDMAPollNow); 1637 } 1638 1639 /* Transmit interrupts. */ 1640 if ((status & (IS_TxDMAComplete | IS_TxComplete)) != 0) 1641 stge_txeof(sc); 1642 1643 /* Transmission errors.*/ 1644 if ((status & IS_TxComplete) != 0) { 1645 if ((reinit = stge_tx_error(sc)) != 0) 1646 break; 1647 } 1648 } 1649 1650 force_init: 1651 if (reinit != 0) { 1652 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1653 stge_init_locked(sc); 1654 } 1655 1656 /* Re-enable interrupts. */ 1657 CSR_WRITE_2(sc, STGE_IntEnable, sc->sc_IntEnable); 1658 1659 /* Try to get more packets going. */ 1660 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1661 stge_start_locked(ifp); 1662 1663 done_locked: 1664 STGE_UNLOCK(sc); 1665 } 1666 1667 /* 1668 * stge_txeof: 1669 * 1670 * Helper; handle transmit interrupts. 1671 */ 1672 static void 1673 stge_txeof(struct stge_softc *sc) 1674 { 1675 struct ifnet *ifp; 1676 struct stge_txdesc *txd; 1677 uint64_t control; 1678 int cons; 1679 1680 STGE_LOCK_ASSERT(sc); 1681 1682 ifp = sc->sc_ifp; 1683 1684 txd = STAILQ_FIRST(&sc->sc_cdata.stge_txbusyq); 1685 if (txd == NULL) 1686 return; 1687 bus_dmamap_sync(sc->sc_cdata.stge_tx_ring_tag, 1688 sc->sc_cdata.stge_tx_ring_map, BUS_DMASYNC_POSTREAD); 1689 1690 /* 1691 * Go through our Tx list and free mbufs for those 1692 * frames which have been transmitted. 1693 */ 1694 for (cons = sc->sc_cdata.stge_tx_cons;; 1695 cons = (cons + 1) % STGE_TX_RING_CNT) { 1696 if (sc->sc_cdata.stge_tx_cnt <= 0) 1697 break; 1698 control = le64toh(sc->sc_rdata.stge_tx_ring[cons].tfd_control); 1699 if ((control & TFD_TFDDone) == 0) 1700 break; 1701 sc->sc_cdata.stge_tx_cnt--; 1702 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 1703 1704 bus_dmamap_sync(sc->sc_cdata.stge_tx_tag, txd->tx_dmamap, 1705 BUS_DMASYNC_POSTWRITE); 1706 bus_dmamap_unload(sc->sc_cdata.stge_tx_tag, txd->tx_dmamap); 1707 1708 /* Output counter is updated with statistics register */ 1709 m_freem(txd->tx_m); 1710 txd->tx_m = NULL; 1711 STAILQ_REMOVE_HEAD(&sc->sc_cdata.stge_txbusyq, tx_q); 1712 STAILQ_INSERT_TAIL(&sc->sc_cdata.stge_txfreeq, txd, tx_q); 1713 txd = STAILQ_FIRST(&sc->sc_cdata.stge_txbusyq); 1714 } 1715 sc->sc_cdata.stge_tx_cons = cons; 1716 if (sc->sc_cdata.stge_tx_cnt == 0) 1717 sc->sc_watchdog_timer = 0; 1718 1719 bus_dmamap_sync(sc->sc_cdata.stge_tx_ring_tag, 1720 sc->sc_cdata.stge_tx_ring_map, 1721 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1722 } 1723 1724 static __inline void 1725 stge_discard_rxbuf(struct stge_softc *sc, int idx) 1726 { 1727 struct stge_rfd *rfd; 1728 1729 rfd = &sc->sc_rdata.stge_rx_ring[idx]; 1730 rfd->rfd_status = 0; 1731 } 1732 1733 #ifndef __NO_STRICT_ALIGNMENT 1734 /* 1735 * It seems that TC9021's DMA engine has alignment restrictions in 1736 * DMA scatter operations. The first DMA segment has no address 1737 * alignment restrictins but the rest should be aligned on 4(?) bytes 1738 * boundary. Otherwise it would corrupt random memory. Since we don't 1739 * know which one is used for the first segment in advance we simply 1740 * don't align at all. 1741 * To avoid copying over an entire frame to align, we allocate a new 1742 * mbuf and copy ethernet header to the new mbuf. The new mbuf is 1743 * prepended into the existing mbuf chain. 1744 */ 1745 static __inline struct mbuf * 1746 stge_fixup_rx(struct stge_softc *sc, struct mbuf *m) 1747 { 1748 struct mbuf *n; 1749 1750 n = NULL; 1751 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) { 1752 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len); 1753 m->m_data += ETHER_HDR_LEN; 1754 n = m; 1755 } else { 1756 MGETHDR(n, M_DONTWAIT, MT_DATA); 1757 if (n != NULL) { 1758 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN); 1759 m->m_data += ETHER_HDR_LEN; 1760 m->m_len -= ETHER_HDR_LEN; 1761 n->m_len = ETHER_HDR_LEN; 1762 M_MOVE_PKTHDR(n, m); 1763 n->m_next = m; 1764 } else 1765 m_freem(m); 1766 } 1767 1768 return (n); 1769 } 1770 #endif 1771 1772 /* 1773 * stge_rxeof: 1774 * 1775 * Helper; handle receive interrupts. 1776 */ 1777 static int 1778 stge_rxeof(struct stge_softc *sc) 1779 { 1780 struct ifnet *ifp; 1781 struct stge_rxdesc *rxd; 1782 struct mbuf *mp, *m; 1783 uint64_t status64; 1784 uint32_t status; 1785 int cons, prog, rx_npkts; 1786 1787 STGE_LOCK_ASSERT(sc); 1788 1789 rx_npkts = 0; 1790 ifp = sc->sc_ifp; 1791 1792 bus_dmamap_sync(sc->sc_cdata.stge_rx_ring_tag, 1793 sc->sc_cdata.stge_rx_ring_map, BUS_DMASYNC_POSTREAD); 1794 1795 prog = 0; 1796 for (cons = sc->sc_cdata.stge_rx_cons; prog < STGE_RX_RING_CNT; 1797 prog++, cons = (cons + 1) % STGE_RX_RING_CNT) { 1798 status64 = le64toh(sc->sc_rdata.stge_rx_ring[cons].rfd_status); 1799 status = RFD_RxStatus(status64); 1800 if ((status & RFD_RFDDone) == 0) 1801 break; 1802 #ifdef DEVICE_POLLING 1803 if (ifp->if_capenable & IFCAP_POLLING) { 1804 if (sc->sc_cdata.stge_rxcycles <= 0) 1805 break; 1806 sc->sc_cdata.stge_rxcycles--; 1807 } 1808 #endif 1809 prog++; 1810 rxd = &sc->sc_cdata.stge_rxdesc[cons]; 1811 mp = rxd->rx_m; 1812 1813 /* 1814 * If the packet had an error, drop it. Note we count 1815 * the error later in the periodic stats update. 1816 */ 1817 if ((status & RFD_FrameEnd) != 0 && (status & 1818 (RFD_RxFIFOOverrun | RFD_RxRuntFrame | 1819 RFD_RxAlignmentError | RFD_RxFCSError | 1820 RFD_RxLengthError)) != 0) { 1821 stge_discard_rxbuf(sc, cons); 1822 if (sc->sc_cdata.stge_rxhead != NULL) { 1823 m_freem(sc->sc_cdata.stge_rxhead); 1824 STGE_RXCHAIN_RESET(sc); 1825 } 1826 continue; 1827 } 1828 /* 1829 * Add a new receive buffer to the ring. 1830 */ 1831 if (stge_newbuf(sc, cons) != 0) { 1832 ifp->if_iqdrops++; 1833 stge_discard_rxbuf(sc, cons); 1834 if (sc->sc_cdata.stge_rxhead != NULL) { 1835 m_freem(sc->sc_cdata.stge_rxhead); 1836 STGE_RXCHAIN_RESET(sc); 1837 } 1838 continue; 1839 } 1840 1841 if ((status & RFD_FrameEnd) != 0) 1842 mp->m_len = RFD_RxDMAFrameLen(status) - 1843 sc->sc_cdata.stge_rxlen; 1844 sc->sc_cdata.stge_rxlen += mp->m_len; 1845 1846 /* Chain mbufs. */ 1847 if (sc->sc_cdata.stge_rxhead == NULL) { 1848 sc->sc_cdata.stge_rxhead = mp; 1849 sc->sc_cdata.stge_rxtail = mp; 1850 } else { 1851 mp->m_flags &= ~M_PKTHDR; 1852 sc->sc_cdata.stge_rxtail->m_next = mp; 1853 sc->sc_cdata.stge_rxtail = mp; 1854 } 1855 1856 if ((status & RFD_FrameEnd) != 0) { 1857 m = sc->sc_cdata.stge_rxhead; 1858 m->m_pkthdr.rcvif = ifp; 1859 m->m_pkthdr.len = sc->sc_cdata.stge_rxlen; 1860 1861 if (m->m_pkthdr.len > sc->sc_if_framesize) { 1862 m_freem(m); 1863 STGE_RXCHAIN_RESET(sc); 1864 continue; 1865 } 1866 /* 1867 * Set the incoming checksum information for 1868 * the packet. 1869 */ 1870 if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) { 1871 if ((status & RFD_IPDetected) != 0) { 1872 m->m_pkthdr.csum_flags |= 1873 CSUM_IP_CHECKED; 1874 if ((status & RFD_IPError) == 0) 1875 m->m_pkthdr.csum_flags |= 1876 CSUM_IP_VALID; 1877 } 1878 if (((status & RFD_TCPDetected) != 0 && 1879 (status & RFD_TCPError) == 0) || 1880 ((status & RFD_UDPDetected) != 0 && 1881 (status & RFD_UDPError) == 0)) { 1882 m->m_pkthdr.csum_flags |= 1883 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR); 1884 m->m_pkthdr.csum_data = 0xffff; 1885 } 1886 } 1887 1888 #ifndef __NO_STRICT_ALIGNMENT 1889 if (sc->sc_if_framesize > (MCLBYTES - ETHER_ALIGN)) { 1890 if ((m = stge_fixup_rx(sc, m)) == NULL) { 1891 STGE_RXCHAIN_RESET(sc); 1892 continue; 1893 } 1894 } 1895 #endif 1896 /* Check for VLAN tagged packets. */ 1897 if ((status & RFD_VLANDetected) != 0 && 1898 (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) { 1899 m->m_pkthdr.ether_vtag = RFD_TCI(status64); 1900 m->m_flags |= M_VLANTAG; 1901 } 1902 1903 STGE_UNLOCK(sc); 1904 /* Pass it on. */ 1905 (*ifp->if_input)(ifp, m); 1906 STGE_LOCK(sc); 1907 rx_npkts++; 1908 1909 STGE_RXCHAIN_RESET(sc); 1910 } 1911 } 1912 1913 if (prog > 0) { 1914 /* Update the consumer index. */ 1915 sc->sc_cdata.stge_rx_cons = cons; 1916 bus_dmamap_sync(sc->sc_cdata.stge_rx_ring_tag, 1917 sc->sc_cdata.stge_rx_ring_map, 1918 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1919 } 1920 return (rx_npkts); 1921 } 1922 1923 #ifdef DEVICE_POLLING 1924 static int 1925 stge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) 1926 { 1927 struct stge_softc *sc; 1928 uint16_t status; 1929 int rx_npkts; 1930 1931 rx_npkts = 0; 1932 sc = ifp->if_softc; 1933 STGE_LOCK(sc); 1934 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 1935 STGE_UNLOCK(sc); 1936 return (rx_npkts); 1937 } 1938 1939 sc->sc_cdata.stge_rxcycles = count; 1940 rx_npkts = stge_rxeof(sc); 1941 stge_txeof(sc); 1942 1943 if (cmd == POLL_AND_CHECK_STATUS) { 1944 status = CSR_READ_2(sc, STGE_IntStatus); 1945 status &= sc->sc_IntEnable; 1946 if (status != 0) { 1947 if ((status & IS_HostError) != 0) { 1948 device_printf(sc->sc_dev, 1949 "Host interface error, resetting...\n"); 1950 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1951 stge_init_locked(sc); 1952 } 1953 if ((status & IS_TxComplete) != 0) { 1954 if (stge_tx_error(sc) != 0) { 1955 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1956 stge_init_locked(sc); 1957 } 1958 } 1959 } 1960 1961 } 1962 1963 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1964 stge_start_locked(ifp); 1965 1966 STGE_UNLOCK(sc); 1967 return (rx_npkts); 1968 } 1969 #endif /* DEVICE_POLLING */ 1970 1971 /* 1972 * stge_tick: 1973 * 1974 * One second timer, used to tick the MII. 1975 */ 1976 static void 1977 stge_tick(void *arg) 1978 { 1979 struct stge_softc *sc; 1980 struct mii_data *mii; 1981 1982 sc = (struct stge_softc *)arg; 1983 1984 STGE_LOCK_ASSERT(sc); 1985 1986 mii = device_get_softc(sc->sc_miibus); 1987 mii_tick(mii); 1988 1989 /* Update statistics counters. */ 1990 stge_stats_update(sc); 1991 1992 /* 1993 * Relcaim any pending Tx descriptors to release mbufs in a 1994 * timely manner as we don't generate Tx completion interrupts 1995 * for every frame. This limits the delay to a maximum of one 1996 * second. 1997 */ 1998 if (sc->sc_cdata.stge_tx_cnt != 0) 1999 stge_txeof(sc); 2000 2001 stge_watchdog(sc); 2002 2003 callout_reset(&sc->sc_tick_ch, hz, stge_tick, sc); 2004 } 2005 2006 /* 2007 * stge_stats_update: 2008 * 2009 * Read the TC9021 statistics counters. 2010 */ 2011 static void 2012 stge_stats_update(struct stge_softc *sc) 2013 { 2014 struct ifnet *ifp; 2015 2016 STGE_LOCK_ASSERT(sc); 2017 2018 ifp = sc->sc_ifp; 2019 2020 CSR_READ_4(sc,STGE_OctetRcvOk); 2021 2022 ifp->if_ipackets += CSR_READ_4(sc, STGE_FramesRcvdOk); 2023 2024 ifp->if_ierrors += CSR_READ_2(sc, STGE_FramesLostRxErrors); 2025 2026 CSR_READ_4(sc, STGE_OctetXmtdOk); 2027 2028 ifp->if_opackets += CSR_READ_4(sc, STGE_FramesXmtdOk); 2029 2030 ifp->if_collisions += 2031 CSR_READ_4(sc, STGE_LateCollisions) + 2032 CSR_READ_4(sc, STGE_MultiColFrames) + 2033 CSR_READ_4(sc, STGE_SingleColFrames); 2034 2035 ifp->if_oerrors += 2036 CSR_READ_2(sc, STGE_FramesAbortXSColls) + 2037 CSR_READ_2(sc, STGE_FramesWEXDeferal); 2038 } 2039 2040 /* 2041 * stge_reset: 2042 * 2043 * Perform a soft reset on the TC9021. 2044 */ 2045 static void 2046 stge_reset(struct stge_softc *sc, uint32_t how) 2047 { 2048 uint32_t ac; 2049 uint8_t v; 2050 int i, dv; 2051 2052 STGE_LOCK_ASSERT(sc); 2053 2054 dv = 5000; 2055 ac = CSR_READ_4(sc, STGE_AsicCtrl); 2056 switch (how) { 2057 case STGE_RESET_TX: 2058 ac |= AC_TxReset | AC_FIFO; 2059 dv = 100; 2060 break; 2061 case STGE_RESET_RX: 2062 ac |= AC_RxReset | AC_FIFO; 2063 dv = 100; 2064 break; 2065 case STGE_RESET_FULL: 2066 default: 2067 /* 2068 * Only assert RstOut if we're fiber. We need GMII clocks 2069 * to be present in order for the reset to complete on fiber 2070 * cards. 2071 */ 2072 ac |= AC_GlobalReset | AC_RxReset | AC_TxReset | 2073 AC_DMA | AC_FIFO | AC_Network | AC_Host | AC_AutoInit | 2074 (sc->sc_usefiber ? AC_RstOut : 0); 2075 break; 2076 } 2077 2078 CSR_WRITE_4(sc, STGE_AsicCtrl, ac); 2079 2080 /* Account for reset problem at 10Mbps. */ 2081 DELAY(dv); 2082 2083 for (i = 0; i < STGE_TIMEOUT; i++) { 2084 if ((CSR_READ_4(sc, STGE_AsicCtrl) & AC_ResetBusy) == 0) 2085 break; 2086 DELAY(dv); 2087 } 2088 2089 if (i == STGE_TIMEOUT) 2090 device_printf(sc->sc_dev, "reset failed to complete\n"); 2091 2092 /* Set LED, from Linux IPG driver. */ 2093 ac = CSR_READ_4(sc, STGE_AsicCtrl); 2094 ac &= ~(AC_LEDMode | AC_LEDSpeed | AC_LEDModeBit1); 2095 if ((sc->sc_led & 0x01) != 0) 2096 ac |= AC_LEDMode; 2097 if ((sc->sc_led & 0x03) != 0) 2098 ac |= AC_LEDModeBit1; 2099 if ((sc->sc_led & 0x08) != 0) 2100 ac |= AC_LEDSpeed; 2101 CSR_WRITE_4(sc, STGE_AsicCtrl, ac); 2102 2103 /* Set PHY, from Linux IPG driver */ 2104 v = CSR_READ_1(sc, STGE_PhySet); 2105 v &= ~(PS_MemLenb9b | PS_MemLen | PS_NonCompdet); 2106 v |= ((sc->sc_led & 0x70) >> 4); 2107 CSR_WRITE_1(sc, STGE_PhySet, v); 2108 } 2109 2110 /* 2111 * stge_init: [ ifnet interface function ] 2112 * 2113 * Initialize the interface. 2114 */ 2115 static void 2116 stge_init(void *xsc) 2117 { 2118 struct stge_softc *sc; 2119 2120 sc = (struct stge_softc *)xsc; 2121 STGE_LOCK(sc); 2122 stge_init_locked(sc); 2123 STGE_UNLOCK(sc); 2124 } 2125 2126 static void 2127 stge_init_locked(struct stge_softc *sc) 2128 { 2129 struct ifnet *ifp; 2130 struct mii_data *mii; 2131 uint16_t eaddr[3]; 2132 uint32_t v; 2133 int error; 2134 2135 STGE_LOCK_ASSERT(sc); 2136 2137 ifp = sc->sc_ifp; 2138 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) 2139 return; 2140 mii = device_get_softc(sc->sc_miibus); 2141 2142 /* 2143 * Cancel any pending I/O. 2144 */ 2145 stge_stop(sc); 2146 2147 /* 2148 * Reset the chip to a known state. 2149 */ 2150 stge_reset(sc, STGE_RESET_FULL); 2151 2152 /* Init descriptors. */ 2153 error = stge_init_rx_ring(sc); 2154 if (error != 0) { 2155 device_printf(sc->sc_dev, 2156 "initialization failed: no memory for rx buffers\n"); 2157 stge_stop(sc); 2158 goto out; 2159 } 2160 stge_init_tx_ring(sc); 2161 2162 /* Set the station address. */ 2163 bcopy(IF_LLADDR(ifp), eaddr, ETHER_ADDR_LEN); 2164 CSR_WRITE_2(sc, STGE_StationAddress0, htole16(eaddr[0])); 2165 CSR_WRITE_2(sc, STGE_StationAddress1, htole16(eaddr[1])); 2166 CSR_WRITE_2(sc, STGE_StationAddress2, htole16(eaddr[2])); 2167 2168 /* 2169 * Set the statistics masks. Disable all the RMON stats, 2170 * and disable selected stats in the non-RMON stats registers. 2171 */ 2172 CSR_WRITE_4(sc, STGE_RMONStatisticsMask, 0xffffffff); 2173 CSR_WRITE_4(sc, STGE_StatisticsMask, 2174 (1U << 1) | (1U << 2) | (1U << 3) | (1U << 4) | (1U << 5) | 2175 (1U << 6) | (1U << 7) | (1U << 8) | (1U << 9) | (1U << 10) | 2176 (1U << 13) | (1U << 14) | (1U << 15) | (1U << 19) | (1U << 20) | 2177 (1U << 21)); 2178 2179 /* Set up the receive filter. */ 2180 stge_set_filter(sc); 2181 /* Program multicast filter. */ 2182 stge_set_multi(sc); 2183 2184 /* 2185 * Give the transmit and receive ring to the chip. 2186 */ 2187 CSR_WRITE_4(sc, STGE_TFDListPtrHi, 2188 STGE_ADDR_HI(STGE_TX_RING_ADDR(sc, 0))); 2189 CSR_WRITE_4(sc, STGE_TFDListPtrLo, 2190 STGE_ADDR_LO(STGE_TX_RING_ADDR(sc, 0))); 2191 2192 CSR_WRITE_4(sc, STGE_RFDListPtrHi, 2193 STGE_ADDR_HI(STGE_RX_RING_ADDR(sc, 0))); 2194 CSR_WRITE_4(sc, STGE_RFDListPtrLo, 2195 STGE_ADDR_LO(STGE_RX_RING_ADDR(sc, 0))); 2196 2197 /* 2198 * Initialize the Tx auto-poll period. It's OK to make this number 2199 * large (255 is the max, but we use 127) -- we explicitly kick the 2200 * transmit engine when there's actually a packet. 2201 */ 2202 CSR_WRITE_1(sc, STGE_TxDMAPollPeriod, 127); 2203 2204 /* ..and the Rx auto-poll period. */ 2205 CSR_WRITE_1(sc, STGE_RxDMAPollPeriod, 1); 2206 2207 /* Initialize the Tx start threshold. */ 2208 CSR_WRITE_2(sc, STGE_TxStartThresh, sc->sc_txthresh); 2209 2210 /* Rx DMA thresholds, from Linux */ 2211 CSR_WRITE_1(sc, STGE_RxDMABurstThresh, 0x30); 2212 CSR_WRITE_1(sc, STGE_RxDMAUrgentThresh, 0x30); 2213 2214 /* Rx early threhold, from Linux */ 2215 CSR_WRITE_2(sc, STGE_RxEarlyThresh, 0x7ff); 2216 2217 /* Tx DMA thresholds, from Linux */ 2218 CSR_WRITE_1(sc, STGE_TxDMABurstThresh, 0x30); 2219 CSR_WRITE_1(sc, STGE_TxDMAUrgentThresh, 0x04); 2220 2221 /* 2222 * Initialize the Rx DMA interrupt control register. We 2223 * request an interrupt after every incoming packet, but 2224 * defer it for sc_rxint_dmawait us. When the number of 2225 * interrupts pending reaches STGE_RXINT_NFRAME, we stop 2226 * deferring the interrupt, and signal it immediately. 2227 */ 2228 CSR_WRITE_4(sc, STGE_RxDMAIntCtrl, 2229 RDIC_RxFrameCount(sc->sc_rxint_nframe) | 2230 RDIC_RxDMAWaitTime(STGE_RXINT_USECS2TICK(sc->sc_rxint_dmawait))); 2231 2232 /* 2233 * Initialize the interrupt mask. 2234 */ 2235 sc->sc_IntEnable = IS_HostError | IS_TxComplete | 2236 IS_TxDMAComplete | IS_RxDMAComplete | IS_RFDListEnd; 2237 #ifdef DEVICE_POLLING 2238 /* Disable interrupts if we are polling. */ 2239 if ((ifp->if_capenable & IFCAP_POLLING) != 0) 2240 CSR_WRITE_2(sc, STGE_IntEnable, 0); 2241 else 2242 #endif 2243 CSR_WRITE_2(sc, STGE_IntEnable, sc->sc_IntEnable); 2244 2245 /* 2246 * Configure the DMA engine. 2247 * XXX Should auto-tune TxBurstLimit. 2248 */ 2249 CSR_WRITE_4(sc, STGE_DMACtrl, sc->sc_DMACtrl | DMAC_TxBurstLimit(3)); 2250 2251 /* 2252 * Send a PAUSE frame when we reach 29,696 bytes in the Rx 2253 * FIFO, and send an un-PAUSE frame when we reach 3056 bytes 2254 * in the Rx FIFO. 2255 */ 2256 CSR_WRITE_2(sc, STGE_FlowOnTresh, 29696 / 16); 2257 CSR_WRITE_2(sc, STGE_FlowOffThresh, 3056 / 16); 2258 2259 /* 2260 * Set the maximum frame size. 2261 */ 2262 sc->sc_if_framesize = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; 2263 CSR_WRITE_2(sc, STGE_MaxFrameSize, sc->sc_if_framesize); 2264 2265 /* 2266 * Initialize MacCtrl -- do it before setting the media, 2267 * as setting the media will actually program the register. 2268 * 2269 * Note: We have to poke the IFS value before poking 2270 * anything else. 2271 */ 2272 /* Tx/Rx MAC should be disabled before programming IFS.*/ 2273 CSR_WRITE_4(sc, STGE_MACCtrl, MC_IFSSelect(MC_IFS96bit)); 2274 2275 stge_vlan_setup(sc); 2276 2277 if (sc->sc_rev >= 6) { /* >= B.2 */ 2278 /* Multi-frag frame bug work-around. */ 2279 CSR_WRITE_2(sc, STGE_DebugCtrl, 2280 CSR_READ_2(sc, STGE_DebugCtrl) | 0x0200); 2281 2282 /* Tx Poll Now bug work-around. */ 2283 CSR_WRITE_2(sc, STGE_DebugCtrl, 2284 CSR_READ_2(sc, STGE_DebugCtrl) | 0x0010); 2285 /* Tx Poll Now bug work-around. */ 2286 CSR_WRITE_2(sc, STGE_DebugCtrl, 2287 CSR_READ_2(sc, STGE_DebugCtrl) | 0x0020); 2288 } 2289 2290 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2291 v |= MC_StatisticsEnable | MC_TxEnable | MC_RxEnable; 2292 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2293 /* 2294 * It seems that transmitting frames without checking the state of 2295 * Rx/Tx MAC wedge the hardware. 2296 */ 2297 stge_start_tx(sc); 2298 stge_start_rx(sc); 2299 2300 sc->sc_link = 0; 2301 /* 2302 * Set the current media. 2303 */ 2304 mii_mediachg(mii); 2305 2306 /* 2307 * Start the one second MII clock. 2308 */ 2309 callout_reset(&sc->sc_tick_ch, hz, stge_tick, sc); 2310 2311 /* 2312 * ...all done! 2313 */ 2314 ifp->if_drv_flags |= IFF_DRV_RUNNING; 2315 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 2316 2317 out: 2318 if (error != 0) 2319 device_printf(sc->sc_dev, "interface not running\n"); 2320 } 2321 2322 static void 2323 stge_vlan_setup(struct stge_softc *sc) 2324 { 2325 struct ifnet *ifp; 2326 uint32_t v; 2327 2328 ifp = sc->sc_ifp; 2329 /* 2330 * The NIC always copy a VLAN tag regardless of STGE_MACCtrl 2331 * MC_AutoVLANuntagging bit. 2332 * MC_AutoVLANtagging bit selects which VLAN source to use 2333 * between STGE_VLANTag and TFC. However TFC TFD_VLANTagInsert 2334 * bit has priority over MC_AutoVLANtagging bit. So we always 2335 * use TFC instead of STGE_VLANTag register. 2336 */ 2337 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2338 if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) 2339 v |= MC_AutoVLANuntagging; 2340 else 2341 v &= ~MC_AutoVLANuntagging; 2342 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2343 } 2344 2345 /* 2346 * Stop transmission on the interface. 2347 */ 2348 static void 2349 stge_stop(struct stge_softc *sc) 2350 { 2351 struct ifnet *ifp; 2352 struct stge_txdesc *txd; 2353 struct stge_rxdesc *rxd; 2354 uint32_t v; 2355 int i; 2356 2357 STGE_LOCK_ASSERT(sc); 2358 /* 2359 * Stop the one second clock. 2360 */ 2361 callout_stop(&sc->sc_tick_ch); 2362 sc->sc_watchdog_timer = 0; 2363 2364 /* 2365 * Disable interrupts. 2366 */ 2367 CSR_WRITE_2(sc, STGE_IntEnable, 0); 2368 2369 /* 2370 * Stop receiver, transmitter, and stats update. 2371 */ 2372 stge_stop_rx(sc); 2373 stge_stop_tx(sc); 2374 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2375 v |= MC_StatisticsDisable; 2376 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2377 2378 /* 2379 * Stop the transmit and receive DMA. 2380 */ 2381 stge_dma_wait(sc); 2382 CSR_WRITE_4(sc, STGE_TFDListPtrHi, 0); 2383 CSR_WRITE_4(sc, STGE_TFDListPtrLo, 0); 2384 CSR_WRITE_4(sc, STGE_RFDListPtrHi, 0); 2385 CSR_WRITE_4(sc, STGE_RFDListPtrLo, 0); 2386 2387 /* 2388 * Free RX and TX mbufs still in the queues. 2389 */ 2390 for (i = 0; i < STGE_RX_RING_CNT; i++) { 2391 rxd = &sc->sc_cdata.stge_rxdesc[i]; 2392 if (rxd->rx_m != NULL) { 2393 bus_dmamap_sync(sc->sc_cdata.stge_rx_tag, 2394 rxd->rx_dmamap, BUS_DMASYNC_POSTREAD); 2395 bus_dmamap_unload(sc->sc_cdata.stge_rx_tag, 2396 rxd->rx_dmamap); 2397 m_freem(rxd->rx_m); 2398 rxd->rx_m = NULL; 2399 } 2400 } 2401 for (i = 0; i < STGE_TX_RING_CNT; i++) { 2402 txd = &sc->sc_cdata.stge_txdesc[i]; 2403 if (txd->tx_m != NULL) { 2404 bus_dmamap_sync(sc->sc_cdata.stge_tx_tag, 2405 txd->tx_dmamap, BUS_DMASYNC_POSTWRITE); 2406 bus_dmamap_unload(sc->sc_cdata.stge_tx_tag, 2407 txd->tx_dmamap); 2408 m_freem(txd->tx_m); 2409 txd->tx_m = NULL; 2410 } 2411 } 2412 2413 /* 2414 * Mark the interface down and cancel the watchdog timer. 2415 */ 2416 ifp = sc->sc_ifp; 2417 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 2418 sc->sc_link = 0; 2419 } 2420 2421 static void 2422 stge_start_tx(struct stge_softc *sc) 2423 { 2424 uint32_t v; 2425 int i; 2426 2427 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2428 if ((v & MC_TxEnabled) != 0) 2429 return; 2430 v |= MC_TxEnable; 2431 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2432 CSR_WRITE_1(sc, STGE_TxDMAPollPeriod, 127); 2433 for (i = STGE_TIMEOUT; i > 0; i--) { 2434 DELAY(10); 2435 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2436 if ((v & MC_TxEnabled) != 0) 2437 break; 2438 } 2439 if (i == 0) 2440 device_printf(sc->sc_dev, "Starting Tx MAC timed out\n"); 2441 } 2442 2443 static void 2444 stge_start_rx(struct stge_softc *sc) 2445 { 2446 uint32_t v; 2447 int i; 2448 2449 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2450 if ((v & MC_RxEnabled) != 0) 2451 return; 2452 v |= MC_RxEnable; 2453 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2454 CSR_WRITE_1(sc, STGE_RxDMAPollPeriod, 1); 2455 for (i = STGE_TIMEOUT; i > 0; i--) { 2456 DELAY(10); 2457 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2458 if ((v & MC_RxEnabled) != 0) 2459 break; 2460 } 2461 if (i == 0) 2462 device_printf(sc->sc_dev, "Starting Rx MAC timed out\n"); 2463 } 2464 2465 static void 2466 stge_stop_tx(struct stge_softc *sc) 2467 { 2468 uint32_t v; 2469 int i; 2470 2471 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2472 if ((v & MC_TxEnabled) == 0) 2473 return; 2474 v |= MC_TxDisable; 2475 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2476 for (i = STGE_TIMEOUT; i > 0; i--) { 2477 DELAY(10); 2478 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2479 if ((v & MC_TxEnabled) == 0) 2480 break; 2481 } 2482 if (i == 0) 2483 device_printf(sc->sc_dev, "Stopping Tx MAC timed out\n"); 2484 } 2485 2486 static void 2487 stge_stop_rx(struct stge_softc *sc) 2488 { 2489 uint32_t v; 2490 int i; 2491 2492 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2493 if ((v & MC_RxEnabled) == 0) 2494 return; 2495 v |= MC_RxDisable; 2496 CSR_WRITE_4(sc, STGE_MACCtrl, v); 2497 for (i = STGE_TIMEOUT; i > 0; i--) { 2498 DELAY(10); 2499 v = CSR_READ_4(sc, STGE_MACCtrl) & MC_MASK; 2500 if ((v & MC_RxEnabled) == 0) 2501 break; 2502 } 2503 if (i == 0) 2504 device_printf(sc->sc_dev, "Stopping Rx MAC timed out\n"); 2505 } 2506 2507 static void 2508 stge_init_tx_ring(struct stge_softc *sc) 2509 { 2510 struct stge_ring_data *rd; 2511 struct stge_txdesc *txd; 2512 bus_addr_t addr; 2513 int i; 2514 2515 STAILQ_INIT(&sc->sc_cdata.stge_txfreeq); 2516 STAILQ_INIT(&sc->sc_cdata.stge_txbusyq); 2517 2518 sc->sc_cdata.stge_tx_prod = 0; 2519 sc->sc_cdata.stge_tx_cons = 0; 2520 sc->sc_cdata.stge_tx_cnt = 0; 2521 2522 rd = &sc->sc_rdata; 2523 bzero(rd->stge_tx_ring, STGE_TX_RING_SZ); 2524 for (i = 0; i < STGE_TX_RING_CNT; i++) { 2525 if (i == (STGE_TX_RING_CNT - 1)) 2526 addr = STGE_TX_RING_ADDR(sc, 0); 2527 else 2528 addr = STGE_TX_RING_ADDR(sc, i + 1); 2529 rd->stge_tx_ring[i].tfd_next = htole64(addr); 2530 rd->stge_tx_ring[i].tfd_control = htole64(TFD_TFDDone); 2531 txd = &sc->sc_cdata.stge_txdesc[i]; 2532 STAILQ_INSERT_TAIL(&sc->sc_cdata.stge_txfreeq, txd, tx_q); 2533 } 2534 2535 bus_dmamap_sync(sc->sc_cdata.stge_tx_ring_tag, 2536 sc->sc_cdata.stge_tx_ring_map, 2537 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2538 2539 } 2540 2541 static int 2542 stge_init_rx_ring(struct stge_softc *sc) 2543 { 2544 struct stge_ring_data *rd; 2545 bus_addr_t addr; 2546 int i; 2547 2548 sc->sc_cdata.stge_rx_cons = 0; 2549 STGE_RXCHAIN_RESET(sc); 2550 2551 rd = &sc->sc_rdata; 2552 bzero(rd->stge_rx_ring, STGE_RX_RING_SZ); 2553 for (i = 0; i < STGE_RX_RING_CNT; i++) { 2554 if (stge_newbuf(sc, i) != 0) 2555 return (ENOBUFS); 2556 if (i == (STGE_RX_RING_CNT - 1)) 2557 addr = STGE_RX_RING_ADDR(sc, 0); 2558 else 2559 addr = STGE_RX_RING_ADDR(sc, i + 1); 2560 rd->stge_rx_ring[i].rfd_next = htole64(addr); 2561 rd->stge_rx_ring[i].rfd_status = 0; 2562 } 2563 2564 bus_dmamap_sync(sc->sc_cdata.stge_rx_ring_tag, 2565 sc->sc_cdata.stge_rx_ring_map, 2566 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2567 2568 return (0); 2569 } 2570 2571 /* 2572 * stge_newbuf: 2573 * 2574 * Add a receive buffer to the indicated descriptor. 2575 */ 2576 static int 2577 stge_newbuf(struct stge_softc *sc, int idx) 2578 { 2579 struct stge_rxdesc *rxd; 2580 struct stge_rfd *rfd; 2581 struct mbuf *m; 2582 bus_dma_segment_t segs[1]; 2583 bus_dmamap_t map; 2584 int nsegs; 2585 2586 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); 2587 if (m == NULL) 2588 return (ENOBUFS); 2589 m->m_len = m->m_pkthdr.len = MCLBYTES; 2590 /* 2591 * The hardware requires 4bytes aligned DMA address when JUMBO 2592 * frame is used. 2593 */ 2594 if (sc->sc_if_framesize <= (MCLBYTES - ETHER_ALIGN)) 2595 m_adj(m, ETHER_ALIGN); 2596 2597 if (bus_dmamap_load_mbuf_sg(sc->sc_cdata.stge_rx_tag, 2598 sc->sc_cdata.stge_rx_sparemap, m, segs, &nsegs, 0) != 0) { 2599 m_freem(m); 2600 return (ENOBUFS); 2601 } 2602 KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs)); 2603 2604 rxd = &sc->sc_cdata.stge_rxdesc[idx]; 2605 if (rxd->rx_m != NULL) { 2606 bus_dmamap_sync(sc->sc_cdata.stge_rx_tag, rxd->rx_dmamap, 2607 BUS_DMASYNC_POSTREAD); 2608 bus_dmamap_unload(sc->sc_cdata.stge_rx_tag, rxd->rx_dmamap); 2609 } 2610 map = rxd->rx_dmamap; 2611 rxd->rx_dmamap = sc->sc_cdata.stge_rx_sparemap; 2612 sc->sc_cdata.stge_rx_sparemap = map; 2613 bus_dmamap_sync(sc->sc_cdata.stge_rx_tag, rxd->rx_dmamap, 2614 BUS_DMASYNC_PREREAD); 2615 rxd->rx_m = m; 2616 2617 rfd = &sc->sc_rdata.stge_rx_ring[idx]; 2618 rfd->rfd_frag.frag_word0 = 2619 htole64(FRAG_ADDR(segs[0].ds_addr) | FRAG_LEN(segs[0].ds_len)); 2620 rfd->rfd_status = 0; 2621 2622 return (0); 2623 } 2624 2625 /* 2626 * stge_set_filter: 2627 * 2628 * Set up the receive filter. 2629 */ 2630 static void 2631 stge_set_filter(struct stge_softc *sc) 2632 { 2633 struct ifnet *ifp; 2634 uint16_t mode; 2635 2636 STGE_LOCK_ASSERT(sc); 2637 2638 ifp = sc->sc_ifp; 2639 2640 mode = CSR_READ_2(sc, STGE_ReceiveMode); 2641 mode |= RM_ReceiveUnicast; 2642 if ((ifp->if_flags & IFF_BROADCAST) != 0) 2643 mode |= RM_ReceiveBroadcast; 2644 else 2645 mode &= ~RM_ReceiveBroadcast; 2646 if ((ifp->if_flags & IFF_PROMISC) != 0) 2647 mode |= RM_ReceiveAllFrames; 2648 else 2649 mode &= ~RM_ReceiveAllFrames; 2650 2651 CSR_WRITE_2(sc, STGE_ReceiveMode, mode); 2652 } 2653 2654 static void 2655 stge_set_multi(struct stge_softc *sc) 2656 { 2657 struct ifnet *ifp; 2658 struct ifmultiaddr *ifma; 2659 uint32_t crc; 2660 uint32_t mchash[2]; 2661 uint16_t mode; 2662 int count; 2663 2664 STGE_LOCK_ASSERT(sc); 2665 2666 ifp = sc->sc_ifp; 2667 2668 mode = CSR_READ_2(sc, STGE_ReceiveMode); 2669 if ((ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { 2670 if ((ifp->if_flags & IFF_PROMISC) != 0) 2671 mode |= RM_ReceiveAllFrames; 2672 else if ((ifp->if_flags & IFF_ALLMULTI) != 0) 2673 mode |= RM_ReceiveMulticast; 2674 CSR_WRITE_2(sc, STGE_ReceiveMode, mode); 2675 return; 2676 } 2677 2678 /* clear existing filters. */ 2679 CSR_WRITE_4(sc, STGE_HashTable0, 0); 2680 CSR_WRITE_4(sc, STGE_HashTable1, 0); 2681 2682 /* 2683 * Set up the multicast address filter by passing all multicast 2684 * addresses through a CRC generator, and then using the low-order 2685 * 6 bits as an index into the 64 bit multicast hash table. The 2686 * high order bits select the register, while the rest of the bits 2687 * select the bit within the register. 2688 */ 2689 2690 bzero(mchash, sizeof(mchash)); 2691 2692 count = 0; 2693 if_maddr_rlock(sc->sc_ifp); 2694 TAILQ_FOREACH(ifma, &sc->sc_ifp->if_multiaddrs, ifma_link) { 2695 if (ifma->ifma_addr->sa_family != AF_LINK) 2696 continue; 2697 crc = ether_crc32_be(LLADDR((struct sockaddr_dl *) 2698 ifma->ifma_addr), ETHER_ADDR_LEN); 2699 2700 /* Just want the 6 least significant bits. */ 2701 crc &= 0x3f; 2702 2703 /* Set the corresponding bit in the hash table. */ 2704 mchash[crc >> 5] |= 1 << (crc & 0x1f); 2705 count++; 2706 } 2707 if_maddr_runlock(ifp); 2708 2709 mode &= ~(RM_ReceiveMulticast | RM_ReceiveAllFrames); 2710 if (count > 0) 2711 mode |= RM_ReceiveMulticastHash; 2712 else 2713 mode &= ~RM_ReceiveMulticastHash; 2714 2715 CSR_WRITE_4(sc, STGE_HashTable0, mchash[0]); 2716 CSR_WRITE_4(sc, STGE_HashTable1, mchash[1]); 2717 CSR_WRITE_2(sc, STGE_ReceiveMode, mode); 2718 } 2719 2720 static int 2721 sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high) 2722 { 2723 int error, value; 2724 2725 if (!arg1) 2726 return (EINVAL); 2727 value = *(int *)arg1; 2728 error = sysctl_handle_int(oidp, &value, 0, req); 2729 if (error || !req->newptr) 2730 return (error); 2731 if (value < low || value > high) 2732 return (EINVAL); 2733 *(int *)arg1 = value; 2734 2735 return (0); 2736 } 2737 2738 static int 2739 sysctl_hw_stge_rxint_nframe(SYSCTL_HANDLER_ARGS) 2740 { 2741 return (sysctl_int_range(oidp, arg1, arg2, req, 2742 STGE_RXINT_NFRAME_MIN, STGE_RXINT_NFRAME_MAX)); 2743 } 2744 2745 static int 2746 sysctl_hw_stge_rxint_dmawait(SYSCTL_HANDLER_ARGS) 2747 { 2748 return (sysctl_int_range(oidp, arg1, arg2, req, 2749 STGE_RXINT_DMAWAIT_MIN, STGE_RXINT_DMAWAIT_MAX)); 2750 } 2751