Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/liquidio/lio_sysctl.c
Show All 12 Lines | |||||
callout_reset(&lio->stats_timer, lio_ms_to_ticks(lio->stats_interval), | callout_reset(&lio->stats_timer, lio_ms_to_ticks(lio->stats_interval), | ||||
lio_get_fw_stats, lio); | lio_get_fw_stats, lio); | ||||
SYSCTL_ADD_STRING(ctx, child, OID_AUTO, "fwversion", CTLFLAG_RD, | SYSCTL_ADD_STRING(ctx, child, OID_AUTO, "fwversion", CTLFLAG_RD, | ||||
oct_dev->fw_info.lio_firmware_version, 0, | oct_dev->fw_info.lio_firmware_version, 0, | ||||
"Firmware version"); | "Firmware version"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "stats_interval", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "stats_interval", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, 0, | ||||
lio_set_stats_interval, "I", | lio_set_stats_interval, "I", | ||||
"Set Stats Updation Timer in milli seconds"); | "Set Stats Updation Timer in milli seconds"); | ||||
SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "link_state_changes", | SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "link_state_changes", | ||||
CTLFLAG_RD, &lio->link_changes, "Link Change Counter"); | CTLFLAG_RD, &lio->link_changes, "Link Change Counter"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "eeprom-dump", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "eeprom-dump", | ||||
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, lio, 0, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, lio, 0, | ||||
lio_get_eeprom, "A", "EEPROM information"); | lio_get_eeprom, "A", "EEPROM information"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "fc", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "fc", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, 0, | ||||
lio_get_set_pauseparam, "I", | lio_get_set_pauseparam, "I", | ||||
"Get and set pause parameters.\n" \ | "Get and set pause parameters.\n" \ | ||||
"0 - off\n" \ | "0 - off\n" \ | ||||
"1 - rx pause\n" \ | "1 - rx pause\n" \ | ||||
"2 - tx pause \n" \ | "2 - tx pause \n" \ | ||||
"3 - rx and tx pause"); | "3 - rx and tx pause"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "register-dump", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "register-dump", | ||||
CTLTYPE_STRING | CTLFLAG_RD, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, lio, 0, | ||||
lio, 0, lio_get_regs, "A", | lio_get_regs, "A", "Dump registers in raw format"); | ||||
"Dump registers in raw format"); | |||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "fwmsglevel", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "fwmsglevel", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, 0, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, 0, | ||||
lio_get_set_fwmsglevel, | lio_get_set_fwmsglevel, "I", "Get or set firmware message level"); | ||||
"I", "Get or set firmware message level"); | |||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rxq_descriptors", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rxq_descriptors", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, LIO_SET_RING_RX, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, LIO_SET_RING_RX, | ||||
lio_set_ringparam, "I", "Set RX ring parameter"); | lio_set_ringparam, "I", "Set RX ring parameter"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "txq_descriptors", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "txq_descriptors", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, LIO_SET_RING_TX, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, LIO_SET_RING_TX, | ||||
lio_set_ringparam, "I", "Set TX ring parameter"); | lio_set_ringparam, "I", "Set TX ring parameter"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_rxq_descriptors", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_rxq_descriptors", | ||||
CTLTYPE_INT | CTLFLAG_RD, lio, LIO_SET_RING_RX, | CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, lio, LIO_SET_RING_RX, | ||||
lio_get_ringparam, "I", "Max RX descriptors"); | lio_get_ringparam, "I", "Max RX descriptors"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_txq_descriptors", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_txq_descriptors", | ||||
CTLTYPE_INT | CTLFLAG_RD, lio, LIO_SET_RING_TX, | CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, lio, LIO_SET_RING_TX, | ||||
lio_get_ringparam, "I", "Max TX descriptors"); | lio_get_ringparam, "I", "Max TX descriptors"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "active_queues", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "active_queues", | ||||
CTLTYPE_INT | CTLFLAG_RW, lio, 0, lio_set_channels, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, lio, 0, | ||||
"I", "Set channels information"); | lio_set_channels, "I", "Set channels information"); | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_queues", | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "max_queues", | ||||
CTLTYPE_INT | CTLFLAG_RD, lio, 0, lio_get_channels, | CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, lio, 0, | ||||
"I", "Get channels information"); | lio_get_channels, "I", "Get channels information"); | ||||
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "tx_budget", | SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "tx_budget", | ||||
CTLFLAG_RW, &oct_dev->tx_budget, | CTLFLAG_RW, &oct_dev->tx_budget, | ||||
0, "TX process pkt budget"); | 0, "TX process pkt budget"); | ||||
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "rx_budget", | SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "rx_budget", | ||||
CTLFLAG_RW, &oct_dev->rx_budget, | CTLFLAG_RW, &oct_dev->rx_budget, | ||||
0, "RX process pkt budget"); | 0, "RX process pkt budget"); | ||||
/* IRQ Coalescing Parameters */ | /* IRQ Coalescing Parameters */ | ||||
root_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "coalesce", | root_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "coalesce", | ||||
CTLFLAG_RD, NULL, "Get and Set Coalesce"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Get and Set Coalesce"); | ||||
root_list = SYSCTL_CHILDREN(root_node); | root_list = SYSCTL_CHILDREN(root_node); | ||||
if (lio_get_intrmod_cfg(lio, &lio->intrmod_cfg)) | if (lio_get_intrmod_cfg(lio, &lio->intrmod_cfg)) | ||||
lio_dev_info(oct_dev, "Coalescing driver update failed!\n"); | lio_dev_info(oct_dev, "Coalescing driver update failed!\n"); | ||||
SYSCTL_ADD_PROC(ctx, root_list, OID_AUTO, "sample-interval", | SYSCTL_ADD_PROC(ctx, root_list, OID_AUTO, "sample-interval", | ||||
CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, lio, | CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, lio, | ||||
Show All 24 Lines | |||||
LIO_USE_ADAPTIVE_TX_COALESCE, lio_get_set_intr_coalesce, | LIO_USE_ADAPTIVE_TX_COALESCE, lio_get_set_intr_coalesce, | ||||
"QU", NULL); | "QU", NULL); | ||||
SYSCTL_ADD_PROC(ctx, root_list, OID_AUTO, "adaptive-rx", | SYSCTL_ADD_PROC(ctx, root_list, OID_AUTO, "adaptive-rx", | ||||
CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, lio, | CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, lio, | ||||
LIO_USE_ADAPTIVE_RX_COALESCE, lio_get_set_intr_coalesce, | LIO_USE_ADAPTIVE_RX_COALESCE, lio_get_set_intr_coalesce, | ||||
"QU", NULL); | "QU", NULL); | ||||
/* Root Node of all the Stats */ | /* Root Node of all the Stats */ | ||||
root_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, | root_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", | ||||
NULL, "Root Node of all the Stats"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Root Node of all the Stats"); | ||||
root_list = SYSCTL_CHILDREN(root_node); | root_list = SYSCTL_CHILDREN(root_node); | ||||
/* Firmware Tx Stats */ | /* Firmware Tx Stats */ | ||||
stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "fwtx",CTLFLAG_RD, | stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "fwtx", | ||||
NULL, "Firmware Tx Statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Firmware Tx Statistics"); | ||||
stat_list = SYSCTL_CHILDREN(stat_node); | stat_list = SYSCTL_CHILDREN(stat_node); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_total_sent", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_total_sent", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromhost.fw_total_sent, | &oct_dev->link_stats.fromhost.fw_total_sent, | ||||
"Firmware Total Packets Sent"); | "Firmware Total Packets Sent"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_total_fwd", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_total_fwd", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromhost.fw_total_fwd, | &oct_dev->link_stats.fromhost.fw_total_fwd, | ||||
"Firmware Total Packets Forwarded"); | "Firmware Total Packets Forwarded"); | ||||
Show All 23 Lines | |||||
//&oct_dev->link_stats.fromhost.fw_tso_err, | //&oct_dev->link_stats.fromhost.fw_tso_err, | ||||
//"Firmware Tx TSO Errors"); | //"Firmware Tx TSO Errors"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_vxlan", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_vxlan", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromhost.fw_tx_vxlan, | &oct_dev->link_stats.fromhost.fw_tx_vxlan, | ||||
"Firmware Tx VXLAN"); | "Firmware Tx VXLAN"); | ||||
/* MAC Tx Stats */ | /* MAC Tx Stats */ | ||||
stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "mactx", | stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "mactx", | ||||
CTLFLAG_RD, NULL, "MAC Tx Statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "MAC Tx Statistics"); | ||||
stat_list = SYSCTL_CHILDREN(stat_node); | stat_list = SYSCTL_CHILDREN(stat_node); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_total_pkts", | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_total_pkts", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromhost.total_pkts_sent, | &oct_dev->link_stats.fromhost.total_pkts_sent, | ||||
"Link-Level Total Packets Sent"); | "Link-Level Total Packets Sent"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_total_bytes", | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_total_bytes", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
Show All 24 Lines | |||||
&oct_dev->link_stats.fromhost.fifo_err, | &oct_dev->link_stats.fromhost.fifo_err, | ||||
"Link-Level Tx FIFO Errors"); | "Link-Level Tx FIFO Errors"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_runts", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_tx_runts", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromhost.runts, | &oct_dev->link_stats.fromhost.runts, | ||||
"Link-Level Tx Runts"); | "Link-Level Tx Runts"); | ||||
/* Firmware Rx Stats */ | /* Firmware Rx Stats */ | ||||
stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "fwrx", | stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "fwrx", | ||||
CTLFLAG_RD, NULL, "Firmware Rx Statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Firmware Rx Statistics"); | ||||
stat_list = SYSCTL_CHILDREN(stat_node); | stat_list = SYSCTL_CHILDREN(stat_node); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_total_rcvd", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_total_rcvd", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromwire.fw_total_rcvd, | &oct_dev->link_stats.fromwire.fw_total_rcvd, | ||||
"Firmware Total Packets Received"); | "Firmware Total Packets Received"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_total_fwd", CTLFLAG_RD, | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_total_fwd", CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromwire.fw_total_fwd, | &oct_dev->link_stats.fromwire.fw_total_fwd, | ||||
"Firmware Total Packets Forwarded"); | "Firmware Total Packets Forwarded"); | ||||
Show All 24 Lines | |||||
&oct_dev->link_stats.fromwire.fw_lro_aborts_timer, | &oct_dev->link_stats.fromwire.fw_lro_aborts_timer, | ||||
"Firmware Rx LRO Aborts Timer"); | "Firmware Rx LRO Aborts Timer"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_fwd_rate", | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_fwd_rate", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromwire.fwd_rate, | &oct_dev->link_stats.fromwire.fwd_rate, | ||||
"Firmware Rx Packets Forward Rate"); | "Firmware Rx Packets Forward Rate"); | ||||
/* MAC Rx Stats */ | /* MAC Rx Stats */ | ||||
stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "macrx", | stat_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, "macrx", | ||||
CTLFLAG_RD, NULL, "MAC Rx Statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "MAC Rx Statistics"); | ||||
stat_list = SYSCTL_CHILDREN(stat_node); | stat_list = SYSCTL_CHILDREN(stat_node); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_rx_total_rcvd", | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_rx_total_rcvd", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
&oct_dev->link_stats.fromwire.total_rcvd, | &oct_dev->link_stats.fromwire.total_rcvd, | ||||
"Link-Level Total Packets Received"); | "Link-Level Total Packets Received"); | ||||
SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_rx_bytes", | SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mac_rx_bytes", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
Show All 24 Lines | |||||
/* TX */ | /* TX */ | ||||
for (int i = 0; i < oct_dev->num_iqs; i++) { | for (int i = 0; i < oct_dev->num_iqs; i++) { | ||||
if (!(oct_dev->io_qmask.iq & BIT_ULL(i))) | if (!(oct_dev->io_qmask.iq & BIT_ULL(i))) | ||||
continue; | continue; | ||||
snprintf(namebuf, QUEUE_NAME_LEN, "tx-%d", i); | snprintf(namebuf, QUEUE_NAME_LEN, "tx-%d", i); | ||||
queue_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, namebuf, | queue_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, namebuf, | ||||
CTLFLAG_RD, NULL, "Input Queue Name"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Input Queue Name"); | ||||
queue_list = SYSCTL_CHILDREN(queue_node); | queue_list = SYSCTL_CHILDREN(queue_node); | ||||
/* packets to network port */ | /* packets to network port */ | ||||
/* # of packets tx to network */ | /* # of packets tx to network */ | ||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "packets", | SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "packets", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
&oct_dev->instr_queue[i]->stats.tx_done, | &oct_dev->instr_queue[i]->stats.tx_done, | ||||
"Number of Packets Tx to Network"); | "Number of Packets Tx to Network"); | ||||
Show All 24 Lines | |||||
/* RX */ | /* RX */ | ||||
for (int i = 0; i < oct_dev->num_oqs; i++) { | for (int i = 0; i < oct_dev->num_oqs; i++) { | ||||
if (!(oct_dev->io_qmask.oq & BIT_ULL(i))) | if (!(oct_dev->io_qmask.oq & BIT_ULL(i))) | ||||
continue; | continue; | ||||
snprintf(namebuf, QUEUE_NAME_LEN, "rx-%d", i); | snprintf(namebuf, QUEUE_NAME_LEN, "rx-%d", i); | ||||
queue_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, namebuf, | queue_node = SYSCTL_ADD_NODE(ctx, root_list, OID_AUTO, namebuf, | ||||
CTLFLAG_RD, NULL, | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Output Queue Name"); | ||||
"Output Queue Name"); | |||||
queue_list = SYSCTL_CHILDREN(queue_node); | queue_list = SYSCTL_CHILDREN(queue_node); | ||||
/* packets send to TCP/IP network stack */ | /* packets send to TCP/IP network stack */ | ||||
/* # of packets to network stack */ | /* # of packets to network stack */ | ||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "packets", | SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "packets", | ||||
CTLFLAG_RD, | CTLFLAG_RD, | ||||
&oct_dev->droq[i]->stats.rx_pkts_received, | &oct_dev->droq[i]->stats.rx_pkts_received, | ||||
"Number of Packets to Network Stack"); | "Number of Packets to Network Stack"); | ||||
Show All 12 Lines |