Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : *
3 : : * Copyright(c) 2019-2021 Xilinx, Inc.
4 : : * Copyright(c) 2007-2019 Solarflare Communications Inc.
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 : 0 : efx_mon_name(
25 : : __in efx_nic_t *enp)
26 : : {
27 : : efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
28 : :
29 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
30 : :
31 [ # # ]: 0 : EFSYS_ASSERT(encp->enc_mon_type != EFX_MON_INVALID);
32 [ # # ]: 0 : EFSYS_ASSERT3U(encp->enc_mon_type, <, EFX_MON_NTYPES);
33 : 0 : 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 : 0 : 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 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
58 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
59 : :
60 [ # # ]: 0 : if (enp->en_mod_flags & EFX_MOD_MON) {
61 : : rc = EINVAL;
62 : 0 : goto fail1;
63 : : }
64 : :
65 : 0 : enp->en_mod_flags |= EFX_MOD_MON;
66 : :
67 : 0 : emp->em_type = encp->enc_mon_type;
68 : :
69 [ # # ]: 0 : 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 : 0 : goto fail2;
81 : : }
82 : :
83 : : emp->em_emop = emop;
84 : : return (0);
85 : :
86 : : fail2:
87 : : EFSYS_PROBE(fail2);
88 : :
89 : 0 : emp->em_type = EFX_MON_INVALID;
90 : :
91 : 0 : enp->en_mod_flags &= ~EFX_MOD_MON;
92 : :
93 : 0 : 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 : 0 : efx_mon_fini(
837 : : __in efx_nic_t *enp)
838 : : {
839 : : efx_mon_t *emp = &(enp->en_mon);
840 : :
841 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
842 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
843 [ # # ]: 0 : EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MON);
844 : :
845 : 0 : emp->em_emop = NULL;
846 : :
847 : 0 : emp->em_type = EFX_MON_INVALID;
848 : :
849 : 0 : enp->en_mod_flags &= ~EFX_MOD_MON;
850 : 0 : }
|