34689921df8f06847e203fb700cc1c576066ca90
[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 /* START MKCONFIG GENERATED MonitorMcdiMappingBlock 362875db87a4e7da */
189         __checkReturn                   boolean_t
190 efx_mon_mcdi_to_efx_stat(
191         __in                            int mcdi_index,
192         __out                           efx_mon_stat_t *statp)
193 {
194
195         if ((mcdi_index % (MC_CMD_SENSOR_PAGE0_NEXT + 1)) ==
196             MC_CMD_SENSOR_PAGE0_NEXT) {
197                 *statp = EFX_MON_NSTATS;
198                 return (B_FALSE);
199         }
200
201         switch (mcdi_index) {
202         case MC_CMD_SENSOR_IN_I0V9:
203                 *statp = EFX_MON_STAT_IN_I0V9;
204                 break;
205         case MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT_EXTADC:
206                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC;
207                 break;
208         case MC_CMD_SENSOR_CONTROLLER_SLAVE_VPTAT:
209                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT;
210                 break;
211         case MC_CMD_SENSOR_PSU_TEMP:
212                 *statp = EFX_MON_STAT_PSU_TEMP;
213                 break;
214         case MC_CMD_SENSOR_FAN_2:
215                 *statp = EFX_MON_STAT_FAN_2;
216                 break;
217         case MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP_EXTADC:
218                 *statp = EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC;
219                 break;
220         case MC_CMD_SENSOR_BOARD_BACK_TEMP:
221                 *statp = EFX_MON_STAT_BOARD_BACK_TEMP;
222                 break;
223         case MC_CMD_SENSOR_IN_1V3:
224                 *statp = EFX_MON_STAT_IN_1V3;
225                 break;
226         case MC_CMD_SENSOR_CONTROLLER_TDIODE_TEMP:
227                 *statp = EFX_MON_STAT_CONTROLLER_TDIODE_TEMP;
228                 break;
229         case MC_CMD_SENSOR_IN_2V5:
230                 *statp = EFX_MON_STAT_IN_2V5;
231                 break;
232         case MC_CMD_SENSOR_PHY_COMMON_TEMP:
233                 *statp = EFX_MON_STAT_PHY_COMMON_TEMP;
234                 break;
235         case MC_CMD_SENSOR_PHY1_TEMP:
236                 *statp = EFX_MON_STAT_PHY1_TEMP;
237                 break;
238         case MC_CMD_SENSOR_VREG_INTERNAL_TEMP:
239                 *statp = EFX_MON_STAT_VREG_INTERNAL_TEMP;
240                 break;
241         case MC_CMD_SENSOR_IN_1V0:
242                 *statp = EFX_MON_STAT_IN_1V0;
243                 break;
244         case MC_CMD_SENSOR_FAN_1:
245                 *statp = EFX_MON_STAT_FAN_1;
246                 break;
247         case MC_CMD_SENSOR_IN_1V2:
248                 *statp = EFX_MON_STAT_IN_1V2;
249                 break;
250         case MC_CMD_SENSOR_FAN_3:
251                 *statp = EFX_MON_STAT_FAN_3;
252                 break;
253         case MC_CMD_SENSOR_IN_1V2A:
254                 *statp = EFX_MON_STAT_IN_1V2A;
255                 break;
256         case MC_CMD_SENSOR_SODIMM_0_TEMP:
257                 *statp = EFX_MON_STAT_SODIMM_0_TEMP;
258                 break;
259         case MC_CMD_SENSOR_IN_1V8:
260                 *statp = EFX_MON_STAT_IN_1V8;
261                 break;
262         case MC_CMD_SENSOR_IN_VREF:
263                 *statp = EFX_MON_STAT_IN_VREF;
264                 break;
265         case MC_CMD_SENSOR_SODIMM_VOUT:
266                 *statp = EFX_MON_STAT_SODIMM_VOUT;
267                 break;
268         case MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY:
269                 *statp = EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY;
270                 break;
271         case MC_CMD_SENSOR_IN_I1V2:
272                 *statp = EFX_MON_STAT_IN_I1V2;
273                 break;
274         case MC_CMD_SENSOR_IN_I1V3:
275                 *statp = EFX_MON_STAT_IN_I1V3;
276                 break;
277         case MC_CMD_SENSOR_AIRFLOW:
278                 *statp = EFX_MON_STAT_AIRFLOW;
279                 break;
280         case MC_CMD_SENSOR_HOTPOINT_TEMP:
281                 *statp = EFX_MON_STAT_HOTPOINT_TEMP;
282                 break;
283         case MC_CMD_SENSOR_VDD08D_VSS08D_CSR:
284                 *statp = EFX_MON_STAT_VDD08D_VSS08D_CSR;
285                 break;
286         case MC_CMD_SENSOR_AOE_TEMP:
287                 *statp = EFX_MON_STAT_AOE_TEMP;
288                 break;
289         case MC_CMD_SENSOR_IN_I1V8:
290                 *statp = EFX_MON_STAT_IN_I1V8;
291                 break;
292         case MC_CMD_SENSOR_IN_I2V5:
293                 *statp = EFX_MON_STAT_IN_I2V5;
294                 break;
295         case MC_CMD_SENSOR_PHY1_COOLING:
296                 *statp = EFX_MON_STAT_PHY1_COOLING;
297                 break;
298         case MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY_EXTADC:
299                 *statp = EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC;
300                 break;
301         case MC_CMD_SENSOR_IN_0V9_ADC:
302                 *statp = EFX_MON_STAT_IN_0V9_ADC;
303                 break;
304         case MC_CMD_SENSOR_VREG_0V9_A_TEMP:
305                 *statp = EFX_MON_STAT_VREG_0V9_A_TEMP;
306                 break;
307         case MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT:
308                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_VPTAT;
309                 break;
310         case MC_CMD_SENSOR_PHY0_VCC:
311                 *statp = EFX_MON_STAT_PHY0_VCC;
312                 break;
313         case MC_CMD_SENSOR_PHY0_COOLING:
314                 *statp = EFX_MON_STAT_PHY0_COOLING;
315                 break;
316         case MC_CMD_SENSOR_PSU_AOE_TEMP:
317                 *statp = EFX_MON_STAT_PSU_AOE_TEMP;
318                 break;
319         case MC_CMD_SENSOR_VREG_0V9_TEMP:
320                 *statp = EFX_MON_STAT_VREG_0V9_TEMP;
321                 break;
322         case MC_CMD_SENSOR_IN_I0V9_A:
323                 *statp = EFX_MON_STAT_IN_I0V9_A;
324                 break;
325         case MC_CMD_SENSOR_IN_I3V3:
326                 *statp = EFX_MON_STAT_IN_I3V3;
327                 break;
328         case MC_CMD_SENSOR_BOARD_FRONT_TEMP:
329                 *statp = EFX_MON_STAT_BOARD_FRONT_TEMP;
330                 break;
331         case MC_CMD_SENSOR_OUT_VAOE:
332                 *statp = EFX_MON_STAT_OUT_VAOE;
333                 break;
334         case MC_CMD_SENSOR_VDD08D_VSS08D_CSR_EXTADC:
335                 *statp = EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC;
336                 break;
337         case MC_CMD_SENSOR_IN_I12V0:
338                 *statp = EFX_MON_STAT_IN_I12V0;
339                 break;
340         case MC_CMD_SENSOR_PHY_POWER_PORT1:
341                 *statp = EFX_MON_STAT_PHY_POWER_PORT1;
342                 break;
343         case MC_CMD_SENSOR_PHY_POWER_PORT0:
344                 *statp = EFX_MON_STAT_PHY_POWER_PORT0;
345                 break;
346         case MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
347                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC;
348                 break;
349         case MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP:
350                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP;
351                 break;
352         case MC_CMD_SENSOR_CONTROLLER_TEMP:
353                 *statp = EFX_MON_STAT_CONTROLLER_TEMP;
354                 break;
355         case MC_CMD_SENSOR_IN_IAOE:
356                 *statp = EFX_MON_STAT_IN_IAOE;
357                 break;
358         case MC_CMD_SENSOR_IN_VAOE:
359                 *statp = EFX_MON_STAT_IN_VAOE;
360                 break;
361         case MC_CMD_SENSOR_CONTROLLER_MASTER_VPTAT_EXTADC:
362                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC;
363                 break;
364         case MC_CMD_SENSOR_CCOM_AVREG_1V8_SUPPLY:
365                 *statp = EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY;
366                 break;
367         case MC_CMD_SENSOR_PHY1_VCC:
368                 *statp = EFX_MON_STAT_PHY1_VCC;
369                 break;
370         case MC_CMD_SENSOR_CONTROLLER_COOLING:
371                 *statp = EFX_MON_STAT_CONTROLLER_COOLING;
372                 break;
373         case MC_CMD_SENSOR_AMBIENT_TEMP:
374                 *statp = EFX_MON_STAT_AMBIENT_TEMP;
375                 break;
376         case MC_CMD_SENSOR_IN_3V3:
377                 *statp = EFX_MON_STAT_IN_3V3;
378                 break;
379         case MC_CMD_SENSOR_PHY0_TEMP:
380                 *statp = EFX_MON_STAT_PHY0_TEMP;
381                 break;
382         case MC_CMD_SENSOR_SODIMM_1_TEMP:
383                 *statp = EFX_MON_STAT_SODIMM_1_TEMP;
384                 break;
385         case MC_CMD_SENSOR_MUM_VCC:
386                 *statp = EFX_MON_STAT_MUM_VCC;
387                 break;
388         case MC_CMD_SENSOR_VREG_0V9_B_TEMP:
389                 *statp = EFX_MON_STAT_VREG_0V9_B_TEMP;
390                 break;
391         case MC_CMD_SENSOR_CONTROLLER_SLAVE_INTERNAL_TEMP:
392                 *statp = EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP;
393                 break;
394         case MC_CMD_SENSOR_FAN_4:
395                 *statp = EFX_MON_STAT_FAN_4;
396                 break;
397         case MC_CMD_SENSOR_CONTROLLER_2_TEMP:
398                 *statp = EFX_MON_STAT_CONTROLLER_2_TEMP;
399                 break;
400         case MC_CMD_SENSOR_CCOM_AVREG_1V2_SUPPLY_EXTADC:
401                 *statp = EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC;
402                 break;
403         case MC_CMD_SENSOR_IN_0V9_A:
404                 *statp = EFX_MON_STAT_IN_0V9_A;
405                 break;
406         case MC_CMD_SENSOR_CONTROLLER_VPTAT_EXTADC:
407                 *statp = EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC;
408                 break;
409         case MC_CMD_SENSOR_IN_0V9:
410                 *statp = EFX_MON_STAT_IN_0V9;
411                 break;
412         case MC_CMD_SENSOR_IN_I0V9_B:
413                 *statp = EFX_MON_STAT_IN_I0V9_B;
414                 break;
415         case MC_CMD_SENSOR_NIC_POWER:
416                 *statp = EFX_MON_STAT_NIC_POWER;
417                 break;
418         case MC_CMD_SENSOR_IN_12V0:
419                 *statp = EFX_MON_STAT_IN_12V0;
420                 break;
421         case MC_CMD_SENSOR_OUT_IAOE:
422                 *statp = EFX_MON_STAT_OUT_IAOE;
423                 break;
424         case MC_CMD_SENSOR_CONTROLLER_VPTAT:
425                 *statp = EFX_MON_STAT_CONTROLLER_VPTAT;
426                 break;
427         case MC_CMD_SENSOR_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
428                 *statp = EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC;
429                 break;
430         case MC_CMD_SENSOR_CONTROLLER_INTERNAL_TEMP:
431                 *statp = EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP;
432                 break;
433         case MC_CMD_SENSOR_FAN_0:
434                 *statp = EFX_MON_STAT_FAN_0;
435                 break;
436         case MC_CMD_SENSOR_VREG_1V2_TEMP:
437                 *statp = EFX_MON_STAT_VREG_1V2_TEMP;
438                 break;
439         case MC_CMD_SENSOR_IN_0V9_B:
440                 *statp = EFX_MON_STAT_IN_0V9_B;
441                 break;
442         default:
443                 *statp = EFX_MON_NSTATS;
444                 break;
445         };
446
447         if (*statp == EFX_MON_NSTATS)
448                 goto fail1;
449
450         return (B_TRUE);
451
452 fail1:
453         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
454         return (B_FALSE);
455 };
456
457 /* END MKCONFIG GENERATED MonitorMcdiMappingBlock */
458
459 /* START MKCONFIG GENERATED MonitorStatisticUnitsBlock 2d447c656cc2d01d */
460         __checkReturn                   boolean_t
461 efx_mon_get_stat_unit(
462         __in                            efx_mon_stat_t stat,
463         __out                           efx_mon_stat_unit_t *unitp)
464 {
465         switch (stat) {
466         case EFX_MON_STAT_IN_1V0:
467         case EFX_MON_STAT_IN_1V2:
468         case EFX_MON_STAT_IN_1V8:
469         case EFX_MON_STAT_IN_2V5:
470         case EFX_MON_STAT_IN_3V3:
471         case EFX_MON_STAT_IN_12V0:
472         case EFX_MON_STAT_IN_1V2A:
473         case EFX_MON_STAT_IN_VREF:
474         case EFX_MON_STAT_OUT_VAOE:
475         case EFX_MON_STAT_IN_VAOE:
476         case EFX_MON_STAT_IN_0V9:
477         case EFX_MON_STAT_IN_0V9_ADC:
478         case EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC:
479         case EFX_MON_STAT_VDD08D_VSS08D_CSR:
480         case EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC:
481         case EFX_MON_STAT_MUM_VCC:
482         case EFX_MON_STAT_IN_0V9_A:
483         case EFX_MON_STAT_IN_0V9_B:
484         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY:
485         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC:
486         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY:
487         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC:
488         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT:
489         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC:
490         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT:
491         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC:
492         case EFX_MON_STAT_SODIMM_VOUT:
493         case EFX_MON_STAT_PHY0_VCC:
494         case EFX_MON_STAT_PHY1_VCC:
495         case EFX_MON_STAT_IN_1V3:
496                 *unitp = EFX_MON_STAT_UNIT_VOLTAGE_MV;
497                 break;
498         case EFX_MON_STAT_CONTROLLER_TEMP:
499         case EFX_MON_STAT_PHY_COMMON_TEMP:
500         case EFX_MON_STAT_PHY0_TEMP:
501         case EFX_MON_STAT_PHY1_TEMP:
502         case EFX_MON_STAT_AOE_TEMP:
503         case EFX_MON_STAT_PSU_AOE_TEMP:
504         case EFX_MON_STAT_PSU_TEMP:
505         case EFX_MON_STAT_CONTROLLER_2_TEMP:
506         case EFX_MON_STAT_VREG_INTERNAL_TEMP:
507         case EFX_MON_STAT_VREG_0V9_TEMP:
508         case EFX_MON_STAT_VREG_1V2_TEMP:
509         case EFX_MON_STAT_CONTROLLER_VPTAT:
510         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP:
511         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC:
512         case EFX_MON_STAT_AMBIENT_TEMP:
513         case EFX_MON_STAT_HOTPOINT_TEMP:
514         case EFX_MON_STAT_VREG_0V9_A_TEMP:
515         case EFX_MON_STAT_VREG_0V9_B_TEMP:
516         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP:
517         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
518         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP:
519         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
520         case EFX_MON_STAT_SODIMM_0_TEMP:
521         case EFX_MON_STAT_SODIMM_1_TEMP:
522         case EFX_MON_STAT_CONTROLLER_TDIODE_TEMP:
523         case EFX_MON_STAT_BOARD_FRONT_TEMP:
524         case EFX_MON_STAT_BOARD_BACK_TEMP:
525                 *unitp = EFX_MON_STAT_UNIT_TEMP_C;
526                 break;
527         case EFX_MON_STAT_CONTROLLER_COOLING:
528         case EFX_MON_STAT_PHY0_COOLING:
529         case EFX_MON_STAT_PHY1_COOLING:
530         case EFX_MON_STAT_AIRFLOW:
531         case EFX_MON_STAT_PHY_POWER_PORT0:
532         case EFX_MON_STAT_PHY_POWER_PORT1:
533                 *unitp = EFX_MON_STAT_UNIT_BOOL;
534                 break;
535         case EFX_MON_STAT_NIC_POWER:
536                 *unitp = EFX_MON_STAT_UNIT_POWER_W;
537                 break;
538         case EFX_MON_STAT_OUT_IAOE:
539         case EFX_MON_STAT_IN_IAOE:
540         case EFX_MON_STAT_IN_I0V9:
541         case EFX_MON_STAT_IN_I1V2:
542         case EFX_MON_STAT_IN_I0V9_A:
543         case EFX_MON_STAT_IN_I0V9_B:
544         case EFX_MON_STAT_IN_I1V8:
545         case EFX_MON_STAT_IN_I2V5:
546         case EFX_MON_STAT_IN_I3V3:
547         case EFX_MON_STAT_IN_I12V0:
548         case EFX_MON_STAT_IN_I1V3:
549                 *unitp = EFX_MON_STAT_UNIT_CURRENT_MA;
550                 break;
551         case EFX_MON_STAT_FAN_0:
552         case EFX_MON_STAT_FAN_1:
553         case EFX_MON_STAT_FAN_2:
554         case EFX_MON_STAT_FAN_3:
555         case EFX_MON_STAT_FAN_4:
556                 *unitp = EFX_MON_STAT_UNIT_RPM;
557                 break;
558         default:
559                 *unitp = EFX_MON_STAT_UNIT_UNKNOWN;
560                 break;
561         };
562
563         if (*unitp == EFX_MON_STAT_UNIT_UNKNOWN)
564                 goto fail1;
565
566         return (B_TRUE);
567
568 fail1:
569         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
570         return (B_FALSE);
571 };
572
573 /* END MKCONFIG GENERATED MonitorStatisticUnitsBlock */
574
575 /* START MKCONFIG GENERATED MonitorStatisticPortsBlock 1719b751d842534f */
576         __checkReturn                   boolean_t
577 efx_mon_get_stat_portmap(
578         __in                            efx_mon_stat_t stat,
579         __out                           efx_mon_stat_portmask_t *maskp)
580 {
581
582         switch (stat) {
583         case EFX_MON_STAT_PHY1_TEMP:
584         case EFX_MON_STAT_PHY1_COOLING:
585         case EFX_MON_STAT_PHY_POWER_PORT1:
586                 *maskp = EFX_MON_STAT_PORTMAP_PORT1;
587                 break;
588         case EFX_MON_STAT_CONTROLLER_TEMP:
589         case EFX_MON_STAT_PHY_COMMON_TEMP:
590         case EFX_MON_STAT_CONTROLLER_COOLING:
591         case EFX_MON_STAT_IN_1V0:
592         case EFX_MON_STAT_IN_1V2:
593         case EFX_MON_STAT_IN_1V8:
594         case EFX_MON_STAT_IN_2V5:
595         case EFX_MON_STAT_IN_3V3:
596         case EFX_MON_STAT_IN_12V0:
597         case EFX_MON_STAT_IN_1V2A:
598         case EFX_MON_STAT_IN_VREF:
599         case EFX_MON_STAT_OUT_VAOE:
600         case EFX_MON_STAT_AOE_TEMP:
601         case EFX_MON_STAT_PSU_AOE_TEMP:
602         case EFX_MON_STAT_PSU_TEMP:
603         case EFX_MON_STAT_FAN_0:
604         case EFX_MON_STAT_FAN_1:
605         case EFX_MON_STAT_FAN_2:
606         case EFX_MON_STAT_FAN_3:
607         case EFX_MON_STAT_FAN_4:
608         case EFX_MON_STAT_IN_VAOE:
609         case EFX_MON_STAT_OUT_IAOE:
610         case EFX_MON_STAT_IN_IAOE:
611         case EFX_MON_STAT_NIC_POWER:
612         case EFX_MON_STAT_IN_0V9:
613         case EFX_MON_STAT_IN_I0V9:
614         case EFX_MON_STAT_IN_I1V2:
615         case EFX_MON_STAT_IN_0V9_ADC:
616         case EFX_MON_STAT_CONTROLLER_2_TEMP:
617         case EFX_MON_STAT_VREG_INTERNAL_TEMP:
618         case EFX_MON_STAT_VREG_0V9_TEMP:
619         case EFX_MON_STAT_VREG_1V2_TEMP:
620         case EFX_MON_STAT_CONTROLLER_VPTAT:
621         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP:
622         case EFX_MON_STAT_CONTROLLER_VPTAT_EXTADC:
623         case EFX_MON_STAT_CONTROLLER_INTERNAL_TEMP_EXTADC:
624         case EFX_MON_STAT_AMBIENT_TEMP:
625         case EFX_MON_STAT_AIRFLOW:
626         case EFX_MON_STAT_VDD08D_VSS08D_CSR:
627         case EFX_MON_STAT_VDD08D_VSS08D_CSR_EXTADC:
628         case EFX_MON_STAT_HOTPOINT_TEMP:
629         case EFX_MON_STAT_MUM_VCC:
630         case EFX_MON_STAT_IN_0V9_A:
631         case EFX_MON_STAT_IN_I0V9_A:
632         case EFX_MON_STAT_VREG_0V9_A_TEMP:
633         case EFX_MON_STAT_IN_0V9_B:
634         case EFX_MON_STAT_IN_I0V9_B:
635         case EFX_MON_STAT_VREG_0V9_B_TEMP:
636         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY:
637         case EFX_MON_STAT_CCOM_AVREG_1V2_SUPPLY_EXTADC:
638         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY:
639         case EFX_MON_STAT_CCOM_AVREG_1V8_SUPPLY_EXTADC:
640         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT:
641         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP:
642         case EFX_MON_STAT_CONTROLLER_MASTER_VPTAT_EXTADC:
643         case EFX_MON_STAT_CONTROLLER_MASTER_INTERNAL_TEMP_EXTADC:
644         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT:
645         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP:
646         case EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXTADC:
647         case EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXTADC:
648         case EFX_MON_STAT_SODIMM_VOUT:
649         case EFX_MON_STAT_SODIMM_0_TEMP:
650         case EFX_MON_STAT_SODIMM_1_TEMP:
651         case EFX_MON_STAT_PHY0_VCC:
652         case EFX_MON_STAT_PHY1_VCC:
653         case EFX_MON_STAT_CONTROLLER_TDIODE_TEMP:
654         case EFX_MON_STAT_BOARD_FRONT_TEMP:
655         case EFX_MON_STAT_BOARD_BACK_TEMP:
656         case EFX_MON_STAT_IN_I1V8:
657         case EFX_MON_STAT_IN_I2V5:
658         case EFX_MON_STAT_IN_I3V3:
659         case EFX_MON_STAT_IN_I12V0:
660         case EFX_MON_STAT_IN_1V3:
661         case EFX_MON_STAT_IN_I1V3:
662                 *maskp = EFX_MON_STAT_PORTMAP_ALL;
663                 break;
664         case EFX_MON_STAT_PHY0_TEMP:
665         case EFX_MON_STAT_PHY0_COOLING:
666         case EFX_MON_STAT_PHY_POWER_PORT0:
667                 *maskp = EFX_MON_STAT_PORTMAP_PORT0;
668                 break;
669         default:
670                 *maskp = EFX_MON_STAT_PORTMAP_UNKNOWN;
671                 break;
672         };
673
674         if (*maskp == EFX_MON_STAT_PORTMAP_UNKNOWN)
675                 goto fail1;
676
677         return (B_TRUE);
678
679 fail1:
680         EFSYS_PROBE1(fail1, boolean_t, B_TRUE);
681         return (B_FALSE);
682 };
683
684 /* END MKCONFIG GENERATED MonitorStatisticPortsBlock */
685
686 extern                                  const char *
687 efx_mon_stat_name(
688         __in                            efx_nic_t *enp,
689         __in                            efx_mon_stat_t id)
690 {
691         _NOTE(ARGUNUSED(enp))
692         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
693
694         EFSYS_ASSERT3U(id, <, EFX_MON_NSTATS);
695         return (__mon_stat_name[id]);
696 }
697
698 #endif  /* EFSYS_OPT_NAMES */
699
700         __checkReturn                   efx_rc_t
701 efx_mon_stats_update(
702         __in                            efx_nic_t *enp,
703         __in                            efsys_mem_t *esmp,
704         __inout_ecount(EFX_MON_NSTATS)  efx_mon_stat_value_t *values)
705 {
706         efx_mon_t *emp = &(enp->en_mon);
707         const efx_mon_ops_t *emop = emp->em_emop;
708
709         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
710         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MON);
711
712         return (emop->emo_stats_update(enp, esmp, values));
713 }
714
715 #endif  /* EFSYS_OPT_MON_STATS */
716
717                 void
718 efx_mon_fini(
719         __in    efx_nic_t *enp)
720 {
721         efx_mon_t *emp = &(enp->en_mon);
722
723         EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
724         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
725         EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MON);
726
727         emp->em_emop = NULL;
728
729         emp->em_type = EFX_MON_INVALID;
730
731         enp->en_mod_flags &= ~EFX_MOD_MON;
732 }