]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/dpdk/drivers/net/sfc/base/efx_mon.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / 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 }