Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/bnxt/bnxt_sysctl.c
Show All 12 Lines | |||||
bnxt_init_sysctl_ctx(struct bnxt_softc *softc) | bnxt_init_sysctl_ctx(struct bnxt_softc *softc) | ||||
{ | { | ||||
struct sysctl_ctx_list *ctx; | struct sysctl_ctx_list *ctx; | ||||
sysctl_ctx_init(&softc->hw_stats); | sysctl_ctx_init(&softc->hw_stats); | ||||
ctx = device_get_sysctl_ctx(softc->dev); | ctx = device_get_sysctl_ctx(softc->dev); | ||||
softc->hw_stats_oid = SYSCTL_ADD_NODE(ctx, | softc->hw_stats_oid = SYSCTL_ADD_NODE(ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | ||||
"hwstats", CTLFLAG_RD, 0, "hardware statistics"); | "hwstats", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "hardware statistics"); | ||||
if (!softc->hw_stats_oid) { | if (!softc->hw_stats_oid) { | ||||
sysctl_ctx_free(&softc->hw_stats); | sysctl_ctx_free(&softc->hw_stats); | ||||
return ENOMEM; | return ENOMEM; | ||||
} | } | ||||
sysctl_ctx_init(&softc->ver_info->ver_ctx); | sysctl_ctx_init(&softc->ver_info->ver_ctx); | ||||
ctx = device_get_sysctl_ctx(softc->dev); | ctx = device_get_sysctl_ctx(softc->dev); | ||||
softc->ver_info->ver_oid = SYSCTL_ADD_NODE(ctx, | softc->ver_info->ver_oid = SYSCTL_ADD_NODE(ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | ||||
"ver", CTLFLAG_RD, 0, "hardware/firmware version information"); | "ver", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
"hardware/firmware version information"); | |||||
if (!softc->ver_info->ver_oid) { | if (!softc->ver_info->ver_oid) { | ||||
sysctl_ctx_free(&softc->ver_info->ver_ctx); | sysctl_ctx_free(&softc->ver_info->ver_ctx); | ||||
return ENOMEM; | return ENOMEM; | ||||
} | } | ||||
if (BNXT_PF(softc)) { | if (BNXT_PF(softc)) { | ||||
sysctl_ctx_init(&softc->nvm_info->nvm_ctx); | sysctl_ctx_init(&softc->nvm_info->nvm_ctx); | ||||
ctx = device_get_sysctl_ctx(softc->dev); | ctx = device_get_sysctl_ctx(softc->dev); | ||||
softc->nvm_info->nvm_oid = SYSCTL_ADD_NODE(ctx, | softc->nvm_info->nvm_oid = SYSCTL_ADD_NODE(ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | ||||
"nvram", CTLFLAG_RD, 0, "nvram information"); | "nvram", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
"nvram information"); | |||||
if (!softc->nvm_info->nvm_oid) { | if (!softc->nvm_info->nvm_oid) { | ||||
sysctl_ctx_free(&softc->nvm_info->nvm_ctx); | sysctl_ctx_free(&softc->nvm_info->nvm_ctx); | ||||
return ENOMEM; | return ENOMEM; | ||||
} | } | ||||
} | } | ||||
sysctl_ctx_init(&softc->hw_lro_ctx); | sysctl_ctx_init(&softc->hw_lro_ctx); | ||||
ctx = device_get_sysctl_ctx(softc->dev); | ctx = device_get_sysctl_ctx(softc->dev); | ||||
softc->hw_lro_oid = SYSCTL_ADD_NODE(ctx, | softc->hw_lro_oid = SYSCTL_ADD_NODE(ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | ||||
"hw_lro", CTLFLAG_RD, 0, "hardware lro"); | "hw_lro", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "hardware lro"); | ||||
if (!softc->hw_lro_oid) { | if (!softc->hw_lro_oid) { | ||||
sysctl_ctx_free(&softc->hw_lro_ctx); | sysctl_ctx_free(&softc->hw_lro_ctx); | ||||
return ENOMEM; | return ENOMEM; | ||||
} | } | ||||
sysctl_ctx_init(&softc->flow_ctrl_ctx); | sysctl_ctx_init(&softc->flow_ctrl_ctx); | ||||
ctx = device_get_sysctl_ctx(softc->dev); | ctx = device_get_sysctl_ctx(softc->dev); | ||||
softc->flow_ctrl_oid = SYSCTL_ADD_NODE(ctx, | softc->flow_ctrl_oid = SYSCTL_ADD_NODE(ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO, | ||||
"fc", CTLFLAG_RD, 0, "flow ctrl"); | "fc", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "flow ctrl"); | ||||
if (!softc->flow_ctrl_oid) { | if (!softc->flow_ctrl_oid) { | ||||
sysctl_ctx_free(&softc->flow_ctrl_ctx); | sysctl_ctx_free(&softc->flow_ctrl_ctx); | ||||
return ENOMEM; | return ENOMEM; | ||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
Show All 24 Lines | |||||
struct sysctl_oid *oid; | struct sysctl_oid *oid; | ||||
struct ctx_hw_stats *tx_stats = (void *)softc->tx_stats.idi_vaddr; | struct ctx_hw_stats *tx_stats = (void *)softc->tx_stats.idi_vaddr; | ||||
char name[32]; | char name[32]; | ||||
char desc[64]; | char desc[64]; | ||||
sprintf(name, "txq%d", txr); | sprintf(name, "txq%d", txr); | ||||
sprintf(desc, "transmit queue %d", txr); | sprintf(desc, "transmit queue %d", txr); | ||||
oid = SYSCTL_ADD_NODE(&softc->hw_stats, | oid = SYSCTL_ADD_NODE(&softc->hw_stats, | ||||
SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0, | SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, | ||||
desc); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, desc); | ||||
if (!oid) | if (!oid) | ||||
return ENOMEM; | return ENOMEM; | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"ucast_pkts", CTLFLAG_RD, &tx_stats[txr].tx_ucast_pkts, | "ucast_pkts", CTLFLAG_RD, &tx_stats[txr].tx_ucast_pkts, | ||||
"unicast packets sent"); | "unicast packets sent"); | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
Show All 24 Lines | |||||
{ | { | ||||
struct sysctl_oid *oid; | struct sysctl_oid *oid; | ||||
char name[32]; | char name[32]; | ||||
char desc[64]; | char desc[64]; | ||||
sprintf(name, "port_stats"); | sprintf(name, "port_stats"); | ||||
sprintf(desc, "Port Stats"); | sprintf(desc, "Port Stats"); | ||||
oid = SYSCTL_ADD_NODE(&softc->hw_stats, | oid = SYSCTL_ADD_NODE(&softc->hw_stats, | ||||
SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0, | SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, | ||||
desc); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, desc); | ||||
if (!oid) | if (!oid) | ||||
return ENOMEM; | return ENOMEM; | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"tx_64b_frames", CTLFLAG_RD, | "tx_64b_frames", CTLFLAG_RD, | ||||
&softc->tx_port_stats->tx_64b_frames, "Transmitted 64b frames"); | &softc->tx_port_stats->tx_64b_frames, "Transmitted 64b frames"); | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"tx_65b_127b_frames", CTLFLAG_RD, | "tx_65b_127b_frames", CTLFLAG_RD, | ||||
Show All 24 Lines | |||||
struct sysctl_oid *oid; | struct sysctl_oid *oid; | ||||
struct ctx_hw_stats *rx_stats = (void *)softc->rx_stats.idi_vaddr; | struct ctx_hw_stats *rx_stats = (void *)softc->rx_stats.idi_vaddr; | ||||
char name[32]; | char name[32]; | ||||
char desc[64]; | char desc[64]; | ||||
sprintf(name, "rxq%d", rxr); | sprintf(name, "rxq%d", rxr); | ||||
sprintf(desc, "receive queue %d", rxr); | sprintf(desc, "receive queue %d", rxr); | ||||
oid = SYSCTL_ADD_NODE(&softc->hw_stats, | oid = SYSCTL_ADD_NODE(&softc->hw_stats, | ||||
SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0, | SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, | ||||
desc); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, desc); | ||||
if (!oid) | if (!oid) | ||||
return ENOMEM; | return ENOMEM; | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"ucast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_ucast_pkts, | "ucast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_ucast_pkts, | ||||
"unicast packets received"); | "unicast packets received"); | ||||
SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"mcast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_mcast_pkts, | "mcast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_mcast_pkts, | ||||
Show All 24 Lines | |||||
SYSCTL_ADD_U8(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_U8(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"chip_bond_id", CTLFLAG_RD, &vi->chip_bond_id, 0, | "chip_bond_id", CTLFLAG_RD, &vi->chip_bond_id, 0, | ||||
"chip bond id"); | "chip bond id"); | ||||
SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"chip_type", CTLFLAG_RD, vi->chip_type > MAX_CHIP_TYPE ? | "chip_type", CTLFLAG_RD, vi->chip_type > MAX_CHIP_TYPE ? | ||||
bnxt_chip_type[MAX_CHIP_TYPE] : bnxt_chip_type[vi->chip_type], 0, | bnxt_chip_type[MAX_CHIP_TYPE] : bnxt_chip_type[vi->chip_type], 0, | ||||
"RoCE firmware name"); | "RoCE firmware name"); | ||||
SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"package_ver", CTLTYPE_STRING|CTLFLAG_RD, softc, 0, | "package_ver", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
bnxt_package_ver_sysctl, "A", | softc, 0, bnxt_package_ver_sysctl, "A", | ||||
"currently installed package version"); | "currently installed package version"); | ||||
SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"hwrm_min_ver", CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0, | "hwrm_min_ver", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
bnxt_hwrm_min_ver_sysctl, "A", | softc, 0, bnxt_hwrm_min_ver_sysctl, "A", | ||||
"minimum hwrm API vesion to support"); | "minimum hwrm API vesion to support"); | ||||
return 0; | return 0; | ||||
} | } | ||||
int | int | ||||
bnxt_create_nvram_sysctls(struct bnxt_nvram_info *ni) | bnxt_create_nvram_sysctls(struct bnxt_nvram_info *ni) | ||||
{ | { | ||||
Show All 24 Lines | |||||
bnxt_create_config_sysctls_pre(struct bnxt_softc *softc) | bnxt_create_config_sysctls_pre(struct bnxt_softc *softc) | ||||
{ | { | ||||
struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev); | struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev); | ||||
struct sysctl_oid_list *children; | struct sysctl_oid_list *children; | ||||
children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));; | children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));; | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_key", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_key", | ||||
CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0, bnxt_rss_key_sysctl, "A", | CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"RSS key"); | bnxt_rss_key_sysctl, "A", "RSS key"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_type", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_type", | ||||
CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0, bnxt_rss_type_sysctl, "A", | CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"RSS type bits"); | bnxt_rss_type_sysctl, "A", "RSS type bits"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rx_stall", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rx_stall", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_rx_stall_sysctl, "I", | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
bnxt_rx_stall_sysctl, "I", | |||||
"buffer rx packets in hardware until the host posts new buffers"); | "buffer rx packets in hardware until the host posts new buffers"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_strip", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_strip", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_vlan_strip_sysctl, "I", | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"strip VLAN tag in the RX path"); | bnxt_vlan_strip_sysctl, "I", "strip VLAN tag in the RX path"); | ||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "if_name", CTLFLAG_RD, | SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "if_name", CTLFLAG_RD, | ||||
iflib_get_ifp(softc->ctx)->if_xname, 0, "interface name"); | iflib_get_ifp(softc->ctx)->if_xname, 0, "interface name"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_usecs, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Rx Usecs"); | bnxt_set_coal_rx_usecs, "I", "interrupt coalescing Rx Usecs"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_frames, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Rx Frames"); | bnxt_set_coal_rx_frames, "I", "interrupt coalescing Rx Frames"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs_irq", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs_irq", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_usecs_irq, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Rx Usecs IRQ"); | bnxt_set_coal_rx_usecs_irq, "I", | ||||
"interrupt coalescing Rx Usecs IRQ"); | |||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames_irq", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames_irq", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_frames_irq, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Rx Frames IRQ"); | bnxt_set_coal_rx_frames_irq, "I", | ||||
"interrupt coalescing Rx Frames IRQ"); | |||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_usecs, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Tx Usces"); | bnxt_set_coal_tx_usecs, "I", "interrupt coalescing Tx Usces"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_frames, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Tx Frames"); | bnxt_set_coal_tx_frames, "I", "interrupt coalescing Tx Frames"); | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs_irq", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs_irq", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_usecs_irq, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Tx Usecs IRQ"); | bnxt_set_coal_tx_usecs_irq, "I", | ||||
"interrupt coalescing Tx Usecs IRQ"); | |||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames_irq", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames_irq", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_frames_irq, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
"I", "interrupt coalescing Tx Frames IRQ"); | bnxt_set_coal_tx_frames_irq, "I", | ||||
"interrupt coalescing Tx Frames IRQ"); | |||||
return 0; | return 0; | ||||
} | } | ||||
#define BNXT_HW_LRO_FN(fn_name, arg) \ | #define BNXT_HW_LRO_FN(fn_name, arg) \ | ||||
static int \ | static int \ | ||||
fn_name(SYSCTL_HANDLER_ARGS) { \ | fn_name(SYSCTL_HANDLER_ARGS) { \ | ||||
struct bnxt_softc *softc = arg1; \ | struct bnxt_softc *softc = arg1; \ | ||||
Show All 24 Lines | |||||
bnxt_create_pause_fc_sysctls(struct bnxt_softc *softc) | bnxt_create_pause_fc_sysctls(struct bnxt_softc *softc) | ||||
{ | { | ||||
struct sysctl_oid *oid = softc->flow_ctrl_oid; | struct sysctl_oid *oid = softc->flow_ctrl_oid; | ||||
if (!oid) | if (!oid) | ||||
return ENOMEM; | return ENOMEM; | ||||
SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"tx", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "tx", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
bnxt_flow_ctrl_tx, "A", | bnxt_flow_ctrl_tx, "A", "Enable or Disable Tx Flow Ctrl: 0 / 1"); | ||||
"Enable or Disable Tx Flow Ctrl: 0 / 1"); | |||||
SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"rx", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "rx", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
bnxt_flow_ctrl_rx, "A", | bnxt_flow_ctrl_rx, "A", "Enable or Disable Tx Flow Ctrl: 0 / 1"); | ||||
"Enable or Disable Tx Flow Ctrl: 0 / 1"); | |||||
SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"autoneg", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "autoneg", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, | ||||
bnxt_flow_ctrl_autoneg, "A", | 0, bnxt_flow_ctrl_autoneg, "A", | ||||
"Enable or Disable Autoneg Flow Ctrl: 0 / 1"); | "Enable or Disable Autoneg Flow Ctrl: 0 / 1"); | ||||
return 0; | return 0; | ||||
} | } | ||||
int | int | ||||
bnxt_create_hw_lro_sysctls(struct bnxt_softc *softc) | bnxt_create_hw_lro_sysctls(struct bnxt_softc *softc) | ||||
{ | { | ||||
struct sysctl_oid *oid = softc->hw_lro_oid; | struct sysctl_oid *oid = softc->hw_lro_oid; | ||||
if (!oid) | if (!oid) | ||||
return ENOMEM; | return ENOMEM; | ||||
SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"enable", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "enable", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, | ||||
bnxt_hw_lro_enable_disable, "A", | 0, bnxt_hw_lro_enable_disable, "A", | ||||
"Enable or Disable HW LRO: 0 / 1"); | "Enable or Disable HW LRO: 0 / 1"); | ||||
SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"gro_mode", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "gro_mode", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, | ||||
bnxt_hw_lro_set_mode, "A", | 0, bnxt_hw_lro_set_mode, "A", | ||||
"Set mode: 1 = GRO mode, 0 = RSC mode"); | "Set mode: 1 = GRO mode, 0 = RSC mode"); | ||||
SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"max_agg_segs", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "max_agg_segs", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
bnxt_hw_lro_set_max_agg_segs, "A", | softc, 0, bnxt_hw_lro_set_max_agg_segs, "A", | ||||
"Set Max Agg Seg Value (unit is Log2): " | "Set Max Agg Seg Value (unit is Log2): " | ||||
"0 (= 1 seg) / 1 (= 2 segs) / ... / 31 (= 2^31 segs)"); | "0 (= 1 seg) / 1 (= 2 segs) / ... / 31 (= 2^31 segs)"); | ||||
SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"max_aggs", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "max_aggs", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
bnxt_hw_lro_set_max_aggs, "A", | softc, 0, bnxt_hw_lro_set_max_aggs, "A", | ||||
"Set Max Aggs Value (unit is Log2): " | "Set Max Aggs Value (unit is Log2): " | ||||
"0 (= 1 agg) / 1 (= 2 aggs) / ... / 7 (= 2^7 segs)"); | "0 (= 1 agg) / 1 (= 2 aggs) / ... / 7 (= 2^7 segs)"); | ||||
SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO, | ||||
"min_agg_len", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, | "min_agg_len", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
bnxt_hw_lro_set_min_agg_len, "A", | softc, 0, bnxt_hw_lro_set_min_agg_len, "A", | ||||
"Min Agg Len: 1 to 9000"); | "Min Agg Len: 1 to 9000"); | ||||
return 0; | return 0; | ||||
} | } | ||||
static int | static int | ||||
bnxt_vlan_only_sysctl(SYSCTL_HANDLER_ARGS) { | bnxt_vlan_only_sysctl(SYSCTL_HANDLER_ARGS) { | ||||
struct bnxt_softc *softc = arg1; | struct bnxt_softc *softc = arg1; | ||||
int rc; | int rc; | ||||
int val; | int val; | ||||
Show All 23 Lines | |||||
bnxt_create_config_sysctls_post(struct bnxt_softc *softc) | bnxt_create_config_sysctls_post(struct bnxt_softc *softc) | ||||
{ | { | ||||
struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev); | struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev); | ||||
struct sysctl_oid_list *children; | struct sysctl_oid_list *children; | ||||
children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));; | children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));; | ||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_only", | SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_only", | ||||
CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_vlan_only_sysctl, "I", | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, softc, 0, | ||||
bnxt_vlan_only_sysctl, "I", | |||||
"require vlan tag on received packets when vlan is enabled"); | "require vlan tag on received packets when vlan is enabled"); | ||||
return 0; | return 0; | ||||
} | } | ||||
Context not available. |