152d2369aSRobert Mustacchi.\" 252d2369aSRobert Mustacchi.\" This file and its contents are supplied under the terms of the 352d2369aSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 452d2369aSRobert Mustacchi.\" You may only use this file in accordance with the terms of version 552d2369aSRobert Mustacchi.\" 1.0 of the CDDL. 652d2369aSRobert Mustacchi.\" 752d2369aSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 852d2369aSRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 952d2369aSRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 1052d2369aSRobert Mustacchi.\" 1152d2369aSRobert Mustacchi.\" 1252d2369aSRobert Mustacchi.\" Copyright 2016 Joyent, Inc. 1352d2369aSRobert Mustacchi.\" 1452d2369aSRobert Mustacchi.Dd May 31, 2016 1552d2369aSRobert Mustacchi.Dt MC_GETSTAT 9E 1652d2369aSRobert Mustacchi.Os 1752d2369aSRobert Mustacchi.Sh NAME 1852d2369aSRobert Mustacchi.Nm mc_getstat 1952d2369aSRobert Mustacchi.Nd get device statistics information 2052d2369aSRobert Mustacchi.Sh SYNOPSIS 2152d2369aSRobert Mustacchi.In sys/mac_provider.h 2252d2369aSRobert Mustacchi.In sys/mac_ether.h 2352d2369aSRobert Mustacchi.Ft int 2452d2369aSRobert Mustacchi.Fo prefix_m_getstat 2552d2369aSRobert Mustacchi.Fa "void *driver" 2652d2369aSRobert Mustacchi.Fa "uint_t stat" 2752d2369aSRobert Mustacchi.Fa "uint64_t *stat_value" 2852d2369aSRobert Mustacchi.Fc 2952d2369aSRobert Mustacchi.Sh INTERFACE LEVEL 3052d2369aSRobert Mustacchiillumos DDI specific 3152d2369aSRobert Mustacchi.Sh PARAMETERS 3252d2369aSRobert Mustacchi.Bl -tag -width Fa 3352d2369aSRobert Mustacchi.It Fa driver 3452d2369aSRobert MustacchiA pointer to the driver's private data that was passed in via the 3552d2369aSRobert Mustacchi.Sy m_pdata 3652d2369aSRobert Mustacchimember of the 3752d2369aSRobert Mustacchi.Xr mac_register 9S 3852d2369aSRobert Mustacchistructure to the 3952d2369aSRobert Mustacchi.Xr mac_register 9F 4052d2369aSRobert Mustacchifunction. 4152d2369aSRobert Mustacchi.It Fa stat 4252d2369aSRobert MustacchiThe numeric identifier of a statistic. 4352d2369aSRobert Mustacchi.It Fa stat_value 4452d2369aSRobert MustacchiA pointer to a 64-bit unsigned value in which the device driver should 4552d2369aSRobert Mustacchiplace the statistic. 4652d2369aSRobert Mustacchi.El 4752d2369aSRobert Mustacchi.Sh DESCRIPTION 4852d2369aSRobert MustacchiThe 4952d2369aSRobert Mustacchi.Fn mc_getstat 50*72d3dbb9SYuri Pankoventry point is used to get statistics from the device driver. 51*72d3dbb9SYuri PankovStatistics are stored as monotonic values. 52*72d3dbb9SYuri PankovThey should only ever increase over the lifetime of a device, resetting only as 53*72d3dbb9SYuri Pankovpart of the instance of a device attaching and detaching. 54*72d3dbb9SYuri PankovWhen hardware has values that may overflow, it is up to the device driver to 55*72d3dbb9SYuri Pankovstore them as a 64-bit quantity that does not overflow in its soft state. 5652d2369aSRobert Mustacchi.Pp 5752d2369aSRobert MustacchiMost device drivers will use a 5852d2369aSRobert Mustacchi.Sy switch 5952d2369aSRobert Mustacchistatement, switching on the value of the statistic 6052d2369aSRobert Mustacchi.Fa stat . 6152d2369aSRobert MustacchiThe full list of supported statistics is available in the 6252d2369aSRobert Mustacchi.Sx STATISTICS 6352d2369aSRobert Mustacchisection of 6452d2369aSRobert Mustacchi.Xr mac 9E . 6552d2369aSRobert Mustacchi.Pp 6652d2369aSRobert MustacchiIf a device driver recognizes the value of 6752d2369aSRobert Mustacchi.Fa stat , 6852d2369aSRobert Mustacchithen it should store the current 64-bit unsigned integer into 6952d2369aSRobert Mustacchi.Fa stat_value . 7052d2369aSRobert MustacchiIf the device driver does not support the statistic or does not 7152d2369aSRobert Mustacchirecognize the requested statistic, then it should not set anything in 7252d2369aSRobert Mustacchi.Fa stat_value 7352d2369aSRobert Mustacchiand instead return 7452d2369aSRobert Mustacchi.Er ENOTSUP . 7552d2369aSRobert Mustacchi.Pp 7652d2369aSRobert MustacchiThe device driver can obtain access to its soft state through the 7752d2369aSRobert Mustacchi.Fa driver 78*72d3dbb9SYuri Pankovmember. 79*72d3dbb9SYuri PankovIt should be cast to the appropriate structure. 80*72d3dbb9SYuri PankovThe device driver should employ any necessary locking to access the statistic 81*72d3dbb9SYuri Pankovmembers of its soft state to ensure that the data is properly serialized. 8252d2369aSRobert Mustacchi.Sh RETURN VALUES 8352d2369aSRobert MustacchiUpon successful completion, the device driver should fill in 8452d2369aSRobert Mustacchi.Fa stat_value 8552d2369aSRobert Mustacchiand return 8652d2369aSRobert Mustacchi.Sy 0 . 8752d2369aSRobert MustacchiOtherwise it should return a non-zero error number to indicate an error 8852d2369aSRobert Mustacchioccurred. 8952d2369aSRobert Mustacchi.Sh EXAMPLES 9052d2369aSRobert MustacchiThe following example shows how a driver might structure its 9152d2369aSRobert Mustacchi.Fn mc_getstat 9252d2369aSRobert Mustacchientry point. 9352d2369aSRobert Mustacchi.Bd -literal 9452d2369aSRobert Mustacchi#include <sys/mac_provider.h> 9552d2369aSRobert Mustacchi#include <sys/mac_ether.h> 9652d2369aSRobert Mustacchi 9752d2369aSRobert Mustacchi/* 9852d2369aSRobert Mustacchi * Note, this example merely shows the structure of the function. For 9952d2369aSRobert Mustacchi * the purpose of this example, we assume that we have a device which 10052d2369aSRobert Mustacchi * has members that indicate its stats and that it has a lock which is 10152d2369aSRobert Mustacchi * used to serialize access to this data. 10252d2369aSRobert Mustacchi */ 10352d2369aSRobert Mustacchi 10452d2369aSRobert Mustacchistatic int 10552d2369aSRobert Mustacchiexample_m_getstat(void *arg, uint_t stat, uint64_t *val) 10652d2369aSRobert Mustacchi{ 10752d2369aSRobert Mustacchi example_t *ep = arg; 10852d2369aSRobert Mustacchi 10952d2369aSRobert Mustacchi mutex_enter(&ep->ep_lock); 11052d2369aSRobert Mustacchi switch (stat) { 11152d2369aSRobert Mustacchi case MAC_STAT_RBYTES: 11252d2369aSRobert Mustacchi *val = ep->ep_stats.eps_rbytes; 11352d2369aSRobert Mustacchi break; 11452d2369aSRobert Mustacchi case MAC_STAT_OBYTES: 11552d2369aSRobert Mustacchi *val = ep->ep_stats.eps_obytes; 11652d2369aSRobert Mustacchi break; 11752d2369aSRobert Mustacchi case MAC_STAT_IPACKETS: 11852d2369aSRobert Mustacchi *val = ep->ep_stats.eps_ipackets; 11952d2369aSRobert Mustacchi break; 12052d2369aSRobert Mustacchi case MAC_STAT_OPACKETS: 12152d2369aSRobert Mustacchi *val = ep->ep_stats.eps_opackets; 12252d2369aSRobert Mustacchi break; 12352d2369aSRobert Mustacchi 12452d2369aSRobert Mustacchi /* 12552d2369aSRobert Mustacchi * Note, there are many more stats that should be checked and 12652d2369aSRobert Mustacchi * filled in if supported. You should use one case statement for 12752d2369aSRobert Mustacchi * each stat. 12852d2369aSRobert Mustacchi */ 12952d2369aSRobert Mustacchi 13052d2369aSRobert Mustacchi default: 13152d2369aSRobert Mustacchi mutex_exit(&ep->ep_lock); 13252d2369aSRobert Mustacchi return (ENOTSUP); 13352d2369aSRobert Mustacchi } 13452d2369aSRobert Mustacchi mutex_exit(&ep->ep_lock); 13552d2369aSRobert Mustacchi 13652d2369aSRobert Mustacchi return (0); 13752d2369aSRobert Mustacchi} 13852d2369aSRobert Mustacchi.Ed 13952d2369aSRobert Mustacchi.Sh ERRORS 140*72d3dbb9SYuri PankovThe device driver may return one of the following errors. 141*72d3dbb9SYuri PankovWhile this list is not intended to be exhaustive, it is recommended to use one 142*72d3dbb9SYuri Pankovof these if possible. 14352d2369aSRobert Mustacchi.Bl -tag -width Er 14452d2369aSRobert Mustacchi.It Er ENOTSUP 14552d2369aSRobert MustacchiThe specified statistic is unknown, unsupported, or unimplemented. 14652d2369aSRobert Mustacchi.It Er EIO 14752d2369aSRobert MustacchiA transport or DMA FM related error occurred while trying to sync data 14852d2369aSRobert Mustacchifrom the device. 14952d2369aSRobert Mustacchi.It Er ECANCELLED 15052d2369aSRobert MustacchiThe device is not currently in a state where it can currently service 15152d2369aSRobert Mustacchithe request. 15252d2369aSRobert Mustacchi.El 15352d2369aSRobert Mustacchi.Sh SEE ALSO 15452d2369aSRobert Mustacchi.Xr mac 9E , 15552d2369aSRobert Mustacchi.Xr mac_register 9F , 15652d2369aSRobert Mustacchi.Xr mac_register 9S 157