/* ARGSUSED */ int hxge_tdc_stat_update(kstat_t *ksp, int rw) { p_hxge_t hxgep; p_hxge_tdc_kstat_t tdc_kstatsp; p_hxge_tx_ring_stats_t statsp; int channel; char *ch_name, *end; hxgep = (p_hxge_t)ksp->ks_private; if (hxgep == NULL) return (-1); HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_rxstat_update")); ch_name = ksp->ks_name; ch_name += strlen(TDC_NAME_FORMAT1); channel = mi_strtol(ch_name, &end, 10); tdc_kstatsp = (p_hxge_tdc_kstat_t)ksp->ks_data; statsp = (p_hxge_tx_ring_stats_t)&hxgep->statsp->tdc_stats[channel]; HXGE_DEBUG_MSG((hxgep, KST_CTL, "hxge_tdc_stat_update data $%p statsp $%p channel %d", ksp->ks_data, statsp, channel)); tdc_kstatsp->opackets.value.ull = statsp->opackets; tdc_kstatsp->obytes.value.ull = statsp->obytes; tdc_kstatsp->obytes_with_pad.value.ull = statsp->obytes_with_pad; tdc_kstatsp->oerrors.value.ull = statsp->oerrors; tdc_kstatsp->tx_hdr_pkts.value.ull = statsp->tx_hdr_pkts; tdc_kstatsp->tx_ddi_pkts.value.ull = statsp->tx_ddi_pkts; tdc_kstatsp->tx_jumbo_pkts.value.ull = statsp->tx_jumbo_pkts; tdc_kstatsp->tx_max_pend.value.ull = statsp->tx_max_pend; tdc_kstatsp->peu_resp_err.value.ul = statsp->peu_resp_err; tdc_kstatsp->pkt_size_err.value.ul = statsp->pkt_size_err; tdc_kstatsp->tx_rng_oflow.value.ul = statsp->tx_rng_oflow; tdc_kstatsp->pkt_size_hdr_err.value.ul = statsp->pkt_size_hdr_err; tdc_kstatsp->runt_pkt_drop_err.value.ul = statsp->runt_pkt_drop_err; tdc_kstatsp->pref_par_err.value.ul = statsp->pref_par_err; tdc_kstatsp->tdr_pref_cpl_to.value.ul = statsp->tdr_pref_cpl_to; tdc_kstatsp->pkt_cpl_to.value.ul = statsp->pkt_cpl_to; tdc_kstatsp->invalid_sop.value.ul = statsp->invalid_sop; tdc_kstatsp->unexpected_sop.value.ul = statsp->unexpected_sop; tdc_kstatsp->tx_starts.value.ul = statsp->tx_starts; tdc_kstatsp->tx_no_desc.value.ul = statsp->tx_no_desc; tdc_kstatsp->tx_dma_bind_fail.value.ul = statsp->tx_dma_bind_fail; tdc_kstatsp->count_hdr_size_err.value.ul = statsp->count_hdr_size_err; tdc_kstatsp->count_runt.value.ul = statsp->count_runt; tdc_kstatsp->count_abort.value.ul = statsp->count_abort; tdc_kstatsp->tx_marks.value.ul = statsp->tx_marks; HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_tdc_stat_update")); return (0); }
/* ARGSUSED */ int hxge_rdc_stat_update(kstat_t *ksp, int rw) { p_hxge_t hxgep; p_hxge_rdc_kstat_t rdc_kstatsp; p_hxge_rx_ring_stats_t statsp; int channel; char *ch_name, *end; hxgep = (p_hxge_t)ksp->ks_private; if (hxgep == NULL) return (-1); HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_rdc_stat_update")); ch_name = ksp->ks_name; ch_name += strlen(RDC_NAME_FORMAT1); channel = mi_strtol(ch_name, &end, 10); rdc_kstatsp = (p_hxge_rdc_kstat_t)ksp->ks_data; statsp = (p_hxge_rx_ring_stats_t)&hxgep->statsp->rdc_stats[channel]; HXGE_DEBUG_MSG((hxgep, KST_CTL, "hxge_rdc_stat_update $%p statsp $%p channel %d", ksp->ks_data, statsp, channel)); rdc_kstatsp->ipackets.value.ull = statsp->ipackets; rdc_kstatsp->rbytes.value.ull = statsp->ibytes; rdc_kstatsp->jumbo_pkts.value.ul = statsp->jumbo_pkts; rdc_kstatsp->rcr_unknown_err.value.ul = statsp->rcr_unknown_err; rdc_kstatsp->errors.value.ul = statsp->ierrors; rdc_kstatsp->rcr_sha_par_err.value.ul = statsp->rcr_sha_par; rdc_kstatsp->rbr_pre_par_err.value.ul = statsp->rbr_pre_par; rdc_kstatsp->rbr_pre_emty.value.ul = statsp->rbr_pre_empty; rdc_kstatsp->rcr_shadow_full.value.ul = statsp->rcr_shadow_full; rdc_kstatsp->rbr_tmout.value.ul = statsp->rbr_tmout; rdc_kstatsp->peu_resp_err.value.ul = statsp->peu_resp_err; rdc_kstatsp->ctrl_fifo_ecc_err.value.ul = statsp->ctrl_fifo_ecc_err; rdc_kstatsp->data_fifo_ecc_err.value.ul = statsp->data_fifo_ecc_err; rdc_kstatsp->rcrfull.value.ul = statsp->rcrfull; rdc_kstatsp->rbr_empty.value.ul = statsp->rbr_empty; rdc_kstatsp->rbr_empty_fail.value.ul = statsp->rbr_empty_fail; rdc_kstatsp->rbr_empty_restore.value.ul = statsp->rbr_empty_restore; rdc_kstatsp->rbrfull.value.ul = statsp->rbrfull; rdc_kstatsp->rcr_invalids.value.ul = statsp->rcr_invalids; rdc_kstatsp->rcr_to.value.ul = statsp->rcr_to; rdc_kstatsp->rcr_thresh.value.ul = statsp->rcr_thres; rdc_kstatsp->pkt_drop.value.ul = statsp->pkt_drop; HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_rdc_stat_update")); return (0); }
/* ARGSUSED */ static int unm_param_set(queue_t *q, mblk_t *mp, char *value, caddr_t cp, cred_t *credp) { nd_param_t *ndp; int new_value; char *end; ndp = (nd_param_t *)(uintptr_t)cp; new_value = mi_strtol(value, &end, 10); if (end == value) return (EINVAL); if (new_value < ndp->ndp_min || new_value > ndp->ndp_max) return (EINVAL); ndp->ndp_val = new_value; ndp->ndp_info += 1; return (0); }
/* * Validates the request to set a RGE parameter to a specific value. * If the request is OK, the parameter is set. Also the <info> field * is incremented to show that the parameter was touched, even though * it may have been set to the same value it already had. */ static int rge_param_set(queue_t *q, mblk_t *mp, char *value, caddr_t cp, cred_t *credp) { nd_param_t *ndp; long new_value; char *end; _NOTE(ARGUNUSED(q, mp, credp)) ndp = (nd_param_t *)cp; new_value = mi_strtol(value, &end, 10); if (end == value) return (EINVAL); if (new_value < ndp->ndp_min || new_value > ndp->ndp_max) return (EINVAL); ndp->ndp_val = (int)new_value; ndp->ndp_info += 1; return (0); }