1 /**************************************************************************
3 Copyright (c) 2007-2009, Chelsio Inc.
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
12 2. Neither the name of the Chelsio Corporation nor the names of its
13 contributors may be used to endorse or promote products derived from
14 this software without specific prior written permission.
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 POSSIBILITY OF SUCH DAMAGE.
28 ***************************************************************************/
30 #include <sys/cdefs.h>
31 __FBSDID("$FreeBSD$");
33 #include <sys/param.h>
34 #include <sys/systm.h>
35 #include <sys/kernel.h>
37 #include <sys/module.h>
38 #include <sys/pciio.h>
40 #include <machine/bus.h>
41 #include <machine/resource.h>
42 #include <sys/bus_dma.h>
45 #include <sys/ioccom.h>
47 #include <sys/linker.h>
48 #include <sys/firmware.h>
49 #include <sys/socket.h>
50 #include <sys/sockio.h>
52 #include <sys/sysctl.h>
53 #include <sys/syslog.h>
54 #include <sys/queue.h>
55 #include <sys/taskqueue.h>
59 #include <net/ethernet.h>
61 #include <net/if_arp.h>
62 #include <net/if_dl.h>
63 #include <net/if_media.h>
64 #include <net/if_types.h>
65 #include <net/if_vlan_var.h>
67 #include <netinet/in_systm.h>
68 #include <netinet/in.h>
69 #include <netinet/if_ether.h>
70 #include <netinet/ip.h>
71 #include <netinet/ip.h>
72 #include <netinet/tcp.h>
73 #include <netinet/udp.h>
75 #include <dev/pci/pcireg.h>
76 #include <dev/pci/pcivar.h>
77 #include <dev/pci/pci_private.h>
79 #include <cxgb_include.h>
85 static int cxgb_setup_interrupts(adapter_t *);
86 static void cxgb_teardown_interrupts(adapter_t *);
87 static void cxgb_init(void *);
88 static int cxgb_init_locked(struct port_info *);
89 static int cxgb_uninit_locked(struct port_info *);
90 static int cxgb_uninit_synchronized(struct port_info *);
91 static int cxgb_ioctl(struct ifnet *, unsigned long, caddr_t);
92 static int cxgb_media_change(struct ifnet *);
93 static int cxgb_ifm_type(int);
94 static void cxgb_build_medialist(struct port_info *);
95 static void cxgb_media_status(struct ifnet *, struct ifmediareq *);
96 static int setup_sge_qsets(adapter_t *);
97 static void cxgb_async_intr(void *);
98 static void cxgb_ext_intr_handler(void *, int);
99 static void cxgb_tick_handler(void *, int);
100 static void cxgb_tick(void *);
101 static void setup_rss(adapter_t *sc);
103 /* Attachment glue for the PCI controller end of the device. Each port of
104 * the device is attached separately, as defined later.
106 static int cxgb_controller_probe(device_t);
107 static int cxgb_controller_attach(device_t);
108 static int cxgb_controller_detach(device_t);
109 static void cxgb_free(struct adapter *);
110 static __inline void reg_block_dump(struct adapter *ap, uint8_t *buf, unsigned int start,
112 static void cxgb_get_regs(adapter_t *sc, struct ch_ifconf_regs *regs, uint8_t *buf);
113 static int cxgb_get_regs_len(void);
114 static int offload_open(struct port_info *pi);
115 static void touch_bars(device_t dev);
116 static int offload_close(struct t3cdev *tdev);
117 static void cxgb_update_mac_settings(struct port_info *p);
119 static device_method_t cxgb_controller_methods[] = {
120 DEVMETHOD(device_probe, cxgb_controller_probe),
121 DEVMETHOD(device_attach, cxgb_controller_attach),
122 DEVMETHOD(device_detach, cxgb_controller_detach),
125 DEVMETHOD(bus_print_child, bus_generic_print_child),
126 DEVMETHOD(bus_driver_added, bus_generic_driver_added),
131 static driver_t cxgb_controller_driver = {
133 cxgb_controller_methods,
134 sizeof(struct adapter)
137 static devclass_t cxgb_controller_devclass;
138 DRIVER_MODULE(cxgbc, pci, cxgb_controller_driver, cxgb_controller_devclass, 0, 0);
141 * Attachment glue for the ports. Attachment is done directly to the
144 static int cxgb_port_probe(device_t);
145 static int cxgb_port_attach(device_t);
146 static int cxgb_port_detach(device_t);
148 static device_method_t cxgb_port_methods[] = {
149 DEVMETHOD(device_probe, cxgb_port_probe),
150 DEVMETHOD(device_attach, cxgb_port_attach),
151 DEVMETHOD(device_detach, cxgb_port_detach),
155 static driver_t cxgb_port_driver = {
161 static d_ioctl_t cxgb_extension_ioctl;
162 static d_open_t cxgb_extension_open;
163 static d_close_t cxgb_extension_close;
165 static struct cdevsw cxgb_cdevsw = {
166 .d_version = D_VERSION,
168 .d_open = cxgb_extension_open,
169 .d_close = cxgb_extension_close,
170 .d_ioctl = cxgb_extension_ioctl,
174 static devclass_t cxgb_port_devclass;
175 DRIVER_MODULE(cxgb, cxgbc, cxgb_port_driver, cxgb_port_devclass, 0, 0);
178 * The driver uses the best interrupt scheme available on a platform in the
179 * order MSI-X, MSI, legacy pin interrupts. This parameter determines which
180 * of these schemes the driver may consider as follows:
182 * msi = 2: choose from among all three options
183 * msi = 1 : only consider MSI and pin interrupts
184 * msi = 0: force pin interrupts
186 static int msi_allowed = 2;
188 TUNABLE_INT("hw.cxgb.msi_allowed", &msi_allowed);
189 SYSCTL_NODE(_hw, OID_AUTO, cxgb, CTLFLAG_RD, 0, "CXGB driver parameters");
190 SYSCTL_UINT(_hw_cxgb, OID_AUTO, msi_allowed, CTLFLAG_RDTUN, &msi_allowed, 0,
191 "MSI-X, MSI, INTx selector");
194 * The driver enables offload as a default.
195 * To disable it, use ofld_disable = 1.
197 static int ofld_disable = 0;
198 TUNABLE_INT("hw.cxgb.ofld_disable", &ofld_disable);
199 SYSCTL_UINT(_hw_cxgb, OID_AUTO, ofld_disable, CTLFLAG_RDTUN, &ofld_disable, 0,
200 "disable ULP offload");
203 * The driver uses an auto-queue algorithm by default.
204 * To disable it and force a single queue-set per port, use multiq = 0
206 static int multiq = 1;
207 TUNABLE_INT("hw.cxgb.multiq", &multiq);
208 SYSCTL_UINT(_hw_cxgb, OID_AUTO, multiq, CTLFLAG_RDTUN, &multiq, 0,
209 "use min(ncpus/ports, 8) queue-sets per port");
212 * By default the driver will not update the firmware unless
213 * it was compiled against a newer version
216 static int force_fw_update = 0;
217 TUNABLE_INT("hw.cxgb.force_fw_update", &force_fw_update);
218 SYSCTL_UINT(_hw_cxgb, OID_AUTO, force_fw_update, CTLFLAG_RDTUN, &force_fw_update, 0,
219 "update firmware even if up to date");
221 int cxgb_use_16k_clusters = 1;
222 TUNABLE_INT("hw.cxgb.use_16k_clusters", &cxgb_use_16k_clusters);
223 SYSCTL_UINT(_hw_cxgb, OID_AUTO, use_16k_clusters, CTLFLAG_RDTUN,
224 &cxgb_use_16k_clusters, 0, "use 16kB clusters for the jumbo queue ");
227 * Tune the size of the output queue.
229 int cxgb_snd_queue_len = IFQ_MAXLEN;
230 TUNABLE_INT("hw.cxgb.snd_queue_len", &cxgb_snd_queue_len);
231 SYSCTL_UINT(_hw_cxgb, OID_AUTO, snd_queue_len, CTLFLAG_RDTUN,
232 &cxgb_snd_queue_len, 0, "send queue size ");
236 MAX_TXQ_ENTRIES = 16384,
237 MAX_CTRL_TXQ_ENTRIES = 1024,
238 MAX_RSPQ_ENTRIES = 16384,
239 MAX_RX_BUFFERS = 16384,
240 MAX_RX_JUMBO_BUFFERS = 16384,
242 MIN_CTRL_TXQ_ENTRIES = 4,
243 MIN_RSPQ_ENTRIES = 32,
245 MIN_FL_JUMBO_ENTRIES = 32
260 u32 report_filter_id:1;
268 enum { FILTER_NO_VLAN_PRI = 7 };
270 #define EEPROM_MAGIC 0x38E2F10C
272 #define PORT_MASK ((1 << MAX_NPORTS) - 1)
274 /* Table for probing the cards. The desc field isn't actually used */
280 } cxgb_identifiers[] = {
281 {PCI_VENDOR_ID_CHELSIO, 0x0020, 0, "PE9000"},
282 {PCI_VENDOR_ID_CHELSIO, 0x0021, 1, "T302E"},
283 {PCI_VENDOR_ID_CHELSIO, 0x0022, 2, "T310E"},
284 {PCI_VENDOR_ID_CHELSIO, 0x0023, 3, "T320X"},
285 {PCI_VENDOR_ID_CHELSIO, 0x0024, 1, "T302X"},
286 {PCI_VENDOR_ID_CHELSIO, 0x0025, 3, "T320E"},
287 {PCI_VENDOR_ID_CHELSIO, 0x0026, 2, "T310X"},
288 {PCI_VENDOR_ID_CHELSIO, 0x0030, 2, "T3B10"},
289 {PCI_VENDOR_ID_CHELSIO, 0x0031, 3, "T3B20"},
290 {PCI_VENDOR_ID_CHELSIO, 0x0032, 1, "T3B02"},
291 {PCI_VENDOR_ID_CHELSIO, 0x0033, 4, "T3B04"},
292 {PCI_VENDOR_ID_CHELSIO, 0x0035, 6, "T3C10"},
293 {PCI_VENDOR_ID_CHELSIO, 0x0036, 3, "S320E-CR"},
294 {PCI_VENDOR_ID_CHELSIO, 0x0037, 7, "N320E-G2"},
298 static int set_eeprom(struct port_info *pi, const uint8_t *data, int len, int offset);
302 t3rev2char(struct adapter *adapter)
306 switch(adapter->params.rev) {
321 static struct cxgb_ident *
322 cxgb_get_ident(device_t dev)
324 struct cxgb_ident *id;
326 for (id = cxgb_identifiers; id->desc != NULL; id++) {
327 if ((id->vendor == pci_get_vendor(dev)) &&
328 (id->device == pci_get_device(dev))) {
335 static const struct adapter_info *
336 cxgb_get_adapter_info(device_t dev)
338 struct cxgb_ident *id;
339 const struct adapter_info *ai;
341 id = cxgb_get_ident(dev);
345 ai = t3_get_adapter_info(id->index);
351 cxgb_controller_probe(device_t dev)
353 const struct adapter_info *ai;
354 char *ports, buf[80];
357 ai = cxgb_get_adapter_info(dev);
361 nports = ai->nports0 + ai->nports1;
367 snprintf(buf, sizeof(buf), "%s, %d %s", ai->desc, nports, ports);
368 device_set_desc_copy(dev, buf);
369 return (BUS_PROBE_DEFAULT);
372 #define FW_FNAME "cxgb_t3fw"
373 #define TPEEPROM_NAME "cxgb_t3%c_tp_eeprom"
374 #define TPSRAM_NAME "cxgb_t3%c_protocol_sram"
377 upgrade_fw(adapter_t *sc)
379 #ifdef FIRMWARE_LATEST
380 const struct firmware *fw;
386 if ((fw = firmware_get(FW_FNAME)) == NULL) {
387 device_printf(sc->dev, "Could not find firmware image %s\n", FW_FNAME);
390 device_printf(sc->dev, "updating firmware on card\n");
391 status = t3_load_fw(sc, (const uint8_t *)fw->data, fw->datasize);
393 device_printf(sc->dev, "firmware update returned %s %d\n", (status == 0) ? "success" : "fail", status);
395 firmware_put(fw, FIRMWARE_UNLOAD);
401 * The cxgb_controller_attach function is responsible for the initial
402 * bringup of the device. Its responsibilities include:
404 * 1. Determine if the device supports MSI or MSI-X.
405 * 2. Allocate bus resources so that we can access the Base Address Register
406 * 3. Create and initialize mutexes for the controller and its control
407 * logic such as SGE and MDIO.
408 * 4. Call hardware specific setup routine for the adapter as a whole.
409 * 5. Allocate the BAR for doing MSI-X.
410 * 6. Setup the line interrupt iff MSI-X is not supported.
411 * 7. Create the driver's taskq.
412 * 8. Start one task queue service thread.
413 * 9. Check if the firmware and SRAM are up-to-date. They will be
414 * auto-updated later (before FULL_INIT_DONE), if required.
415 * 10. Create a child device for each MAC (port)
416 * 11. Initialize T3 private state.
417 * 12. Trigger the LED
418 * 13. Setup offload iff supported.
419 * 14. Reset/restart the tick callout.
422 * NOTE: Any modification or deviation from this list MUST be reflected in
423 * the above comment. Failure to do so will result in problems on various
424 * error conditions including link flapping.
427 cxgb_controller_attach(device_t dev)
430 const struct adapter_info *ai;
440 sc = device_get_softc(dev);
443 ai = cxgb_get_adapter_info(dev);
446 * XXX not really related but a recent addition
449 /* find the PCIe link width and set max read request to 4KB*/
450 if (pci_find_extcap(dev, PCIY_EXPRESS, ®) == 0) {
452 lnk = pci_read_config(dev, reg + 0x12, 2);
453 sc->link_width = (lnk >> 4) & 0x3f;
455 pectl = pci_read_config(dev, reg + 0x8, 2);
456 pectl = (pectl & ~0x7000) | (5 << 12);
457 pci_write_config(dev, reg + 0x8, pectl, 2);
460 if (sc->link_width != 0 && sc->link_width <= 4 &&
461 (ai->nports0 + ai->nports1) <= 2) {
462 device_printf(sc->dev,
463 "PCIe x%d Link, expect reduced performance\n",
468 pci_enable_busmaster(dev);
470 * Allocate the registers and make them available to the driver.
471 * The registers that we care about for NIC mode are in BAR 0
473 sc->regs_rid = PCIR_BAR(0);
474 if ((sc->regs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
475 &sc->regs_rid, RF_ACTIVE)) == NULL) {
476 device_printf(dev, "Cannot allocate BAR region 0\n");
479 sc->udbs_rid = PCIR_BAR(2);
481 if (is_offload(sc) &&
482 ((sc->udbs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
483 &sc->udbs_rid, RF_ACTIVE)) == NULL)) {
484 device_printf(dev, "Cannot allocate BAR region 1\n");
489 snprintf(sc->lockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb controller lock %d",
490 device_get_unit(dev));
491 ADAPTER_LOCK_INIT(sc, sc->lockbuf);
493 snprintf(sc->reglockbuf, ADAPTER_LOCK_NAME_LEN, "SGE reg lock %d",
494 device_get_unit(dev));
495 snprintf(sc->mdiolockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb mdio lock %d",
496 device_get_unit(dev));
497 snprintf(sc->elmerlockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb elmer lock %d",
498 device_get_unit(dev));
500 MTX_INIT(&sc->sge.reg_lock, sc->reglockbuf, NULL, MTX_SPIN);
501 MTX_INIT(&sc->mdio_lock, sc->mdiolockbuf, NULL, MTX_DEF);
502 MTX_INIT(&sc->elmer_lock, sc->elmerlockbuf, NULL, MTX_DEF);
504 sc->bt = rman_get_bustag(sc->regs_res);
505 sc->bh = rman_get_bushandle(sc->regs_res);
506 sc->mmio_len = rman_get_size(sc->regs_res);
508 for (i = 0; i < MAX_NPORTS; i++)
509 sc->port[i].adapter = sc;
511 if (t3_prep_adapter(sc, ai, 1) < 0) {
512 printf("prep adapter failed\n");
516 /* Allocate the BAR for doing MSI-X. If it succeeds, try to allocate
517 * enough messages for the queue sets. If that fails, try falling
518 * back to MSI. If that fails, then try falling back to the legacy
519 * interrupt pin model.
523 sc->msix_regs_rid = 0x20;
524 if ((msi_allowed >= 2) &&
525 (sc->msix_regs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
526 &sc->msix_regs_rid, RF_ACTIVE)) != NULL) {
529 port_qsets = min(SGE_QSETS/sc->params.nports, mp_ncpus);
530 msi_needed = sc->msi_count = sc->params.nports * port_qsets + 1;
532 if (pci_msix_count(dev) == 0 ||
533 (error = pci_alloc_msix(dev, &sc->msi_count)) != 0 ||
534 sc->msi_count != msi_needed) {
535 device_printf(dev, "alloc msix failed - "
536 "msi_count=%d, msi_needed=%d, err=%d; "
537 "will try MSI\n", sc->msi_count,
541 pci_release_msi(dev);
542 bus_release_resource(dev, SYS_RES_MEMORY,
543 sc->msix_regs_rid, sc->msix_regs_res);
544 sc->msix_regs_res = NULL;
546 sc->flags |= USING_MSIX;
547 sc->cxgb_intr = cxgb_async_intr;
549 "using MSI-X interrupts (%u vectors)\n",
554 if ((msi_allowed >= 1) && (sc->msi_count == 0)) {
556 if ((error = pci_alloc_msi(dev, &sc->msi_count)) != 0) {
557 device_printf(dev, "alloc msi failed - "
558 "err=%d; will try INTx\n", error);
561 pci_release_msi(dev);
563 sc->flags |= USING_MSI;
564 sc->cxgb_intr = t3_intr_msi;
565 device_printf(dev, "using MSI interrupts\n");
569 if (sc->msi_count == 0) {
570 device_printf(dev, "using line interrupts\n");
571 sc->cxgb_intr = t3b_intr;
574 /* Create a private taskqueue thread for handling driver events */
575 #ifdef TASKQUEUE_CURRENT
576 sc->tq = taskqueue_create("cxgb_taskq", M_NOWAIT,
577 taskqueue_thread_enqueue, &sc->tq);
579 sc->tq = taskqueue_create_fast("cxgb_taskq", M_NOWAIT,
580 taskqueue_thread_enqueue, &sc->tq);
582 if (sc->tq == NULL) {
583 device_printf(dev, "failed to allocate controller task queue\n");
587 taskqueue_start_threads(&sc->tq, 1, PI_NET, "%s taskq",
588 device_get_nameunit(dev));
589 TASK_INIT(&sc->ext_intr_task, 0, cxgb_ext_intr_handler, sc);
590 TASK_INIT(&sc->tick_task, 0, cxgb_tick_handler, sc);
593 /* Create a periodic callout for checking adapter status */
594 callout_init(&sc->cxgb_tick_ch, TRUE);
596 if (t3_check_fw_version(sc) < 0 || force_fw_update) {
598 * Warn user that a firmware update will be attempted in init.
600 device_printf(dev, "firmware needs to be updated to version %d.%d.%d\n",
601 FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO);
602 sc->flags &= ~FW_UPTODATE;
604 sc->flags |= FW_UPTODATE;
607 if (t3_check_tpsram_version(sc) < 0) {
609 * Warn user that a firmware update will be attempted in init.
611 device_printf(dev, "SRAM needs to be updated to version %c-%d.%d.%d\n",
612 t3rev2char(sc), TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
613 sc->flags &= ~TPS_UPTODATE;
615 sc->flags |= TPS_UPTODATE;
619 * Create a child device for each MAC. The ethernet attachment
620 * will be done in these children.
622 for (i = 0; i < (sc)->params.nports; i++) {
623 struct port_info *pi;
625 if ((child = device_add_child(dev, "cxgb", -1)) == NULL) {
626 device_printf(dev, "failed to add child port\n");
632 pi->nqsets = port_qsets;
633 pi->first_qset = i*port_qsets;
635 pi->tx_chan = i >= ai->nports0;
636 pi->txpkt_intf = pi->tx_chan ? 2 * (i - ai->nports0) + 1 : 2 * i;
637 sc->rxpkt_map[pi->txpkt_intf] = i;
638 sc->port[i].tx_chan = i >= ai->nports0;
639 sc->portdev[i] = child;
640 device_set_softc(child, pi);
642 if ((error = bus_generic_attach(dev)) != 0)
645 /* initialize sge private state */
646 t3_sge_init_adapter(sc);
651 if (is_offload(sc)) {
652 setbit(&sc->registered_device_map, OFFLOAD_DEVMAP_BIT);
653 cxgb_adapter_ofld(sc);
655 error = t3_get_fw_version(sc, &vers);
659 snprintf(&sc->fw_version[0], sizeof(sc->fw_version), "%d.%d.%d",
660 G_FW_VERSION_MAJOR(vers), G_FW_VERSION_MINOR(vers),
661 G_FW_VERSION_MICRO(vers));
663 snprintf(buf, sizeof(buf), "%s %sNIC\t E/C: %s S/N: %s",
664 ai->desc, is_offload(sc) ? "R" : "",
665 sc->params.vpd.ec, sc->params.vpd.sn);
666 device_set_desc_copy(dev, buf);
668 snprintf(&sc->port_types[0], sizeof(sc->port_types), "%x%x%x%x",
669 sc->params.vpd.port_type[0], sc->params.vpd.port_type[1],
670 sc->params.vpd.port_type[2], sc->params.vpd.port_type[3]);
672 device_printf(sc->dev, "Firmware Version %s\n", &sc->fw_version[0]);
673 callout_reset(&sc->cxgb_tick_ch, CXGB_TICKS(sc), cxgb_tick, sc);
674 t3_add_attach_sysctls(sc);
683 * The cxgb_controller_detach routine is called with the device is
684 * unloaded from the system.
688 cxgb_controller_detach(device_t dev)
692 sc = device_get_softc(dev);
700 * The cxgb_free() is called by the cxgb_controller_detach() routine
701 * to tear down the structures that were built up in
702 * cxgb_controller_attach(), and should be the final piece of work
703 * done when fully unloading the driver.
706 * 1. Shutting down the threads started by the cxgb_controller_attach()
708 * 2. Stopping the lower level device and all callouts (cxgb_down_locked()).
709 * 3. Detaching all of the port devices created during the
710 * cxgb_controller_attach() routine.
711 * 4. Removing the device children created via cxgb_controller_attach().
712 * 5. Releasing PCI resources associated with the device.
713 * 6. Turning off the offload support, iff it was turned on.
714 * 7. Destroying the mutexes created in cxgb_controller_attach().
718 cxgb_free(struct adapter *sc)
723 sc->flags |= CXGB_SHUTDOWN;
727 * Make sure all child devices are gone.
729 bus_generic_detach(sc->dev);
730 for (i = 0; i < (sc)->params.nports; i++) {
731 if (sc->portdev[i] &&
732 device_delete_child(sc->dev, sc->portdev[i]) != 0)
733 device_printf(sc->dev, "failed to delete child port\n");
737 * At this point, it is as if cxgb_port_detach has run on all ports, and
738 * cxgb_down has run on the adapter. All interrupts have been silenced,
739 * all open devices have been closed.
741 KASSERT(sc->open_device_map == 0, ("%s: device(s) still open (%x)",
742 __func__, sc->open_device_map));
743 for (i = 0; i < sc->params.nports; i++) {
744 KASSERT(sc->port[i].ifp == NULL, ("%s: port %i undead!",
749 * Finish off the adapter's callouts.
751 callout_drain(&sc->cxgb_tick_ch);
752 callout_drain(&sc->sge_timer_ch);
755 * Release resources grabbed under FULL_INIT_DONE by cxgb_up. The
756 * sysctls are cleaned up by the kernel linker.
758 if (sc->flags & FULL_INIT_DONE) {
759 t3_free_sge_resources(sc);
760 sc->flags &= ~FULL_INIT_DONE;
764 * Release all interrupt resources.
766 cxgb_teardown_interrupts(sc);
768 if (sc->flags & (USING_MSI | USING_MSIX)) {
769 device_printf(sc->dev, "releasing msi message(s)\n");
770 pci_release_msi(sc->dev);
772 device_printf(sc->dev, "no msi message to release\n");
775 if (sc->msix_regs_res != NULL) {
776 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->msix_regs_rid,
782 * Free the adapter's taskqueue.
784 if (sc->tq != NULL) {
785 taskqueue_free(sc->tq);
789 if (is_offload(sc)) {
790 clrbit(&sc->registered_device_map, OFFLOAD_DEVMAP_BIT);
791 cxgb_adapter_unofld(sc);
795 if (sc->flags & CXGB_OFLD_INIT)
796 cxgb_offload_deactivate(sc);
798 free(sc->filters, M_DEVBUF);
803 if (sc->udbs_res != NULL)
804 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->udbs_rid,
807 if (sc->regs_res != NULL)
808 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->regs_rid,
811 MTX_DESTROY(&sc->mdio_lock);
812 MTX_DESTROY(&sc->sge.reg_lock);
813 MTX_DESTROY(&sc->elmer_lock);
814 ADAPTER_LOCK_DEINIT(sc);
818 * setup_sge_qsets - configure SGE Tx/Rx/response queues
819 * @sc: the controller softc
821 * Determines how many sets of SGE queues to use and initializes them.
822 * We support multiple queue sets per port if we have MSI-X, otherwise
823 * just one queue set per port.
826 setup_sge_qsets(adapter_t *sc)
828 int i, j, err, irq_idx = 0, qset_idx = 0;
829 u_int ntxq = SGE_TXQ_PER_SET;
831 if ((err = t3_sge_alloc(sc)) != 0) {
832 device_printf(sc->dev, "t3_sge_alloc returned %d\n", err);
836 if (sc->params.rev > 0 && !(sc->flags & USING_MSI))
839 for (i = 0; i < (sc)->params.nports; i++) {
840 struct port_info *pi = &sc->port[i];
842 for (j = 0; j < pi->nqsets; j++, qset_idx++) {
843 err = t3_sge_alloc_qset(sc, qset_idx, (sc)->params.nports,
844 (sc->flags & USING_MSIX) ? qset_idx + 1 : irq_idx,
845 &sc->params.sge.qset[qset_idx], ntxq, pi);
847 t3_free_sge_resources(sc);
848 device_printf(sc->dev, "t3_sge_alloc_qset failed with %d\n",
859 cxgb_teardown_interrupts(adapter_t *sc)
863 for (i = 0; i < SGE_QSETS; i++) {
864 if (sc->msix_intr_tag[i] == NULL) {
866 /* Should have been setup fully or not at all */
867 KASSERT(sc->msix_irq_res[i] == NULL &&
868 sc->msix_irq_rid[i] == 0,
869 ("%s: half-done interrupt (%d).", __func__, i));
874 bus_teardown_intr(sc->dev, sc->msix_irq_res[i],
875 sc->msix_intr_tag[i]);
876 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->msix_irq_rid[i],
877 sc->msix_irq_res[i]);
879 sc->msix_irq_res[i] = sc->msix_intr_tag[i] = NULL;
880 sc->msix_irq_rid[i] = 0;
884 KASSERT(sc->irq_res != NULL,
885 ("%s: half-done interrupt.", __func__));
887 bus_teardown_intr(sc->dev, sc->irq_res, sc->intr_tag);
888 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irq_rid,
891 sc->irq_res = sc->intr_tag = NULL;
897 cxgb_setup_interrupts(adapter_t *sc)
899 struct resource *res;
901 int i, rid, err, intr_flag = sc->flags & (USING_MSI | USING_MSIX);
903 sc->irq_rid = intr_flag ? 1 : 0;
904 sc->irq_res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &sc->irq_rid,
905 RF_SHAREABLE | RF_ACTIVE);
906 if (sc->irq_res == NULL) {
907 device_printf(sc->dev, "Cannot allocate interrupt (%x, %u)\n",
908 intr_flag, sc->irq_rid);
912 err = bus_setup_intr(sc->dev, sc->irq_res,
913 INTR_MPSAFE | INTR_TYPE_NET,
917 sc->cxgb_intr, sc, &sc->intr_tag);
920 device_printf(sc->dev,
921 "Cannot set up interrupt (%x, %u, %d)\n",
922 intr_flag, sc->irq_rid, err);
923 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irq_rid,
925 sc->irq_res = sc->intr_tag = NULL;
930 /* That's all for INTx or MSI */
931 if (!(intr_flag & USING_MSIX) || err)
934 for (i = 0; i < sc->msi_count - 1; i++) {
936 res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &rid,
937 RF_SHAREABLE | RF_ACTIVE);
939 device_printf(sc->dev, "Cannot allocate interrupt "
940 "for message %d\n", rid);
945 err = bus_setup_intr(sc->dev, res, INTR_MPSAFE | INTR_TYPE_NET,
949 t3_intr_msix, &sc->sge.qs[i], &tag);
951 device_printf(sc->dev, "Cannot set up interrupt "
952 "for message %d (%d)\n", rid, err);
953 bus_release_resource(sc->dev, SYS_RES_IRQ, rid, res);
957 sc->msix_irq_rid[i] = rid;
958 sc->msix_irq_res[i] = res;
959 sc->msix_intr_tag[i] = tag;
963 cxgb_teardown_interrupts(sc);
970 cxgb_port_probe(device_t dev)
976 p = device_get_softc(dev);
978 snprintf(buf, sizeof(buf), "Port %d %s", p->port_id, desc);
979 device_set_desc_copy(dev, buf);
985 cxgb_makedev(struct port_info *pi)
988 pi->port_cdev = make_dev(&cxgb_cdevsw, pi->ifp->if_dunit,
989 UID_ROOT, GID_WHEEL, 0600, if_name(pi->ifp));
991 if (pi->port_cdev == NULL)
994 pi->port_cdev->si_drv1 = (void *)pi;
999 #ifndef LRO_SUPPORTED
1003 #define IFCAP_LRO 0x0
1006 #ifdef TSO_SUPPORTED
1007 #define CXGB_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO)
1008 /* Don't enable TSO6 yet */
1009 #define CXGB_CAP_ENABLE (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM | IFCAP_TSO4 | IFCAP_JUMBO_MTU | IFCAP_LRO)
1011 #define CXGB_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_JUMBO_MTU)
1012 /* Don't enable TSO6 yet */
1013 #define CXGB_CAP_ENABLE (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_JUMBO_MTU)
1014 #define IFCAP_TSO4 0x0
1015 #define IFCAP_TSO6 0x0
1016 #define CSUM_TSO 0x0
1021 cxgb_port_attach(device_t dev)
1023 struct port_info *p;
1029 p = device_get_softc(dev);
1031 snprintf(p->lockbuf, PORT_NAME_LEN, "cxgb port lock %d:%d",
1032 device_get_unit(device_get_parent(dev)), p->port_id);
1033 PORT_LOCK_INIT(p, p->lockbuf);
1035 /* Allocate an ifnet object and set it up */
1036 ifp = p->ifp = if_alloc(IFT_ETHER);
1038 device_printf(dev, "Cannot allocate ifnet\n");
1043 * Note that there is currently no watchdog timer.
1045 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
1046 ifp->if_init = cxgb_init;
1048 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1049 ifp->if_ioctl = cxgb_ioctl;
1050 ifp->if_start = cxgb_start;
1053 ifp->if_timer = 0; /* Disable ifnet watchdog */
1054 ifp->if_watchdog = NULL;
1056 ifp->if_snd.ifq_drv_maxlen = cxgb_snd_queue_len;
1057 IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen);
1058 IFQ_SET_READY(&ifp->if_snd);
1060 ifp->if_hwassist = ifp->if_capabilities = ifp->if_capenable = 0;
1061 ifp->if_capabilities |= CXGB_CAP;
1062 ifp->if_capenable |= CXGB_CAP_ENABLE;
1063 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO);
1065 * disable TSO on 4-port - it isn't supported by the firmware yet
1067 if (p->adapter->params.nports > 2) {
1068 ifp->if_capabilities &= ~(IFCAP_TSO4 | IFCAP_TSO6);
1069 ifp->if_capenable &= ~(IFCAP_TSO4 | IFCAP_TSO6);
1070 ifp->if_hwassist &= ~CSUM_TSO;
1073 ether_ifattach(ifp, p->hw_addr);
1074 ifp->if_transmit = cxgb_transmit;
1075 ifp->if_qflush = cxgb_qflush;
1078 * Only default to jumbo frames on 10GigE
1080 if (p->adapter->params.nports <= 2)
1081 ifp->if_mtu = ETHERMTU_JUMBO;
1082 if ((err = cxgb_makedev(p)) != 0) {
1083 printf("makedev failed %d\n", err);
1087 /* Create a list of media supported by this port */
1088 ifmedia_init(&p->media, IFM_IMASK, cxgb_media_change,
1090 cxgb_build_medialist(p);
1092 t3_sge_init_port(p);
1098 * cxgb_port_detach() is called via the device_detach methods when
1099 * cxgb_free() calls the bus_generic_detach. It is responsible for
1100 * removing the device from the view of the kernel, i.e. from all
1101 * interfaces lists etc. This routine is only called when the driver is
1102 * being unloaded, not when the link goes down.
1105 cxgb_port_detach(device_t dev)
1107 struct port_info *p;
1111 p = device_get_softc(dev);
1114 /* Tell cxgb_ioctl and if_init that the port is going away */
1119 mtx_sleep(&sc->flags, &sc->lock, 0, "cxgbdtch", 0);
1123 if (p->port_cdev != NULL)
1124 destroy_dev(p->port_cdev);
1126 cxgb_uninit_synchronized(p);
1127 ether_ifdetach(p->ifp);
1129 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) {
1130 struct sge_qset *qs = &sc->sge.qs[i];
1131 struct sge_txq *txq = &qs->txq[TXQ_ETH];
1133 callout_drain(&txq->txq_watchdog);
1134 callout_drain(&txq->txq_timer);
1137 PORT_LOCK_DEINIT(p);
1143 wakeup_one(&sc->flags);
1149 t3_fatal_err(struct adapter *sc)
1153 if (sc->flags & FULL_INIT_DONE) {
1155 t3_write_reg(sc, A_XGM_TX_CTRL, 0);
1156 t3_write_reg(sc, A_XGM_RX_CTRL, 0);
1157 t3_write_reg(sc, XGM_REG(A_XGM_TX_CTRL, 1), 0);
1158 t3_write_reg(sc, XGM_REG(A_XGM_RX_CTRL, 1), 0);
1159 t3_intr_disable(sc);
1161 device_printf(sc->dev,"encountered fatal error, operation suspended\n");
1162 if (!t3_cim_ctl_blk_read(sc, 0xa0, 4, fw_status))
1163 device_printf(sc->dev, "FW_ status: 0x%x, 0x%x, 0x%x, 0x%x\n",
1164 fw_status[0], fw_status[1], fw_status[2], fw_status[3]);
1168 t3_os_find_pci_capability(adapter_t *sc, int cap)
1171 struct pci_devinfo *dinfo;
1177 dinfo = device_get_ivars(dev);
1180 status = pci_read_config(dev, PCIR_STATUS, 2);
1181 if (!(status & PCIM_STATUS_CAPPRESENT))
1184 switch (cfg->hdrtype & PCIM_HDRTYPE) {
1190 ptr = PCIR_CAP_PTR_2;
1196 ptr = pci_read_config(dev, ptr, 1);
1199 if (pci_read_config(dev, ptr + PCICAP_ID, 1) == cap)
1201 ptr = pci_read_config(dev, ptr + PCICAP_NEXTPTR, 1);
1208 t3_os_pci_save_state(struct adapter *sc)
1211 struct pci_devinfo *dinfo;
1214 dinfo = device_get_ivars(dev);
1216 pci_cfg_save(dev, dinfo, 0);
1221 t3_os_pci_restore_state(struct adapter *sc)
1224 struct pci_devinfo *dinfo;
1227 dinfo = device_get_ivars(dev);
1229 pci_cfg_restore(dev, dinfo);
1234 * t3_os_link_changed - handle link status changes
1235 * @sc: the adapter associated with the link change
1236 * @port_id: the port index whose link status has changed
1237 * @link_status: the new status of the link
1238 * @speed: the new speed setting
1239 * @duplex: the new duplex setting
1240 * @fc: the new flow-control setting
1242 * This is the OS-dependent handler for link status changes. The OS
1243 * neutral handler takes care of most of the processing for these events,
1244 * then calls this handler for any OS-specific processing.
1247 t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed,
1248 int duplex, int fc, int mac_was_reset)
1250 struct port_info *pi = &adapter->port[port_id];
1251 struct ifnet *ifp = pi->ifp;
1253 /* no race with detach, so ifp should always be good */
1254 KASSERT(ifp, ("%s: if detached.", __func__));
1256 /* Reapply mac settings if they were lost due to a reset */
1257 if (mac_was_reset) {
1259 cxgb_update_mac_settings(pi);
1264 ifp->if_baudrate = IF_Mbps(speed);
1265 if_link_state_change(ifp, LINK_STATE_UP);
1267 if_link_state_change(ifp, LINK_STATE_DOWN);
1271 * t3_os_phymod_changed - handle PHY module changes
1272 * @phy: the PHY reporting the module change
1273 * @mod_type: new module type
1275 * This is the OS-dependent handler for PHY module changes. It is
1276 * invoked when a PHY module is removed or inserted for any OS-specific
1279 void t3_os_phymod_changed(struct adapter *adap, int port_id)
1281 static const char *mod_str[] = {
1282 NULL, "SR", "LR", "LRM", "TWINAX", "TWINAX", "unknown"
1284 struct port_info *pi = &adap->port[port_id];
1285 int mod = pi->phy.modtype;
1287 if (mod != pi->media.ifm_cur->ifm_data)
1288 cxgb_build_medialist(pi);
1290 if (mod == phy_modtype_none)
1291 if_printf(pi->ifp, "PHY module unplugged\n");
1293 KASSERT(mod < ARRAY_SIZE(mod_str),
1294 ("invalid PHY module type %d", mod));
1295 if_printf(pi->ifp, "%s PHY module inserted\n", mod_str[mod]);
1300 * Interrupt-context handler for external (PHY) interrupts.
1303 t3_os_ext_intr_handler(adapter_t *sc)
1306 printf("t3_os_ext_intr_handler\n");
1308 * Schedule a task to handle external interrupts as they may be slow
1309 * and we use a mutex to protect MDIO registers. We disable PHY
1310 * interrupts in the meantime and let the task reenable them when
1313 if (sc->slow_intr_mask) {
1315 sc->slow_intr_mask &= ~F_T3DBG;
1316 t3_write_reg(sc, A_PL_INT_ENABLE0, sc->slow_intr_mask);
1317 taskqueue_enqueue(sc->tq, &sc->ext_intr_task);
1323 t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[])
1327 * The ifnet might not be allocated before this gets called,
1328 * as this is called early on in attach by t3_prep_adapter
1329 * save the address off in the port structure
1332 printf("set_hw_addr on idx %d addr %6D\n", port_idx, hw_addr, ":");
1333 bcopy(hw_addr, adapter->port[port_idx].hw_addr, ETHER_ADDR_LEN);
1337 * Programs the XGMAC based on the settings in the ifnet. These settings
1338 * include MTU, MAC address, mcast addresses, etc.
1341 cxgb_update_mac_settings(struct port_info *p)
1343 struct ifnet *ifp = p->ifp;
1344 struct t3_rx_mode rm;
1345 struct cmac *mac = &p->mac;
1348 PORT_LOCK_ASSERT_OWNED(p);
1350 bcopy(IF_LLADDR(ifp), p->hw_addr, ETHER_ADDR_LEN);
1353 if (ifp->if_capenable & IFCAP_VLAN_MTU)
1354 mtu += ETHER_VLAN_ENCAP_LEN;
1356 hwtagging = (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0;
1358 t3_mac_set_mtu(mac, mtu);
1359 t3_set_vlan_accel(p->adapter, 1 << p->tx_chan, hwtagging);
1360 t3_mac_set_address(mac, 0, p->hw_addr);
1361 t3_init_rx_mode(&rm, p);
1362 t3_mac_set_rx_mode(mac, &rm);
1367 await_mgmt_replies(struct adapter *adap, unsigned long init_cnt,
1372 while (adap->sge.qs[0].rspq.offload_pkts < init_cnt + n) {
1381 init_tp_parity(struct adapter *adap)
1385 struct cpl_set_tcb_field *greq;
1386 unsigned long cnt = adap->sge.qs[0].rspq.offload_pkts;
1388 t3_tp_set_offload_mode(adap, 1);
1390 for (i = 0; i < 16; i++) {
1391 struct cpl_smt_write_req *req;
1393 m = m_gethdr(M_WAITOK, MT_DATA);
1394 req = mtod(m, struct cpl_smt_write_req *);
1395 m->m_len = m->m_pkthdr.len = sizeof(*req);
1396 memset(req, 0, sizeof(*req));
1397 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1398 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, i));
1400 t3_mgmt_tx(adap, m);
1403 for (i = 0; i < 2048; i++) {
1404 struct cpl_l2t_write_req *req;
1406 m = m_gethdr(M_WAITOK, MT_DATA);
1407 req = mtod(m, struct cpl_l2t_write_req *);
1408 m->m_len = m->m_pkthdr.len = sizeof(*req);
1409 memset(req, 0, sizeof(*req));
1410 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1411 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, i));
1412 req->params = htonl(V_L2T_W_IDX(i));
1413 t3_mgmt_tx(adap, m);
1416 for (i = 0; i < 2048; i++) {
1417 struct cpl_rte_write_req *req;
1419 m = m_gethdr(M_WAITOK, MT_DATA);
1420 req = mtod(m, struct cpl_rte_write_req *);
1421 m->m_len = m->m_pkthdr.len = sizeof(*req);
1422 memset(req, 0, sizeof(*req));
1423 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1424 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RTE_WRITE_REQ, i));
1425 req->l2t_idx = htonl(V_L2T_W_IDX(i));
1426 t3_mgmt_tx(adap, m);
1429 m = m_gethdr(M_WAITOK, MT_DATA);
1430 greq = mtod(m, struct cpl_set_tcb_field *);
1431 m->m_len = m->m_pkthdr.len = sizeof(*greq);
1432 memset(greq, 0, sizeof(*greq));
1433 greq->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1434 OPCODE_TID(greq) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, 0));
1435 greq->mask = htobe64(1);
1436 t3_mgmt_tx(adap, m);
1438 i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1);
1439 t3_tp_set_offload_mode(adap, 0);
1444 * setup_rss - configure Receive Side Steering (per-queue connection demux)
1445 * @adap: the adapter
1447 * Sets up RSS to distribute packets to multiple receive queues. We
1448 * configure the RSS CPU lookup table to distribute to the number of HW
1449 * receive queues, and the response queue lookup table to narrow that
1450 * down to the response queues actually configured for each port.
1451 * We always configure the RSS mapping for two ports since the mapping
1452 * table has plenty of entries.
1455 setup_rss(adapter_t *adap)
1459 uint8_t cpus[SGE_QSETS + 1];
1460 uint16_t rspq_map[RSS_TABLE_SIZE];
1462 for (i = 0; i < SGE_QSETS; ++i)
1464 cpus[SGE_QSETS] = 0xff;
1467 for_each_port(adap, i) {
1468 const struct port_info *pi = adap2pinfo(adap, i);
1470 nq[pi->tx_chan] += pi->nqsets;
1472 for (i = 0; i < RSS_TABLE_SIZE / 2; ++i) {
1473 rspq_map[i] = nq[0] ? i % nq[0] : 0;
1474 rspq_map[i + RSS_TABLE_SIZE / 2] = nq[1] ? i % nq[1] + nq[0] : 0;
1477 /* Calculate the reverse RSS map table */
1478 for (i = 0; i < SGE_QSETS; ++i)
1479 adap->rrss_map[i] = 0xff;
1480 for (i = 0; i < RSS_TABLE_SIZE; ++i)
1481 if (adap->rrss_map[rspq_map[i]] == 0xff)
1482 adap->rrss_map[rspq_map[i]] = i;
1484 t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN |
1485 F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN | F_OFDMAPEN |
1486 F_RRCPLMAPEN | V_RRCPLCPUSIZE(6) | F_HASHTOEPLITZ,
1492 * Sends an mbuf to an offload queue driver
1493 * after dealing with any active network taps.
1496 offload_tx(struct t3cdev *tdev, struct mbuf *m)
1500 ret = t3_offload_tx(tdev, m);
1505 write_smt_entry(struct adapter *adapter, int idx)
1507 struct port_info *pi = &adapter->port[idx];
1508 struct cpl_smt_write_req *req;
1511 if ((m = m_gethdr(M_NOWAIT, MT_DATA)) == NULL)
1514 req = mtod(m, struct cpl_smt_write_req *);
1515 m->m_pkthdr.len = m->m_len = sizeof(struct cpl_smt_write_req);
1517 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1518 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx));
1519 req->mtu_idx = NMTUS - 1; /* should be 0 but there's a T3 bug */
1521 memset(req->src_mac1, 0, sizeof(req->src_mac1));
1522 memcpy(req->src_mac0, pi->hw_addr, ETHER_ADDR_LEN);
1524 m_set_priority(m, 1);
1526 offload_tx(&adapter->tdev, m);
1532 init_smt(struct adapter *adapter)
1536 for_each_port(adapter, i)
1537 write_smt_entry(adapter, i);
1542 init_port_mtus(adapter_t *adapter)
1544 unsigned int mtus = ETHERMTU | (ETHERMTU << 16);
1546 t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus);
1550 send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo,
1554 struct mngt_pktsched_wr *req;
1556 m = m_gethdr(M_DONTWAIT, MT_DATA);
1558 req = mtod(m, struct mngt_pktsched_wr *);
1559 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT));
1560 req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET;
1565 req->binding = port;
1566 m->m_len = m->m_pkthdr.len = sizeof(*req);
1567 t3_mgmt_tx(adap, m);
1572 bind_qsets(adapter_t *sc)
1576 for (i = 0; i < (sc)->params.nports; ++i) {
1577 const struct port_info *pi = adap2pinfo(sc, i);
1579 for (j = 0; j < pi->nqsets; ++j) {
1580 send_pktsched_cmd(sc, 1, pi->first_qset + j, -1,
1588 update_tpeeprom(struct adapter *adap)
1590 #ifdef FIRMWARE_LATEST
1591 const struct firmware *tpeeprom;
1593 struct firmware *tpeeprom;
1597 unsigned int major, minor;
1601 t3_seeprom_read(adap, TP_SRAM_OFFSET, &version);
1603 major = G_TP_VERSION_MAJOR(version);
1604 minor = G_TP_VERSION_MINOR(version);
1605 if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR)
1608 rev = t3rev2char(adap);
1609 snprintf(name, sizeof(name), TPEEPROM_NAME, rev);
1611 tpeeprom = firmware_get(name);
1612 if (tpeeprom == NULL) {
1613 device_printf(adap->dev,
1614 "could not load TP EEPROM: unable to load %s\n",
1619 len = tpeeprom->datasize - 4;
1621 ret = t3_check_tpsram(adap, tpeeprom->data, tpeeprom->datasize);
1623 goto release_tpeeprom;
1625 if (len != TP_SRAM_LEN) {
1626 device_printf(adap->dev,
1627 "%s length is wrong len=%d expected=%d\n", name,
1632 ret = set_eeprom(&adap->port[0], tpeeprom->data, tpeeprom->datasize,
1636 device_printf(adap->dev,
1637 "Protocol SRAM image updated in EEPROM to %d.%d.%d\n",
1638 TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
1640 device_printf(adap->dev,
1641 "Protocol SRAM image update in EEPROM failed\n");
1644 firmware_put(tpeeprom, FIRMWARE_UNLOAD);
1650 update_tpsram(struct adapter *adap)
1652 #ifdef FIRMWARE_LATEST
1653 const struct firmware *tpsram;
1655 struct firmware *tpsram;
1660 rev = t3rev2char(adap);
1661 snprintf(name, sizeof(name), TPSRAM_NAME, rev);
1663 update_tpeeprom(adap);
1665 tpsram = firmware_get(name);
1666 if (tpsram == NULL){
1667 device_printf(adap->dev, "could not load TP SRAM\n");
1670 device_printf(adap->dev, "updating TP SRAM\n");
1672 ret = t3_check_tpsram(adap, tpsram->data, tpsram->datasize);
1674 goto release_tpsram;
1676 ret = t3_set_proto_sram(adap, tpsram->data);
1678 device_printf(adap->dev, "loading protocol SRAM failed\n");
1681 firmware_put(tpsram, FIRMWARE_UNLOAD);
1687 * cxgb_up - enable the adapter
1688 * @adap: adapter being enabled
1690 * Called when the first port is enabled, this function performs the
1691 * actions necessary to make an adapter operational, such as completing
1692 * the initialization of HW modules, and enabling interrupts.
1695 cxgb_up(struct adapter *sc)
1699 KASSERT(sc->open_device_map == 0, ("%s: device(s) already open (%x)",
1700 __func__, sc->open_device_map));
1702 if ((sc->flags & FULL_INIT_DONE) == 0) {
1704 ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
1706 if ((sc->flags & FW_UPTODATE) == 0)
1707 if ((err = upgrade_fw(sc)))
1710 if ((sc->flags & TPS_UPTODATE) == 0)
1711 if ((err = update_tpsram(sc)))
1714 err = t3_init_hw(sc, 0);
1718 t3_set_reg_field(sc, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT);
1719 t3_write_reg(sc, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
1721 err = setup_sge_qsets(sc);
1728 err = cxgb_setup_interrupts(sc);
1732 t3_add_configured_sysctls(sc);
1733 sc->flags |= FULL_INIT_DONE;
1740 if (sc->params.rev >= T3_REV_C && !(sc->flags & TP_PARITY_INIT) &&
1741 is_offload(sc) && init_tp_parity(sc) == 0)
1742 sc->flags |= TP_PARITY_INIT;
1744 if (sc->flags & TP_PARITY_INIT) {
1745 t3_write_reg(sc, A_TP_INT_CAUSE, F_CMCACHEPERR | F_ARPLUTPERR);
1746 t3_write_reg(sc, A_TP_INT_ENABLE, 0x7fbfffff);
1749 if (!(sc->flags & QUEUES_BOUND)) {
1751 sc->flags |= QUEUES_BOUND;
1754 t3_sge_reset_adapter(sc);
1760 * Called when the last open device is closed. Does NOT undo all of cxgb_up's
1761 * work. Specifically, the resources grabbed under FULL_INIT_DONE are released
1762 * during controller_detach, not here.
1765 cxgb_down(struct adapter *sc)
1768 t3_intr_disable(sc);
1772 offload_open(struct port_info *pi)
1774 struct adapter *sc = pi->adapter;
1775 struct t3cdev *tdev = &sc->tdev;
1777 setbit(&sc->open_device_map, OFFLOAD_DEVMAP_BIT);
1779 t3_tp_set_offload_mode(sc, 1);
1780 tdev->lldev = pi->ifp;
1782 t3_load_mtus(sc, sc->params.mtus, sc->params.a_wnd, sc->params.b_wnd,
1783 sc->params.rev == 0 ? sc->port[0].ifp->if_mtu : 0xffff);
1785 cxgb_add_clients(tdev);
1791 offload_close(struct t3cdev *tdev)
1793 struct adapter *adapter = tdev2adap(tdev);
1795 if (!isset(&adapter->open_device_map, OFFLOAD_DEVMAP_BIT))
1798 /* Call back all registered clients */
1799 cxgb_remove_clients(tdev);
1802 cxgb_set_dummy_ops(tdev);
1803 t3_tp_set_offload_mode(adapter, 0);
1805 clrbit(&adapter->open_device_map, OFFLOAD_DEVMAP_BIT);
1811 * if_init for cxgb ports.
1814 cxgb_init(void *arg)
1816 struct port_info *p = arg;
1817 struct adapter *sc = p->adapter;
1820 cxgb_init_locked(p); /* releases adapter lock */
1821 ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
1825 cxgb_init_locked(struct port_info *p)
1827 struct adapter *sc = p->adapter;
1828 struct ifnet *ifp = p->ifp;
1829 struct cmac *mac = &p->mac;
1830 int i, rc = 0, may_sleep = 0;
1832 ADAPTER_LOCK_ASSERT_OWNED(sc);
1834 while (!IS_DOOMED(p) && IS_BUSY(sc)) {
1835 if (mtx_sleep(&sc->flags, &sc->lock, PCATCH, "cxgbinit", 0)) {
1844 KASSERT(!IS_BUSY(sc), ("%s: controller busy.", __func__));
1847 * The code that runs during one-time adapter initialization can sleep
1848 * so it's important not to hold any locks across it.
1850 may_sleep = sc->flags & FULL_INIT_DONE ? 0 : 1;
1857 if (sc->open_device_map == 0) {
1858 if ((rc = cxgb_up(sc)) != 0)
1861 if (is_offload(sc) && !ofld_disable && offload_open(p))
1863 "Could not initialize offload capabilities\n");
1867 if (isset(&sc->open_device_map, p->port_id) &&
1868 (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
1872 t3_port_intr_enable(sc, p->port_id);
1873 if (!mac->multiport)
1875 cxgb_update_mac_settings(p);
1876 t3_link_start(&p->phy, mac, &p->link_config);
1877 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
1878 ifp->if_drv_flags |= IFF_DRV_RUNNING;
1879 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
1882 t3_link_changed(sc, p->port_id);
1884 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) {
1885 struct sge_qset *qs = &sc->sge.qs[i];
1886 struct sge_txq *txq = &qs->txq[TXQ_ETH];
1888 callout_reset_on(&txq->txq_watchdog, hz, cxgb_tx_watchdog, qs,
1889 txq->txq_watchdog.c_cpu);
1893 setbit(&sc->open_device_map, p->port_id);
1898 KASSERT(IS_BUSY(sc), ("%s: controller not busy.", __func__));
1900 wakeup_one(&sc->flags);
1907 cxgb_uninit_locked(struct port_info *p)
1909 struct adapter *sc = p->adapter;
1912 ADAPTER_LOCK_ASSERT_OWNED(sc);
1914 while (!IS_DOOMED(p) && IS_BUSY(sc)) {
1915 if (mtx_sleep(&sc->flags, &sc->lock, PCATCH, "cxgbunin", 0)) {
1924 KASSERT(!IS_BUSY(sc), ("%s: controller busy.", __func__));
1928 rc = cxgb_uninit_synchronized(p);
1931 KASSERT(IS_BUSY(sc), ("%s: controller not busy.", __func__));
1933 wakeup_one(&sc->flags);
1940 * Called on "ifconfig down", and from port_detach
1943 cxgb_uninit_synchronized(struct port_info *pi)
1945 struct adapter *sc = pi->adapter;
1946 struct ifnet *ifp = pi->ifp;
1949 * taskqueue_drain may cause a deadlock if the adapter lock is held.
1951 ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
1954 * Clear this port's bit from the open device map, and then drain all
1955 * the tasks that can access/manipulate this port's port_info or ifp.
1956 * We disable this port's interrupts here and so the the slow/ext
1957 * interrupt tasks won't be enqueued. The tick task will continue to
1958 * be enqueued every second but the runs after this drain will not see
1959 * this port in the open device map.
1961 * A well behaved task must take open_device_map into account and ignore
1962 * ports that are not open.
1964 clrbit(&sc->open_device_map, pi->port_id);
1965 t3_port_intr_disable(sc, pi->port_id);
1966 taskqueue_drain(sc->tq, &sc->slow_intr_task);
1967 taskqueue_drain(sc->tq, &sc->ext_intr_task);
1968 taskqueue_drain(sc->tq, &sc->tick_task);
1971 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
1973 /* disable pause frames */
1974 t3_set_reg_field(sc, A_XGM_TX_CFG + pi->mac.offset, F_TXPAUSEEN, 0);
1976 /* Reset RX FIFO HWM */
1977 t3_set_reg_field(sc, A_XGM_RXFIFO_CFG + pi->mac.offset,
1978 V_RXFIFOPAUSEHWM(M_RXFIFOPAUSEHWM), 0);
1982 /* Wait for TXFIFO empty */
1983 t3_wait_op_done(sc, A_XGM_TXFIFO_CFG + pi->mac.offset,
1984 F_TXFIFO_EMPTY, 1, 20, 5);
1987 t3_mac_disable(&pi->mac, MAC_DIRECTION_RX);
1990 pi->phy.ops->power_down(&pi->phy, 1);
1994 pi->link_config.link_ok = 0;
1995 t3_os_link_changed(sc, pi->port_id, 0, 0, 0, 0, 0);
1997 if ((sc->open_device_map & PORT_MASK) == 0)
1998 offload_close(&sc->tdev);
2000 if (sc->open_device_map == 0)
2001 cxgb_down(pi->adapter);
2006 #ifdef LRO_SUPPORTED
2008 * Mark lro enabled or disabled in all qsets for this port
2011 cxgb_set_lro(struct port_info *p, int enabled)
2014 struct adapter *adp = p->adapter;
2017 PORT_LOCK_ASSERT_OWNED(p);
2018 for (i = 0; i < p->nqsets; i++) {
2019 q = &adp->sge.qs[p->first_qset + i];
2020 q->lro.enabled = (enabled != 0);
2027 cxgb_ioctl(struct ifnet *ifp, unsigned long command, caddr_t data)
2029 struct port_info *p = ifp->if_softc;
2030 struct adapter *sc = p->adapter;
2031 struct ifreq *ifr = (struct ifreq *)data;
2032 int flags, error = 0, mtu;
2038 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0);
2046 if ((mtu < ETHERMIN) || (mtu > ETHERMTU_JUMBO)) {
2051 cxgb_update_mac_settings(p);
2062 if (ifp->if_flags & IFF_UP) {
2063 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
2064 flags = p->if_flags;
2065 if (((ifp->if_flags ^ flags) & IFF_PROMISC) ||
2066 ((ifp->if_flags ^ flags) & IFF_ALLMULTI)) {
2072 cxgb_update_mac_settings(p);
2077 error = cxgb_init_locked(p);
2078 p->if_flags = ifp->if_flags;
2079 } else if (ifp->if_drv_flags & IFF_DRV_RUNNING)
2080 error = cxgb_uninit_locked(p);
2082 ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
2087 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0);
2091 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
2093 cxgb_update_mac_settings(p);
2101 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0);
2105 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
2106 if (mask & IFCAP_TXCSUM) {
2107 if (IFCAP_TXCSUM & ifp->if_capenable) {
2108 ifp->if_capenable &= ~(IFCAP_TXCSUM|IFCAP_TSO4);
2109 ifp->if_hwassist &= ~(CSUM_TCP | CSUM_UDP
2110 | CSUM_IP | CSUM_TSO);
2112 ifp->if_capenable |= IFCAP_TXCSUM;
2113 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP
2117 if (mask & IFCAP_RXCSUM) {
2118 ifp->if_capenable ^= IFCAP_RXCSUM;
2120 if (mask & IFCAP_TSO4) {
2121 if (IFCAP_TSO4 & ifp->if_capenable) {
2122 ifp->if_capenable &= ~IFCAP_TSO4;
2123 ifp->if_hwassist &= ~CSUM_TSO;
2124 } else if (IFCAP_TXCSUM & ifp->if_capenable) {
2125 ifp->if_capenable |= IFCAP_TSO4;
2126 ifp->if_hwassist |= CSUM_TSO;
2130 #ifdef LRO_SUPPORTED
2131 if (mask & IFCAP_LRO) {
2132 ifp->if_capenable ^= IFCAP_LRO;
2134 /* Safe to do this even if cxgb_up not called yet */
2135 cxgb_set_lro(p, ifp->if_capenable & IFCAP_LRO);
2138 if (mask & IFCAP_VLAN_HWTAGGING) {
2139 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
2140 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
2142 cxgb_update_mac_settings(p);
2146 if (mask & IFCAP_VLAN_MTU) {
2147 ifp->if_capenable ^= IFCAP_VLAN_MTU;
2148 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
2150 cxgb_update_mac_settings(p);
2154 if (mask & IFCAP_VLAN_HWCSUM)
2155 ifp->if_capenable ^= IFCAP_VLAN_HWCSUM;
2157 #ifdef VLAN_CAPABILITIES
2158 VLAN_CAPABILITIES(ifp);
2164 error = ifmedia_ioctl(ifp, ifr, &p->media, command);
2167 error = ether_ioctl(ifp, command, data);
2174 cxgb_media_change(struct ifnet *ifp)
2176 return (EOPNOTSUPP);
2180 * Translates phy->modtype to the correct Ethernet media subtype.
2183 cxgb_ifm_type(int mod)
2186 case phy_modtype_sr:
2187 return (IFM_10G_SR);
2188 case phy_modtype_lr:
2189 return (IFM_10G_LR);
2190 case phy_modtype_lrm:
2191 return (IFM_10G_LRM);
2192 case phy_modtype_twinax:
2193 return (IFM_10G_TWINAX);
2194 case phy_modtype_twinax_long:
2195 return (IFM_10G_TWINAX_LONG);
2196 case phy_modtype_none:
2198 case phy_modtype_unknown:
2199 return (IFM_UNKNOWN);
2202 KASSERT(0, ("%s: modtype %d unknown", __func__, mod));
2203 return (IFM_UNKNOWN);
2207 * Rebuilds the ifmedia list for this port, and sets the current media.
2210 cxgb_build_medialist(struct port_info *p)
2212 struct cphy *phy = &p->phy;
2213 struct ifmedia *media = &p->media;
2214 int mod = phy->modtype;
2215 int m = IFM_ETHER | IFM_FDX;
2219 ifmedia_removeall(media);
2220 if (phy->caps & SUPPORTED_TP && phy->caps & SUPPORTED_Autoneg) {
2223 if (phy->caps & SUPPORTED_10000baseT_Full)
2224 ifmedia_add(media, m | IFM_10G_T, mod, NULL);
2226 if (phy->caps & SUPPORTED_1000baseT_Full)
2227 ifmedia_add(media, m | IFM_1000_T, mod, NULL);
2229 if (phy->caps & SUPPORTED_100baseT_Full)
2230 ifmedia_add(media, m | IFM_100_TX, mod, NULL);
2232 if (phy->caps & SUPPORTED_10baseT_Full)
2233 ifmedia_add(media, m | IFM_10_T, mod, NULL);
2235 ifmedia_add(media, IFM_ETHER | IFM_AUTO, mod, NULL);
2236 ifmedia_set(media, IFM_ETHER | IFM_AUTO);
2238 } else if (phy->caps & SUPPORTED_TP) {
2241 KASSERT(phy->caps & SUPPORTED_10000baseT_Full,
2242 ("%s: unexpected cap 0x%x", __func__, phy->caps));
2244 ifmedia_add(media, m | IFM_10G_CX4, mod, NULL);
2245 ifmedia_set(media, m | IFM_10G_CX4);
2247 } else if (phy->caps & SUPPORTED_FIBRE &&
2248 phy->caps & SUPPORTED_10000baseT_Full) {
2249 /* 10G optical (but includes SFP+ twinax) */
2251 m |= cxgb_ifm_type(mod);
2252 if (IFM_SUBTYPE(m) == IFM_NONE)
2255 ifmedia_add(media, m, mod, NULL);
2256 ifmedia_set(media, m);
2258 } else if (phy->caps & SUPPORTED_FIBRE &&
2259 phy->caps & SUPPORTED_1000baseT_Full) {
2262 /* XXX: Lie and claim to be SX, could actually be any 1G-X */
2263 ifmedia_add(media, m | IFM_1000_SX, mod, NULL);
2264 ifmedia_set(media, m | IFM_1000_SX);
2267 KASSERT(0, ("%s: don't know how to handle 0x%x.", __func__,
2275 cxgb_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
2277 struct port_info *p = ifp->if_softc;
2278 struct ifmedia_entry *cur = p->media.ifm_cur;
2279 int speed = p->link_config.speed;
2281 if (cur->ifm_data != p->phy.modtype) {
2282 cxgb_build_medialist(p);
2283 cur = p->media.ifm_cur;
2286 ifmr->ifm_status = IFM_AVALID;
2287 if (!p->link_config.link_ok)
2290 ifmr->ifm_status |= IFM_ACTIVE;
2293 * active and current will differ iff current media is autoselect. That
2294 * can happen only for copper RJ45.
2296 if (IFM_SUBTYPE(cur->ifm_media) != IFM_AUTO)
2298 KASSERT(p->phy.caps & SUPPORTED_TP && p->phy.caps & SUPPORTED_Autoneg,
2299 ("%s: unexpected PHY caps 0x%x", __func__, p->phy.caps));
2301 ifmr->ifm_active = IFM_ETHER | IFM_FDX;
2302 if (speed == SPEED_10000)
2303 ifmr->ifm_active |= IFM_10G_T;
2304 else if (speed == SPEED_1000)
2305 ifmr->ifm_active |= IFM_1000_T;
2306 else if (speed == SPEED_100)
2307 ifmr->ifm_active |= IFM_100_TX;
2308 else if (speed == SPEED_10)
2309 ifmr->ifm_active |= IFM_10_T;
2311 KASSERT(0, ("%s: link up but speed unknown (%u)", __func__,
2316 cxgb_async_intr(void *data)
2318 adapter_t *sc = data;
2321 device_printf(sc->dev, "cxgb_async_intr\n");
2323 * May need to sleep - defer to taskqueue
2325 taskqueue_enqueue(sc->tq, &sc->slow_intr_task);
2329 cxgb_ext_intr_handler(void *arg, int count)
2331 adapter_t *sc = (adapter_t *)arg;
2334 printf("cxgb_ext_intr_handler\n");
2336 t3_phy_intr_handler(sc);
2338 /* Now reenable external interrupts */
2340 if (sc->slow_intr_mask) {
2341 sc->slow_intr_mask |= F_T3DBG;
2342 t3_write_reg(sc, A_PL_INT_CAUSE0, F_T3DBG);
2343 t3_write_reg(sc, A_PL_INT_ENABLE0, sc->slow_intr_mask);
2349 link_poll_needed(struct port_info *p)
2351 struct cphy *phy = &p->phy;
2353 if (phy->caps & POLL_LINK_1ST_TIME) {
2354 p->phy.caps &= ~POLL_LINK_1ST_TIME;
2358 return (p->link_fault || !(phy->caps & SUPPORTED_LINK_IRQ));
2362 check_link_status(adapter_t *sc)
2366 for (i = 0; i < (sc)->params.nports; ++i) {
2367 struct port_info *p = &sc->port[i];
2369 if (!isset(&sc->open_device_map, p->port_id))
2372 if (link_poll_needed(p))
2373 t3_link_changed(sc, i);
2378 check_t3b2_mac(struct adapter *sc)
2382 if (sc->flags & CXGB_SHUTDOWN)
2385 for_each_port(sc, i) {
2386 struct port_info *p = &sc->port[i];
2389 struct ifnet *ifp = p->ifp;
2392 if (!isset(&sc->open_device_map, p->port_id) || p->link_fault ||
2393 !p->link_config.link_ok)
2396 KASSERT(ifp->if_drv_flags & IFF_DRV_RUNNING,
2397 ("%s: state mismatch (drv_flags %x, device_map %x)",
2398 __func__, ifp->if_drv_flags, sc->open_device_map));
2401 status = t3b2_mac_watchdog_task(&p->mac);
2403 p->mac.stats.num_toggled++;
2404 else if (status == 2) {
2405 struct cmac *mac = &p->mac;
2407 cxgb_update_mac_settings(p);
2408 t3_link_start(&p->phy, mac, &p->link_config);
2409 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
2410 t3_port_intr_enable(sc, p->port_id);
2411 p->mac.stats.num_resets++;
2418 cxgb_tick(void *arg)
2420 adapter_t *sc = (adapter_t *)arg;
2422 if (sc->flags & CXGB_SHUTDOWN)
2425 taskqueue_enqueue(sc->tq, &sc->tick_task);
2426 callout_reset(&sc->cxgb_tick_ch, CXGB_TICKS(sc), cxgb_tick, sc);
2430 cxgb_tick_handler(void *arg, int count)
2432 adapter_t *sc = (adapter_t *)arg;
2433 const struct adapter_params *p = &sc->params;
2435 uint32_t cause, reset;
2437 if (sc->flags & CXGB_SHUTDOWN || !(sc->flags & FULL_INIT_DONE))
2440 check_link_status(sc);
2442 if (p->rev == T3_REV_B2 && p->nports < 4 && sc->open_device_map)
2445 cause = t3_read_reg(sc, A_SG_INT_CAUSE);
2447 if (cause & F_FLEMPTY) {
2448 struct sge_qset *qs = &sc->sge.qs[0];
2453 cause = (t3_read_reg(sc, A_SG_RSPQ_FL_STATUS) >>
2454 S_FL0EMPTY) & 0xffff;
2456 qs->fl[i].empty += (cause & 1);
2463 t3_write_reg(sc, A_SG_INT_CAUSE, reset);
2465 for (i = 0; i < sc->params.nports; i++) {
2466 struct port_info *pi = &sc->port[i];
2467 struct ifnet *ifp = pi->ifp;
2468 struct cmac *mac = &pi->mac;
2469 struct mac_stats *mstats = &mac->stats;
2471 if (!isset(&sc->open_device_map, pi->port_id))
2475 t3_mac_update_stats(mac);
2479 mstats->tx_frames_64 +
2480 mstats->tx_frames_65_127 +
2481 mstats->tx_frames_128_255 +
2482 mstats->tx_frames_256_511 +
2483 mstats->tx_frames_512_1023 +
2484 mstats->tx_frames_1024_1518 +
2485 mstats->tx_frames_1519_max;
2488 mstats->rx_frames_64 +
2489 mstats->rx_frames_65_127 +
2490 mstats->rx_frames_128_255 +
2491 mstats->rx_frames_256_511 +
2492 mstats->rx_frames_512_1023 +
2493 mstats->rx_frames_1024_1518 +
2494 mstats->rx_frames_1519_max;
2496 ifp->if_obytes = mstats->tx_octets;
2497 ifp->if_ibytes = mstats->rx_octets;
2498 ifp->if_omcasts = mstats->tx_mcast_frames;
2499 ifp->if_imcasts = mstats->rx_mcast_frames;
2501 ifp->if_collisions =
2502 mstats->tx_total_collisions;
2504 ifp->if_iqdrops = mstats->rx_cong_drops;
2507 mstats->tx_excess_collisions +
2508 mstats->tx_underrun +
2509 mstats->tx_len_errs +
2510 mstats->tx_mac_internal_errs +
2511 mstats->tx_excess_deferral +
2512 mstats->tx_fcs_errs;
2515 mstats->rx_data_errs +
2516 mstats->rx_sequence_errs +
2518 mstats->rx_too_long +
2519 mstats->rx_mac_internal_errs +
2521 mstats->rx_fcs_errs;
2526 /* Count rx fifo overflows, once per second */
2527 cause = t3_read_reg(sc, A_XGM_INT_CAUSE + mac->offset);
2529 if (cause & F_RXFIFO_OVERFLOW) {
2530 mac->stats.rx_fifo_ovfl++;
2531 reset |= F_RXFIFO_OVERFLOW;
2533 t3_write_reg(sc, A_XGM_INT_CAUSE + mac->offset, reset);
2538 touch_bars(device_t dev)
2543 #if !defined(__LP64__) && 0
2546 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_1, &v);
2547 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_1, v);
2548 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_3, &v);
2549 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_3, v);
2550 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_5, &v);
2551 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_5, v);
2556 set_eeprom(struct port_info *pi, const uint8_t *data, int len, int offset)
2560 u32 aligned_offset, aligned_len, *p;
2561 struct adapter *adapter = pi->adapter;
2564 aligned_offset = offset & ~3;
2565 aligned_len = (len + (offset & 3) + 3) & ~3;
2567 if (aligned_offset != offset || aligned_len != len) {
2568 buf = malloc(aligned_len, M_DEVBUF, M_WAITOK|M_ZERO);
2571 err = t3_seeprom_read(adapter, aligned_offset, (u32 *)buf);
2572 if (!err && aligned_len > 4)
2573 err = t3_seeprom_read(adapter,
2574 aligned_offset + aligned_len - 4,
2575 (u32 *)&buf[aligned_len - 4]);
2578 memcpy(buf + (offset & 3), data, len);
2580 buf = (uint8_t *)(uintptr_t)data;
2582 err = t3_seeprom_wp(adapter, 0);
2586 for (p = (u32 *)buf; !err && aligned_len; aligned_len -= 4, p++) {
2587 err = t3_seeprom_write(adapter, aligned_offset, *p);
2588 aligned_offset += 4;
2592 err = t3_seeprom_wp(adapter, 1);
2595 free(buf, M_DEVBUF);
2601 in_range(int val, int lo, int hi)
2603 return val < 0 || (val <= hi && val >= lo);
2607 cxgb_extension_open(struct cdev *dev, int flags, int fmp, struct thread *td)
2613 cxgb_extension_close(struct cdev *dev, int flags, int fmt, struct thread *td)
2619 cxgb_extension_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data,
2620 int fflag, struct thread *td)
2623 struct port_info *pi = dev->si_drv1;
2624 adapter_t *sc = pi->adapter;
2626 #ifdef PRIV_SUPPORTED
2627 if (priv_check(td, PRIV_DRIVER)) {
2629 printf("user does not have access to privileged ioctls\n");
2635 printf("user does not have access to privileged ioctls\n");
2641 case CHELSIO_GET_MIIREG: {
2643 struct cphy *phy = &pi->phy;
2644 struct ch_mii_data *mid = (struct ch_mii_data *)data;
2646 if (!phy->mdio_read)
2647 return (EOPNOTSUPP);
2649 mmd = mid->phy_id >> 8;
2652 else if (mmd > MDIO_DEV_VEND2)
2655 error = phy->mdio_read(sc, mid->phy_id & 0x1f, mmd,
2656 mid->reg_num, &val);
2658 error = phy->mdio_read(sc, mid->phy_id & 0x1f, 0,
2659 mid->reg_num & 0x1f, &val);
2664 case CHELSIO_SET_MIIREG: {
2665 struct cphy *phy = &pi->phy;
2666 struct ch_mii_data *mid = (struct ch_mii_data *)data;
2668 if (!phy->mdio_write)
2669 return (EOPNOTSUPP);
2671 mmd = mid->phy_id >> 8;
2674 else if (mmd > MDIO_DEV_VEND2)
2677 error = phy->mdio_write(sc, mid->phy_id & 0x1f,
2678 mmd, mid->reg_num, mid->val_in);
2680 error = phy->mdio_write(sc, mid->phy_id & 0x1f, 0,
2681 mid->reg_num & 0x1f,
2685 case CHELSIO_SETREG: {
2686 struct ch_reg *edata = (struct ch_reg *)data;
2687 if ((edata->addr & 0x3) != 0 || edata->addr >= sc->mmio_len)
2689 t3_write_reg(sc, edata->addr, edata->val);
2692 case CHELSIO_GETREG: {
2693 struct ch_reg *edata = (struct ch_reg *)data;
2694 if ((edata->addr & 0x3) != 0 || edata->addr >= sc->mmio_len)
2696 edata->val = t3_read_reg(sc, edata->addr);
2699 case CHELSIO_GET_SGE_CONTEXT: {
2700 struct ch_cntxt *ecntxt = (struct ch_cntxt *)data;
2701 mtx_lock_spin(&sc->sge.reg_lock);
2702 switch (ecntxt->cntxt_type) {
2703 case CNTXT_TYPE_EGRESS:
2704 error = -t3_sge_read_ecntxt(sc, ecntxt->cntxt_id,
2708 error = -t3_sge_read_fl(sc, ecntxt->cntxt_id,
2711 case CNTXT_TYPE_RSP:
2712 error = -t3_sge_read_rspq(sc, ecntxt->cntxt_id,
2716 error = -t3_sge_read_cq(sc, ecntxt->cntxt_id,
2723 mtx_unlock_spin(&sc->sge.reg_lock);
2726 case CHELSIO_GET_SGE_DESC: {
2727 struct ch_desc *edesc = (struct ch_desc *)data;
2729 if (edesc->queue_num >= SGE_QSETS * 6)
2731 ret = t3_get_desc(&sc->sge.qs[edesc->queue_num / 6],
2732 edesc->queue_num % 6, edesc->idx, edesc->data);
2738 case CHELSIO_GET_QSET_PARAMS: {
2739 struct qset_params *q;
2740 struct ch_qset_params *t = (struct ch_qset_params *)data;
2741 int q1 = pi->first_qset;
2742 int nqsets = pi->nqsets;
2745 if (t->qset_idx >= nqsets)
2748 i = q1 + t->qset_idx;
2749 q = &sc->params.sge.qset[i];
2750 t->rspq_size = q->rspq_size;
2751 t->txq_size[0] = q->txq_size[0];
2752 t->txq_size[1] = q->txq_size[1];
2753 t->txq_size[2] = q->txq_size[2];
2754 t->fl_size[0] = q->fl_size;
2755 t->fl_size[1] = q->jumbo_size;
2756 t->polling = q->polling;
2758 t->intr_lat = q->coalesce_usecs;
2759 t->cong_thres = q->cong_thres;
2762 if (sc->flags & USING_MSIX)
2763 t->vector = rman_get_start(sc->msix_irq_res[i]);
2765 t->vector = rman_get_start(sc->irq_res);
2769 case CHELSIO_GET_QSET_NUM: {
2770 struct ch_reg *edata = (struct ch_reg *)data;
2771 edata->val = pi->nqsets;
2774 case CHELSIO_LOAD_FW: {
2777 struct ch_mem_range *t = (struct ch_mem_range *)data;
2780 * You're allowed to load a firmware only before FULL_INIT_DONE
2782 * FW_UPTODATE is also set so the rest of the initialization
2783 * will not overwrite what was loaded here. This gives you the
2784 * flexibility to load any firmware (and maybe shoot yourself in
2789 if (sc->open_device_map || sc->flags & FULL_INIT_DONE) {
2794 fw_data = malloc(t->len, M_DEVBUF, M_NOWAIT);
2798 error = copyin(t->buf, fw_data, t->len);
2801 error = -t3_load_fw(sc, fw_data, t->len);
2803 if (t3_get_fw_version(sc, &vers) == 0) {
2804 snprintf(&sc->fw_version[0], sizeof(sc->fw_version),
2805 "%d.%d.%d", G_FW_VERSION_MAJOR(vers),
2806 G_FW_VERSION_MINOR(vers), G_FW_VERSION_MICRO(vers));
2810 sc->flags |= FW_UPTODATE;
2812 free(fw_data, M_DEVBUF);
2816 case CHELSIO_LOAD_BOOT: {
2818 struct ch_mem_range *t = (struct ch_mem_range *)data;
2820 boot_data = malloc(t->len, M_DEVBUF, M_NOWAIT);
2824 error = copyin(t->buf, boot_data, t->len);
2826 error = -t3_load_boot(sc, boot_data, t->len);
2828 free(boot_data, M_DEVBUF);
2831 case CHELSIO_GET_PM: {
2832 struct ch_pm *m = (struct ch_pm *)data;
2833 struct tp_params *p = &sc->params.tp;
2835 if (!is_offload(sc))
2836 return (EOPNOTSUPP);
2838 m->tx_pg_sz = p->tx_pg_size;
2839 m->tx_num_pg = p->tx_num_pgs;
2840 m->rx_pg_sz = p->rx_pg_size;
2841 m->rx_num_pg = p->rx_num_pgs;
2842 m->pm_total = p->pmtx_size + p->chan_rx_size * p->nchan;
2846 case CHELSIO_SET_PM: {
2847 struct ch_pm *m = (struct ch_pm *)data;
2848 struct tp_params *p = &sc->params.tp;
2850 if (!is_offload(sc))
2851 return (EOPNOTSUPP);
2852 if (sc->flags & FULL_INIT_DONE)
2855 if (!m->rx_pg_sz || (m->rx_pg_sz & (m->rx_pg_sz - 1)) ||
2856 !m->tx_pg_sz || (m->tx_pg_sz & (m->tx_pg_sz - 1)))
2857 return (EINVAL); /* not power of 2 */
2858 if (!(m->rx_pg_sz & 0x14000))
2859 return (EINVAL); /* not 16KB or 64KB */
2860 if (!(m->tx_pg_sz & 0x1554000))
2862 if (m->tx_num_pg == -1)
2863 m->tx_num_pg = p->tx_num_pgs;
2864 if (m->rx_num_pg == -1)
2865 m->rx_num_pg = p->rx_num_pgs;
2866 if (m->tx_num_pg % 24 || m->rx_num_pg % 24)
2868 if (m->rx_num_pg * m->rx_pg_sz > p->chan_rx_size ||
2869 m->tx_num_pg * m->tx_pg_sz > p->chan_tx_size)
2872 p->rx_pg_size = m->rx_pg_sz;
2873 p->tx_pg_size = m->tx_pg_sz;
2874 p->rx_num_pgs = m->rx_num_pg;
2875 p->tx_num_pgs = m->tx_num_pg;
2878 case CHELSIO_SETMTUTAB: {
2879 struct ch_mtus *m = (struct ch_mtus *)data;
2882 if (!is_offload(sc))
2883 return (EOPNOTSUPP);
2884 if (offload_running(sc))
2886 if (m->nmtus != NMTUS)
2888 if (m->mtus[0] < 81) /* accommodate SACK */
2892 * MTUs must be in ascending order
2894 for (i = 1; i < NMTUS; ++i)
2895 if (m->mtus[i] < m->mtus[i - 1])
2898 memcpy(sc->params.mtus, m->mtus, sizeof(sc->params.mtus));
2901 case CHELSIO_GETMTUTAB: {
2902 struct ch_mtus *m = (struct ch_mtus *)data;
2904 if (!is_offload(sc))
2905 return (EOPNOTSUPP);
2907 memcpy(m->mtus, sc->params.mtus, sizeof(m->mtus));
2911 case CHELSIO_GET_MEM: {
2912 struct ch_mem_range *t = (struct ch_mem_range *)data;
2918 * Use these to avoid modifying len/addr in the the return
2921 uint32_t len = t->len, addr = t->addr;
2923 if (!is_offload(sc))
2924 return (EOPNOTSUPP);
2925 if (!(sc->flags & FULL_INIT_DONE))
2926 return (EIO); /* need the memory controllers */
2927 if ((addr & 0x7) || (len & 0x7))
2929 if (t->mem_id == MEM_CM)
2931 else if (t->mem_id == MEM_PMRX)
2933 else if (t->mem_id == MEM_PMTX)
2940 * bits 0..9: chip version
2941 * bits 10..15: chip revision
2943 t->version = 3 | (sc->params.rev << 10);
2946 * Read 256 bytes at a time as len can be large and we don't
2947 * want to use huge intermediate buffers.
2949 useraddr = (uint8_t *)t->buf;
2951 unsigned int chunk = min(len, sizeof(buf));
2953 error = t3_mc7_bd_read(mem, addr / 8, chunk / 8, buf);
2956 if (copyout(buf, useraddr, chunk))
2964 case CHELSIO_READ_TCAM_WORD: {
2965 struct ch_tcam_word *t = (struct ch_tcam_word *)data;
2967 if (!is_offload(sc))
2968 return (EOPNOTSUPP);
2969 if (!(sc->flags & FULL_INIT_DONE))
2970 return (EIO); /* need MC5 */
2971 return -t3_read_mc5_range(&sc->mc5, t->addr, 1, t->buf);
2974 case CHELSIO_SET_TRACE_FILTER: {
2975 struct ch_trace *t = (struct ch_trace *)data;
2976 const struct trace_params *tp;
2978 tp = (const struct trace_params *)&t->sip;
2980 t3_config_trace_filter(sc, tp, 0, t->invert_match,
2983 t3_config_trace_filter(sc, tp, 1, t->invert_match,
2987 case CHELSIO_SET_PKTSCHED: {
2988 struct ch_pktsched_params *p = (struct ch_pktsched_params *)data;
2989 if (sc->open_device_map == 0)
2991 send_pktsched_cmd(sc, p->sched, p->idx, p->min, p->max,
2995 case CHELSIO_IFCONF_GETREGS: {
2996 struct ch_ifconf_regs *regs = (struct ch_ifconf_regs *)data;
2997 int reglen = cxgb_get_regs_len();
2998 uint8_t *buf = malloc(reglen, M_DEVBUF, M_NOWAIT);
3002 if (regs->len > reglen)
3004 else if (regs->len < reglen)
3008 cxgb_get_regs(sc, regs, buf);
3009 error = copyout(buf, regs->data, reglen);
3011 free(buf, M_DEVBUF);
3015 case CHELSIO_SET_HW_SCHED: {
3016 struct ch_hw_sched *t = (struct ch_hw_sched *)data;
3017 unsigned int ticks_per_usec = core_ticks_per_usec(sc);
3019 if ((sc->flags & FULL_INIT_DONE) == 0)
3020 return (EAGAIN); /* need TP to be initialized */
3021 if (t->sched >= NTX_SCHED || !in_range(t->mode, 0, 1) ||
3022 !in_range(t->channel, 0, 1) ||
3023 !in_range(t->kbps, 0, 10000000) ||
3024 !in_range(t->class_ipg, 0, 10000 * 65535 / ticks_per_usec) ||
3025 !in_range(t->flow_ipg, 0,
3026 dack_ticks_to_usec(sc, 0x7ff)))
3030 error = t3_config_sched(sc, t->kbps, t->sched);
3034 if (t->class_ipg >= 0)
3035 t3_set_sched_ipg(sc, t->sched, t->class_ipg);
3036 if (t->flow_ipg >= 0) {
3037 t->flow_ipg *= 1000; /* us -> ns */
3038 t3_set_pace_tbl(sc, &t->flow_ipg, t->sched, 1);
3041 int bit = 1 << (S_TX_MOD_TIMER_MODE + t->sched);
3043 t3_set_reg_field(sc, A_TP_TX_MOD_QUEUE_REQ_MAP,
3044 bit, t->mode ? bit : 0);
3046 if (t->channel >= 0)
3047 t3_set_reg_field(sc, A_TP_TX_MOD_QUEUE_REQ_MAP,
3048 1 << t->sched, t->channel << t->sched);
3051 case CHELSIO_GET_EEPROM: {
3053 struct ch_eeprom *e = (struct ch_eeprom *)data;
3054 uint8_t *buf = malloc(EEPROMSIZE, M_DEVBUF, M_NOWAIT);
3059 e->magic = EEPROM_MAGIC;
3060 for (i = e->offset & ~3; !error && i < e->offset + e->len; i += 4)
3061 error = -t3_seeprom_read(sc, i, (uint32_t *)&buf[i]);
3064 error = copyout(buf + e->offset, e->data, e->len);
3066 free(buf, M_DEVBUF);
3069 case CHELSIO_CLEAR_STATS: {
3070 if (!(sc->flags & FULL_INIT_DONE))
3074 t3_mac_update_stats(&pi->mac);
3075 memset(&pi->mac.stats, 0, sizeof(pi->mac.stats));
3079 case CHELSIO_GET_UP_LA: {
3080 struct ch_up_la *la = (struct ch_up_la *)data;
3081 uint8_t *buf = malloc(LA_BUFSIZE, M_DEVBUF, M_NOWAIT);
3085 if (la->bufsize < LA_BUFSIZE)
3089 error = -t3_get_up_la(sc, &la->stopped, &la->idx,
3092 error = copyout(buf, la->data, la->bufsize);
3094 free(buf, M_DEVBUF);
3097 case CHELSIO_GET_UP_IOQS: {
3098 struct ch_up_ioqs *ioqs = (struct ch_up_ioqs *)data;
3099 uint8_t *buf = malloc(IOQS_BUFSIZE, M_DEVBUF, M_NOWAIT);
3105 if (ioqs->bufsize < IOQS_BUFSIZE)
3109 error = -t3_get_up_ioqs(sc, &ioqs->bufsize, buf);
3112 v = (uint32_t *)buf;
3114 ioqs->bufsize -= 4 * sizeof(uint32_t);
3115 ioqs->ioq_rx_enable = *v++;
3116 ioqs->ioq_tx_enable = *v++;
3117 ioqs->ioq_rx_status = *v++;
3118 ioqs->ioq_tx_status = *v++;
3120 error = copyout(v, ioqs->data, ioqs->bufsize);
3123 free(buf, M_DEVBUF);
3127 return (EOPNOTSUPP);
3134 static __inline void
3135 reg_block_dump(struct adapter *ap, uint8_t *buf, unsigned int start,
3138 uint32_t *p = (uint32_t *)(buf + start);
3140 for ( ; start <= end; start += sizeof(uint32_t))
3141 *p++ = t3_read_reg(ap, start);
3144 #define T3_REGMAP_SIZE (3 * 1024)
3146 cxgb_get_regs_len(void)
3148 return T3_REGMAP_SIZE;
3152 cxgb_get_regs(adapter_t *sc, struct ch_ifconf_regs *regs, uint8_t *buf)
3157 * bits 0..9: chip version
3158 * bits 10..15: chip revision
3159 * bit 31: set for PCIe cards
3161 regs->version = 3 | (sc->params.rev << 10) | (is_pcie(sc) << 31);
3164 * We skip the MAC statistics registers because they are clear-on-read.
3165 * Also reading multi-register stats would need to synchronize with the
3166 * periodic mac stats accumulation. Hard to justify the complexity.
3168 memset(buf, 0, cxgb_get_regs_len());
3169 reg_block_dump(sc, buf, 0, A_SG_RSPQ_CREDIT_RETURN);
3170 reg_block_dump(sc, buf, A_SG_HI_DRB_HI_THRSH, A_ULPRX_PBL_ULIMIT);
3171 reg_block_dump(sc, buf, A_ULPTX_CONFIG, A_MPS_INT_CAUSE);
3172 reg_block_dump(sc, buf, A_CPL_SWITCH_CNTRL, A_CPL_MAP_TBL_DATA);
3173 reg_block_dump(sc, buf, A_SMB_GLOBAL_TIME_CFG, A_XGM_SERDES_STAT3);
3174 reg_block_dump(sc, buf, A_XGM_SERDES_STATUS0,
3175 XGM_REG(A_XGM_SERDES_STAT3, 1));
3176 reg_block_dump(sc, buf, XGM_REG(A_XGM_SERDES_STATUS0, 1),
3177 XGM_REG(A_XGM_RX_SPI4_SOP_EOP_CNT, 1));
3181 MODULE_DEPEND(if_cxgb, cxgb_t3fw, 1, 1, 1);