xref: /dpdk/drivers/common/sfc_efx/base/efx_mon.c (revision 672386c1e9e1f64f7aa3b1360ad22dc737ea8d72)
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 *
efx_mon_name(__in efx_nic_t * enp)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
efx_mon_init(__in efx_nic_t * enp)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 *
efx_mon_stat_name(__in efx_nic_t * enp,__in efx_mon_stat_t id)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 *
efx_mon_stat_description(__in efx_nic_t * enp,__in efx_mon_stat_t id)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
efx_mon_mcdi_to_efx_stat(__in int mcdi_index,__out efx_mon_stat_t * statp)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
efx_mon_get_stat_unit(__in efx_mon_stat_t stat,__out efx_mon_stat_unit_t * unitp)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
efx_mon_get_stat_portmap(__in efx_mon_stat_t stat,__out efx_mon_stat_portmask_t * maskp)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
efx_mon_stats_update(__in efx_nic_t * enp,__in efsys_mem_t * esmp,__inout_ecount (EFX_MON_NSTATS)efx_mon_stat_value_t * values)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
efx_mon_limits_update(__in efx_nic_t * enp,__inout_ecount (EFX_MON_NSTATS)efx_mon_stat_limits_t * values)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
efx_mon_fini(__in efx_nic_t * enp)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 }
851