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 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 } 851