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