1d62bc4baSyz147064 /*
2d62bc4baSyz147064 * CDDL HEADER START
3d62bc4baSyz147064 *
4d62bc4baSyz147064 * The contents of this file are subject to the terms of the
5d62bc4baSyz147064 * Common Development and Distribution License (the "License").
6d62bc4baSyz147064 * You may not use this file except in compliance with the License.
7d62bc4baSyz147064 *
8d62bc4baSyz147064 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9d62bc4baSyz147064 * or http://www.opensolaris.org/os/licensing.
10d62bc4baSyz147064 * See the License for the specific language governing permissions
11d62bc4baSyz147064 * and limitations under the License.
12d62bc4baSyz147064 *
13d62bc4baSyz147064 * When distributing Covered Code, include this CDDL HEADER in each
14d62bc4baSyz147064 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15d62bc4baSyz147064 * If applicable, add the following below this CDDL HEADER, with the
16d62bc4baSyz147064 * fields enclosed by brackets "[]" replaced with your own identifying
17d62bc4baSyz147064 * information: Portions Copyright [yyyy] [name of copyright owner]
18d62bc4baSyz147064 *
19d62bc4baSyz147064 * CDDL HEADER END
20d62bc4baSyz147064 */
21d62bc4baSyz147064 /*
22aca118b7Slucy wang - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23d62bc4baSyz147064 * Use is subject to license terms.
243bc4925dSGarrett D'Amore *
253bc4925dSGarrett D'Amore * Copyright 2015 Garrett D'Amore <garret@damore.org>
26422542c1SRobert Mustacchi * Copyright 2016 Joyent, Inc.
27d62bc4baSyz147064 */
28d62bc4baSyz147064
29d62bc4baSyz147064 #include <sys/types.h>
30d62bc4baSyz147064 #include <sys/kstat.h>
31d62bc4baSyz147064 #include <sys/mac.h>
32d62bc4baSyz147064 #include <sys/dls.h>
33d62bc4baSyz147064 #include <sys/softmac_impl.h>
34d62bc4baSyz147064
35d62bc4baSyz147064 typedef struct i_softmac_stat_info_s {
36d62bc4baSyz147064 uint_t ssi_stat;
37d62bc4baSyz147064 char *ssi_name;
38d62bc4baSyz147064 char *ssi_alias;
39d62bc4baSyz147064 } i_softmac_stat_info_t;
40d62bc4baSyz147064
41d62bc4baSyz147064 /*
42d62bc4baSyz147064 * Must be the same order as mac_driver_stat.
43d62bc4baSyz147064 */
44d62bc4baSyz147064 static i_softmac_stat_info_t i_softmac_driver_si[] = {
45d62bc4baSyz147064 { MAC_STAT_IFSPEED, "ifspeed", "link_speed" },
46d62bc4baSyz147064 { MAC_STAT_MULTIRCV, "multircv", NULL },
47d62bc4baSyz147064 { MAC_STAT_BRDCSTRCV, "brdcstrcv", NULL },
48d62bc4baSyz147064 { MAC_STAT_MULTIXMT, "multixmt", NULL },
49d62bc4baSyz147064 { MAC_STAT_BRDCSTXMT, "brdcstxmt", NULL },
50d62bc4baSyz147064 { MAC_STAT_NORCVBUF, "norcvbuf", "rx_no_buf" },
51d62bc4baSyz147064 { MAC_STAT_IERRORS, "ierrors", NULL },
52d62bc4baSyz147064 { MAC_STAT_UNKNOWNS, "unknowns", NULL },
53d62bc4baSyz147064 { MAC_STAT_NOXMTBUF, "noxmtbuf", "No Txpkt " },
54d62bc4baSyz147064 { MAC_STAT_OERRORS, "oerrors", NULL },
55d62bc4baSyz147064 { MAC_STAT_COLLISIONS, "collisions", NULL },
56d62bc4baSyz147064 { MAC_STAT_RBYTES, "rbytes64", "rbytes" },
57d62bc4baSyz147064 { MAC_STAT_IPACKETS, "ipackets64", "ipackets" },
58d62bc4baSyz147064 { MAC_STAT_OBYTES, "obytes64", "obytes" },
59d62bc4baSyz147064 { MAC_STAT_OPACKETS, "opackets64", "opackets" },
60d62bc4baSyz147064 { MAC_STAT_UNDERFLOWS, "uflo", NULL },
61d62bc4baSyz147064 { MAC_STAT_OVERFLOWS, "oflo", NULL }
62d62bc4baSyz147064 };
63d62bc4baSyz147064
64aca118b7Slucy wang - Sun Microsystems - Beijing China #define SOFTMAC_DRIVER_SI_SZ \
65aca118b7Slucy wang - Sun Microsystems - Beijing China (sizeof (i_softmac_driver_si) / sizeof (i_softmac_driver_si[0]))
66aca118b7Slucy wang - Sun Microsystems - Beijing China
67d62bc4baSyz147064 /*
68d62bc4baSyz147064 * Must be the same order as ether_stat.
69d62bc4baSyz147064 */
70d62bc4baSyz147064 static i_softmac_stat_info_t i_softmac_ether_si[] = {
71d62bc4baSyz147064 { ETHER_STAT_ALIGN_ERRORS, "align_errors",
72d62bc4baSyz147064 "alignment_err" },
73d62bc4baSyz147064 { ETHER_STAT_FCS_ERRORS, "fcs_errors", "crc_err" },
74d62bc4baSyz147064 { ETHER_STAT_FIRST_COLLISIONS, "first_collisions", NULL },
75d62bc4baSyz147064 { ETHER_STAT_MULTI_COLLISIONS, "multi_collisions", NULL },
76d62bc4baSyz147064 { ETHER_STAT_SQE_ERRORS, "sqe_errors", NULL },
77d62bc4baSyz147064 { ETHER_STAT_DEFER_XMTS, "defer_xmts", NULL },
78d62bc4baSyz147064 { ETHER_STAT_TX_LATE_COLLISIONS, "tx_late_collisions",
79d62bc4baSyz147064 "late_collisions" },
80d62bc4baSyz147064 { ETHER_STAT_EX_COLLISIONS, "ex_collisions",
81d62bc4baSyz147064 "excessive_collisions" },
82d62bc4baSyz147064 { ETHER_STAT_MACXMT_ERRORS, "macxmt_errors", NULL },
83d62bc4baSyz147064 { ETHER_STAT_CARRIER_ERRORS, "carrier_errors", NULL },
84d62bc4baSyz147064 { ETHER_STAT_TOOLONG_ERRORS, "toolong_errors", "length_err" },
85d62bc4baSyz147064 { ETHER_STAT_MACRCV_ERRORS, "macrcv_errors",
86d62bc4baSyz147064 "Rx Error Count" },
87d62bc4baSyz147064
88d62bc4baSyz147064 { ETHER_STAT_XCVR_ADDR, "xcvr_addr", NULL },
89d62bc4baSyz147064 { ETHER_STAT_XCVR_ID, "xcvr_id", NULL },
90d62bc4baSyz147064 { ETHER_STAT_XCVR_INUSE, "xcvr_inuse", NULL },
91d62bc4baSyz147064
92d62bc4baSyz147064 { ETHER_STAT_CAP_1000FDX, "cap_1000fdx", NULL },
93d62bc4baSyz147064 { ETHER_STAT_CAP_1000HDX, "cap_1000hdx", NULL },
94d62bc4baSyz147064 { ETHER_STAT_CAP_100FDX, "cap_100fdx", NULL },
95d62bc4baSyz147064 { ETHER_STAT_CAP_100HDX, "cap_100hdx", NULL },
96d62bc4baSyz147064 { ETHER_STAT_CAP_10FDX, "cap_10fdx", NULL },
97d62bc4baSyz147064 { ETHER_STAT_CAP_10HDX, "cap_10hdx", NULL },
98d62bc4baSyz147064 { ETHER_STAT_CAP_ASMPAUSE, "cap_asmpause", NULL },
99d62bc4baSyz147064 { ETHER_STAT_CAP_PAUSE, "cap_pause", NULL },
100d62bc4baSyz147064 { ETHER_STAT_CAP_AUTONEG, "cap_autoneg", NULL },
101d62bc4baSyz147064
102d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_1000FDX, "adv_cap_1000fdx", NULL },
103d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_1000HDX, "adv_cap_1000hdx", NULL },
104d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_100FDX, "adv_cap_100fdx", NULL },
105d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_100HDX, "adv_cap_100hdx", NULL },
106d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_10FDX, "adv_cap_10fdx", NULL },
107d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_10HDX, "adv_cap_10hdx", NULL },
108d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_ASMPAUSE, "adv_cap_asmpause", NULL },
109d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_PAUSE, "adv_cap_pause", NULL },
110d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_AUTONEG, "adv_cap_autoneg", NULL },
111d62bc4baSyz147064
112d62bc4baSyz147064 { ETHER_STAT_LP_CAP_1000FDX, "lp_cap_1000fdx", NULL },
113d62bc4baSyz147064 { ETHER_STAT_LP_CAP_1000HDX, "lp_cap_1000hdx", NULL },
114d62bc4baSyz147064 { ETHER_STAT_LP_CAP_100FDX, "lp_cap_100fdx", NULL },
115d62bc4baSyz147064 { ETHER_STAT_LP_CAP_100HDX, "lp_cap_100hdx", NULL },
116d62bc4baSyz147064 { ETHER_STAT_LP_CAP_10FDX, "lp_cap_10fdx", NULL },
117d62bc4baSyz147064 { ETHER_STAT_LP_CAP_10HDX, "lp_cap_10hdx", NULL },
118d62bc4baSyz147064 { ETHER_STAT_LP_CAP_ASMPAUSE, "lp_cap_asmpause", NULL },
119d62bc4baSyz147064 { ETHER_STAT_LP_CAP_PAUSE, "lp_cap_pause", NULL },
120d62bc4baSyz147064 { ETHER_STAT_LP_CAP_AUTONEG, "lp_cap_autoneg", NULL },
121d62bc4baSyz147064
122d62bc4baSyz147064 { ETHER_STAT_LINK_ASMPAUSE, "link_asmpause", NULL },
123d62bc4baSyz147064 { ETHER_STAT_LINK_PAUSE, "link_pause", NULL },
124d62bc4baSyz147064 { ETHER_STAT_LINK_AUTONEG, "link_autoneg", NULL },
125d62bc4baSyz147064 { ETHER_STAT_LINK_DUPLEX, "link_duplex", "duplex" },
126d62bc4baSyz147064
127d62bc4baSyz147064 { ETHER_STAT_TOOSHORT_ERRORS, "runt_errors", NULL },
128d62bc4baSyz147064 { ETHER_STAT_CAP_REMFAULT, "cap_rem_fault", NULL },
129d62bc4baSyz147064 { ETHER_STAT_ADV_REMFAULT, "adv_rem_fault", NULL },
130d62bc4baSyz147064 { ETHER_STAT_LP_REMFAULT, "lp_rem_fault", NULL },
131d62bc4baSyz147064
132d62bc4baSyz147064 { ETHER_STAT_JABBER_ERRORS, "jabber_errors", NULL },
133d62bc4baSyz147064 { ETHER_STAT_CAP_100T4, "cap_100T4", NULL },
134d62bc4baSyz147064 { ETHER_STAT_ADV_CAP_100T4, "adv_cap_100T4", NULL },
135aca118b7Slucy wang - Sun Microsystems - Beijing China { ETHER_STAT_LP_CAP_100T4, "lp_cap_100T4", NULL },
136aca118b7Slucy wang - Sun Microsystems - Beijing China
137aca118b7Slucy wang - Sun Microsystems - Beijing China { ETHER_STAT_CAP_10GFDX, "cap_10gfdx", NULL },
138aca118b7Slucy wang - Sun Microsystems - Beijing China { ETHER_STAT_ADV_CAP_10GFDX, "adv_cap_10gfdx", NULL },
1393bc4925dSGarrett D'Amore { ETHER_STAT_LP_CAP_1000FDX, "lp_cap_10gfdx", NULL },
1403bc4925dSGarrett D'Amore
1413bc4925dSGarrett D'Amore { ETHER_STAT_CAP_40GFDX, "cap_40gfdx", NULL },
1423bc4925dSGarrett D'Amore { ETHER_STAT_ADV_CAP_40GFDX, "adv_cap_40gfdx", NULL },
1433bc4925dSGarrett D'Amore { ETHER_STAT_LP_CAP_40GFDX, "lp_cap_40gfdx", NULL },
1443bc4925dSGarrett D'Amore
1453bc4925dSGarrett D'Amore { ETHER_STAT_CAP_100GFDX, "cap_100gfdx", NULL },
1463bc4925dSGarrett D'Amore { ETHER_STAT_ADV_CAP_100GFDX, "adv_cap_100gfdx", NULL },
1473bc4925dSGarrett D'Amore { ETHER_STAT_LP_CAP_100GFDX, "lp_cap_100gfdx", NULL },
1483bc4925dSGarrett D'Amore
1493bc4925dSGarrett D'Amore { ETHER_STAT_CAP_2500FDX, "cap_2500fdx", NULL },
1503bc4925dSGarrett D'Amore { ETHER_STAT_ADV_CAP_2500FDX, "adv_cap_2500fdx", NULL },
1513bc4925dSGarrett D'Amore { ETHER_STAT_LP_CAP_2500FDX, "lp_cap_2500fdx", NULL },
1523bc4925dSGarrett D'Amore
1533bc4925dSGarrett D'Amore { ETHER_STAT_CAP_5000FDX, "cap_5000fdx", NULL },
1543bc4925dSGarrett D'Amore { ETHER_STAT_ADV_CAP_5000FDX, "adv_cap_5000fdx", NULL },
1553bc4925dSGarrett D'Amore { ETHER_STAT_LP_CAP_5000FDX, "lp_cap_5000fdx", NULL },
156422542c1SRobert Mustacchi
157422542c1SRobert Mustacchi { ETHER_STAT_CAP_25GFDX, "cap_25gfdx", NULL },
158422542c1SRobert Mustacchi { ETHER_STAT_ADV_CAP_25GFDX, "adv_cap_25gfdx", NULL },
159422542c1SRobert Mustacchi { ETHER_STAT_LP_CAP_25GFDX, "lp_cap_25gfdx", NULL },
160422542c1SRobert Mustacchi
161422542c1SRobert Mustacchi { ETHER_STAT_CAP_50GFDX, "cap_50gfdx", NULL },
162422542c1SRobert Mustacchi { ETHER_STAT_ADV_CAP_50GFDX, "adv_cap_50gfdx", NULL },
163422542c1SRobert Mustacchi { ETHER_STAT_LP_CAP_50GFDX, "lp_cap_50gfdx", NULL },
164d62bc4baSyz147064 };
165d62bc4baSyz147064
166aca118b7Slucy wang - Sun Microsystems - Beijing China #define SOFTMAC_ETHER_SI_SZ \
167aca118b7Slucy wang - Sun Microsystems - Beijing China (sizeof (i_softmac_ether_si) / sizeof (i_softmac_ether_si[0]))
168aca118b7Slucy wang - Sun Microsystems - Beijing China
169d62bc4baSyz147064 static kstat_t *softmac_hold_dev_kstat(softmac_t *);
170d62bc4baSyz147064 static void softmac_rele_dev_kstat(kstat_t *);
171d62bc4baSyz147064 static int softmac_get_kstat(kstat_t *, char *, uint64_t *);
172d62bc4baSyz147064
173d62bc4baSyz147064 static kstat_t *
softmac_hold_dev_kstat(softmac_t * softmac)174d62bc4baSyz147064 softmac_hold_dev_kstat(softmac_t *softmac)
175d62bc4baSyz147064 {
176d62bc4baSyz147064 char drv[MAXLINKNAMELEN];
177d62bc4baSyz147064 uint_t ppa;
178d62bc4baSyz147064 kstat_t *ksp;
179d62bc4baSyz147064
180*ccdeb6b6SDan McDonald if (ddi_parse_dlen(softmac->smac_devname, drv, MAXLINKNAMELEN, &ppa) !=
181*ccdeb6b6SDan McDonald DDI_SUCCESS) {
182d62bc4baSyz147064 return (NULL);
183*ccdeb6b6SDan McDonald }
184d62bc4baSyz147064
185d62bc4baSyz147064 /*
186d62bc4baSyz147064 * Find the kstat by the module name and the instance number.
187d62bc4baSyz147064 */
188d62bc4baSyz147064 ksp = kstat_hold_byname(drv, ppa, softmac->smac_devname, ALL_ZONES);
189d62bc4baSyz147064 if (ksp != NULL) {
190d62bc4baSyz147064 KSTAT_ENTER(ksp);
191d62bc4baSyz147064
192d62bc4baSyz147064 if ((ksp->ks_data != NULL) &&
193d62bc4baSyz147064 (ksp->ks_type == KSTAT_TYPE_NAMED)) {
194d62bc4baSyz147064 /*
195d62bc4baSyz147064 * Update the kstat to get the latest statistics.
196d62bc4baSyz147064 */
197d62bc4baSyz147064 if (KSTAT_UPDATE(ksp, KSTAT_READ) == 0)
198d62bc4baSyz147064 return (ksp);
199d62bc4baSyz147064 }
200d62bc4baSyz147064
201d62bc4baSyz147064 KSTAT_EXIT(ksp);
202d62bc4baSyz147064 kstat_rele(ksp);
203d62bc4baSyz147064 }
204d62bc4baSyz147064 return (NULL);
205d62bc4baSyz147064 }
206d62bc4baSyz147064
207d62bc4baSyz147064 static void
softmac_rele_dev_kstat(kstat_t * ksp)208d62bc4baSyz147064 softmac_rele_dev_kstat(kstat_t *ksp)
209d62bc4baSyz147064 {
210d62bc4baSyz147064 KSTAT_EXIT(ksp);
211d62bc4baSyz147064 kstat_rele(ksp);
212d62bc4baSyz147064 }
213d62bc4baSyz147064
214d62bc4baSyz147064 /*
215d62bc4baSyz147064 * The kstat needs to be held when calling this function.
216d62bc4baSyz147064 */
217d62bc4baSyz147064 static int
softmac_get_kstat(kstat_t * ksp,char * name,uint64_t * valp)218d62bc4baSyz147064 softmac_get_kstat(kstat_t *ksp, char *name, uint64_t *valp)
219d62bc4baSyz147064 {
220d62bc4baSyz147064 kstat_named_t *knp;
221d62bc4baSyz147064 int i;
222d62bc4baSyz147064 int ret = ENOTSUP;
223d62bc4baSyz147064
224d62bc4baSyz147064 if (name == NULL)
225d62bc4baSyz147064 return (ret);
226d62bc4baSyz147064
227d62bc4baSyz147064 /*
228d62bc4baSyz147064 * Search the kstat with the given name.
229d62bc4baSyz147064 */
230d62bc4baSyz147064 for (i = 0, knp = KSTAT_NAMED_PTR(ksp); i < ksp->ks_ndata; i++, knp++) {
231d62bc4baSyz147064 if (strcmp(knp->name, name) == 0) {
232d62bc4baSyz147064 switch (knp->data_type) {
233d62bc4baSyz147064 case KSTAT_DATA_INT32:
234d62bc4baSyz147064 case KSTAT_DATA_UINT32:
235d62bc4baSyz147064 *valp = (uint64_t)(knp->value.ui32);
236d62bc4baSyz147064 ret = 0;
237d62bc4baSyz147064 break;
238d62bc4baSyz147064 case KSTAT_DATA_INT64:
239d62bc4baSyz147064 case KSTAT_DATA_UINT64:
240d62bc4baSyz147064 *valp = knp->value.ui64;
241d62bc4baSyz147064 ret = 0;
242d62bc4baSyz147064 break;
243d62bc4baSyz147064 #ifdef _LP64
244d62bc4baSyz147064 case KSTAT_DATA_LONG:
245d62bc4baSyz147064 case KSTAT_DATA_ULONG:
246d62bc4baSyz147064 *valp = (uint64_t)knp->value.ul;
247d62bc4baSyz147064 ret = 0;
248d62bc4baSyz147064 break;
249d62bc4baSyz147064 #endif
250d62bc4baSyz147064 case KSTAT_DATA_CHAR:
251d62bc4baSyz147064 if (strcmp(name, "duplex") != 0)
252d62bc4baSyz147064 break;
253d62bc4baSyz147064 if (strncmp(knp->value.c, "full", 4) == 0)
254d62bc4baSyz147064 *valp = LINK_DUPLEX_FULL;
255d62bc4baSyz147064 else if (strncmp(knp->value.c, "half", 4) == 0)
256d62bc4baSyz147064 *valp = LINK_DUPLEX_HALF;
257d62bc4baSyz147064 else
258d62bc4baSyz147064 *valp = LINK_DUPLEX_UNKNOWN;
259d62bc4baSyz147064 ret = 0;
260d62bc4baSyz147064 break;
261d62bc4baSyz147064 }
262d62bc4baSyz147064 break;
263d62bc4baSyz147064 }
264d62bc4baSyz147064 }
265d62bc4baSyz147064
266d62bc4baSyz147064 return (ret);
267d62bc4baSyz147064 }
268d62bc4baSyz147064
269d62bc4baSyz147064 int
softmac_m_stat(void * arg,uint_t stat,uint64_t * val)270d62bc4baSyz147064 softmac_m_stat(void *arg, uint_t stat, uint64_t *val)
271d62bc4baSyz147064 {
272d62bc4baSyz147064 softmac_t *softmac = arg;
273d62bc4baSyz147064 kstat_t *ksp;
274d62bc4baSyz147064 uint_t index;
275d62bc4baSyz147064 int ret;
276d62bc4baSyz147064
277d62bc4baSyz147064 if ((ksp = softmac_hold_dev_kstat(softmac)) == NULL)
278d62bc4baSyz147064 return (ENOTSUP);
279d62bc4baSyz147064
280d62bc4baSyz147064 if (IS_MAC_STAT(stat)) {
281aca118b7Slucy wang - Sun Microsystems - Beijing China i_softmac_stat_info_t *ssip = NULL;
282aca118b7Slucy wang - Sun Microsystems - Beijing China
283aca118b7Slucy wang - Sun Microsystems - Beijing China for (index = 0; index < SOFTMAC_DRIVER_SI_SZ; index++) {
284aca118b7Slucy wang - Sun Microsystems - Beijing China if (stat == i_softmac_driver_si[index].ssi_stat) {
285aca118b7Slucy wang - Sun Microsystems - Beijing China ssip = &i_softmac_driver_si[index];
286aca118b7Slucy wang - Sun Microsystems - Beijing China break;
287aca118b7Slucy wang - Sun Microsystems - Beijing China }
288aca118b7Slucy wang - Sun Microsystems - Beijing China }
289aca118b7Slucy wang - Sun Microsystems - Beijing China
290aca118b7Slucy wang - Sun Microsystems - Beijing China if (ssip == NULL) {
291aca118b7Slucy wang - Sun Microsystems - Beijing China ret = ENOTSUP;
292aca118b7Slucy wang - Sun Microsystems - Beijing China } else {
293aca118b7Slucy wang - Sun Microsystems - Beijing China if ((ret = softmac_get_kstat(ksp, ssip->ssi_name,
294aca118b7Slucy wang - Sun Microsystems - Beijing China val)) != 0)
295aca118b7Slucy wang - Sun Microsystems - Beijing China ret = softmac_get_kstat(ksp, ssip->ssi_alias,
296aca118b7Slucy wang - Sun Microsystems - Beijing China val);
297d62bc4baSyz147064 }
298d62bc4baSyz147064 } else {
299d62bc4baSyz147064 ASSERT(IS_MACTYPE_STAT(stat));
300d62bc4baSyz147064
301d62bc4baSyz147064 switch (softmac->smac_media) {
302aca118b7Slucy wang - Sun Microsystems - Beijing China case DL_ETHER: {
303aca118b7Slucy wang - Sun Microsystems - Beijing China i_softmac_stat_info_t *ssip = NULL;
304aca118b7Slucy wang - Sun Microsystems - Beijing China
305aca118b7Slucy wang - Sun Microsystems - Beijing China for (index = 0; index < SOFTMAC_ETHER_SI_SZ; index++) {
306aca118b7Slucy wang - Sun Microsystems - Beijing China if (stat ==
307aca118b7Slucy wang - Sun Microsystems - Beijing China i_softmac_ether_si[index].ssi_stat) {
308aca118b7Slucy wang - Sun Microsystems - Beijing China ssip = &i_softmac_ether_si[index];
309d62bc4baSyz147064 break;
310aca118b7Slucy wang - Sun Microsystems - Beijing China }
311aca118b7Slucy wang - Sun Microsystems - Beijing China }
312aca118b7Slucy wang - Sun Microsystems - Beijing China
313aca118b7Slucy wang - Sun Microsystems - Beijing China if (ssip == NULL) {
314aca118b7Slucy wang - Sun Microsystems - Beijing China ret = ENOTSUP;
315aca118b7Slucy wang - Sun Microsystems - Beijing China } else {
316aca118b7Slucy wang - Sun Microsystems - Beijing China if ((ret = softmac_get_kstat(ksp,
317aca118b7Slucy wang - Sun Microsystems - Beijing China ssip->ssi_name, val)) != 0)
318aca118b7Slucy wang - Sun Microsystems - Beijing China ret = softmac_get_kstat(ksp,
319aca118b7Slucy wang - Sun Microsystems - Beijing China ssip->ssi_alias, val);
320aca118b7Slucy wang - Sun Microsystems - Beijing China }
321aca118b7Slucy wang - Sun Microsystems - Beijing China
322aca118b7Slucy wang - Sun Microsystems - Beijing China break;
323aca118b7Slucy wang - Sun Microsystems - Beijing China }
324d62bc4baSyz147064 default:
325d62bc4baSyz147064 ret = ENOTSUP;
326d62bc4baSyz147064 break;
327d62bc4baSyz147064 }
328d62bc4baSyz147064 }
329d62bc4baSyz147064
330d62bc4baSyz147064 softmac_rele_dev_kstat(ksp);
331d62bc4baSyz147064 return (ret);
332d62bc4baSyz147064 }
333