Exemple #1
0
/* 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);
}
Exemple #2
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);
}