net/sfc/base: add generated description of sensors
[dpdk.git] / drivers / net / sfc / base / efx_mon.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright (c) 2007-2018 Solarflare Communications Inc.
4  * All rights reserved.
5  */
6
7 #include "efx.h"
8 #include "efx_impl.h"
9
10 #if EFSYS_OPT_MON_MCDI
11 #include "mcdi_mon.h"
12 #endif
13
14 #if EFSYS_OPT_NAMES
15
16 static const char * const __efx_mon_name[] = {
17         "",
18         "sfx90x0",
19         "sfx91x0",
20         "sfx92x0"
21 };
22
23                 const char *
24 efx_mon_name(
25         __in    efx_nic_t *enp)
26 {
27         efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
28
29         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
30
31         EFSYS_ASSERT(encp->enc_mon_type != EFX_MON_INVALID);
32         EFSYS_ASSERT3U(encp->enc_mon_type, <, EFX_MON_NTYPES);
33         return (__efx_mon_name[encp->enc_mon_type]);
34 }
35
36 #endif  /* EFSYS_OPT_NAMES */
37
38 #if EFSYS_OPT_MON_MCDI
39 static const efx_mon_ops_t      __efx_mon_mcdi_ops = {
40 #if EFSYS_OPT_MON_STATS
41         mcdi_mon_stats_update           /* emo_stats_update */
42 #endif  /* EFSYS_OPT_MON_STATS */
43 };
44 #endif
45
46
47         __checkReturn   efx_rc_t
48 efx_mon_init(
49         __in            efx_nic_t *enp)
50 {
51         efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
52         efx_mon_t *emp = &(enp->en_mon);
53         const efx_mon_ops_t *emop;
54         efx_rc_t rc;
55
56         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
57         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
58
59         if (enp->en_mod_flags & EFX_MOD_MON) {
60                 rc = EINVAL;
61                 goto fail1;
62         }
63
64         enp->en_mod_flags |= EFX_MOD_MON;
65
66         emp->em_type = encp->enc_mon_type;
67
68         EFSYS_ASSERT(encp->enc_mon_type != EFX_MON_INVALID);
69         switch (emp->em_type) {
70 #if EFSYS_OPT_MON_MCDI
71         case EFX_MON_SFC90X0:
72         case EFX_MON_SFC91X0:
73         case EFX_MON_SFC92X0:
74                 emop = &__efx_mon_mcdi_ops;
75                 break;
76 #endif
77         default:
78                 rc = ENOTSUP;
79                 goto fail2;
80         }
81
82         emp->em_emop = emop;
83         return (0);
84
85 fail2:
86         EFSYS_PROBE(fail2);
87
88         emp->em_type = EFX_MON_INVALID;
89
90         enp->en_mod_flags &= ~EFX_MOD_MON;
91
92 fail1:
93         EFSYS_PROBE1(fail1, efx_rc_t, rc);
94
95         return (rc);
96 }
97
98 #if EFSYS_OPT_MON_STATS
99
100 #if EFSYS_OPT_NAMES
101
102 /* START MKCONFIG GENERATED MonitorStatNamesBlock 277c17eda1a6d1a4 */
103 static const char * const __mon_stat_name[] = {
104         "controller_temp",
105         "phy_common_temp",
106         "controller_cooling",
107         "phy0_temp",
108         "phy0_cooling",
109         "phy1_temp",
110         "phy1_cooling",
111         "in_1v0",
112         "in_1v2",
113         "in_1v8",
114         "in_2v5",
115         "in_3v3",
116         "in_12v0",
117         "in_1v2a",
118         "in_vref",
119         "out_vaoe",
120         "aoe_temp",
121         "psu_aoe_temp",
122         "psu_temp",
123         "fan_0",
124         "fan_1",
125         "fan_2",
126         "fan_3",
127         "fan_4",
128         "in_vaoe",
129         "out_iaoe",
130         "in_iaoe",
131         "nic_power",
132         "in_0v9",
133         "in_i0v9",
134         "in_i1v2",
135         "in_0v9_adc",
136         "controller_2_temp",
137         "vreg_internal_temp",
138         "vreg_0v9_temp",
139         "vreg_1v2_temp",
140         "controller_vptat",
141         "controller_internal_temp",
142         "controller_vptat_extadc",
143         "controller_internal_temp_extadc",
144         "ambient_temp",
145         "airflow",
146         "vdd08d_vss08d_csr",
147         "vdd08d_vss08d_csr_extadc",
148         "hotpoint_temp",
149         "phy_power_port0",
150         "phy_power_port1",
151         "mum_vcc",
152         "in_0v9_a",
153         "in_i0v9_a",
154         "vreg_0v9_a_temp",
155         "in_0v9_b",
156         "in_i0v9_b",
157         "vreg_0v9_b_temp",
158         "ccom_avreg_1v2_supply",
159         "ccom_avreg_1v2_supply_extadc",
160         "ccom_avreg_1v8_supply",
161         "ccom_avreg_1v8_supply_extadc",
162         "controller_master_vptat",
163         "controller_master_internal_temp",
164         "controller_master_vptat_extadc",
165         "controller_master_internal_temp_extadc",
166         "controller_slave_vptat",
167         "controller_slave_internal_temp",
168         "controller_slave_vptat_extadc",
169         "controller_slave_internal_temp_extadc",
170         "sodimm_vout",
171         "sodimm_0_temp",
172         "sodimm_1_temp",
173         "phy0_vcc",
174         "phy1_vcc",
175         "controller_tdiode_temp",
176         "board_front_temp",
177         "board_back_temp",
178         "in_i1v8",
179         "in_i2v5",
180         "in_i3v3",
181         "in_i12v0",
182         "in_1v3",
183         "in_i1v3",
184 };
185
186 /* END MKCONFIG GENERATED MonitorStatNamesBlock */
187
188                                         const char *
189 efx_mon_stat_name(
190         __in                            efx_nic_t *enp,
191         __in                            efx_mon_stat_t id)
192 {
193         _NOTE(ARGUNUSED(enp))
194         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
195
196         EFSYS_ASSERT3U(id, <, EFX_MON_NSTATS);
197         return (__mon_stat_name[id]);
198 }
199
200 typedef struct _stat_description_t {
201         efx_mon_stat_t  stat;
202         const char      *desc;
203 } stat_description_t;
204
205 /* START MKCONFIG GENERATED MonitorStatDescriptionsBlock f072138f16d2e1f8 */
206 static const char *__mon_stat_description[] = {
207         MC_CMD_SENSOR_CONTROLLER_TEMP_ENUM_STR,
208         MC_CMD_SENSOR_PHY_COMMON_TEMP_ENUM_STR,
209         MC_CMD_SENSOR_CONTROLLER_COOLING_ENUM_STR,
210         MC_CMD_SENSOR_PHY0_TEMP_ENUM_STR,
211         MC_CMD_SENSOR_PHY0_COOLING_ENUM_STR,
212         MC_CMD_SENSOR_PHY1_TEMP_ENUM_STR,
213         MC_CMD_SENSOR_PHY1_COOLING_ENUM_STR,
214         MC_CMD_SENSOR_IN_1V0_ENUM_STR,
215         MC_CMD_SENSOR_IN_1V2_ENUM_STR,
216         MC_CMD_SENSOR_IN_1V8_ENUM_STR,
217         MC_CMD_SENSOR_IN_2V5_ENUM_STR,
218         MC_CMD_SENSOR_IN_3V3_ENUM_STR,
219         MC_CMD_SENSOR_IN_12V0_ENUM_STR,
220         MC_CMD_SENSOR_IN_1V2A_ENUM_STR,
221         MC_CMD_SENSOR_IN_VREF_ENUM_STR,
222         MC_CMD_SENSOR_OUT_VAOE_ENUM_STR,
223         MC_CMD_SENSOR_AOE_TEMP_ENUM_STR,
224         MC_CMD_SENSOR_PSU_AOE_TEMP_ENUM_STR,
225         MC_CMD_SENSOR_PSU_TEMP_ENUM_STR,
226         MC_CMD_SENSOR_FAN_0_ENUM_STR,
227         MC_CMD_SENSOR_FAN_1_ENUM_STR,
228         MC_CMD_SENSOR_FAN_2_ENUM_STR,
229         MC_CMD_SENSOR_FAN_3_ENUM_STR,
230         MC_CMD_SENSOR_FAN_4_ENUM_STR,
231         MC_CMD_SENSOR_IN_VAOE_ENUM_STR,
232         MC_CMD_SENSOR_OUT_IAOE_ENUM_STR,
233         MC_CMD_SENSOR_IN_IAOE_ENUM_STR,
234         MC_CMD_SENSOR_NIC_POWER_ENUM_STR,
235         MC_CMD_SENSOR_IN_0V9_ENUM_STR,
236         MC_CMD_SENSOR_IN_I0V9_ENUM_STR,
237         MC_CMD_SENSOR_IN_I1V2_ENUM_STR,
238         MC_CMD_SENSOR_IN_0V9_ADC_ENUM_STR,
239         MC_CMD_SENSOR_CONTROLLER_2_TEMP_ENUM_STR,
240         MC_CMD_SENSOR_VREG_INTERNAL_TEMP_ENUM_STR,
241         MC_CMD_SENSOR_VREG_0V9_TEMP_ENUM_STR,
242         MC_CMD_SENSOR_VREG_1V2_TEMP_ENUM_STR,
243         MC_CMD_SENSOR_CONTROLLER_VPTAT_ENUM_STR,
244         MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP_ENUM_STR,
245         MC_CMD_SENSOR_CONTROLLER_VPTAT_EXTADC_ENUM_STR,
246         MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP_EXTADC_ENUM_STR,
247         MC_CMD_SENSOR_AMBIENT_TEMP_ENUM_STR,
248         MC_CMD_SENSOR_AIRFLOW_ENUM_STR,
249         MC_CMD_SENSOR_VDD08D_VSS08D_CSR_ENUM_STR,
250         MC_CMD_SENSOR_VDD08D_VSS08D_CSR_EXTADC_ENUM_STR,
251         MC_CMD_SENSOR_HOTPOINT_TEMP_ENUM_STR,
252         MC_CMD_SENSOR_PHY_POWER_PORT0_ENUM_STR,
253         MC_CMD_SENSOR_PHY_POWER_PORT1_ENUM_STR,
254         MC_CMD_SENSOR_MUM_VCC_ENUM_STR,
255         MC_CMD_SENSOR_IN_0V9_A_ENUM_STR,
256         MC_CMD_SENSOR_IN_I0V9_A_ENUM_STR,
257         MC_CMD_SENSOR_VREG_0V9_A_TEMP_ENUM_STR,
258         MC_CMD_SENSOR_IN_0V9_B_ENUM_STR,
259         MC_CMD_SENSOR_IN_I0V9_B_ENUM_STR,
260         MC_CMD_SENSOR_VREG_0V9_B_TEMP_ENUM_STR,
261         MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY_ENUM_STR,
262         MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY_EXTADC_ENUM_STR,
263         MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY_ENUM_STR,
264         MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY_EXTADC_ENUM_STR,
265         MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT_ENUM_STR,
266         MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP_ENUM_STR,
267         MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT_EXTADC_ENUM_STR,
268         MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC_ENUM_STR,
269         MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT_ENUM_STR,
270         MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP_ENUM_STR,
271         MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT_EXTADC_ENUM_STR,
272         MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC_ENUM_STR,
273         MC_CMD_SENSOR_SODIMM_VOUT_ENUM_STR,
274         MC_CMD_SENSOR_SODIMM_0_TEMP_ENUM_STR,
275         MC_CMD_SENSOR_SODIMM_1_TEMP_ENUM_STR,
276         MC_CMD_SENSOR_PHY0_VCC_ENUM_STR,
277         MC_CMD_SENSOR_PHY1_VCC_ENUM_STR,
278         MC_CMD_SENSOR_CONTROLLER_TDIODE_TEMP_ENUM_STR,
279         MC_CMD_SENSOR_BOARD_FRONT_TEMP_ENUM_STR,
280         MC_CMD_SENSOR_BOARD_BACK_TEMP_ENUM_STR,
281         MC_CMD_SENSOR_IN_I1V8_ENUM_STR,
282         MC_CMD_SENSOR_IN_I2V5_ENUM_STR,
283         MC_CMD_SENSOR_IN_I3V3_ENUM_STR,
284         MC_CMD_SENSOR_IN_I12V0_ENUM_STR,
285         MC_CMD_SENSOR_IN_1V3_ENUM_STR,
286         MC_CMD_SENSOR_IN_I1V3_ENUM_STR,
287 };
288
289 /* END MKCONFIG GENERATED MonitorStatDescriptionsBlock */
290
291                                         const char *
292 efx_mon_stat_description(
293         __in                            efx_nic_t *enp,
294         __in                            efx_mon_stat_t id)
295 {
296         _NOTE(ARGUNUSED(enp))
297         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
298
299         EFSYS_ASSERT3U(id, <, EFX_MON_NSTATS);
300         return (__mon_stat_description[id]);
301 }
302
303 #endif  /* EFSYS_OPT_NAMES */
304
305 /* START MKCONFIG GENERATED MonitorMcdiMappingBlock 173eee0a5599996a */
306         __checkReturn                   boolean_t
307 efx_mon_mcdi_to_efx_stat(
308         __in                            int mcdi_index,
309         __out                           efx_mon_stat_t *statp)
310 {
311
312         if ((mcdi_index % (MC_CMD_SENSOR_PAGE0_NEXT + 1)) ==
313             MC_CMD_SENSOR_PAGE0_NEXT) {
314                 *statp = EFX_MON_NSTATS;
315                 return (B_FALSE);
316         }
317
318         switch (mcdi_index) {
319         case MC_CMD_SENSOR_IN_I0V9:
320                 *statp = EFX_MON_STAT_IN_I0V9;
321                 break;
322         case MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT_EXTADC:
323                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC;
324                 break;
325         case MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT:
326                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT;
327                 break;
328         case MC_CMD_SENSOR_PSU_TEMP:
329                 *statp = EFX_MON_STAT_PSU_TEMP;
330                 break;
331         case MC_CMD_SENSOR_FAN_2:
332                 *statp = EFX_MON_STAT_FAN_2;
333                 break;
334         case MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP_EXTADC:
335                 *statp = EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC;
336                 break;
337         case MC_CMD_SENSOR_BOARD_BACK_TEMP:
338                 *statp = EFX_MON_STAT_BOARD_BACK_TEMP;
339                 break;
340         case MC_CMD_SENSOR_IN_1V3:
341                 *statp = EFX_MON_STAT_IN_1V3;
342                 break;
343         case MC_CMD_SENSOR_CONTROLLER_TDIODE_TEMP:
344                 *statp = EFX_MON_STAT_CONTROLLER_TDIODE_TEMP;
345                 break;
346         case MC_CMD_SENSOR_IN_2V5:
347                 *statp = EFX_MON_STAT_IN_2V5;
348                 break;
349         case MC_CMD_SENSOR_PHY_COMMON_TEMP:
350                 *statp = EFX_MON_STAT_PHY_COMMON_TEMP;
351                 break;
352         case MC_CMD_SENSOR_PHY1_TEMP:
353                 *statp = EFX_MON_STAT_PHY1_TEMP;
354                 break;
355         case MC_CMD_SENSOR_VREG_INTERNAL_TEMP:
356                 *statp = EFX_MON_STAT_VREG_INTERNAL_TEMP;
357                 break;
358         case MC_CMD_SENSOR_IN_1V0:
359                 *statp = EFX_MON_STAT_IN_1V0;
360                 break;
361         case MC_CMD_SENSOR_FAN_1:
362                 *statp = EFX_MON_STAT_FAN_1;
363                 break;
364         case MC_CMD_SENSOR_IN_1V2:
365                 *statp = EFX_MON_STAT_IN_1V2;
366                 break;
367         case MC_CMD_SENSOR_FAN_3:
368                 *statp = EFX_MON_STAT_FAN_3;
369                 break;
370         case MC_CMD_SENSOR_IN_1V2A:
371                 *statp = EFX_MON_STAT_IN_1V2A;
372                 break;
373         case MC_CMD_SENSOR_SODIMM_0_TEMP:
374                 *statp = EFX_MON_STAT_SODIMM_0_TEMP;
375                 break;
376         case MC_CMD_SENSOR_IN_1V8:
377                 *statp = EFX_MON_STAT_IN_1V8;
378                 break;
379         case MC_CMD_SENSOR_IN_VREF:
380                 *statp = EFX_MON_STAT_IN_VREF;
381                 break;
382         case MC_CMD_SENSOR_SODIMM_VOUT:
383                 *statp = EFX_MON_STAT_SODIMM_VOUT;
384                 break;
385         case MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY:
386                 *statp = EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY;
387                 break;
388         case MC_CMD_SENSOR_IN_I1V2:
389                 *statp = EFX_MON_STAT_IN_I1V2;
390                 break;
391         case MC_CMD_SENSOR_IN_I1V3:
392                 *statp = EFX_MON_STAT_IN_I1V3;
393                 break;
394         case MC_CMD_SENSOR_AIRFLOW:
395                 *statp = EFX_MON_STAT_AIRFLOW;
396                 break;
397         case MC_CMD_SENSOR_HOTPOINT_TEMP:
398                 *statp = EFX_MON_STAT_HOTPOINT_TEMP;
399                 break;
400         case MC_CMD_SENSOR_VDD08D_VSS08D_CSR:
401                 *statp = EFX_MON_STAT_VDD08D_VSS08D_CSR;
402                 break;
403         case MC_CMD_SENSOR_AOE_TEMP:
404                 *statp = EFX_MON_STAT_AOE_TEMP;
405                 break;
406         case MC_CMD_SENSOR_IN_I1V8:
407                 *statp = EFX_MON_STAT_IN_I1V8;
408                 break;
409         case MC_CMD_SENSOR_IN_I2V5:
410                 *statp = EFX_MON_STAT_IN_I2V5;
411                 break;
412         case MC_CMD_SENSOR_PHY1_COOLING:
413                 *statp = EFX_MON_STAT_PHY1_COOLING;
414                 break;
415         case MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY_EXTADC:
416                 *statp = EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC;
417                 break;
418         case MC_CMD_SENSOR_IN_0V9_ADC:
419                 *statp = EFX_MON_STAT_IN_0V9_ADC;
420                 break;
421         case MC_CMD_SENSOR_VREG_0V9_A_TEMP:
422                 *statp = EFX_MON_STAT_VREG_0V9_A_TEMP;
423                 break;
424         case MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT:
425                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_VPTAT;
426                 break;
427         case MC_CMD_SENSOR_PHY0_VCC:
428                 *statp = EFX_MON_STAT_PHY0_VCC;
429                 break;
430         case MC_CMD_SENSOR_PHY0_COOLING:
431                 *statp = EFX_MON_STAT_PHY0_COOLING;
432                 break;
433         case MC_CMD_SENSOR_PSU_AOE_TEMP:
434                 *statp = EFX_MON_STAT_PSU_AOE_TEMP;
435                 break;
436         case MC_CMD_SENSOR_VREG_0V9_TEMP:
437                 *statp = EFX_MON_STAT_VREG_0V9_TEMP;
438                 break;
439         case MC_CMD_SENSOR_IN_I0V9_A:
440                 *statp = EFX_MON_STAT_IN_I0V9_A;
441                 break;
442         case MC_CMD_SENSOR_IN_I3V3:
443                 *statp = EFX_MON_STAT_IN_I3V3;
444                 break;
445         case MC_CMD_SENSOR_BOARD_FRONT_TEMP:
446                 *statp = EFX_MON_STAT_BOARD_FRONT_TEMP;
447                 break;
448         case MC_CMD_SENSOR_OUT_VAOE:
449                 *statp = EFX_MON_STAT_OUT_VAOE;
450                 break;
451         case MC_CMD_SENSOR_VDD08D_VSS08D_CSR_EXTADC:
452                 *statp = EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC;
453                 break;
454         case MC_CMD_SENSOR_IN_I12V0:
455                 *statp = EFX_MON_STAT_IN_I12V0;
456                 break;
457         case MC_CMD_SENSOR_PHY_POWER_PORT1:
458                 *statp = EFX_MON_STAT_PHY_POWER_PORT1;
459                 break;
460         case MC_CMD_SENSOR_PHY_POWER_PORT0:
461                 *statp = EFX_MON_STAT_PHY_POWER_PORT0;
462                 break;
463         case MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
464                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC;
465                 break;
466         case MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP:
467                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP;
468                 break;
469         case MC_CMD_SENSOR_CONTROLLER_TEMP:
470                 *statp = EFX_MON_STAT_CONTROLLER_TEMP;
471                 break;
472         case MC_CMD_SENSOR_IN_IAOE:
473                 *statp = EFX_MON_STAT_IN_IAOE;
474                 break;
475         case MC_CMD_SENSOR_IN_VAOE:
476                 *statp = EFX_MON_STAT_IN_VAOE;
477                 break;
478         case MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT_EXTADC:
479                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC;
480                 break;
481         case MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY:
482                 *statp = EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY;
483                 break;
484         case MC_CMD_SENSOR_PHY1_VCC:
485                 *statp = EFX_MON_STAT_PHY1_VCC;
486                 break;
487         case MC_CMD_SENSOR_CONTROLLER_COOLING:
488                 *statp = EFX_MON_STAT_CONTROLLER_COOLING;
489                 break;
490         case MC_CMD_SENSOR_AMBIENT_TEMP:
491                 *statp = EFX_MON_STAT_AMBIENT_TEMP;
492                 break;
493         case MC_CMD_SENSOR_IN_3V3:
494                 *statp = EFX_MON_STAT_IN_3V3;
495                 break;
496         case MC_CMD_SENSOR_PHY0_TEMP:
497                 *statp = EFX_MON_STAT_PHY0_TEMP;
498                 break;
499         case MC_CMD_SENSOR_SODIMM_1_TEMP:
500                 *statp = EFX_MON_STAT_SODIMM_1_TEMP;
501                 break;
502         case MC_CMD_SENSOR_MUM_VCC:
503                 *statp = EFX_MON_STAT_MUM_VCC;
504                 break;
505         case MC_CMD_SENSOR_VREG_0V9_B_TEMP:
506                 *statp = EFX_MON_STAT_VREG_0V9_B_TEMP;
507                 break;
508         case MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP:
509                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP;
510                 break;
511         case MC_CMD_SENSOR_FAN_4:
512                 *statp = EFX_MON_STAT_FAN_4;
513                 break;
514         case MC_CMD_SENSOR_CONTROLLER_2_TEMP:
515                 *statp = EFX_MON_STAT_CONTROLLER_2_TEMP;
516                 break;
517         case MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY_EXTADC:
518                 *statp = EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC;
519                 break;
520         case MC_CMD_SENSOR_IN_0V9_A:
521                 *statp = EFX_MON_STAT_IN_0V9_A;
522                 break;
523         case MC_CMD_SENSOR_CONTROLLER_VPTAT_EXTADC:
524                 *statp = EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC;
525                 break;
526         case MC_CMD_SENSOR_IN_0V9:
527                 *statp = EFX_MON_STAT_IN_0V9;
528                 break;
529         case MC_CMD_SENSOR_IN_I0V9_B:
530                 *statp = EFX_MON_STAT_IN_I0V9_B;
531                 break;
532         case MC_CMD_SENSOR_NIC_POWER:
533                 *statp = EFX_MON_STAT_NIC_POWER;
534                 break;
535         case MC_CMD_SENSOR_IN_12V0:
536                 *statp = EFX_MON_STAT_IN_12V0;
537                 break;
538         case MC_CMD_SENSOR_OUT_IAOE:
539                 *statp = EFX_MON_STAT_OUT_IAOE;
540                 break;
541         case MC_CMD_SENSOR_CONTROLLER_VPTAT:
542                 *statp = EFX_MON_STAT_CONTROLLER_VPTAT;
543                 break;
544         case MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
545                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC;
546                 break;
547         case MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP:
548                 *statp = EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP;
549                 break;
550         case MC_CMD_SENSOR_FAN_0:
551                 *statp = EFX_MON_STAT_FAN_0;
552                 break;
553         case MC_CMD_SENSOR_VREG_1V2_TEMP:
554                 *statp = EFX_MON_STAT_VREG_1V2_TEMP;
555                 break;
556         case MC_CMD_SENSOR_IN_0V9_B:
557                 *statp = EFX_MON_STAT_IN_0V9_B;
558                 break;
559         default:
560                 *statp = EFX_MON_NSTATS;
561                 break;
562         };
563
564         if (*statp == EFX_MON_NSTATS)
565                 goto fail1;
566
567         return (B_TRUE);
568
569 fail1:
570         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
571         return (B_FALSE);
572 };
573
574 /* END MKCONFIG GENERATED MonitorMcdiMappingBlock */
575
576 /* START MKCONFIG GENERATED MonitorStatisticUnitsBlock 2d447c656cc2d01d */
577         __checkReturn                   boolean_t
578 efx_mon_get_stat_unit(
579         __in                            efx_mon_stat_t stat,
580         __out                           efx_mon_stat_unit_t *unitp)
581 {
582         switch (stat) {
583         case EFX_MON_STAT_IN_1V0:
584         case EFX_MON_STAT_IN_1V2:
585         case EFX_MON_STAT_IN_1V8:
586         case EFX_MON_STAT_IN_2V5:
587         case EFX_MON_STAT_IN_3V3:
588         case EFX_MON_STAT_IN_12V0:
589         case EFX_MON_STAT_IN_1V2A:
590         case EFX_MON_STAT_IN_VREF:
591         case EFX_MON_STAT_OUT_VAOE:
592         case EFX_MON_STAT_IN_VAOE:
593         case EFX_MON_STAT_IN_0V9:
594         case EFX_MON_STAT_IN_0V9_ADC:
595         case EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC:
596         case EFX_MON_STAT_VDD08D_VSS08D_CSR:
597         case EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC:
598         case EFX_MON_STAT_MUM_VCC:
599         case EFX_MON_STAT_IN_0V9_A:
600         case EFX_MON_STAT_IN_0V9_B:
601         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY:
602         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC:
603         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY:
604         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC:
605         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT:
606         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC:
607         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT:
608         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC:
609         case EFX_MON_STAT_SODIMM_VOUT:
610         case EFX_MON_STAT_PHY0_VCC:
611         case EFX_MON_STAT_PHY1_VCC:
612         case EFX_MON_STAT_IN_1V3:
613                 *unitp = EFX_MON_STAT_UNIT_VOLTAGE_MV;
614                 break;
615         case EFX_MON_STAT_CONTROLLER_TEMP:
616         case EFX_MON_STAT_PHY_COMMON_TEMP:
617         case EFX_MON_STAT_PHY0_TEMP:
618         case EFX_MON_STAT_PHY1_TEMP:
619         case EFX_MON_STAT_AOE_TEMP:
620         case EFX_MON_STAT_PSU_AOE_TEMP:
621         case EFX_MON_STAT_PSU_TEMP:
622         case EFX_MON_STAT_CONTROLLER_2_TEMP:
623         case EFX_MON_STAT_VREG_INTERNAL_TEMP:
624         case EFX_MON_STAT_VREG_0V9_TEMP:
625         case EFX_MON_STAT_VREG_1V2_TEMP:
626         case EFX_MON_STAT_CONTROLLER_VPTAT:
627         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP:
628         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC:
629         case EFX_MON_STAT_AMBIENT_TEMP:
630         case EFX_MON_STAT_HOTPOINT_TEMP:
631         case EFX_MON_STAT_VREG_0V9_A_TEMP:
632         case EFX_MON_STAT_VREG_0V9_B_TEMP:
633         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP:
634         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
635         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP:
636         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
637         case EFX_MON_STAT_SODIMM_0_TEMP:
638         case EFX_MON_STAT_SODIMM_1_TEMP:
639         case EFX_MON_STAT_CONTROLLER_TDIODE_TEMP:
640         case EFX_MON_STAT_BOARD_FRONT_TEMP:
641         case EFX_MON_STAT_BOARD_BACK_TEMP:
642                 *unitp = EFX_MON_STAT_UNIT_TEMP_C;
643                 break;
644         case EFX_MON_STAT_CONTROLLER_COOLING:
645         case EFX_MON_STAT_PHY0_COOLING:
646         case EFX_MON_STAT_PHY1_COOLING:
647         case EFX_MON_STAT_AIRFLOW:
648         case EFX_MON_STAT_PHY_POWER_PORT0:
649         case EFX_MON_STAT_PHY_POWER_PORT1:
650                 *unitp = EFX_MON_STAT_UNIT_BOOL;
651                 break;
652         case EFX_MON_STAT_NIC_POWER:
653                 *unitp = EFX_MON_STAT_UNIT_POWER_W;
654                 break;
655         case EFX_MON_STAT_OUT_IAOE:
656         case EFX_MON_STAT_IN_IAOE:
657         case EFX_MON_STAT_IN_I0V9:
658         case EFX_MON_STAT_IN_I1V2:
659         case EFX_MON_STAT_IN_I0V9_A:
660         case EFX_MON_STAT_IN_I0V9_B:
661         case EFX_MON_STAT_IN_I1V8:
662         case EFX_MON_STAT_IN_I2V5:
663         case EFX_MON_STAT_IN_I3V3:
664         case EFX_MON_STAT_IN_I12V0:
665         case EFX_MON_STAT_IN_I1V3:
666                 *unitp = EFX_MON_STAT_UNIT_CURRENT_MA;
667                 break;
668         case EFX_MON_STAT_FAN_0:
669         case EFX_MON_STAT_FAN_1:
670         case EFX_MON_STAT_FAN_2:
671         case EFX_MON_STAT_FAN_3:
672         case EFX_MON_STAT_FAN_4:
673                 *unitp = EFX_MON_STAT_UNIT_RPM;
674                 break;
675         default:
676                 *unitp = EFX_MON_STAT_UNIT_UNKNOWN;
677                 break;
678         };
679
680         if (*unitp == EFX_MON_STAT_UNIT_UNKNOWN)
681                 goto fail1;
682
683         return (B_TRUE);
684
685 fail1:
686         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
687         return (B_FALSE);
688 };
689
690 /* END MKCONFIG GENERATED MonitorStatisticUnitsBlock */
691
692 /* START MKCONFIG GENERATED MonitorStatisticPortsBlock 1719b751d842534f */
693         __checkReturn                   boolean_t
694 efx_mon_get_stat_portmap(
695         __in                            efx_mon_stat_t stat,
696         __out                           efx_mon_stat_portmask_t *maskp)
697 {
698
699         switch (stat) {
700         case EFX_MON_STAT_PHY1_TEMP:
701         case EFX_MON_STAT_PHY1_COOLING:
702         case EFX_MON_STAT_PHY_POWER_PORT1:
703                 *maskp = EFX_MON_STAT_PORTMAP_PORT1;
704                 break;
705         case EFX_MON_STAT_CONTROLLER_TEMP:
706         case EFX_MON_STAT_PHY_COMMON_TEMP:
707         case EFX_MON_STAT_CONTROLLER_COOLING:
708         case EFX_MON_STAT_IN_1V0:
709         case EFX_MON_STAT_IN_1V2:
710         case EFX_MON_STAT_IN_1V8:
711         case EFX_MON_STAT_IN_2V5:
712         case EFX_MON_STAT_IN_3V3:
713         case EFX_MON_STAT_IN_12V0:
714         case EFX_MON_STAT_IN_1V2A:
715         case EFX_MON_STAT_IN_VREF:
716         case EFX_MON_STAT_OUT_VAOE:
717         case EFX_MON_STAT_AOE_TEMP:
718         case EFX_MON_STAT_PSU_AOE_TEMP:
719         case EFX_MON_STAT_PSU_TEMP:
720         case EFX_MON_STAT_FAN_0:
721         case EFX_MON_STAT_FAN_1:
722         case EFX_MON_STAT_FAN_2:
723         case EFX_MON_STAT_FAN_3:
724         case EFX_MON_STAT_FAN_4:
725         case EFX_MON_STAT_IN_VAOE:
726         case EFX_MON_STAT_OUT_IAOE:
727         case EFX_MON_STAT_IN_IAOE:
728         case EFX_MON_STAT_NIC_POWER:
729         case EFX_MON_STAT_IN_0V9:
730         case EFX_MON_STAT_IN_I0V9:
731         case EFX_MON_STAT_IN_I1V2:
732         case EFX_MON_STAT_IN_0V9_ADC:
733         case EFX_MON_STAT_CONTROLLER_2_TEMP:
734         case EFX_MON_STAT_VREG_INTERNAL_TEMP:
735         case EFX_MON_STAT_VREG_0V9_TEMP:
736         case EFX_MON_STAT_VREG_1V2_TEMP:
737         case EFX_MON_STAT_CONTROLLER_VPTAT:
738         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP:
739         case EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC:
740         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC:
741         case EFX_MON_STAT_AMBIENT_TEMP:
742         case EFX_MON_STAT_AIRFLOW:
743         case EFX_MON_STAT_VDD08D_VSS08D_CSR:
744         case EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC:
745         case EFX_MON_STAT_HOTPOINT_TEMP:
746         case EFX_MON_STAT_MUM_VCC:
747         case EFX_MON_STAT_IN_0V9_A:
748         case EFX_MON_STAT_IN_I0V9_A:
749         case EFX_MON_STAT_VREG_0V9_A_TEMP:
750         case EFX_MON_STAT_IN_0V9_B:
751         case EFX_MON_STAT_IN_I0V9_B:
752         case EFX_MON_STAT_VREG_0V9_B_TEMP:
753         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY:
754         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC:
755         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY:
756         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC:
757         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT:
758         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP:
759         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC:
760         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
761         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT:
762         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP:
763         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC:
764         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
765         case EFX_MON_STAT_SODIMM_VOUT:
766         case EFX_MON_STAT_SODIMM_0_TEMP:
767         case EFX_MON_STAT_SODIMM_1_TEMP:
768         case EFX_MON_STAT_PHY0_VCC:
769         case EFX_MON_STAT_PHY1_VCC:
770         case EFX_MON_STAT_CONTROLLER_TDIODE_TEMP:
771         case EFX_MON_STAT_BOARD_FRONT_TEMP:
772         case EFX_MON_STAT_BOARD_BACK_TEMP:
773         case EFX_MON_STAT_IN_I1V8:
774         case EFX_MON_STAT_IN_I2V5:
775         case EFX_MON_STAT_IN_I3V3:
776         case EFX_MON_STAT_IN_I12V0:
777         case EFX_MON_STAT_IN_1V3:
778         case EFX_MON_STAT_IN_I1V3:
779                 *maskp = EFX_MON_STAT_PORTMAP_ALL;
780                 break;
781         case EFX_MON_STAT_PHY0_TEMP:
782         case EFX_MON_STAT_PHY0_COOLING:
783         case EFX_MON_STAT_PHY_POWER_PORT0:
784                 *maskp = EFX_MON_STAT_PORTMAP_PORT0;
785                 break;
786         default:
787                 *maskp = EFX_MON_STAT_PORTMAP_UNKNOWN;
788                 break;
789         };
790
791         if (*maskp == EFX_MON_STAT_PORTMAP_UNKNOWN)
792                 goto fail1;
793
794         return (B_TRUE);
795
796 fail1:
797         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
798         return (B_FALSE);
799 };
800
801 /* END MKCONFIG GENERATED MonitorStatisticPortsBlock */
802
803         __checkReturn                   efx_rc_t
804 efx_mon_stats_update(
805         __in                            efx_nic_t *enp,
806         __in                            efsys_mem_t *esmp,
807         __inout_ecount(EFX_MON_NSTATS)  efx_mon_stat_value_t *values)
808 {
809         efx_mon_t *emp = &(enp->en_mon);
810         const efx_mon_ops_t *emop = emp->em_emop;
811
812         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
813         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MON);
814
815         return (emop->emo_stats_update(enp, esmp, values));
816 }
817
818 #endif  /* EFSYS_OPT_MON_STATS */
819
820                 void
821 efx_mon_fini(
822         __in    efx_nic_t *enp)
823 {
824         efx_mon_t *emp = &(enp->en_mon);
825
826         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
827         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
828         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MON);
829
830         emp->em_emop = NULL;
831
832         emp->em_type = EFX_MON_INVALID;
833
834         enp->en_mod_flags &= ~EFX_MOD_MON;
835 }