dpdk/drivers/common/sfc_efx/base/efx_mon.c
<<
>>
Prefs
   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
  16static const char * const __efx_mon_name[] = {
  17        "",
  18        "sfx90x0",
  19        "sfx91x0",
  20        "sfx92x0"
  21};
  22
  23                const char *
  24efx_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
  39static 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
  49efx_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
  86fail2:
  87        EFSYS_PROBE(fail2);
  88
  89        emp->em_type = EFX_MON_INVALID;
  90
  91        enp->en_mod_flags &= ~EFX_MOD_MON;
  92
  93fail1:
  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 */
 104static 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 *
 190efx_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
 201typedef 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 */
 207static 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 *
 293efx_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
 308efx_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
 570fail1:
 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
 579efx_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
 686fail1:
 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
 695efx_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
 797fail1:
 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
 805efx_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
 820efx_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
 836efx_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