43#include <net/netmap.h>
44#include <dev/netmap/netmap_kern.h>
196static int ixgbe_sysctl_power_state(SYSCTL_HANDLER_ARGS);
197static int ixgbe_sysctl_print_rss_config(SYSCTL_HANDLER_ARGS);
218 DEVMETHOD(device_probe, iflib_device_probe),
219 DEVMETHOD(device_attach, iflib_device_attach),
220 DEVMETHOD(device_detach, iflib_device_detach),
221 DEVMETHOD(device_shutdown, iflib_device_shutdown),
222 DEVMETHOD(device_suspend, iflib_device_suspend),
223 DEVMETHOD(device_resume, iflib_device_resume),
225 DEVMETHOD(pci_iov_init, iflib_device_iov_init),
226 DEVMETHOD(pci_iov_uninit, iflib_device_iov_uninit),
227 DEVMETHOD(pci_iov_add_vf, iflib_device_iov_add_vf),
275 DEVMETHOD(ifdi_iov_init, ixgbe_if_iov_init),
276 DEVMETHOD(ifdi_iov_uninit, ixgbe_if_iov_uninit),
277 DEVMETHOD(ifdi_iov_vf_add, ixgbe_if_iov_vf_add),
286static SYSCTL_NODE(_hw, OID_AUTO, ix, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
287 "IXGBE driver parameters");
293SYSCTL_INT(_hw_ix, OID_AUTO, max_interrupt_rate, CTLFLAG_RDTUN,
321 "Enable MSI-X interrupts");
331 "Allow unsupported SFP modules...use at your own risk");
339 "Enable Flow Director");
344 "Enable Receive-Side Scaling (RSS)");
354 "Enable adaptive interrupt moderation");
358static int ixgbe_total_ports;
374 .isc_magic = IFLIB_MAGIC,
375 .isc_q_align = PAGE_SIZE,
376 .isc_tx_maxsize =
IXGBE_TSO_SIZE +
sizeof(
struct ether_vlan_header),
377 .isc_tx_maxsegsize = PAGE_SIZE,
378 .isc_tso_maxsize =
IXGBE_TSO_SIZE +
sizeof(
struct ether_vlan_header),
379 .isc_tso_maxsegsize = PAGE_SIZE,
380 .isc_rx_maxsize = PAGE_SIZE*4,
381 .isc_rx_nsegments = 1,
382 .isc_rx_maxsegsize = PAGE_SIZE*4,
387 .isc_admin_intrcnt = 1,
391 .isc_flags = IFLIB_TSO_INIT_IP,
406 int ntxqs,
int ntxqsets)
409 if_softc_ctx_t scctx = sc->
shared;
413 MPASS(
sc->num_tx_queues > 0);
414 MPASS(
sc->num_tx_queues == ntxqsets);
420 M_IXGBE, M_NOWAIT | M_ZERO);
422 device_printf(iflib_get_dev(ctx),
423 "Unable to allocate TX ring memory\n");
427 for (i = 0, que =
sc->
tx_queues; i < ntxqsets; i++, que++) {
437 txr->
tx_rsq = (qidx_t *)malloc(
sizeof(qidx_t) * scctx->isc_ntxd[0], M_IXGBE, M_NOWAIT | M_ZERO);
438 if (txr->
tx_rsq == NULL) {
442 for (j = 0; j < scctx->isc_ntxd[0]; j++)
443 txr->
tx_rsq[j] = QIDX_INVALID;
458 device_printf(iflib_get_dev(ctx),
"allocated for %d queues\n",
474 int nrxqs,
int nrxqsets)
480 MPASS(
sc->num_rx_queues > 0);
481 MPASS(
sc->num_rx_queues == nrxqsets);
487 M_IXGBE, M_NOWAIT | M_ZERO);
489 device_printf(iflib_get_dev(ctx),
490 "Unable to allocate TX ring memory\n");
494 for (i = 0, que =
sc->
rx_queues; i < nrxqsets; i++, que++) {
511 device_printf(iflib_get_dev(ctx),
"allocated for %d rx queues\n",
528 if (tx_que != NULL) {
529 for (i = 0; i <
sc->num_tx_queues; i++, tx_que++) {
534 free(txr->
tx_rsq, M_IXGBE);
541 if (rx_que != NULL) {
554 u32 reta = 0, mrqc, rss_key[10];
555 int queue_id, table_size, index_mult;
564 arc4rand(&rss_key,
sizeof(rss_key), 0);
584 for (i = 0, j = 0; i < table_size; i++, j++) {
585 if (j == sc->num_rx_queues)
595 queue_id = queue_id % sc->num_rx_queues;
597 queue_id = (j * index_mult);
604 reta = reta | (((uint32_t)queue_id) << 24);
616 for (i = 0; i < 10; i++)
662#define BSIZEPKT_ROUNDUP ((1<<IXGBE_SRRCTL_BSIZEPKT_SHIFT)-1)
668 if_softc_ctx_t scctx = sc->
shared;
670 struct ifnet *ifp = iflib_get_ifp(ctx);
673 u32 bufsz, fctrl, srrctl, rxcsum;
693 if (ifp->if_mtu > ETHERMTU)
696 hlreg &= ~IXGBE_HLREG0_JUMBOEN;
711 (rdba & 0x00000000ffffffffULL));
718 srrctl &= ~IXGBE_SRRCTL_BSIZEHDR_MASK;
719 srrctl &= ~IXGBE_SRRCTL_BSIZEPKT_MASK;
729 if (
sc->num_rx_queues > 1 &&
733 srrctl &= ~IXGBE_SRRCTL_DROP_EN;
758 if (
sc->num_rx_queues > 1) {
763 if (ifp->if_capenable & IFCAP_RXCSUM)
782 if_softc_ctx_t scctx = sc->
shared;
795 (tdba & 0x00000000ffffffffULL));
809 for (
int k = 0; k < scctx->isc_ntxd[0]; k++)
810 txr->
tx_rsq[k] = QIDX_INVALID;
826 txctrl &= ~IXGBE_DCA_TXCTRL_DESC_WRO_EN;
839 u32 dmatxctl, rttdcs;
850 rttdcs &= ~IXGBE_RTTDCS_ARBDIS;
879 if_softc_ctx_t scctx;
887 dev = iflib_get_dev(ctx);
888 sc = iflib_get_softc(ctx);
892 scctx = sc->
shared = iflib_get_softc_ctx(ctx);
893 sc->
media = iflib_get_media(ctx);
905 device_printf(dev,
"Allocation of PCI resources failed\n");
918 device_printf(dev,
"Unable to initialize the shared code\n");
960 device_printf(dev,
"Unsupported SFP+ module detected!\n");
964 device_printf(dev,
"Hardware initialization failed\n");
971 device_printf(dev,
"The EEPROM Checksum Is Not Valid\n");
979 device_printf(dev,
"This device is a pre-production adapter/LOM. Please be aware there may be issues associated with your hardware.\nIf you are experiencing problems please contact your Intel or hardware representative who provided you with this hardware.\n");
982 device_printf(dev,
"Unsupported SFP+ Module\n");
986 device_printf(dev,
"No SFP+ Module found\n");
994 iflib_set_mac(ctx, hw->
mac.
addr);
999 scctx->isc_rss_table_size = 512;
1000 scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max = 64;
1003 scctx->isc_rss_table_size = 128;
1004 scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max = 16;
1010 scctx->isc_txqsizes[0] =
1013 scctx->isc_rxqsizes[0] =
1018 scctx->isc_tx_csum_flags = CSUM_IP | CSUM_TCP | CSUM_UDP | CSUM_TSO |
1019 CSUM_IP6_TCP | CSUM_IP6_UDP | CSUM_IP6_TSO;
1023 scctx->isc_tx_csum_flags |= CSUM_SCTP |CSUM_IP6_SCTP;
1027 scctx->isc_msix_bar = pci_msix_table_bar(dev);
1029 scctx->isc_tx_tso_segments_max = scctx->isc_tx_nsegments;
1031 scctx->isc_tx_tso_segsize_max = PAGE_SIZE;
1035 scctx->isc_capabilities = scctx->isc_capenable =
IXGBE_CAPS;
1041 ctrl_ext &= ~IXGBE_CTRL_EXT_DRV_LOAD;
1065 dev = iflib_get_dev(ctx);
1066 sc = iflib_get_softc(ctx);
1070 if (sc->intr_type == IFLIB_INTR_LEGACY &&
1072 device_printf(dev,
"Device does not support legacy interrupts");
1078 sc->
mta = malloc(
sizeof(*sc->
mta) *
1080 if (sc->
mta == NULL) {
1081 device_printf(dev,
"Can not allocate multicast setup array\n");
1099 device_printf(dev,
"Interface setup failed: %d\n", error);
1174 struct ifnet *ifp = iflib_get_ifp(ctx);
1179 if_setbaudrate(
ifp, IF_Gbps(10));
1181 sc->max_frame_size =
ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
1188 ifmedia_set(sc->
media, IFM_ETHER | IFM_AUTO);
1200 if_t
ifp = iflib_get_ifp(
ctx);
1203 case IFCOUNTER_IPACKETS:
1205 case IFCOUNTER_OPACKETS:
1207 case IFCOUNTER_IBYTES:
1209 case IFCOUNTER_OBYTES:
1211 case IFCOUNTER_IMCASTS:
1213 case IFCOUNTER_OMCASTS:
1215 case IFCOUNTER_COLLISIONS:
1217 case IFCOUNTER_IQDROPS:
1219 case IFCOUNTER_OQDROPS:
1221 case IFCOUNTER_IERRORS:
1224 return (if_get_counter_default(
ifp, cnt));
1241 for (i = 0; i < req->len; i++)
1243 req->dev_addr, &req->data[i]);
1259 case IFLIB_RESTART_VLAN_CONFIG:
1274 device_t dev = iflib_get_dev(ctx);
1281 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_T, 0, NULL);
1283 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_T, 0, NULL);
1285 ifmedia_add(sc->
media, IFM_ETHER | IFM_100_TX, 0, NULL);
1287 ifmedia_add(sc->
media, IFM_ETHER | IFM_10_T, 0, NULL);
1290 ifmedia_add(sc->
media, IFM_ETHER | IFM_2500_T, 0, NULL);
1291 ifmedia_add(sc->
media, IFM_ETHER | IFM_5000_T, 0, NULL);
1296 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_TWINAX, 0,
1300 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_LR, 0, NULL);
1302 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_LX, 0,
1306 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_SR, 0, NULL);
1308 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_SX, 0,
1311 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_SX, 0, NULL);
1313 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_CX4, 0, NULL);
1317 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_KR, 0, NULL);
1319 ifmedia_add( sc->
media, IFM_ETHER | IFM_10G_KX4, 0, NULL);
1321 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_KX, 0, NULL);
1323 ifmedia_add(sc->
media, IFM_ETHER | IFM_2500_KX, 0, NULL);
1326 device_printf(dev,
"Media supported: 10GbaseKR\n");
1327 device_printf(dev,
"10GbaseKR mapped to 10GbaseSR\n");
1328 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_SR, 0, NULL);
1331 device_printf(dev,
"Media supported: 10GbaseKX4\n");
1332 device_printf(dev,
"10GbaseKX4 mapped to 10GbaseCX4\n");
1333 ifmedia_add(sc->
media, IFM_ETHER | IFM_10G_CX4, 0, NULL);
1336 device_printf(dev,
"Media supported: 1000baseKX\n");
1337 device_printf(dev,
"1000baseKX mapped to 1000baseCX\n");
1338 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_CX, 0, NULL);
1341 device_printf(dev,
"Media supported: 2500baseKX\n");
1342 device_printf(dev,
"2500baseKX mapped to 2500baseSX\n");
1343 ifmedia_add(sc->
media, IFM_ETHER | IFM_2500_SX, 0, NULL);
1347 device_printf(dev,
"Media supported: 1000baseBX\n");
1350 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_T | IFM_FDX,
1352 ifmedia_add(sc->
media, IFM_ETHER | IFM_1000_T, 0, NULL);
1355 ifmedia_add(sc->
media, IFM_ETHER | IFM_AUTO, 0, NULL);
1395 u32 autoneg, err = 0;
1396 bool sfp, negotiate;
1402 iflib_admin_intr_deferred(ctx);
1459 u32 missed_rx = 0,
bprc, lxon, lxoff, total;
1461 u64 total_missed_rx = 0;
1469 for (
int i = 0; i < 16; i++) {
1480 stats->
gprc -= missed_rx;
1507 sc->
shared->isc_pause_frames = 1;
1530 total = lxon + lxoff;
1535 stats->
gptc -= total;
1536 stats->
mptc -= total;
1537 stats->
ptc64 -= total;
1538 stats->
gotc -= total * ETHER_MIN_LEN;
1602 device_t dev = iflib_get_dev(sc->
ctx);
1605 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
1606 struct sysctl_oid *tree = device_get_sysctl_tree(dev);
1607 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
1609 struct sysctl_oid *stat_node, *queue_node;
1610 struct sysctl_oid_list *stat_list, *queue_list;
1613#define QUEUE_NAME_LEN 32
1617 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO,
"dropped",
1618 CTLFLAG_RD, &sc->
dropped_pkts,
"Driver dropped packets");
1619 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO,
"watchdog_events",
1621 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO,
"link_irq",
1622 CTLFLAG_RD, &sc->
link_irq,
"Link MSI-X IRQ Handled");
1627 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
1628 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Queue Name");
1629 queue_list = SYSCTL_CHILDREN(queue_node);
1631 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO,
"txd_head",
1632 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, txr, 0,
1634 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO,
"txd_tail",
1635 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, txr, 0,
1637 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"tso_tx",
1638 CTLFLAG_RD, &txr->
tso_tx,
"TSO");
1639 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"tx_packets",
1641 "Queue Packets Transmitted");
1647 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
1648 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Queue Name");
1649 queue_list = SYSCTL_CHILDREN(queue_node);
1651 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO,
"interrupt_rate",
1652 CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
1656 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"irqs",
1658 "irqs on this queue");
1659 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO,
"rxd_head",
1660 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, rxr, 0,
1662 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO,
"rxd_tail",
1663 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, rxr, 0,
1665 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"rx_packets",
1666 CTLFLAG_RD, &rxr->
rx_packets,
"Queue Packets Received");
1667 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"rx_bytes",
1668 CTLFLAG_RD, &rxr->
rx_bytes,
"Queue Bytes Received");
1669 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"rx_copies",
1670 CTLFLAG_RD, &rxr->
rx_copies,
"Copied RX Frames");
1671 SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO,
"rx_discarded",
1672 CTLFLAG_RD, &rxr->
rx_discarded,
"Discarded RX packets");
1677 stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO,
"mac_stats",
1678 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"MAC Statistics");
1679 stat_list = SYSCTL_CHILDREN(stat_node);
1681 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_errs",
1683 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"crc_errs",
1684 CTLFLAG_RD, &stats->
crcerrs,
"CRC Errors");
1685 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"ill_errs",
1686 CTLFLAG_RD, &stats->
illerrc,
"Illegal Byte Errors");
1687 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"byte_errs",
1688 CTLFLAG_RD, &stats->
errbc,
"Byte Errors");
1689 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"short_discards",
1690 CTLFLAG_RD, &stats->
mspdc,
"MAC Short Packets Discarded");
1691 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"local_faults",
1692 CTLFLAG_RD, &stats->
mlfc,
"MAC Local Faults");
1693 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"remote_faults",
1694 CTLFLAG_RD, &stats->
mrfc,
"MAC Remote Faults");
1695 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rec_len_errs",
1696 CTLFLAG_RD, &stats->
rlec,
"Receive Length Errors");
1697 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_missed_packets",
1698 CTLFLAG_RD, &stats->
mpc[0],
"RX Missed Packet Count");
1701 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"xon_txd",
1702 CTLFLAG_RD, &stats->
lxontxc,
"Link XON Transmitted");
1703 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"xon_recvd",
1704 CTLFLAG_RD, &stats->
lxonrxc,
"Link XON Received");
1705 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"xoff_txd",
1706 CTLFLAG_RD, &stats->
lxofftxc,
"Link XOFF Transmitted");
1707 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"xoff_recvd",
1708 CTLFLAG_RD, &stats->
lxoffrxc,
"Link XOFF Received");
1711 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"total_octets_rcvd",
1712 CTLFLAG_RD, &stats->
tor,
"Total Octets Received");
1713 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"good_octets_rcvd",
1714 CTLFLAG_RD, &stats->
gorc,
"Good Octets Received");
1715 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"total_pkts_rcvd",
1716 CTLFLAG_RD, &stats->
tpr,
"Total Packets Received");
1717 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"good_pkts_rcvd",
1718 CTLFLAG_RD, &stats->
gprc,
"Good Packets Received");
1719 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"mcast_pkts_rcvd",
1720 CTLFLAG_RD, &stats->
mprc,
"Multicast Packets Received");
1721 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"bcast_pkts_rcvd",
1722 CTLFLAG_RD, &stats->
bprc,
"Broadcast Packets Received");
1723 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_64",
1724 CTLFLAG_RD, &stats->
prc64,
"64 byte frames received ");
1725 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_65_127",
1726 CTLFLAG_RD, &stats->
prc127,
"65-127 byte frames received");
1727 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_128_255",
1728 CTLFLAG_RD, &stats->
prc255,
"128-255 byte frames received");
1729 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_256_511",
1730 CTLFLAG_RD, &stats->
prc511,
"256-511 byte frames received");
1731 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_512_1023",
1732 CTLFLAG_RD, &stats->
prc1023,
"512-1023 byte frames received");
1733 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"rx_frames_1024_1522",
1734 CTLFLAG_RD, &stats->
prc1522,
"1023-1522 byte frames received");
1735 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"recv_undersized",
1736 CTLFLAG_RD, &stats->
ruc,
"Receive Undersized");
1737 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"recv_fragmented",
1738 CTLFLAG_RD, &stats->
rfc,
"Fragmented Packets Received ");
1739 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"recv_oversized",
1740 CTLFLAG_RD, &stats->
roc,
"Oversized Packets Received");
1741 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"recv_jabberd",
1742 CTLFLAG_RD, &stats->
rjc,
"Received Jabber");
1743 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"management_pkts_rcvd",
1744 CTLFLAG_RD, &stats->
mngprc,
"Management Packets Received");
1745 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"management_pkts_drpd",
1746 CTLFLAG_RD, &stats->
mngptc,
"Management Packets Dropped");
1747 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"checksum_errs",
1748 CTLFLAG_RD, &stats->
xec,
"Checksum Errors");
1751 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"good_octets_txd",
1752 CTLFLAG_RD, &stats->
gotc,
"Good Octets Transmitted");
1753 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"total_pkts_txd",
1754 CTLFLAG_RD, &stats->
tpt,
"Total Packets Transmitted");
1755 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"good_pkts_txd",
1756 CTLFLAG_RD, &stats->
gptc,
"Good Packets Transmitted");
1757 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"bcast_pkts_txd",
1758 CTLFLAG_RD, &stats->
bptc,
"Broadcast Packets Transmitted");
1759 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"mcast_pkts_txd",
1760 CTLFLAG_RD, &stats->
mptc,
"Multicast Packets Transmitted");
1761 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"management_pkts_txd",
1762 CTLFLAG_RD, &stats->
mngptc,
"Management Packets Transmitted");
1763 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_64",
1764 CTLFLAG_RD, &stats->
ptc64,
"64 byte frames transmitted ");
1765 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_65_127",
1766 CTLFLAG_RD, &stats->
ptc127,
"65-127 byte frames transmitted");
1767 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_128_255",
1768 CTLFLAG_RD, &stats->
ptc255,
"128-255 byte frames transmitted");
1769 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_256_511",
1770 CTLFLAG_RD, &stats->
ptc511,
"256-511 byte frames transmitted");
1771 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_512_1023",
1772 CTLFLAG_RD, &stats->
ptc1023,
"512-1023 byte frames transmitted");
1773 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO,
"tx_frames_1024_1522",
1774 CTLFLAG_RD, &stats->
ptc1522,
"1024-1522 byte frames transmitted");
1793 error = sysctl_handle_int(oidp, &val, 0, req);
1794 if (error || !req->newptr)
1816 error = sysctl_handle_int(oidp, &val, 0, req);
1817 if (error || !req->newptr)
1839 error = sysctl_handle_int(oidp, &val, 0, req);
1840 if (error || !req->newptr)
1862 error = sysctl_handle_int(oidp, &val, 0, req);
1863 if (error || !req->newptr)
1883 index = (vtag >> 5) & 0x7F;
1901 index = (vtag >> 5) & 0x7F;
1915 struct ifnet *ifp = iflib_get_ifp(ctx);
1933 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
1934 for (i = 0; i <
sc->num_rx_queues; i++) {
1946 if ((ifp->if_capenable & IFCAP_VLAN_HWFILTER) == 0)
1959 if (ifp->if_capenable & IFCAP_VLAN_HWFILTER) {
1960 ctrl &= ~IXGBE_VLNCTRL_CFIEN;
1977 device_t dev = iflib_get_dev(
sc->
ctx);
1979 int bus_info_valid =
true;
1987 goto get_parent_info;
2012 dev = device_get_parent(device_get_parent(dev));
2014 device_printf(dev,
"parent pcib = %x,%x,%x\n", pci_get_bus(dev),
2015 pci_get_slot(dev), pci_get_function(dev));
2017 dev = device_get_parent(device_get_parent(dev));
2019 device_printf(dev,
"slot pcib = %x,%x,%x\n", pci_get_bus(dev),
2020 pci_get_slot(dev), pci_get_function(dev));
2023 if (pci_find_cap(dev, PCIY_EXPRESS, &offset)) {
2028 bus_info_valid =
false;
2033 link = pci_read_config(dev, offset + PCIER_LINK_STA, 2);
2037 device_printf(dev,
"PCI Express Bus: Speed %s %s\n",
2047 if (bus_info_valid) {
2051 device_printf(dev,
"PCI-Express bandwidth available for this card\n is not sufficient for optimal performance.\n");
2052 device_printf(dev,
"For optimal performance a x8 PCIE, or x4 PCIE Gen2 slot is required.\n");
2057 device_printf(dev,
"PCI-Express bandwidth available for this card\n is not sufficient for optimal performance.\n");
2058 device_printf(dev,
"For optimal performance a x8 PCIE Gen3 slot is required.\n");
2061 device_printf(dev,
"Unable to determine slot speed/width. The speed/width reported are that of the internal switch.\n");
2077 int error, rid, vector = 0;
2083 for (
int i = 0; i <
sc->num_rx_queues; i++, vector++, rx_que++) {
2086 snprintf(buf,
sizeof(buf),
"rxq%d", i);
2087 error = iflib_irq_alloc_generic(ctx, &rx_que->
que_irq, rid,
2091 device_printf(iflib_get_dev(ctx),
2092 "Failed to allocate que int %d err: %d", i, error);
2093 sc->num_rx_queues = i + 1;
2097 rx_que->
msix = vector;
2113 if (
sc->num_rx_queues > 1)
2118 for (
int i = 0; i <
sc->num_tx_queues; i++) {
2119 snprintf(buf,
sizeof(buf),
"txq%d", i);
2121 tx_que->
msix = i %
sc->num_rx_queues;
2122 iflib_softirq_alloc_generic(ctx,
2124 IFLIB_INTR_TX, tx_que, tx_que->
txr.
me, buf);
2127 error = iflib_irq_alloc_generic(ctx, &
sc->
irq, rid,
2130 device_printf(iflib_get_dev(ctx),
2131 "Failed to register admin handler");
2139 iflib_irq_free(ctx, &
sc->
irq);
2141 for (
int i = 0; i <
sc->num_rx_queues; i++, rx_que++)
2142 iflib_irq_free(ctx, &rx_que->
que_irq);
2150 uint32_t newitr = 0;
2166 if (rxr->
bytes == 0) {
2176 newitr = min(newitr, 3000);
2179 if ((newitr > 300) && (newitr < 1200)) {
2180 newitr = (newitr / 3);
2182 newitr = (newitr / 2);
2186 newitr |= newitr << 16;
2209 struct ifnet *ifp = iflib_get_ifp(que->
sc->
ctx);
2212 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
2213 return (FILTER_HANDLED);
2223 return (FILTER_SCHEDULE_THREAD);
2241 ifmr->ifm_status = IFM_AVALID;
2242 ifmr->ifm_active = IFM_ETHER;
2247 ifmr->ifm_status |= IFM_ACTIVE;
2256 ifmr->ifm_active |= IFM_10G_T | IFM_FDX;
2259 ifmr->ifm_active |= IFM_1000_T | IFM_FDX;
2262 ifmr->ifm_active |= IFM_100_TX | IFM_FDX;
2265 ifmr->ifm_active |= IFM_10_T | IFM_FDX;
2271 ifmr->ifm_active |= IFM_5000_T | IFM_FDX;
2274 ifmr->ifm_active |= IFM_2500_T | IFM_FDX;
2281 ifmr->ifm_active |= IFM_10G_TWINAX | IFM_FDX;
2287 ifmr->ifm_active |= IFM_10G_LR | IFM_FDX;
2290 ifmr->ifm_active |= IFM_1000_LX | IFM_FDX;
2296 ifmr->ifm_active |= IFM_10G_LRM | IFM_FDX;
2299 ifmr->ifm_active |= IFM_1000_LX | IFM_FDX;
2306 ifmr->ifm_active |= IFM_10G_SR | IFM_FDX;
2309 ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
2315 ifmr->ifm_active |= IFM_10G_CX4 | IFM_FDX;
2322#ifndef IFM_ETH_XTYPE
2326 ifmr->ifm_active |= IFM_10G_SR | IFM_FDX;
2329 ifmr->ifm_active |= IFM_2500_SX | IFM_FDX;
2332 ifmr->ifm_active |= IFM_1000_CX | IFM_FDX;
2340 ifmr->ifm_active |= IFM_10G_CX4 | IFM_FDX;
2343 ifmr->ifm_active |= IFM_2500_SX | IFM_FDX;
2346 ifmr->ifm_active |= IFM_1000_CX | IFM_FDX;
2353 ifmr->ifm_active |= IFM_10G_KR | IFM_FDX;
2356 ifmr->ifm_active |= IFM_2500_KX | IFM_FDX;
2359 ifmr->ifm_active |= IFM_1000_KX | IFM_FDX;
2367 ifmr->ifm_active |= IFM_10G_KX4 | IFM_FDX;
2370 ifmr->ifm_active |= IFM_2500_KX | IFM_FDX;
2373 ifmr->ifm_active |= IFM_1000_KX | IFM_FDX;
2379 if (IFM_SUBTYPE(ifmr->ifm_active) == 0)
2380 ifmr->ifm_active |= IFM_UNKNOWN;
2385 ifmr->ifm_active |= IFM_ETH_RXPAUSE;
2388 ifmr->ifm_active |= IFM_ETH_TXPAUSE;
2401 struct ifmedia *ifm = iflib_get_media(ctx);
2407 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
2418 switch (IFM_SUBTYPE(ifm->ifm_media)) {
2427#ifndef IFM_ETH_XTYPE
2437#ifndef IFM_ETH_XTYPE
2450 case IFM_10G_TWINAX:
2482 device_printf(iflib_get_dev(ctx),
"Invalid media type!\n");
2494 struct ifnet *ifp = iflib_get_ifp(ctx);
2499 rctl &= (~IXGBE_FCTRL_UPE);
2500 if (ifp->if_flags & IFF_ALLMULTI)
2506 rctl &= (~IXGBE_FCTRL_MPE);
2509 if (ifp->if_flags & IFF_PROMISC) {
2512 }
else if (ifp->if_flags & IFF_ALLMULTI) {
2514 rctl &= ~IXGBE_FCTRL_UPE;
2528 u32 eicr, eicr_mask;
2539 eicr &= ~IXGBE_EICR_RTX_QUEUE;
2554 return (FILTER_HANDLED);
2560 device_printf(iflib_get_dev(sc->
ctx),
2561 "\nCRITICAL: ECC ERROR!! Please Reboot!!\n");
2578 device_printf(iflib_get_dev(sc->
ctx),
2579 "\nCRITICAL: OVER TEMP!! PHY IS SHUT DOWN!!\n");
2580 device_printf(iflib_get_dev(sc->
ctx),
2581 "System shutdown required!\n");
2589 device_printf(iflib_get_dev(sc->
ctx),
2590 "\nCRITICAL: OVER TEMP!! PHY IS SHUT DOWN!!\n");
2591 device_printf(iflib_get_dev(sc->
ctx),
2592 "System shutdown required!\n");
2611 if (eicr & eicr_mask) {
2637 return (sc->
task_requests != 0) ? FILTER_SCHEDULE_THREAD : FILTER_HANDLED;
2648 unsigned int reg, usec, rate;
2651 usec = ((reg & 0x0FF8) >> 3);
2653 rate = 500000 / usec;
2656 error = sysctl_handle_int(oidp, &rate, 0, req);
2657 if (error || !req->newptr)
2661 if (rate > 0 && rate < 500000) {
2665 reg |= ((4000000/rate) & 0xff8);
2679 device_t
dev = iflib_get_dev(
ctx);
2681 struct sysctl_oid_list *child;
2682 struct sysctl_ctx_list *ctx_list;
2684 ctx_list = device_get_sysctl_ctx(dev);
2685 child = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
2688 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"fc",
2689 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
2693 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"advertise_speed",
2694 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
2699 SYSCTL_ADD_INT(ctx_list, child, OID_AUTO,
"enable_aim", CTLFLAG_RW,
2702 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"fw_version",
2703 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, sc, 0,
2708 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"power_state",
2709 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
2710 sc, 0, ixgbe_sysctl_power_state,
2711 "I",
"PCI Power State");
2713 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"print_rss_config",
2714 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, sc, 0,
2715 ixgbe_sysctl_print_rss_config,
"A",
"Prints RSS Configuration");
2719 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"dmac",
2720 CTLTYPE_U16 | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
2722 "I",
"DMA Coalesce");
2726 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"wol_enable",
2727 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
2730 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"wufc",
2731 CTLTYPE_U32 | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
2733 "I",
"Enable/Disable Wake Up Filters");
2738 struct sysctl_oid *phy_node;
2739 struct sysctl_oid_list *phy_list;
2741 phy_node = SYSCTL_ADD_NODE(ctx_list, child, OID_AUTO,
"phy",
2742 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"External PHY sysctls");
2743 phy_list = SYSCTL_CHILDREN(phy_node);
2745 SYSCTL_ADD_PROC(ctx_list, phy_list, OID_AUTO,
"temp",
2746 CTLTYPE_U16 | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
2748 "I",
"Current External PHY Temperature (Celsius)");
2750 SYSCTL_ADD_PROC(ctx_list, phy_list, OID_AUTO,
2751 "overtemp_occurred",
2752 CTLTYPE_U16 | CTLFLAG_RD | CTLFLAG_NEEDGIANT, sc, 0,
2754 "External PHY High Temperature Event Occurred");
2758 SYSCTL_ADD_PROC(ctx_list, child, OID_AUTO,
"eee_state",
2759 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
2771 device_t
dev = iflib_get_dev(
ctx);
2775 sc->
pci_mem = bus_alloc_resource_any(
dev, SYS_RES_MEMORY, &rid,
2779 device_printf(
dev,
"Unable to allocate bus resource: memory\n");
2786 rman_get_bushandle(sc->
pci_mem);
2806 device_t
dev = iflib_get_dev(
ctx);
2812 device_printf(
dev,
"SR-IOV in use; detach first.\n");
2820 ctrl_ext &= ~IXGBE_CTRL_EXT_DRV_LOAD;
2824 free(sc->
mta, M_IXGBE);
2839 device_t dev = iflib_get_dev(ctx);
2873 device_printf(dev,
"Error entering LPLU: %d\n", error);
2924 device_t
dev = iflib_get_dev(
ctx);
2925 struct ifnet *ifp = iflib_get_ifp(ctx);
2934 device_printf(dev,
"Woken up by (WUS): %#010x\n",
2944 if (ifp->if_flags & IFF_UP)
2994 D(
"%s read HLREG 0x%x rxc 0x%x",
2995 onoff ?
"enter" :
"exit", hl, rxc);
2998 rxc &= ~IXGBE_RDRXCTL_RSCFRSTSIZE;
3000 if (onoff && !crcstrip) {
3002 hl &= ~IXGBE_HLREG0_RXCRCSTRP;
3003 rxc &= ~IXGBE_RDRXCTL_CRCSTRIP;
3011 D(
"%s write HLREG 0x%x rxc 0x%x",
3012 onoff ?
"enter" :
"exit", hl, rxc);
3032 struct ifnet *ifp = iflib_get_ifp(ctx);
3033 device_t dev = iflib_get_dev(ctx);
3081 if (ifp->if_mtu > ETHERMTU) {
3084 mhadd &= ~IXGBE_MHADD_MFS_MASK;
3096 txdctl |= (8 << 16);
3104 txdctl |= (32 << 0) | (1 << 8);
3118 rxdctl &= ~0x3FFFFF;
3123 for (j = 0; j < 10; j++) {
3166 "Unsupported SFP+ module type was detected.\n");
3226 entry += (type * 64);
3227 index = (entry >> 2) & 0x1F;
3229 ivar &= ~(0xFF << (8 * (entry & 0x3)));
3230 ivar |= (vector << (8 * (entry & 0x3)));
3239 index = (entry & 1) * 8;
3241 ivar &= ~(0xFF << index);
3242 ivar |= (vector << index);
3245 index = (16 * (entry & 1)) + (8 * type);
3247 ivar &= ~(0xFF << index);
3248 ivar |= (vector << index);
3277 for (
int i = 0; i <
sc->num_rx_queues; i++, rx_que++) {
3286 for (
int i = 0; i <
sc->num_tx_queues; i++, tx_que++) {
3307 if (sc->intr_type == IFLIB_INTR_MSIX) {
3349 u32 rxpb, frame, size, tmp;
3351 frame = sc->max_frame_size;
3411 struct ifnet *ifp = iflib_get_ifp(ctx);
3425 if (ifp->if_flags & IFF_PROMISC)
3428 ifp->if_flags & IFF_ALLMULTI) {
3430 fctrl &= ~IXGBE_FCTRL_UPE;
3437 update_ptr = (
u8 *)mta;
3459 *update_ptr = (
u8*)(mta + 1);
3486 iflib_admin_intr_deferred(
ctx);
3500 device_t dev = iflib_get_dev(ctx);
3501 bool result =
false;
3511 device_printf(dev,
"Unsupported SFP+ module detected!");
3513 "Reload driver with supported module.\n");
3516 device_printf(dev,
"SFP+ module detected!\n");
3531 if_ctx_t ctx = context;
3534 device_t dev = iflib_get_dev(ctx);
3535 u32 err, cage_full = 0;
3553 goto handle_mod_out;
3559 "Unsupported SFP+ module type was detected.\n");
3560 goto handle_mod_out;
3570 "Setup failure - unsupported SFP+ module type.\n");
3571 goto handle_mod_out;
3587 if_ctx_t ctx = context;
3603 ifmedia_removeall(sc->
media);
3605 ifmedia_set(sc->
media, IFM_ETHER | IFM_AUTO);
3614 if_ctx_t ctx = context;
3621 device_printf(sc->
dev,
"CRITICAL: EXTERNAL PHY OVER TEMP!! PHY will downshift to lower power state!\n");
3623 device_printf(sc->
dev,
3624 "Error handling LASI interrupt: %d\n", error);
3670 device_t
dev = iflib_get_dev(
ctx);
3675 device_printf(
dev,
"Link is up %d Gbps %s \n",
3684 iflib_link_state_change(
ctx, LINK_STATE_UP, IF_Gbps(10));
3692 device_printf(
dev,
"Link is Down\n");
3693 iflib_link_state_change(
ctx, LINK_STATE_DOWN, 0);
3805 if (
sc->intr_type == IFLIB_INTR_MSIX) {
3808 mask &= ~IXGBE_EIMS_OTHER;
3809 mask &= ~IXGBE_EIMS_LSC;
3811 mask &= ~IXGBE_EIMS_MAILBOX;
3820 for (
int i = 0; i <
sc->num_rx_queues; i++, que++)
3835 if (sc->intr_type == IFLIB_INTR_MSIX)
3881 u64 queue = 1ULL << vector;
3888 mask = (queue & 0xFFFFFFFF);
3891 mask = (queue >> 32);
3904 u64 queue = 1ULL << vector;
3911 mask = (queue & 0xFFFFFFFF);
3914 mask = (queue >> 32);
3929 if_ctx_t ctx = sc->
ctx;
3930 u32 eicr, eicr_mask;
3937 return (FILTER_HANDLED);
3943 device_printf(sc->
dev,
3944 "\nCRITICAL: FAN FAILURE!! REPLACE IMMEDIATELY!!\n");
3951 iflib_admin_intr_deferred(ctx);
3961 if (eicr & eicr_mask) {
3979 return (FILTER_SCHEDULE_THREAD);
3990 device_t dev = iflib_get_dev(ctx);
3993 if (
sc->intr_type == IFLIB_INTR_MSIX)
3994 iflib_irq_free(ctx, &
sc->
irq);
3997 for (
int i = 0; i <
sc->num_rx_queues; i++, que++) {
3998 iflib_irq_free(ctx, &que->
que_irq);
4003 bus_release_resource(dev, SYS_RES_MEMORY,
4021 error = sysctl_handle_int(oidp, &fc, 0, req);
4022 if ((error) || (req->newptr == NULL))
4049 if (sc->num_rx_queues > 1)
4054 if (sc->num_rx_queues > 1)
4084 for (
int i = 0; i <
sc->num_rx_queues; i++) {
4109 for (
int i = 0; i <
sc->num_rx_queues; i++) {
4112 srrctl &= ~IXGBE_SRRCTL_DROP_EN;
4137 error = sysctl_handle_int(oidp, &
advertise, 0, req);
4138 if ((error) || (req->newptr == NULL))
4159 device_t
dev = iflib_get_dev(sc->
ctx);
4164 bool negotiate =
false;
4178 device_printf(dev,
"Advertised speed can only be set on copper or multispeed fiber media types.\n");
4182 if (advertise < 0x1 || advertise > 0x3F) {
4183 device_printf(dev,
"Invalid advertised speed; valid modes are 0x1 through 0x3F\n");
4191 device_printf(dev,
"Unable to determine supported advertise speeds\n");
4197 if (advertise & 0x1) {
4199 device_printf(dev,
"Interface does not support 100Mb advertised speed\n");
4204 if (advertise & 0x2) {
4206 device_printf(dev,
"Interface does not support 1Gb advertised speed\n");
4211 if (advertise & 0x4) {
4213 device_printf(dev,
"Interface does not support 10Gb advertised speed\n");
4218 if (advertise & 0x8) {
4220 device_printf(dev,
"Interface does not support 10Mb advertised speed\n");
4225 if (advertise & 0x10) {
4227 device_printf(dev,
"Interface does not support 2.5G advertised speed\n");
4232 if (advertise & 0x20) {
4234 device_printf(dev,
"Interface does not support 5G advertised speed\n");
4266 bool negotiate =
false;
4316 struct ifnet *ifp = iflib_get_ifp(sc->
ctx);
4321 error = sysctl_handle_16(oidp, &newval, 0, req);
4322 if ((error) || (req->newptr == NULL))
4351 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
4368ixgbe_sysctl_power_state(SYSCTL_HANDLER_ARGS)
4372 int curr_ps, new_ps, error = 0;
4374 curr_ps = new_ps = pci_get_powerstate(
dev);
4376 error = sysctl_handle_int(oidp, &new_ps, 0, req);
4377 if ((error) || (req->newptr == NULL))
4380 if (new_ps == curr_ps)
4383 if (new_ps == 3 && curr_ps == 0)
4384 error = DEVICE_SUSPEND(
dev);
4385 else if (new_ps == 0 && curr_ps == 3)
4386 error = DEVICE_RESUME(
dev);
4390 device_printf(
dev,
"New state: %d\n", pci_get_powerstate(
dev));
4411 int new_wol_enabled;
4415 error = sysctl_handle_int(oidp, &new_wol_enabled, 0, req);
4416 if ((error) || (req->newptr == NULL))
4418 new_wol_enabled = !!(new_wol_enabled);
4454 new_wufc = sc->
wufc;
4456 error = sysctl_handle_32(oidp, &new_wufc, 0, req);
4457 if ((error) || (req->newptr == NULL))
4459 if (new_wufc == sc->
wufc)
4462 if (new_wufc & 0xffffff00)
4466 new_wufc |= (0xffffff & sc->
wufc);
4467 sc->
wufc = new_wufc;
4477ixgbe_sysctl_print_rss_config(SYSCTL_HANDLER_ARGS)
4481 device_t dev = sc->
dev;
4483 int error = 0, reta_size;
4486 buf = sbuf_new_for_sysctl(NULL, NULL, 128, req);
4488 device_printf(dev,
"Could not allocate sbuf for output.\n");
4506 sbuf_cat(buf,
"\n");
4507 for (
int i = 0; i < reta_size; i++) {
4510 sbuf_printf(buf,
"RETA(%2d): 0x%08x\n", i, reg);
4513 sbuf_printf(buf,
"ERETA(%2d): 0x%08x\n", i - 32, reg);
4519 error = sbuf_finish(buf);
4521 device_printf(dev,
"Error finishing sbuf: %d\n", error);
4542 device_printf(iflib_get_dev(sc->
ctx),
4543 "Device has no supported external thermal sensor.\n");
4549 device_printf(iflib_get_dev(sc->
ctx),
4550 "Error reading from PHY's current temperature register\n");
4557 return (sysctl_handle_16(oidp, NULL, reg, req));
4574 device_printf(iflib_get_dev(sc->
ctx),
4575 "Device has no supported external thermal sensor.\n");
4581 device_printf(iflib_get_dev(sc->
ctx),
4582 "Error reading from PHY's temperature status register\n");
4587 reg = !!(reg & 0x4000);
4589 return (sysctl_handle_16(oidp, 0, reg, req));
4606 struct ifnet *ifp = iflib_get_ifp(sc->
ctx);
4607 int curr_eee, new_eee, error = 0;
4612 error = sysctl_handle_int(oidp, &new_eee, 0, req);
4613 if ((error) || (req->newptr == NULL))
4617 if (new_eee == curr_eee)
4625 if ((new_eee < 0) || (new_eee > 1))
4630 device_printf(dev,
"Error in EEE setup: 0x%08X\n", retval);
4637 device_printf(dev,
"New EEE state: %d\n", new_eee);
4643 sc->
feat_en &= ~IXGBE_FEATURE_EEE;
4685 sc->
feat_cap &= ~IXGBE_FEATURE_LEGACY_IRQ;
4699 sc->
feat_cap &= ~IXGBE_FEATURE_LEGACY_IRQ;
4725 device_printf(sc->
dev,
"Device does not support Flow Director. Leaving disabled.");
4732 sc->
feat_cap &= ~IXGBE_FEATURE_MSIX;
4740 sc->
feat_cap &= ~IXGBE_FEATURE_RSS;
4741 sc->
feat_cap &= ~IXGBE_FEATURE_SRIOV;
4742 sc->
feat_en &= ~IXGBE_FEATURE_RSS;
4743 sc->
feat_en &= ~IXGBE_FEATURE_SRIOV;
4759 device_printf(sc->
dev,
"\nCRITICAL: FAN FAILURE!! REPLACE IMMEDIATELY!!\n");
4771 const char *space =
"";
4779 sbuf_printf(buf,
"NVM OEM V%d.%d R%d", nvm_ver.
oem_major,
4785 sbuf_printf(buf,
"%sOption ROM V%d-b%d-p%d",
4792 sbuf_printf(buf,
"%seTrack 0x%08x", space, nvm_ver.
etk_id);
4797 sbuf_printf(buf,
"%sPHY FW V%d", space, phyfw);
4808 device_t dev = sc->
dev;
4812 buf = sbuf_new_auto();
4814 device_printf(dev,
"Could not allocate sbuf for output.\n");
4820 error = sbuf_finish(buf);
4822 device_printf(dev,
"Error finishing sbuf: %d\n", error);
4823 else if (sbuf_len(buf))
4824 device_printf(dev,
"%s\n", sbuf_data(buf));
4837 device_t dev = sc->
dev;
4841 buf = sbuf_new_for_sysctl(NULL, NULL, 128, req);
4843 device_printf(dev,
"Could not allocate sbuf for output.\n");
4849 error = sbuf_finish(buf);
4851 device_printf(dev,
"Error finishing sbuf: %d\n", error);
void ixgbe_bypass_init(struct ixgbe_softc *sc)
void ixgbe_reinit_fdir(void *context)
static void ixgbe_disable_rx_drop(struct ixgbe_softc *)
MODULE_DEPEND(ix, pci, 1, 1, 1)
MALLOC_DEFINE(M_IXGBE, "ix", "ix driver allocations")
DRIVER_MODULE(ix, pci, ix_driver, ix_devclass, 0, 0)
static driver_t ixgbe_if_driver
static void ixgbe_if_multi_set(if_ctx_t)
static int ixgbe_smart_speed
static void ixgbe_handle_msf(void *)
static int ixgbe_setup_interface(if_ctx_t)
static void ixgbe_if_disable_intr(if_ctx_t)
static device_method_t ix_methods[]
static void ixgbe_sbuf_fw_version(struct ixgbe_hw *, struct sbuf *)
static uint64_t ixgbe_if_get_counter(if_ctx_t, ift_counter)
static int ixgbe_if_msix_intr_assign(if_ctx_t, int)
static int ixgbe_sysctl_flowcntl(SYSCTL_HANDLER_ARGS)
static u8 * ixgbe_mc_array_itr(struct ixgbe_hw *, u8 **, u32 *)
static int ixgbe_if_resume(if_ctx_t)
static pci_vendor_info_t ixgbe_vendor_info_array[]
static void * ixgbe_register(device_t)
static int ixgbe_if_tx_queues_alloc(if_ctx_t, caddr_t *, uint64_t *, int, int)
static int ixgbe_sysctl_advertise(SYSCTL_HANDLER_ARGS)
static int ixgbe_sysctl_print_fw_version(SYSCTL_HANDLER_ARGS)
static void ixgbe_get_slot_info(struct ixgbe_softc *)
static void ixgbe_enable_queue(struct ixgbe_softc *, u32)
static int ixgbe_sysctl_rdt_handler(SYSCTL_HANDLER_ARGS)
void ixgbe_if_enable_intr(if_ctx_t)
static int ixgbe_if_attach_post(if_ctx_t)
static void ixgbe_init_device_features(struct ixgbe_softc *)
static void ixgbe_disable_queue(struct ixgbe_softc *, u32)
static int ixgbe_if_promisc_set(if_ctx_t, int)
static int ixgbe_if_shutdown(if_ctx_t)
static int ixgbe_setup_low_power_mode(if_ctx_t)
static int ixgbe_sysctl_tdt_handler(SYSCTL_HANDLER_ARGS)
static void ixgbe_add_hw_stats(struct ixgbe_softc *)
static int ixgbe_flow_control
static int ixgbe_max_interrupt_rate
static void ixgbe_initialize_transmit_units(if_ctx_t)
static driver_t ix_driver
static bool ixgbe_sfp_probe(if_ctx_t)
static int ixgbe_allocate_pci_resources(if_ctx_t)
static int ixgbe_msix_link(void *)
static int ixgbe_sysctl_phy_temp(SYSCTL_HANDLER_ARGS)
static void ixgbe_perform_aim(struct ixgbe_softc *sc, struct ix_rx_queue *que)
static void ixgbe_link_intr_enable(if_ctx_t)
static void ixgbe_add_media_types(if_ctx_t)
static bool ixgbe_if_needs_restart(if_ctx_t, enum iflib_restart_event)
static bool ixgbe_is_sfp(struct ixgbe_hw *hw)
static int allow_unsupported_sfp
static void ixgbe_if_vlan_register(if_ctx_t, u16)
static void ixgbe_config_delay_values(struct ixgbe_softc *)
static int ixgbe_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS)
static struct if_shared_ctx ixgbe_sctx_init
static void ixgbe_setup_vlan_hw_support(if_ctx_t)
static int ixgbe_sysctl_wufc(SYSCTL_HANDLER_ARGS)
static int ixgbe_sysctl_eee_state(SYSCTL_HANDLER_ARGS)
static int ixgbe_if_detach(if_ctx_t)
static void ixgbe_add_device_sysctls(if_ctx_t)
static void ixgbe_config_gpie(struct ixgbe_softc *)
static void ixgbe_enable_rx_drop(struct ixgbe_softc *)
static int ixgbe_enable_msix
static int ixgbe_sysctl_phy_overtemp_occurred(SYSCTL_HANDLER_ARGS)
char ixgbe_driver_version[]
IFLIB_PNP_INFO(pci, ix_driver, ixgbe_vendor_info_array)
static void ixgbe_if_stop(if_ctx_t)
static int ixgbe_enable_fdir
static int ixgbe_if_rx_queues_alloc(if_ctx_t, caddr_t *, uint64_t *, int, int)
static device_method_t ixgbe_if_methods[]
static int ixgbe_set_advertise(struct ixgbe_softc *, int)
static int ixgbe_if_mtu_set(if_ctx_t, uint32_t)
static int ixgbe_get_default_advertise(struct ixgbe_softc *)
static int ixgbe_enable_rss
void ixgbe_if_init(if_ctx_t ctx)
static int ixgbe_if_rx_queue_intr_enable(if_ctx_t, uint16_t)
static void ixgbe_handle_phy(void *)
static int ixgbe_sysctl_wol_enable(SYSCTL_HANDLER_ARGS)
static void ixgbe_if_queues_free(if_ctx_t)
static int ixgbe_enable_aim
SYSCTL_INT(_hw_ix, OID_AUTO, max_interrupt_rate, CTLFLAG_RDTUN, &ixgbe_max_interrupt_rate, 0, "Maximum interrupts per second")
static u_int ixgbe_mc_filter_apply(void *arg, struct sockaddr_dl *sdl, u_int idx)
static void ixgbe_set_ivar(struct ixgbe_softc *, u8, u8, s8)
static void ixgbe_check_fan_failure(struct ixgbe_softc *, u32, bool)
static int ixgbe_if_media_change(if_ctx_t)
static int ixgbe_sysctl_tdh_handler(SYSCTL_HANDLER_ARGS)
static int ixgbe_if_suspend(if_ctx_t)
static int ixgbe_advertise_speed
static void ixgbe_configure_ivars(struct ixgbe_softc *)
static void ixgbe_if_timer(if_ctx_t, uint16_t)
static int ixgbe_msix_que(void *)
static void ixgbe_if_media_status(if_ctx_t, struct ifmediareq *)
static int ixgbe_sysctl_rdh_handler(SYSCTL_HANDLER_ARGS)
static void ixgbe_if_update_admin_status(if_ctx_t)
static int ixgbe_sysctl_dmac(SYSCTL_HANDLER_ARGS)
static int ixgbe_set_flowcntl(struct ixgbe_softc *, int)
static SYSCTL_NODE(_hw, OID_AUTO, ix, CTLFLAG_RD|CTLFLAG_MPSAFE, 0, "IXGBE driver parameters")
static void ixgbe_initialize_receive_units(if_ctx_t)
static int ixgbe_if_i2c_req(if_ctx_t, struct ifi2creq *)
static void ixgbe_initialize_rss_mapping(struct ixgbe_softc *)
struct if_txrx ixgbe_txrx
static void ixgbe_config_dmac(struct ixgbe_softc *)
static int ixgbe_if_attach_pre(if_ctx_t)
static void ixgbe_if_crcstrip_set(if_ctx_t, int, int)
static void ixgbe_config_link(if_ctx_t)
static void ixgbe_print_fw_version(if_ctx_t)
static void ixgbe_if_vlan_unregister(if_ctx_t, u16)
static void ixgbe_handle_mod(void *)
static void ixgbe_update_stats_counters(struct ixgbe_softc *)
static void ixgbe_check_wol_support(struct ixgbe_softc *)
static void ixgbe_free_pci_resources(if_ctx_t)
static int atr_sample_rate
void ixgbe_handle_mbx(void *context)
#define IXGBE_SET_COLLISIONS(sc, count)
#define IXGBE_SET_OBYTES(sc, count)
#define IXGBE_SET_IMCASTS(sc, count)
#define IXGBE_SET_IBYTES(sc, count)
#define IXGBE_SYSCTL_DESC_ADV_SPEED
#define IXGBE_SET_IQDROPS(sc, count)
#define IOCTL_DEBUGOUT(S)
#define IXGBE_SYSCTL_DESC_RX_ERRS
#define MAX_NUM_MULTICAST_ADDRESSES
#define IXGBE_82599_SCATTER
#define IXGBE_PHY_CURRENT_TEMP
#define IXGBE_SET_OMCASTS(sc, count)
#define IXGBE_SET_OPACKETS(sc, count)
#define IXGBE_SET_IERRORS(sc, count)
#define INIT_DEBUGOUT2(S, A, B)
#define IXGBE_SYSCTL_DESC_SET_FC
#define IXGBE_82598_SCATTER
#define IXGBE_SET_IPACKETS(sc, count)
#define IXGBE_PHY_OVERTEMP_STATUS
#define IXGBE_LOW_LATENCY
void ixgbe_stop_mac_link_on_d3_82599(struct ixgbe_hw *hw)
s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee)
s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, bool *link_up, bool link_up_wait_to_complete)
s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, u32 enable_addr)
s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
void ixgbe_init_swfw_semaphore(struct ixgbe_hw *hw)
u64 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
s32 ixgbe_start_hw(struct ixgbe_hw *hw)
s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
s32 ixgbe_init_hw(struct ixgbe_hw *hw)
s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, u32 mc_addr_count, ixgbe_mc_addr_itr func, bool clear)
void ixgbe_disable_rx(struct ixgbe_hw *hw)
s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on)
void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
void ixgbe_set_pci_config_data_generic(struct ixgbe_hw *hw, u16 link_status)
void ixgbe_get_orom_version(struct ixgbe_hw *hw, struct ixgbe_nvm_version *nvm_ver)
void ixgbe_get_etk_id(struct ixgbe_hw *hw, struct ixgbe_nvm_version *nvm_ver)
void ixgbe_get_oem_prod_version(struct ixgbe_hw *hw, struct ixgbe_nvm_version *nvm_ver)
#define ixgbe_init_fdir(_a)
#define IXGBE_FEATURE_MSI
#define IXGBE_FEATURE_TEMP_SENSOR
#define IXGBE_FEATURE_FAN_FAIL
#define IXGBE_FEATURE_EEE
#define IXGBE_FEATURE_SRIOV
#define IXGBE_FEATURE_NETMAP
#define IXGBE_FEATURE_MSIX
#define IXGBE_FEATURE_LEGACY_IRQ
#define IXGBE_FEATURE_RSS
#define IXGBE_FEATURE_FDIR
#define IXGBE_FEATURE_BYPASS
#define IXGBE_READ_REG(a, reg)
#define IXGBE_INTEL_VENDOR_ID
#define IXGBE_WRITE_FLUSH(a)
#define IXGBE_WRITE_REG(a, reg, val)
#define ixgbe_vf_que_index(_a, _b, _c)
#define ixgbe_get_mrqc(_a)
#define ixgbe_align_all_queue_indices(_a)
#define ixgbe_pci_iov_detach(_a)
#define ixgbe_ping_all_vfs(_a)
#define ixgbe_define_iov_schemas(_a, _b)
#define ixgbe_initialize_iov(_a)
#define ixgbe_get_mtqc(_a)
#define IXGBE_DEV_ID_X540T1
#define IXGBE_PHYSICAL_LAYER_10GBASE_SR
#define IXGBE_RXDCTL_ENABLE
#define IXGBE_EIMC_EX(_i)
#define IXGBE_ERR_EEPROM_VERSION
#define IXGBE_EICR_GPI_SDP1_BY_MAC(_hw)
#define IXGBE_DEVICE_CAPS_WOL_PORT0_1
#define IXGBE_EICS_RTX_QUEUE
#define IXGBE_DEV_ID_X550EM_A_SFP
#define IXGBE_DEV_ID_82598EB_CX4
#define IXGBE_PHYSICAL_LAYER_10GBASE_CX4
#define IXGBE_RXCTRL_RXEN
#define IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU
#define IXGBE_MRQC_RSS_FIELD_IPV6_UDP
#define IXGBE_EITR_CNT_WDIS
#define IXGBE_ETH_LENGTH_OF_ADDRESS
#define IXGBE_HLREG0_RXCRCSTRP
#define IXGBE_DEV_ID_82599_XAUI_LOM
#define IXGBE_PHYSICAL_LAYER_10GBASE_T
#define IXGBE_DEV_ID_X550EM_A_KR
#define IXGBE_DEV_ID_X550EM_A_SGMII
#define IXGBE_PHYSICAL_LAYER_100BASE_TX
#define IXGBE_RXCSUM_PCSD
#define IXGBE_PHYSICAL_LAYER_1000BASE_KX
#define IXGBE_DEV_ID_82598_CX4_DUAL_PORT
#define IXGBE_DEV_ID_82599_BYPASS
#define IXGBE_EICR_MAILBOX
#define IXGBE_DEV_ID_82598EB_SFP_LOM
#define IXGBE_DEV_ID_82599_T3_LOM
#define IXGBE_DEV_ID_X550EM_A_1G_T_L
#define IXGBE_MHADD_MFS_SHIFT
#define IXGBE_REQUEST_TASK_MOD
#define IXGBE_MRQC_RSS_FIELD_IPV4_TCP
#define IXGBE_REQUEST_TASK_MSF
#define IXGBE_PHYSICAL_LAYER_10BASE_T
#define IXGBE_DEV_ID_X550EM_X_10G_T
#define IXGBE_EICR_GPI_SDP1
#define IXGBE_PHYSICAL_LAYER_1000BASE_SX
#define IXGBE_EICR_GPI_SDP0_X550EM_a
#define IXGBE_LINK_SPEED_5GB_FULL
#define IXGBE_LOW_DV_X540(_max_frame_tc)
#define IXGBE_DEV_ID_82598AF_DUAL_PORT
#define IXGBE_CTRL_EXT_PFRSTD
#define IXGBE_EIMS_GPI_SDP0
#define IXGBE_EICR_GPI_SDP2_BY_MAC(_hw)
#define IXGBE_PHYSICAL_LAYER_10GBASE_KR
#define IXGBE_IVAR_ALLOC_VAL
#define IXGBE_DEV_ID_X540T
#define IXGBE_DCA_TXCTRL(_i)
#define IXGBE_DEV_ID_82599_SFP_SF2
#define IXGBE_RXPBSIZE(_i)
#define IXGBE_DV(_max_frame_link, _max_frame_tc)
#define IXGBE_DEV_ID_X540_BYPASS
#define IXGBE_MRQC_RSS_FIELD_IPV6_EX_TCP
#define IXGBE_DEV_ID_X550EM_A_1G_T
#define IXGBE_DEV_ID_82599_SFP_FCOE
#define IXGBE_PSRTYPE_UDPHDR
#define IXGBE_MRQC_RSS_FIELD_IPV4
#define IXGBE_SRRCTL_DROP_EN
#define IXGBE_EIMS_MAILBOX
#define IXGBE_REQUEST_TASK_MBX
#define IXGBE_DEV_ID_82598AT2
#define IXGBE_NOT_IMPLEMENTED
#define IXGBE_DEV_ID_X550EM_A_SFP_N
#define IXGBE_DEV_ID_X550EM_X_SFP
#define IXGBE_PSRTYPE(_i)
#define IXGBE_HLREG0_JUMBOEN
#define IXGBE_DEV_ID_82599_KX4_MEZZ
#define IXGBE_EIAM_EX(_i)
@ ixgbe_media_type_copper
@ ixgbe_media_type_fiber_qsfp
@ ixgbe_media_type_backplane
#define IXGBE_RDRXCTL_CRCSTRIP
#define IXGBE_DMATXCTL_TE
#define IXGBE_RTTDCS_ARBDIS
@ ixgbe_sfp_type_not_present
#define IXGBE_PHYSICAL_LAYER_10GBASE_LRM
#define IXGBE_GPIE_MSIX_MODE
#define IXGBE_REQUEST_TASK_LSC
#define IXGBE_RXCTRL_DMBYPS
#define IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF
#define IXGBE_DEV_ID_82598_DA_DUAL_PORT
#define IXGBE_PHYSICAL_LAYER_2500BASE_KX
#define IXGBE_VLNCTRL_VFE
#define IXGBE_DEV_ID_X550EM_A_SGMII_L
#define IXGBE_REQUEST_TASK_FDIR
#define IXGBE_LINK_SPEED_10_FULL
#define IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE
#define IXGBE_ERR_OVERTEMP
#define IXGBE_DEV_ID_X550T
#define IXGBE_TXDCTL_ENABLE
#define IXGBE_DEV_ID_82598EB_XF_LR
#define IXGBE_DEV_ID_X550T1
#define IXGBE_DEVICE_CAPS_WOL_PORT0
#define IXGBE_PSRTYPE_IPV4HDR
#define IXGBE_DEV_ID_82599_BACKPLANE_FCOE
#define IXGBE_EICR_FLOW_DIR
#define IXGBE_DEV_ID_X550EM_X_KR
#define IXGBE_QDE_IDX_SHIFT
#define IXGBE_PHYSICAL_LAYER_1000BASE_BX
#define IXGBE_VLNCTRL_VME
#define IXGBE_MRQC_RSS_FIELD_IPV4_UDP
#define IXGBE_DEV_ID_X550EM_X_KX4
#define IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA
#define IXGBE_CTRL_EXT_DRV_LOAD
#define IXGBE_LINK_SPEED_100_FULL
#define IXGBE_LOW_DV(_max_frame_tc)
#define IXGBE_EIMS_GPI_SDP2
#define IXGBE_REQUEST_TASK_PHY
#define IXGBE_MRQC_RSS_FIELD_IPV6_TCP
#define IXGBE_DCA_TXCTRL_82599(_i)
#define IXGBE_LINK_SPEED_1GB_FULL
#define IXGBE_EIMS_EX(_i)
#define IXGBE_PSRTYPE_TCPHDR
#define IXGBE_EICR_GPI_SDP0_X540
#define IXGBE_PHYSICAL_LAYER_10GBASE_KX4
#define IXGBE_DEV_ID_82598AF_SINGLE_PORT
#define IXGBE_EIMS_GPI_SDP1
#define IXGBE_EIMS_RTX_QUEUE
#define IXGBE_SRRCTL_BSIZEPKT_SHIFT
#define IXGBE_DEV_ID_X550EM_A_KR_L
#define IXGBE_LINK_SPEED_2_5GB_FULL
#define IXGBE_LINK_SPEED_10GB_FULL
#define IXGBE_MRQC_RSS_FIELD_IPV6_EX
#define IXGBE_DEV_ID_82599_SFP_SF_QP
#define IXGBE_DEV_ID_82599EN_SFP
#define IXGBE_EIMS_ENABLE_MASK
#define IXGBE_DEV_ID_82599_CX4
#define IXGBE_DEV_ID_82598AT
#define IXGBE_DEV_ID_82599_QSFP_SF_QP
#define IXGBE_DEV_ID_X550EM_A_10G_T
#define IXGBE_DEV_ID_82599_SFP
#define IXGBE_FWSM_TS_ENABLED
#define IXGBE_SDP0_GPIEN_X540
#define IXGBE_DEV_ID_82599_KX4
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE
#define IXGBE_EIMS_FLOW_DIR
#define IXGBE_DEV_ID_X550EM_X_1G_T
#define IXGBE_RXCSUM_IPPCSE
#define IXGBE_IVAR_OTHER_CAUSES_INDEX
#define IXGBE_DV_X540(_max_frame_link, _max_frame_tc)
#define IXGBE_PHYSICAL_LAYER_10GBASE_LR
@ ixgbe_bus_width_pcie_x1
@ ixgbe_bus_width_pcie_x8
@ ixgbe_bus_width_pcie_x4
#define IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM
#define IXGBE_ERR_SFP_NOT_PRESENT
#define IXGBE_PHYSICAL_LAYER_1000BASE_T
#define IXGBE_GPIE_PBA_SUPPORT
#define IXGBE_PSRTYPE_IPV6HDR
#define IXGBE_EIMS_GPI_SDP0_BY_MAC(_hw)
#define IXGBE_DEV_ID_82598
#define IXGBE_MRQC_RSS_FIELD_IPV6
#define IXGBE_RDRXCTL_RSCACKC
#define IXGBE_ERR_SFP_NOT_SUPPORTED
#define IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP
enum ixgbe_bus_width width
enum ixgbe_bus_speed speed
enum ixgbe_fc_mode current_mode
u32 low_water[IXGBE_DCB_MAX_TRAFFIC_CLASS]
u32 high_water[IXGBE_DCB_MAX_TRAFFIC_CLASS]
enum ixgbe_fc_mode requested_mode
struct ixgbe_mac_info mac
struct ixgbe_addr_filter_info addr_ctrl
struct ixgbe_link_info link
struct ixgbe_bus_info bus
struct ixgbe_mbx_info mbx
bool allow_unsupported_sfp
struct ixgbe_phy_info phy
struct ixgbe_dmac_config dmac_config
u8 addr[IXGBE_ETH_LENGTH_OF_ADDRESS]
struct ixgbe_mac_operations ops
s32(* setup_link)(struct ixgbe_hw *, ixgbe_link_speed, bool)
s32(* check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *, bool)
s32(* setup_sfp)(struct ixgbe_hw *)
s32(* dmac_config)(struct ixgbe_hw *hw)
s32(* get_link_capabilities)(struct ixgbe_hw *, ixgbe_link_speed *, bool *)
enum ixgbe_media_type(* get_media_type)(struct ixgbe_hw *)
struct ixgbe_mbx_operations ops
void(* init_params)(struct ixgbe_hw *hw)
u8 addr[IXGBE_ETH_LENGTH_OF_ADDRESS]
bus_space_tag_t mem_bus_space_tag
bus_space_handle_t mem_bus_space_handle
enum ixgbe_media_type media_type
ixgbe_autoneg_advertised autoneg_advertised
struct ixgbe_phy_operations ops
enum ixgbe_sfp_type sfp_type
enum ixgbe_smart_speed smart_speed
s32(* read_i2c_byte)(struct ixgbe_hw *, u8, u8, u8 *)
s32(* check_overtemp)(struct ixgbe_hw *)
s32(* handle_lasi)(struct ixgbe_hw *hw)
s32(* reset)(struct ixgbe_hw *)
s32(* identify)(struct ixgbe_hw *)
s32(* read_reg)(struct ixgbe_hw *, u32, u32, u16 *)
s32(* enter_lplu)(struct ixgbe_hw *)
s32(* identify_sfp)(struct ixgbe_hw *)
unsigned long dropped_pkts
union ixgbe_softc::@0 stats
struct resource * pci_mem
struct ix_tx_queue * tx_queues
struct ix_rx_queue * rx_queues
u32 shadow_vfta[IXGBE_VFTA_SIZE]
unsigned long watchdog_events
struct ixgbe_mc_addr * mta
union ixgbe_adv_rx_desc * rx_base
union ixgbe_adv_tx_desc * tx_base