t4_main.c (309559) | t4_main.c (309560) |
---|---|
1/*- 2 * Copyright (c) 2011 Chelsio Communications, Inc. 3 * All rights reserved. 4 * Written by: Navdeep Parhar <np@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2011 Chelsio Communications, Inc. 3 * All rights reserved. 4 * Written by: Navdeep Parhar <np@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: stable/11/sys/dev/cxgbe/t4_main.c 309559 2016-12-05 19:37:15Z jhb $"); | 29__FBSDID("$FreeBSD: stable/11/sys/dev/cxgbe/t4_main.c 309560 2016-12-05 20:43:25Z jhb $"); |
30 31#include "opt_ddb.h" 32#include "opt_inet.h" 33#include "opt_inet6.h" 34#include "opt_rss.h" 35 36#include <sys/param.h> 37#include <sys/conf.h> --- 131 unchanged lines hidden (view full) --- 169 170/* T5 VI (vcxl) interface */ 171static driver_t vcxl_driver = { 172 "vcxl", 173 vcxgbe_methods, 174 sizeof(struct vi_info) 175}; 176 | 30 31#include "opt_ddb.h" 32#include "opt_inet.h" 33#include "opt_inet6.h" 34#include "opt_rss.h" 35 36#include <sys/param.h> 37#include <sys/conf.h> --- 131 unchanged lines hidden (view full) --- 169 170/* T5 VI (vcxl) interface */ 171static driver_t vcxl_driver = { 172 "vcxl", 173 vcxgbe_methods, 174 sizeof(struct vi_info) 175}; 176 |
177/* T6 bus driver interface */ 178static int t6_probe(device_t); 179static device_method_t t6_methods[] = { 180 DEVMETHOD(device_probe, t6_probe), 181 DEVMETHOD(device_attach, t4_attach), 182 DEVMETHOD(device_detach, t4_detach), 183 184 DEVMETHOD(t4_is_main_ready, t4_ready), 185 DEVMETHOD(t4_read_port_device, t4_read_port_device), 186 187 DEVMETHOD_END 188}; 189static driver_t t6_driver = { 190 "t6nex", 191 t6_methods, 192 sizeof(struct adapter) 193}; 194 195 196/* T6 port (cc) interface */ 197static driver_t cc_driver = { 198 "cc", 199 cxgbe_methods, 200 sizeof(struct port_info) 201}; 202 203/* T6 VI (vcc) interface */ 204static driver_t vcc_driver = { 205 "vcc", 206 vcxgbe_methods, 207 sizeof(struct vi_info) 208}; 209 |
|
177/* ifnet + media interface */ 178static void cxgbe_init(void *); 179static int cxgbe_ioctl(struct ifnet *, unsigned long, caddr_t); 180static int cxgbe_transmit(struct ifnet *, struct mbuf *); 181static void cxgbe_qflush(struct ifnet *); 182static int cxgbe_media_change(struct ifnet *); 183static void cxgbe_media_status(struct ifnet *, struct ifmediareq *); 184 --- 165 unchanged lines hidden (view full) --- 350TUNABLE_INT("hw.cxgbe.niccaps_allowed", &t4_niccaps_allowed); 351 352static int t4_toecaps_allowed = -1; 353TUNABLE_INT("hw.cxgbe.toecaps_allowed", &t4_toecaps_allowed); 354 355static int t4_rdmacaps_allowed = -1; 356TUNABLE_INT("hw.cxgbe.rdmacaps_allowed", &t4_rdmacaps_allowed); 357 | 210/* ifnet + media interface */ 211static void cxgbe_init(void *); 212static int cxgbe_ioctl(struct ifnet *, unsigned long, caddr_t); 213static int cxgbe_transmit(struct ifnet *, struct mbuf *); 214static void cxgbe_qflush(struct ifnet *); 215static int cxgbe_media_change(struct ifnet *); 216static void cxgbe_media_status(struct ifnet *, struct ifmediareq *); 217 --- 165 unchanged lines hidden (view full) --- 383TUNABLE_INT("hw.cxgbe.niccaps_allowed", &t4_niccaps_allowed); 384 385static int t4_toecaps_allowed = -1; 386TUNABLE_INT("hw.cxgbe.toecaps_allowed", &t4_toecaps_allowed); 387 388static int t4_rdmacaps_allowed = -1; 389TUNABLE_INT("hw.cxgbe.rdmacaps_allowed", &t4_rdmacaps_allowed); 390 |
358static int t4_tlscaps_allowed = 0; 359TUNABLE_INT("hw.cxgbe.tlscaps_allowed", &t4_tlscaps_allowed); | 391static int t4_cryptocaps_allowed = 0; 392TUNABLE_INT("hw.cxgbe.cryptocaps_allowed", &t4_cryptocaps_allowed); |
360 361static int t4_iscsicaps_allowed = -1; 362TUNABLE_INT("hw.cxgbe.iscsicaps_allowed", &t4_iscsicaps_allowed); 363 364static int t4_fcoecaps_allowed = 0; 365TUNABLE_INT("hw.cxgbe.fcoecaps_allowed", &t4_fcoecaps_allowed); 366 367static int t5_write_combine = 0; --- 194 unchanged lines hidden (view full) --- 562 {0x5405, "Chelsio T540-BCH"}, 563 {0x5406, "Chelsio T540-CH"}, 564 {0x5408, "Chelsio T520-CX"}, 565 {0x540b, "Chelsio B520-SR"}, 566 {0x540c, "Chelsio B504-BT"}, 567 {0x540f, "Chelsio Amsterdam"}, 568 {0x5413, "Chelsio T580-CHR"}, 569#endif | 393 394static int t4_iscsicaps_allowed = -1; 395TUNABLE_INT("hw.cxgbe.iscsicaps_allowed", &t4_iscsicaps_allowed); 396 397static int t4_fcoecaps_allowed = 0; 398TUNABLE_INT("hw.cxgbe.fcoecaps_allowed", &t4_fcoecaps_allowed); 399 400static int t5_write_combine = 0; --- 194 unchanged lines hidden (view full) --- 595 {0x5405, "Chelsio T540-BCH"}, 596 {0x5406, "Chelsio T540-CH"}, 597 {0x5408, "Chelsio T520-CX"}, 598 {0x540b, "Chelsio B520-SR"}, 599 {0x540c, "Chelsio B504-BT"}, 600 {0x540f, "Chelsio Amsterdam"}, 601 {0x5413, "Chelsio T580-CHR"}, 602#endif |
603}, t6_pciids[] = { 604 {0xc006, "Chelsio Terminator 6 FPGA"}, /* T6 PE10K6 FPGA (PF0) */ 605 {0x6401, "Chelsio T6225-CR"}, /* 2 x 10/25G */ 606 {0x6402, "Chelsio T6225-SO-CR"}, /* 2 x 10/25G, nomem */ 607 {0x6407, "Chelsio T62100-LP-CR"}, /* 2 x 40/50/100G */ 608 {0x6408, "Chelsio T62100-SO-CR"}, /* 2 x 40/50/100G, nomem */ 609 {0x640d, "Chelsio T62100-CR"}, /* 2 x 40/50/100G */ 610 {0x6410, "Chelsio T62100-DBG"}, /* 2 x 40/50/100G, debug */ |
|
570}; 571 572#ifdef TCP_OFFLOAD 573/* 574 * service_iq() has an iq and needs the fl. Offset of fl from the iq should be 575 * exactly the same for both rxq and ofld_rxq. 576 */ 577CTASSERT(offsetof(struct sge_ofld_rxq, iq) == offsetof(struct sge_rxq, iq)); --- 46 unchanged lines hidden (view full) --- 624 device_set_desc(dev, t5_pciids[i].desc); 625 return (BUS_PROBE_DEFAULT); 626 } 627 } 628 629 return (ENXIO); 630} 631 | 611}; 612 613#ifdef TCP_OFFLOAD 614/* 615 * service_iq() has an iq and needs the fl. Offset of fl from the iq should be 616 * exactly the same for both rxq and ofld_rxq. 617 */ 618CTASSERT(offsetof(struct sge_ofld_rxq, iq) == offsetof(struct sge_rxq, iq)); --- 46 unchanged lines hidden (view full) --- 665 device_set_desc(dev, t5_pciids[i].desc); 666 return (BUS_PROBE_DEFAULT); 667 } 668 } 669 670 return (ENXIO); 671} 672 |
673static int 674t6_probe(device_t dev) 675{ 676 int i; 677 uint16_t v = pci_get_vendor(dev); 678 uint16_t d = pci_get_device(dev); 679 680 if (v != PCI_VENDOR_ID_CHELSIO) 681 return (ENXIO); 682 683 for (i = 0; i < nitems(t6_pciids); i++) { 684 if (d == t6_pciids[i].device) { 685 device_set_desc(dev, t6_pciids[i].desc); 686 return (BUS_PROBE_DEFAULT); 687 } 688 } 689 690 return (ENXIO); 691} 692 |
|
632static void 633t5_attribute_workaround(device_t dev) 634{ 635 device_t root_port; 636 uint32_t v; 637 638 /* 639 * The T5 chips do not properly echo the No Snoop and Relaxed --- 11 unchanged lines hidden (view full) --- 651 v = pcie_adjust_config(root_port, PCIER_DEVICE_CTL, 652 PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE, 0, 2); 653 if ((v & (PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE)) != 654 0) 655 device_printf(dev, "Disabled No Snoop/Relaxed Ordering on %s\n", 656 device_get_nameunit(root_port)); 657} 658 | 693static void 694t5_attribute_workaround(device_t dev) 695{ 696 device_t root_port; 697 uint32_t v; 698 699 /* 700 * The T5 chips do not properly echo the No Snoop and Relaxed --- 11 unchanged lines hidden (view full) --- 712 v = pcie_adjust_config(root_port, PCIER_DEVICE_CTL, 713 PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE, 0, 2); 714 if ((v & (PCIEM_CTL_RELAXED_ORD_ENABLE | PCIEM_CTL_NOSNOOP_ENABLE)) != 715 0) 716 device_printf(dev, "Disabled No Snoop/Relaxed Ordering on %s\n", 717 device_get_nameunit(root_port)); 718} 719 |
720static const struct devnames devnames[] = { 721 { 722 .nexus_name = "t4nex", 723 .ifnet_name = "cxgbe", 724 .vi_ifnet_name = "vcxgbe", 725 .pf03_drv_name = "t4iov", 726 .vf_nexus_name = "t4vf", 727 .vf_ifnet_name = "cxgbev" 728 }, { 729 .nexus_name = "t5nex", 730 .ifnet_name = "cxl", 731 .vi_ifnet_name = "vcxl", 732 .pf03_drv_name = "t5iov", 733 .vf_nexus_name = "t5vf", 734 .vf_ifnet_name = "cxlv" 735 }, { 736 .nexus_name = "t6nex", 737 .ifnet_name = "cc", 738 .vi_ifnet_name = "vcc", 739 .pf03_drv_name = "t6iov", 740 .vf_nexus_name = "t6vf", 741 .vf_ifnet_name = "ccv" 742 } 743}; 744 745void 746t4_init_devnames(struct adapter *sc) 747{ 748 int id; 749 750 id = chip_id(sc); 751 if (id >= CHELSIO_T4 && id - CHELSIO_T4 < nitems(devnames)) 752 sc->names = &devnames[id - CHELSIO_T4]; 753 else { 754 device_printf(sc->dev, "chip id %d is not supported.\n", id); 755 sc->names = NULL; 756 } 757} 758 |
|
659static int 660t4_attach(device_t dev) 661{ 662 struct adapter *sc; 663 int rc = 0, i, j, n10g, n1g, rqidx, tqidx; 664 struct make_dev_args mda; 665 struct intrs_and_queues iaq; 666 struct sge *s; --- 41 unchanged lines hidden (view full) --- 708 callout_init_mtx(&sc->sfl_callout, &sc->sfl_lock, 0); 709 710 mtx_init(&sc->reg_lock, "indirect register access", 0, MTX_DEF); 711 712 rc = t4_map_bars_0_and_4(sc); 713 if (rc != 0) 714 goto done; /* error message displayed already */ 715 | 759static int 760t4_attach(device_t dev) 761{ 762 struct adapter *sc; 763 int rc = 0, i, j, n10g, n1g, rqidx, tqidx; 764 struct make_dev_args mda; 765 struct intrs_and_queues iaq; 766 struct sge *s; --- 41 unchanged lines hidden (view full) --- 808 callout_init_mtx(&sc->sfl_callout, &sc->sfl_lock, 0); 809 810 mtx_init(&sc->reg_lock, "indirect register access", 0, MTX_DEF); 811 812 rc = t4_map_bars_0_and_4(sc); 813 if (rc != 0) 814 goto done; /* error message displayed already */ 815 |
716 /* 717 * This is the real PF# to which we're attaching. Works from within PCI 718 * passthrough environments too, where pci_get_function() could return a 719 * different PF# depending on the passthrough configuration. We need to 720 * use the real PF# in all our communication with the firmware. 721 */ 722 sc->pf = G_SOURCEPF(t4_read_reg(sc, A_PL_WHOAMI)); 723 sc->mbox = sc->pf; 724 | |
725 memset(sc->chan_map, 0xff, sizeof(sc->chan_map)); 726 727 /* Prepare the adapter for operation. */ 728 buf = malloc(PAGE_SIZE, M_CXGBE, M_ZERO | M_WAITOK); 729 rc = -t4_prep_adapter(sc, buf); 730 free(buf, M_CXGBE); 731 if (rc != 0) { 732 device_printf(dev, "failed to prepare adapter: %d.\n", rc); 733 goto done; 734 } 735 736 /* | 816 memset(sc->chan_map, 0xff, sizeof(sc->chan_map)); 817 818 /* Prepare the adapter for operation. */ 819 buf = malloc(PAGE_SIZE, M_CXGBE, M_ZERO | M_WAITOK); 820 rc = -t4_prep_adapter(sc, buf); 821 free(buf, M_CXGBE); 822 if (rc != 0) { 823 device_printf(dev, "failed to prepare adapter: %d.\n", rc); 824 goto done; 825 } 826 827 /* |
828 * This is the real PF# to which we're attaching. Works from within PCI 829 * passthrough environments too, where pci_get_function() could return a 830 * different PF# depending on the passthrough configuration. We need to 831 * use the real PF# in all our communication with the firmware. 832 */ 833 j = t4_read_reg(sc, A_PL_WHOAMI); 834 sc->pf = chip_id(sc) <= CHELSIO_T5 ? G_SOURCEPF(j) : G_T6_SOURCEPF(j); 835 sc->mbox = sc->pf; 836 837 t4_init_devnames(sc); 838 if (sc->names == NULL) { 839 rc = ENOTSUP; 840 goto done; /* error message displayed already */ 841 } 842 843 /* |
|
737 * Do this really early, with the memory windows set up even before the 738 * character device. The userland tool's register i/o and mem read 739 * will work even in "recovery mode". 740 */ 741 setup_memwin(sc); 742 if (t4_init_devlog_params(sc, 0) == 0) 743 fixup_devlog_params(sc); 744 make_dev_args_init(&mda); --- 114 unchanged lines hidden (view full) --- 859 snprintf(pi->lockname, sizeof(pi->lockname), "%sp%d", 860 device_get_nameunit(dev), i); 861 mtx_init(&pi->pi_lock, pi->lockname, 0, MTX_DEF); 862 sc->chan_map[pi->tx_chan] = i; 863 864 pi->tc = malloc(sizeof(struct tx_sched_class) * 865 sc->chip_params->nsched_cls, M_CXGBE, M_ZERO | M_WAITOK); 866 | 844 * Do this really early, with the memory windows set up even before the 845 * character device. The userland tool's register i/o and mem read 846 * will work even in "recovery mode". 847 */ 848 setup_memwin(sc); 849 if (t4_init_devlog_params(sc, 0) == 0) 850 fixup_devlog_params(sc); 851 make_dev_args_init(&mda); --- 114 unchanged lines hidden (view full) --- 966 snprintf(pi->lockname, sizeof(pi->lockname), "%sp%d", 967 device_get_nameunit(dev), i); 968 mtx_init(&pi->pi_lock, pi->lockname, 0, MTX_DEF); 969 sc->chan_map[pi->tx_chan] = i; 970 971 pi->tc = malloc(sizeof(struct tx_sched_class) * 972 sc->chip_params->nsched_cls, M_CXGBE, M_ZERO | M_WAITOK); 973 |
867 if (is_10G_port(pi) || is_40G_port(pi)) { | 974 if (port_top_speed(pi) >= 10) { |
868 n10g++; 869 } else { 870 n1g++; 871 } 872 873 pi->linkdnrc = -1; 874 | 975 n10g++; 976 } else { 977 n1g++; 978 } 979 980 pi->linkdnrc = -1; 981 |
875 pi->dev = device_add_child(dev, is_t4(sc) ? "cxgbe" : "cxl", -1); | 982 pi->dev = device_add_child(dev, sc->names->ifnet_name, -1); |
876 if (pi->dev == NULL) { 877 device_printf(dev, 878 "failed to add device for port %d.\n", i); 879 rc = ENXIO; 880 goto done; 881 } 882 pi->vi[0].dev = pi->dev; 883 device_set_softc(pi->dev, pi); --- 91 unchanged lines hidden (view full) --- 975 pi->nvi = num_vis; 976 for_each_vi(pi, j, vi) { 977 vi->pi = pi; 978 vi->qsize_rxq = t4_qsize_rxq; 979 vi->qsize_txq = t4_qsize_txq; 980 981 vi->first_rxq = rqidx; 982 vi->first_txq = tqidx; | 983 if (pi->dev == NULL) { 984 device_printf(dev, 985 "failed to add device for port %d.\n", i); 986 rc = ENXIO; 987 goto done; 988 } 989 pi->vi[0].dev = pi->dev; 990 device_set_softc(pi->dev, pi); --- 91 unchanged lines hidden (view full) --- 1082 pi->nvi = num_vis; 1083 for_each_vi(pi, j, vi) { 1084 vi->pi = pi; 1085 vi->qsize_rxq = t4_qsize_rxq; 1086 vi->qsize_txq = t4_qsize_txq; 1087 1088 vi->first_rxq = rqidx; 1089 vi->first_txq = tqidx; |
983 if (is_10G_port(pi) || is_40G_port(pi)) { | 1090 if (port_top_speed(pi) >= 10) { |
984 vi->tmr_idx = t4_tmr_idx_10g; 985 vi->pktc_idx = t4_pktc_idx_10g; 986 vi->flags |= iaq.intr_flags_10g & INTR_RXQ; 987 vi->nrxq = j == 0 ? iaq.nrxq10g : iaq.nrxq_vi; 988 vi->ntxq = j == 0 ? iaq.ntxq10g : iaq.ntxq_vi; 989 } else { 990 vi->tmr_idx = t4_tmr_idx_1g; 991 vi->pktc_idx = t4_pktc_idx_1g; --- 7 unchanged lines hidden (view full) --- 999 if (j == 0 && vi->ntxq > 1) 1000 vi->rsrv_noflowq = iaq.rsrv_noflowq ? 1 : 0; 1001 else 1002 vi->rsrv_noflowq = 0; 1003 1004#ifdef TCP_OFFLOAD 1005 vi->first_ofld_rxq = ofld_rqidx; 1006 vi->first_ofld_txq = ofld_tqidx; | 1091 vi->tmr_idx = t4_tmr_idx_10g; 1092 vi->pktc_idx = t4_pktc_idx_10g; 1093 vi->flags |= iaq.intr_flags_10g & INTR_RXQ; 1094 vi->nrxq = j == 0 ? iaq.nrxq10g : iaq.nrxq_vi; 1095 vi->ntxq = j == 0 ? iaq.ntxq10g : iaq.ntxq_vi; 1096 } else { 1097 vi->tmr_idx = t4_tmr_idx_1g; 1098 vi->pktc_idx = t4_pktc_idx_1g; --- 7 unchanged lines hidden (view full) --- 1106 if (j == 0 && vi->ntxq > 1) 1107 vi->rsrv_noflowq = iaq.rsrv_noflowq ? 1 : 0; 1108 else 1109 vi->rsrv_noflowq = 0; 1110 1111#ifdef TCP_OFFLOAD 1112 vi->first_ofld_rxq = ofld_rqidx; 1113 vi->first_ofld_txq = ofld_tqidx; |
1007 if (is_10G_port(pi) || is_40G_port(pi)) { | 1114 if (port_top_speed(pi) >= 10) { |
1008 vi->flags |= iaq.intr_flags_10g & INTR_OFLD_RXQ; 1009 vi->nofldrxq = j == 0 ? iaq.nofldrxq10g : 1010 iaq.nofldrxq_vi; 1011 vi->nofldtxq = j == 0 ? iaq.nofldtxq10g : 1012 iaq.nofldtxq_vi; 1013 } else { 1014 vi->flags |= iaq.intr_flags_1g & INTR_OFLD_RXQ; 1015 vi->nofldrxq = j == 0 ? iaq.nofldrxq1g : --- 334 unchanged lines hidden (view full) --- 1350 1351 return (0); 1352} 1353 1354static int 1355cxgbe_attach(device_t dev) 1356{ 1357 struct port_info *pi = device_get_softc(dev); | 1115 vi->flags |= iaq.intr_flags_10g & INTR_OFLD_RXQ; 1116 vi->nofldrxq = j == 0 ? iaq.nofldrxq10g : 1117 iaq.nofldrxq_vi; 1118 vi->nofldtxq = j == 0 ? iaq.nofldtxq10g : 1119 iaq.nofldtxq_vi; 1120 } else { 1121 vi->flags |= iaq.intr_flags_1g & INTR_OFLD_RXQ; 1122 vi->nofldrxq = j == 0 ? iaq.nofldrxq1g : --- 334 unchanged lines hidden (view full) --- 1457 1458 return (0); 1459} 1460 1461static int 1462cxgbe_attach(device_t dev) 1463{ 1464 struct port_info *pi = device_get_softc(dev); |
1465 struct adapter *sc = pi->adapter; |
|
1358 struct vi_info *vi; 1359 int i, rc; 1360 1361 callout_init_mtx(&pi->tick, &pi->pi_lock, 0); 1362 1363 rc = cxgbe_vi_attach(dev, &pi->vi[0]); 1364 if (rc) 1365 return (rc); 1366 1367 for_each_vi(pi, i, vi) { 1368 if (i == 0) 1369 continue; | 1466 struct vi_info *vi; 1467 int i, rc; 1468 1469 callout_init_mtx(&pi->tick, &pi->pi_lock, 0); 1470 1471 rc = cxgbe_vi_attach(dev, &pi->vi[0]); 1472 if (rc) 1473 return (rc); 1474 1475 for_each_vi(pi, i, vi) { 1476 if (i == 0) 1477 continue; |
1370 vi->dev = device_add_child(dev, is_t4(pi->adapter) ? 1371 "vcxgbe" : "vcxl", -1); | 1478 vi->dev = device_add_child(dev, sc->names->vi_ifnet_name, -1); |
1372 if (vi->dev == NULL) { 1373 device_printf(dev, "failed to add VI %d\n", i); 1374 continue; 1375 } 1376 device_set_softc(vi->dev, vi); 1377 } 1378 1379 cxgbe_sysctls(pi); --- 246 unchanged lines hidden (view full) --- 1626 VLAN_CAPABILITIES(ifp); 1627#endif 1628fail: 1629 end_synchronized_op(sc, 0); 1630 break; 1631 1632 case SIOCSIFMEDIA: 1633 case SIOCGIFMEDIA: | 1479 if (vi->dev == NULL) { 1480 device_printf(dev, "failed to add VI %d\n", i); 1481 continue; 1482 } 1483 device_set_softc(vi->dev, vi); 1484 } 1485 1486 cxgbe_sysctls(pi); --- 246 unchanged lines hidden (view full) --- 1733 VLAN_CAPABILITIES(ifp); 1734#endif 1735fail: 1736 end_synchronized_op(sc, 0); 1737 break; 1738 1739 case SIOCSIFMEDIA: 1740 case SIOCGIFMEDIA: |
1741 case SIOCGIFXMEDIA: |
|
1634 ifmedia_ioctl(ifp, ifr, &vi->media, cmd); 1635 break; 1636 1637 case SIOCGI2C: { 1638 struct ifi2creq i2c; 1639 1640 rc = copyin(ifr->ifr_data, &i2c, sizeof(i2c)); 1641 if (rc != 0) --- 278 unchanged lines hidden (view full) --- 1920 rc = t4_alloc_vi_func(sc, sc->mbox, pi->tx_chan, sc->pf, 0, 1, 1921 vi->hw_addr, &vi->rss_size, func, 0); 1922 if (rc < 0) { 1923 device_printf(dev, "Failed to allocate virtual interface " 1924 "for port %d: %d\n", pi->port_id, -rc); 1925 return (-rc); 1926 } 1927 vi->viid = rc; | 1742 ifmedia_ioctl(ifp, ifr, &vi->media, cmd); 1743 break; 1744 1745 case SIOCGI2C: { 1746 struct ifi2creq i2c; 1747 1748 rc = copyin(ifr->ifr_data, &i2c, sizeof(i2c)); 1749 if (rc != 0) --- 278 unchanged lines hidden (view full) --- 2028 rc = t4_alloc_vi_func(sc, sc->mbox, pi->tx_chan, sc->pf, 0, 1, 2029 vi->hw_addr, &vi->rss_size, func, 0); 2030 if (rc < 0) { 2031 device_printf(dev, "Failed to allocate virtual interface " 2032 "for port %d: %d\n", pi->port_id, -rc); 2033 return (-rc); 2034 } 2035 vi->viid = rc; |
2036 if (chip_id(sc) <= CHELSIO_T5) 2037 vi->smt_idx = (rc & 0x7f) << 1; 2038 else 2039 vi->smt_idx = (rc & 0x7f); |
|
1928 1929 param = V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | 1930 V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_RSSINFO) | 1931 V_FW_PARAMS_PARAM_YZ(vi->viid); 1932 rc = t4_query_params(sc, sc->mbox, sc->pf, 0, 1, ¶m, &val); 1933 if (rc) 1934 vi->rss_base = 0xffff; 1935 else { --- 86 unchanged lines hidden (view full) --- 2022 sc->udbs_res = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, 2023 &sc->udbs_rid, RF_ACTIVE); 2024 if (sc->udbs_res == NULL) { 2025 device_printf(sc->dev, "cannot map doorbell BAR.\n"); 2026 return (ENXIO); 2027 } 2028 sc->udbs_base = rman_get_virtual(sc->udbs_res); 2029 | 2040 2041 param = V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | 2042 V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_RSSINFO) | 2043 V_FW_PARAMS_PARAM_YZ(vi->viid); 2044 rc = t4_query_params(sc, sc->mbox, sc->pf, 0, 1, ¶m, &val); 2045 if (rc) 2046 vi->rss_base = 0xffff; 2047 else { --- 86 unchanged lines hidden (view full) --- 2134 sc->udbs_res = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, 2135 &sc->udbs_rid, RF_ACTIVE); 2136 if (sc->udbs_res == NULL) { 2137 device_printf(sc->dev, "cannot map doorbell BAR.\n"); 2138 return (ENXIO); 2139 } 2140 sc->udbs_base = rman_get_virtual(sc->udbs_res); 2141 |
2030 if (is_t5(sc)) { | 2142 if (chip_id(sc) >= CHELSIO_T5) { |
2031 setbit(&sc->doorbells, DOORBELL_UDB); 2032#if defined(__i386__) || defined(__amd64__) 2033 if (t5_write_combine) { | 2143 setbit(&sc->doorbells, DOORBELL_UDB); 2144#if defined(__i386__) || defined(__amd64__) 2145 if (t5_write_combine) { |
2034 int rc; | 2146 int rc, mode; |
2035 2036 /* 2037 * Enable write combining on BAR2. This is the 2038 * userspace doorbell BAR and is split into 128B 2039 * (UDBS_SEG_SIZE) doorbell regions, each associated 2040 * with an egress queue. The first 64B has the doorbell 2041 * and the second 64B can be used to submit a tx work 2042 * request with an implicit doorbell. --- 6 unchanged lines hidden (view full) --- 2049 setbit(&sc->doorbells, DOORBELL_WCWR); 2050 setbit(&sc->doorbells, DOORBELL_UDBWC); 2051 } else { 2052 device_printf(sc->dev, 2053 "couldn't enable write combining: %d\n", 2054 rc); 2055 } 2056 | 2147 2148 /* 2149 * Enable write combining on BAR2. This is the 2150 * userspace doorbell BAR and is split into 128B 2151 * (UDBS_SEG_SIZE) doorbell regions, each associated 2152 * with an egress queue. The first 64B has the doorbell 2153 * and the second 64B can be used to submit a tx work 2154 * request with an implicit doorbell. --- 6 unchanged lines hidden (view full) --- 2161 setbit(&sc->doorbells, DOORBELL_WCWR); 2162 setbit(&sc->doorbells, DOORBELL_UDBWC); 2163 } else { 2164 device_printf(sc->dev, 2165 "couldn't enable write combining: %d\n", 2166 rc); 2167 } 2168 |
2169 mode = is_t5(sc) ? V_STATMODE(0) : V_T6_STATMODE(0); |
|
2057 t4_write_reg(sc, A_SGE_STAT_CFG, | 2170 t4_write_reg(sc, A_SGE_STAT_CFG, |
2058 V_STATSOURCE_T5(7) | V_STATMODE(0)); | 2171 V_STATSOURCE_T5(7) | mode); |
2059 } 2060#endif 2061 } 2062 2063 return (0); 2064} 2065 2066struct memwin_init { --- 613 unchanged lines hidden (view full) --- 2680 .intfver_vnic = FW_INTFVER(T5, VNIC), 2681 .intfver_ofld = FW_INTFVER(T5, OFLD), 2682 .intfver_ri = FW_INTFVER(T5, RI), 2683 .intfver_iscsipdu = FW_INTFVER(T5, ISCSIPDU), 2684 .intfver_iscsi = FW_INTFVER(T5, ISCSI), 2685 .intfver_fcoepdu = FW_INTFVER(T5, FCOEPDU), 2686 .intfver_fcoe = FW_INTFVER(T5, FCOE), 2687 }, | 2172 } 2173#endif 2174 } 2175 2176 return (0); 2177} 2178 2179struct memwin_init { --- 613 unchanged lines hidden (view full) --- 2793 .intfver_vnic = FW_INTFVER(T5, VNIC), 2794 .intfver_ofld = FW_INTFVER(T5, OFLD), 2795 .intfver_ri = FW_INTFVER(T5, RI), 2796 .intfver_iscsipdu = FW_INTFVER(T5, ISCSIPDU), 2797 .intfver_iscsi = FW_INTFVER(T5, ISCSI), 2798 .intfver_fcoepdu = FW_INTFVER(T5, FCOEPDU), 2799 .intfver_fcoe = FW_INTFVER(T5, FCOE), 2800 }, |
2801 }, { 2802 .chip = CHELSIO_T6, 2803 .kld_name = "t6fw_cfg", 2804 .fw_mod_name = "t6fw", 2805 .fw_hdr = { 2806 .chip = FW_HDR_CHIP_T6, 2807 .fw_ver = htobe32_const(FW_VERSION(T6)), 2808 .intfver_nic = FW_INTFVER(T6, NIC), 2809 .intfver_vnic = FW_INTFVER(T6, VNIC), 2810 .intfver_ofld = FW_INTFVER(T6, OFLD), 2811 .intfver_ri = FW_INTFVER(T6, RI), 2812 .intfver_iscsipdu = FW_INTFVER(T6, ISCSIPDU), 2813 .intfver_iscsi = FW_INTFVER(T6, ISCSI), 2814 .intfver_fcoepdu = FW_INTFVER(T6, FCOEPDU), 2815 .intfver_fcoe = FW_INTFVER(T6, FCOE), 2816 }, |
|
2688 } 2689}; 2690 2691static struct fw_info * 2692find_fw_info(int chip) 2693{ 2694 int i; 2695 --- 412 unchanged lines hidden (view full) --- 3108 * things accordingly. 3109 */ 3110 LIMIT_CAPS(nbmcaps); 3111 LIMIT_CAPS(linkcaps); 3112 LIMIT_CAPS(switchcaps); 3113 LIMIT_CAPS(niccaps); 3114 LIMIT_CAPS(toecaps); 3115 LIMIT_CAPS(rdmacaps); | 2817 } 2818}; 2819 2820static struct fw_info * 2821find_fw_info(int chip) 2822{ 2823 int i; 2824 --- 412 unchanged lines hidden (view full) --- 3237 * things accordingly. 3238 */ 3239 LIMIT_CAPS(nbmcaps); 3240 LIMIT_CAPS(linkcaps); 3241 LIMIT_CAPS(switchcaps); 3242 LIMIT_CAPS(niccaps); 3243 LIMIT_CAPS(toecaps); 3244 LIMIT_CAPS(rdmacaps); |
3116 LIMIT_CAPS(tlscaps); | 3245 LIMIT_CAPS(cryptocaps); |
3117 LIMIT_CAPS(iscsicaps); 3118 LIMIT_CAPS(fcoecaps); 3119#undef LIMIT_CAPS 3120 3121 caps.op_to_write = htobe32(V_FW_CMD_OP(FW_CAPS_CONFIG_CMD) | 3122 F_FW_CMD_REQUEST | F_FW_CMD_WRITE); 3123 caps.cfvalid_to_len16 = htobe32(FW_LEN16(caps)); 3124 rc = -t4_wr_mbox(sc, sc->mbox, &caps, sizeof(caps), NULL); --- 120 unchanged lines hidden (view full) --- 3245 sc->x = htobe16(caps.x); \ 3246} while (0) 3247 READ_CAPS(nbmcaps); 3248 READ_CAPS(linkcaps); 3249 READ_CAPS(switchcaps); 3250 READ_CAPS(niccaps); 3251 READ_CAPS(toecaps); 3252 READ_CAPS(rdmacaps); | 3246 LIMIT_CAPS(iscsicaps); 3247 LIMIT_CAPS(fcoecaps); 3248#undef LIMIT_CAPS 3249 3250 caps.op_to_write = htobe32(V_FW_CMD_OP(FW_CAPS_CONFIG_CMD) | 3251 F_FW_CMD_REQUEST | F_FW_CMD_WRITE); 3252 caps.cfvalid_to_len16 = htobe32(FW_LEN16(caps)); 3253 rc = -t4_wr_mbox(sc, sc->mbox, &caps, sizeof(caps), NULL); --- 120 unchanged lines hidden (view full) --- 3374 sc->x = htobe16(caps.x); \ 3375} while (0) 3376 READ_CAPS(nbmcaps); 3377 READ_CAPS(linkcaps); 3378 READ_CAPS(switchcaps); 3379 READ_CAPS(niccaps); 3380 READ_CAPS(toecaps); 3381 READ_CAPS(rdmacaps); |
3253 READ_CAPS(tlscaps); | 3382 READ_CAPS(cryptocaps); |
3254 READ_CAPS(iscsicaps); 3255 READ_CAPS(fcoecaps); 3256 3257 if (sc->niccaps & FW_CAPS_CONFIG_NIC_ETHOFLD) { 3258 param[0] = FW_PARAM_PFVF(ETHOFLD_START); 3259 param[1] = FW_PARAM_PFVF(ETHOFLD_END); 3260 param[2] = FW_PARAM_DEV(FLOWC_BUFFIFO_SZ); 3261 rc = -t4_query_params(sc, sc->mbox, sc->pf, 0, 3, param, val); --- 192 unchanged lines hidden (view full) --- 3454 "unknown port_type (%d), mod_type (%d)\n", 3455 pi->port_type, pi->mod_type); 3456 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3457 ifmedia_set(media, m | IFM_UNKNOWN); 3458 break; 3459 } 3460 break; 3461 | 3383 READ_CAPS(iscsicaps); 3384 READ_CAPS(fcoecaps); 3385 3386 if (sc->niccaps & FW_CAPS_CONFIG_NIC_ETHOFLD) { 3387 param[0] = FW_PARAM_PFVF(ETHOFLD_START); 3388 param[1] = FW_PARAM_PFVF(ETHOFLD_END); 3389 param[2] = FW_PARAM_DEV(FLOWC_BUFFIFO_SZ); 3390 rc = -t4_query_params(sc, sc->mbox, sc->pf, 0, 3, param, val); --- 192 unchanged lines hidden (view full) --- 3583 "unknown port_type (%d), mod_type (%d)\n", 3584 pi->port_type, pi->mod_type); 3585 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3586 ifmedia_set(media, m | IFM_UNKNOWN); 3587 break; 3588 } 3589 break; 3590 |
3591 case FW_PORT_TYPE_CR_QSFP: 3592 case FW_PORT_TYPE_CR_SFP28: 3593 case FW_PORT_TYPE_SFP28: 3594 case FW_PORT_TYPE_KR_SFP28: 3595 switch (pi->mod_type) { 3596 3597 case FW_PORT_MOD_TYPE_SR: 3598 ifmedia_add(media, m | IFM_25G_SR, 0, NULL); 3599 ifmedia_set(media, m | IFM_25G_SR); 3600 break; 3601 3602 case FW_PORT_MOD_TYPE_TWINAX_PASSIVE: 3603 case FW_PORT_MOD_TYPE_TWINAX_ACTIVE: 3604 ifmedia_add(media, m | IFM_25G_CR, 0, NULL); 3605 ifmedia_set(media, m | IFM_25G_CR); 3606 break; 3607 3608 case FW_PORT_MOD_TYPE_NONE: 3609 m &= ~IFM_FDX; 3610 ifmedia_add(media, m | IFM_NONE, 0, NULL); 3611 ifmedia_set(media, m | IFM_NONE); 3612 break; 3613 3614 default: 3615 device_printf(pi->dev, 3616 "unknown port_type (%d), mod_type (%d)\n", 3617 pi->port_type, pi->mod_type); 3618 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3619 ifmedia_set(media, m | IFM_UNKNOWN); 3620 break; 3621 } 3622 break; 3623 |
|
3462 case FW_PORT_TYPE_QSFP: 3463 switch (pi->mod_type) { 3464 3465 case FW_PORT_MOD_TYPE_LR: 3466 ifmedia_add(media, m | IFM_40G_LR4, 0, NULL); 3467 ifmedia_set(media, m | IFM_40G_LR4); 3468 break; 3469 --- 19 unchanged lines hidden (view full) --- 3489 "unknown port_type (%d), mod_type (%d)\n", 3490 pi->port_type, pi->mod_type); 3491 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3492 ifmedia_set(media, m | IFM_UNKNOWN); 3493 break; 3494 } 3495 break; 3496 | 3624 case FW_PORT_TYPE_QSFP: 3625 switch (pi->mod_type) { 3626 3627 case FW_PORT_MOD_TYPE_LR: 3628 ifmedia_add(media, m | IFM_40G_LR4, 0, NULL); 3629 ifmedia_set(media, m | IFM_40G_LR4); 3630 break; 3631 --- 19 unchanged lines hidden (view full) --- 3651 "unknown port_type (%d), mod_type (%d)\n", 3652 pi->port_type, pi->mod_type); 3653 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3654 ifmedia_set(media, m | IFM_UNKNOWN); 3655 break; 3656 } 3657 break; 3658 |
3659 case FW_PORT_TYPE_KR4_100G: 3660 case FW_PORT_TYPE_CR4_QSFP: 3661 switch (pi->mod_type) { 3662 3663 case FW_PORT_MOD_TYPE_LR: 3664 ifmedia_add(media, m | IFM_100G_LR4, 0, NULL); 3665 ifmedia_set(media, m | IFM_100G_LR4); 3666 break; 3667 3668 case FW_PORT_MOD_TYPE_SR: 3669 ifmedia_add(media, m | IFM_100G_SR4, 0, NULL); 3670 ifmedia_set(media, m | IFM_100G_SR4); 3671 break; 3672 3673 case FW_PORT_MOD_TYPE_TWINAX_PASSIVE: 3674 case FW_PORT_MOD_TYPE_TWINAX_ACTIVE: 3675 ifmedia_add(media, m | IFM_100G_CR4, 0, NULL); 3676 ifmedia_set(media, m | IFM_100G_CR4); 3677 break; 3678 3679 case FW_PORT_MOD_TYPE_NONE: 3680 m &= ~IFM_FDX; 3681 ifmedia_add(media, m | IFM_NONE, 0, NULL); 3682 ifmedia_set(media, m | IFM_NONE); 3683 break; 3684 3685 default: 3686 device_printf(pi->dev, 3687 "unknown port_type (%d), mod_type (%d)\n", 3688 pi->port_type, pi->mod_type); 3689 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3690 ifmedia_set(media, m | IFM_UNKNOWN); 3691 break; 3692 } 3693 break; 3694 |
|
3497 default: 3498 device_printf(pi->dev, 3499 "unknown port_type (%d), mod_type (%d)\n", pi->port_type, 3500 pi->mod_type); 3501 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3502 ifmedia_set(media, m | IFM_UNKNOWN); 3503 break; 3504 } --- 724 unchanged lines hidden (view full) --- 4229 if (extra & RSS_HASHTYPE_RSS_UDP_IPV6) 4230 if_printf(ifp, "UDP/IPv6 4-tuple hashing forced on.\n"); 4231#else 4232 hashen = F_FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN | 4233 F_FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN | 4234 F_FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN | 4235 F_FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN | F_FW_RSS_VI_CONFIG_CMD_UDPEN; 4236#endif | 3695 default: 3696 device_printf(pi->dev, 3697 "unknown port_type (%d), mod_type (%d)\n", pi->port_type, 3698 pi->mod_type); 3699 ifmedia_add(media, m | IFM_UNKNOWN, 0, NULL); 3700 ifmedia_set(media, m | IFM_UNKNOWN); 3701 break; 3702 } --- 724 unchanged lines hidden (view full) --- 4427 if (extra & RSS_HASHTYPE_RSS_UDP_IPV6) 4428 if_printf(ifp, "UDP/IPv6 4-tuple hashing forced on.\n"); 4429#else 4430 hashen = F_FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN | 4431 F_FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN | 4432 F_FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN | 4433 F_FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN | F_FW_RSS_VI_CONFIG_CMD_UDPEN; 4434#endif |
4237 rc = -t4_config_vi_rss(sc, sc->mbox, vi->viid, hashen, rss[0]); | 4435 rc = -t4_config_vi_rss(sc, sc->mbox, vi->viid, hashen, rss[0], 0, 0); |
4238 if (rc != 0) { 4239 if_printf(ifp, "rss hash/defaultq config failed: %d\n", rc); 4240 goto done; 4241 } 4242 4243 vi->rss = rss; 4244 vi->flags |= VI_INIT_DONE; 4245done: --- 339 unchanged lines hidden (view full) --- 4585 "\006HASHFILTER\007ETHOFLD", 4586 "\20\001TOE", /* 4: TOE */ 4587 "\20\001RDDP\002RDMAC", /* 5: RDMA */ 4588 "\20\001INITIATOR_PDU\002TARGET_PDU" /* 6: iSCSI */ 4589 "\003INITIATOR_CNXOFLD\004TARGET_CNXOFLD" 4590 "\005INITIATOR_SSNOFLD\006TARGET_SSNOFLD" 4591 "\007T10DIF" 4592 "\010INITIATOR_CMDOFLD\011TARGET_CMDOFLD", | 4436 if (rc != 0) { 4437 if_printf(ifp, "rss hash/defaultq config failed: %d\n", rc); 4438 goto done; 4439 } 4440 4441 vi->rss = rss; 4442 vi->flags |= VI_INIT_DONE; 4443done: --- 339 unchanged lines hidden (view full) --- 4783 "\006HASHFILTER\007ETHOFLD", 4784 "\20\001TOE", /* 4: TOE */ 4785 "\20\001RDDP\002RDMAC", /* 5: RDMA */ 4786 "\20\001INITIATOR_PDU\002TARGET_PDU" /* 6: iSCSI */ 4787 "\003INITIATOR_CNXOFLD\004TARGET_CNXOFLD" 4788 "\005INITIATOR_SSNOFLD\006TARGET_SSNOFLD" 4789 "\007T10DIF" 4790 "\010INITIATOR_CMDOFLD\011TARGET_CMDOFLD", |
4593 "\20\00KEYS", /* 7: TLS */ | 4791 "\20\001LOOKASIDE\002TLSKEYS", /* 7: Crypto */ |
4594 "\20\001INITIATOR\002TARGET\003CTRL_OFLD" /* 8: FCoE */ 4595 "\004PO_INITIATOR\005PO_TARGET", 4596}; 4597 4598void 4599t4_sysctls(struct adapter *sc) 4600{ 4601 struct sysctl_ctx_list *ctx; --- 91 unchanged lines hidden (view full) --- 4693 4694 SYSCTL_CAP(nbmcaps, 0, "NBM"); 4695 SYSCTL_CAP(linkcaps, 1, "link"); 4696 SYSCTL_CAP(switchcaps, 2, "switch"); 4697 SYSCTL_CAP(niccaps, 3, "NIC"); 4698 SYSCTL_CAP(toecaps, 4, "TCP offload"); 4699 SYSCTL_CAP(rdmacaps, 5, "RDMA"); 4700 SYSCTL_CAP(iscsicaps, 6, "iSCSI"); | 4792 "\20\001INITIATOR\002TARGET\003CTRL_OFLD" /* 8: FCoE */ 4793 "\004PO_INITIATOR\005PO_TARGET", 4794}; 4795 4796void 4797t4_sysctls(struct adapter *sc) 4798{ 4799 struct sysctl_ctx_list *ctx; --- 91 unchanged lines hidden (view full) --- 4891 4892 SYSCTL_CAP(nbmcaps, 0, "NBM"); 4893 SYSCTL_CAP(linkcaps, 1, "link"); 4894 SYSCTL_CAP(switchcaps, 2, "switch"); 4895 SYSCTL_CAP(niccaps, 3, "NIC"); 4896 SYSCTL_CAP(toecaps, 4, "TCP offload"); 4897 SYSCTL_CAP(rdmacaps, 5, "RDMA"); 4898 SYSCTL_CAP(iscsicaps, 6, "iSCSI"); |
4701 SYSCTL_CAP(tlscaps, 7, "TLS"); | 4899 SYSCTL_CAP(cryptocaps, 7, "crypto"); |
4702 SYSCTL_CAP(fcoecaps, 8, "FCoE"); 4703#undef SYSCTL_CAP 4704 4705 SYSCTL_ADD_INT(ctx, children, OID_AUTO, "nfilters", CTLFLAG_RD, 4706 NULL, sc->tids.nftids, "number of filters"); 4707 4708 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "temperature", CTLTYPE_INT | 4709 CTLFLAG_RD, sc, 0, sysctl_temperature, "I", --- 159 unchanged lines hidden (view full) --- 4869 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "tx_rate", 4870 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 4871 sysctl_tx_rate, "A", "Tx rate"); 4872 4873 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "ulprx_la", 4874 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 4875 sysctl_ulprx_la, "A", "ULPRX logic analyzer"); 4876 | 4900 SYSCTL_CAP(fcoecaps, 8, "FCoE"); 4901#undef SYSCTL_CAP 4902 4903 SYSCTL_ADD_INT(ctx, children, OID_AUTO, "nfilters", CTLFLAG_RD, 4904 NULL, sc->tids.nftids, "number of filters"); 4905 4906 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "temperature", CTLTYPE_INT | 4907 CTLFLAG_RD, sc, 0, sysctl_temperature, "I", --- 159 unchanged lines hidden (view full) --- 5067 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "tx_rate", 5068 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 5069 sysctl_tx_rate, "A", "Tx rate"); 5070 5071 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "ulprx_la", 5072 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 5073 sysctl_ulprx_la, "A", "ULPRX logic analyzer"); 5074 |
4877 if (is_t5(sc)) { | 5075 if (chip_id(sc) >= CHELSIO_T5) { |
4878 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "wcwr_stats", 4879 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 4880 sysctl_wcwr_stats, "A", "write combined work requests"); 4881 } 4882#endif 4883 4884#ifdef TCP_OFFLOAD 4885 if (is_offload(sc)) { --- 2127 unchanged lines hidden (view full) --- 7013 7014 if (t->natids) { 7015 sbuf_printf(sb, "ATID range: 0-%u, in use: %u\n", t->natids - 1, 7016 t->atids_in_use); 7017 } 7018 7019 if (t->ntids) { 7020 if (t4_read_reg(sc, A_LE_DB_CONFIG) & F_HASHEN) { | 5076 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "wcwr_stats", 5077 CTLTYPE_STRING | CTLFLAG_RD, sc, 0, 5078 sysctl_wcwr_stats, "A", "write combined work requests"); 5079 } 5080#endif 5081 5082#ifdef TCP_OFFLOAD 5083 if (is_offload(sc)) { --- 2127 unchanged lines hidden (view full) --- 7211 7212 if (t->natids) { 7213 sbuf_printf(sb, "ATID range: 0-%u, in use: %u\n", t->natids - 1, 7214 t->atids_in_use); 7215 } 7216 7217 if (t->ntids) { 7218 if (t4_read_reg(sc, A_LE_DB_CONFIG) & F_HASHEN) { |
7021 uint32_t b = t4_read_reg(sc, A_LE_DB_SERVER_INDEX) / 4; | 7219 uint32_t b; |
7022 | 7220 |
7221 if (chip_id(sc) <= CHELSIO_T5) 7222 b = t4_read_reg(sc, A_LE_DB_SERVER_INDEX) / 4; 7223 else 7224 b = t4_read_reg(sc, A_LE_DB_SRVR_START_INDEX); 7225 |
|
7023 if (b) { 7024 sbuf_printf(sb, "TID range: 0-%u, %u-%u", b - 1, 7025 t4_read_reg(sc, A_LE_DB_TID_HASHBASE) / 4, 7026 t->ntids - 1); 7027 } else { 7028 sbuf_printf(sb, "TID range: %u-%u", 7029 t4_read_reg(sc, A_LE_DB_TID_HASHBASE) / 4, 7030 t->ntids - 1); --- 437 unchanged lines hidden (view full) --- 7468 7469static int 7470sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS) 7471{ 7472 struct adapter *sc = arg1; 7473 struct sbuf *sb; 7474 int rc, v; 7475 | 7226 if (b) { 7227 sbuf_printf(sb, "TID range: 0-%u, %u-%u", b - 1, 7228 t4_read_reg(sc, A_LE_DB_TID_HASHBASE) / 4, 7229 t->ntids - 1); 7230 } else { 7231 sbuf_printf(sb, "TID range: %u-%u", 7232 t4_read_reg(sc, A_LE_DB_TID_HASHBASE) / 4, 7233 t->ntids - 1); --- 437 unchanged lines hidden (view full) --- 7671 7672static int 7673sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS) 7674{ 7675 struct adapter *sc = arg1; 7676 struct sbuf *sb; 7677 int rc, v; 7678 |
7679 MPASS(chip_id(sc) >= CHELSIO_T5); 7680 |
|
7476 rc = sysctl_wire_old_buffer(req, 0); 7477 if (rc != 0) 7478 return (rc); 7479 7480 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req); 7481 if (sb == NULL) 7482 return (ENOMEM); 7483 7484 v = t4_read_reg(sc, A_SGE_STAT_CFG); 7485 if (G_STATSOURCE_T5(v) == 7) { | 7681 rc = sysctl_wire_old_buffer(req, 0); 7682 if (rc != 0) 7683 return (rc); 7684 7685 sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req); 7686 if (sb == NULL) 7687 return (ENOMEM); 7688 7689 v = t4_read_reg(sc, A_SGE_STAT_CFG); 7690 if (G_STATSOURCE_T5(v) == 7) { |
7486 if (G_STATMODE(v) == 0) { | 7691 int mode; 7692 7693 mode = is_t5(sc) ? G_STATMODE(v) : G_T6_STATMODE(v); 7694 if (mode == 0) { |
7487 sbuf_printf(sb, "total %d, incomplete %d", 7488 t4_read_reg(sc, A_SGE_STAT_TOTAL), 7489 t4_read_reg(sc, A_SGE_STAT_MATCH)); | 7695 sbuf_printf(sb, "total %d, incomplete %d", 7696 t4_read_reg(sc, A_SGE_STAT_TOTAL), 7697 t4_read_reg(sc, A_SGE_STAT_MATCH)); |
7490 } else if (G_STATMODE(v) == 1) { | 7698 } else if (mode == 1) { |
7491 sbuf_printf(sb, "total %d, data overflow %d", 7492 t4_read_reg(sc, A_SGE_STAT_TOTAL), 7493 t4_read_reg(sc, A_SGE_STAT_MATCH)); | 7699 sbuf_printf(sb, "total %d, data overflow %d", 7700 t4_read_reg(sc, A_SGE_STAT_TOTAL), 7701 t4_read_reg(sc, A_SGE_STAT_MATCH)); |
7702 } else { 7703 sbuf_printf(sb, "unknown mode %d", mode); |
|
7494 } 7495 } 7496 rc = sbuf_finish(sb); 7497 sbuf_delete(sb); 7498 7499 return (rc); 7500} 7501 --- 2049 unchanged lines hidden (view full) --- 9551done_unload: 9552 sx_xunlock(&mlu); 9553 break; 9554 } 9555 9556 return (rc); 9557} 9558 | 7704 } 7705 } 7706 rc = sbuf_finish(sb); 7707 sbuf_delete(sb); 7708 7709 return (rc); 7710} 7711 --- 2049 unchanged lines hidden (view full) --- 9761done_unload: 9762 sx_xunlock(&mlu); 9763 break; 9764 } 9765 9766 return (rc); 9767} 9768 |
9559static devclass_t t4_devclass, t5_devclass; 9560static devclass_t cxgbe_devclass, cxl_devclass; 9561static devclass_t vcxgbe_devclass, vcxl_devclass; | 9769static devclass_t t4_devclass, t5_devclass, t6_devclass; 9770static devclass_t cxgbe_devclass, cxl_devclass, cc_devclass; 9771static devclass_t vcxgbe_devclass, vcxl_devclass, vcc_devclass; |
9562 9563DRIVER_MODULE(t4nex, pci, t4_driver, t4_devclass, mod_event, 0); 9564MODULE_VERSION(t4nex, 1); 9565MODULE_DEPEND(t4nex, firmware, 1, 1, 1); 9566#ifdef DEV_NETMAP 9567MODULE_DEPEND(t4nex, netmap, 1, 1, 1); 9568#endif /* DEV_NETMAP */ 9569 | 9772 9773DRIVER_MODULE(t4nex, pci, t4_driver, t4_devclass, mod_event, 0); 9774MODULE_VERSION(t4nex, 1); 9775MODULE_DEPEND(t4nex, firmware, 1, 1, 1); 9776#ifdef DEV_NETMAP 9777MODULE_DEPEND(t4nex, netmap, 1, 1, 1); 9778#endif /* DEV_NETMAP */ 9779 |
9570 | |
9571DRIVER_MODULE(t5nex, pci, t5_driver, t5_devclass, mod_event, 0); 9572MODULE_VERSION(t5nex, 1); 9573MODULE_DEPEND(t5nex, firmware, 1, 1, 1); 9574#ifdef DEV_NETMAP 9575MODULE_DEPEND(t5nex, netmap, 1, 1, 1); 9576#endif /* DEV_NETMAP */ 9577 | 9780DRIVER_MODULE(t5nex, pci, t5_driver, t5_devclass, mod_event, 0); 9781MODULE_VERSION(t5nex, 1); 9782MODULE_DEPEND(t5nex, firmware, 1, 1, 1); 9783#ifdef DEV_NETMAP 9784MODULE_DEPEND(t5nex, netmap, 1, 1, 1); 9785#endif /* DEV_NETMAP */ 9786 |
9787DRIVER_MODULE(t6nex, pci, t6_driver, t6_devclass, mod_event, 0); 9788MODULE_VERSION(t6nex, 1); 9789MODULE_DEPEND(t6nex, firmware, 1, 1, 1); 9790#ifdef DEV_NETMAP 9791MODULE_DEPEND(t6nex, netmap, 1, 1, 1); 9792#endif /* DEV_NETMAP */ 9793 |
|
9578DRIVER_MODULE(cxgbe, t4nex, cxgbe_driver, cxgbe_devclass, 0, 0); 9579MODULE_VERSION(cxgbe, 1); 9580 9581DRIVER_MODULE(cxl, t5nex, cxl_driver, cxl_devclass, 0, 0); 9582MODULE_VERSION(cxl, 1); 9583 | 9794DRIVER_MODULE(cxgbe, t4nex, cxgbe_driver, cxgbe_devclass, 0, 0); 9795MODULE_VERSION(cxgbe, 1); 9796 9797DRIVER_MODULE(cxl, t5nex, cxl_driver, cxl_devclass, 0, 0); 9798MODULE_VERSION(cxl, 1); 9799 |
9800DRIVER_MODULE(cc, t6nex, cc_driver, cc_devclass, 0, 0); 9801MODULE_VERSION(cc, 1); 9802 |
|
9584DRIVER_MODULE(vcxgbe, cxgbe, vcxgbe_driver, vcxgbe_devclass, 0, 0); 9585MODULE_VERSION(vcxgbe, 1); 9586 9587DRIVER_MODULE(vcxl, cxl, vcxl_driver, vcxl_devclass, 0, 0); 9588MODULE_VERSION(vcxl, 1); | 9803DRIVER_MODULE(vcxgbe, cxgbe, vcxgbe_driver, vcxgbe_devclass, 0, 0); 9804MODULE_VERSION(vcxgbe, 1); 9805 9806DRIVER_MODULE(vcxl, cxl, vcxl_driver, vcxl_devclass, 0, 0); 9807MODULE_VERSION(vcxl, 1); |
9808 9809DRIVER_MODULE(vcc, cc, vcc_driver, vcc_devclass, 0, 0); 9810MODULE_VERSION(vcc, 1); |
|