mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
cxgbe(4): Provide more details about the card in the sysctl MIB.
dev.t5nex.0.%desc: Chelsio T580-CR dev.t5nex.0.hw_revision: 1 dev.t5nex.0.sn: PT13140042 dev.t5nex.0.pn: 110117150A0 dev.t5nex.0.ec: 0000000000000000 dev.t5nex.0.na: 0007432AF490 dev.t5nex.0.vpd_version: 3 dev.t5nex.0.scfg_version: 53255 dev.t5nex.0.bs_version: 1.1.0.0 dev.t5nex.0.er_version: 1.0.0.68 dev.t5nex.0.tp_version: 0.1.4.9 dev.t5nex.0.firmware_version: 1.16.2.0 Sponsored by: Chelsio Communications
This commit is contained in:
parent
9bb959068a
commit
e25621e5ea
5 changed files with 183 additions and 38 deletions
|
|
@ -821,7 +821,8 @@ struct adapter {
|
|||
|
||||
char fw_version[16];
|
||||
char tp_version[16];
|
||||
char exprom_version[16];
|
||||
char er_version[16];
|
||||
char bs_version[16];
|
||||
char cfg_file[32];
|
||||
u_int cfcsum;
|
||||
struct adapter_params params;
|
||||
|
|
|
|||
|
|
@ -330,9 +330,12 @@ struct adapter_params {
|
|||
unsigned int sf_size; /* serial flash size in bytes */
|
||||
unsigned int sf_nsec; /* # of flash sectors */
|
||||
|
||||
unsigned int fw_vers;
|
||||
unsigned int tp_vers;
|
||||
unsigned int exprom_vers;
|
||||
unsigned int fw_vers; /* firmware version */
|
||||
unsigned int bs_vers; /* bootstrap version */
|
||||
unsigned int tp_vers; /* TP microcode version */
|
||||
unsigned int er_vers; /* expansion ROM version */
|
||||
unsigned int scfg_vers; /* Serial Configuration version */
|
||||
unsigned int vpd_vers; /* VPD version */
|
||||
|
||||
unsigned short mtus[NMTUS];
|
||||
unsigned short a_wnd[NCCTRL_WIN];
|
||||
|
|
@ -548,8 +551,12 @@ int t4_flash_erase_sectors(struct adapter *adapter, int start, int end);
|
|||
int t4_flash_cfg_addr(struct adapter *adapter);
|
||||
int t4_load_cfg(struct adapter *adapter, const u8 *cfg_data, unsigned int size);
|
||||
int t4_get_fw_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_bs_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_tp_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_scfg_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_vpd_version(struct adapter *adapter, u32 *vers);
|
||||
int t4_get_version_info(struct adapter *adapter);
|
||||
int t4_init_hw(struct adapter *adapter, u32 fw_params);
|
||||
int t4_prep_adapter(struct adapter *adapter, u8 *buf);
|
||||
int t4_shutdown_adapter(struct adapter *adapter);
|
||||
|
|
|
|||
|
|
@ -3233,6 +3233,20 @@ int t4_get_fw_version(struct adapter *adapter, u32 *vers)
|
|||
vers, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_get_bs_version - read the firmware bootstrap version
|
||||
* @adapter: the adapter
|
||||
* @vers: where to place the version
|
||||
*
|
||||
* Reads the FW Bootstrap version from flash.
|
||||
*/
|
||||
int t4_get_bs_version(struct adapter *adapter, u32 *vers)
|
||||
{
|
||||
return t4_read_flash(adapter, FLASH_FWBOOTSTRAP_START +
|
||||
offsetof(struct fw_hdr, fw_ver), 1,
|
||||
vers, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_get_tp_version - read the TP microcode version
|
||||
* @adapter: the adapter
|
||||
|
|
@ -3284,6 +3298,110 @@ int t4_get_exprom_version(struct adapter *adap, u32 *vers)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_get_scfg_version - return the Serial Configuration version
|
||||
* @adapter: the adapter
|
||||
* @vers: where to place the version
|
||||
*
|
||||
* Reads the Serial Configuration Version via the Firmware interface
|
||||
* (thus this can only be called once we're ready to issue Firmware
|
||||
* commands). The format of the Serial Configuration version is
|
||||
* adapter specific. Returns 0 on success, an error on failure.
|
||||
*
|
||||
* Note that early versions of the Firmware didn't include the ability
|
||||
* to retrieve the Serial Configuration version, so we zero-out the
|
||||
* return-value parameter in that case to avoid leaving it with
|
||||
* garbage in it.
|
||||
*
|
||||
* Also note that the Firmware will return its cached copy of the Serial
|
||||
* Initialization Revision ID, not the actual Revision ID as written in
|
||||
* the Serial EEPROM. This is only an issue if a new VPD has been written
|
||||
* and the Firmware/Chip haven't yet gone through a RESET sequence. So
|
||||
* it's best to defer calling this routine till after a FW_RESET_CMD has
|
||||
* been issued if the Host Driver will be performing a full adapter
|
||||
* initialization.
|
||||
*/
|
||||
int t4_get_scfg_version(struct adapter *adapter, u32 *vers)
|
||||
{
|
||||
u32 scfgrev_param;
|
||||
int ret;
|
||||
|
||||
scfgrev_param = (V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
|
||||
V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_SCFGREV));
|
||||
ret = t4_query_params(adapter, adapter->mbox, adapter->pf, 0,
|
||||
1, &scfgrev_param, vers);
|
||||
if (ret)
|
||||
*vers = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_get_vpd_version - return the VPD version
|
||||
* @adapter: the adapter
|
||||
* @vers: where to place the version
|
||||
*
|
||||
* Reads the VPD via the Firmware interface (thus this can only be called
|
||||
* once we're ready to issue Firmware commands). The format of the
|
||||
* VPD version is adapter specific. Returns 0 on success, an error on
|
||||
* failure.
|
||||
*
|
||||
* Note that early versions of the Firmware didn't include the ability
|
||||
* to retrieve the VPD version, so we zero-out the return-value parameter
|
||||
* in that case to avoid leaving it with garbage in it.
|
||||
*
|
||||
* Also note that the Firmware will return its cached copy of the VPD
|
||||
* Revision ID, not the actual Revision ID as written in the Serial
|
||||
* EEPROM. This is only an issue if a new VPD has been written and the
|
||||
* Firmware/Chip haven't yet gone through a RESET sequence. So it's best
|
||||
* to defer calling this routine till after a FW_RESET_CMD has been issued
|
||||
* if the Host Driver will be performing a full adapter initialization.
|
||||
*/
|
||||
int t4_get_vpd_version(struct adapter *adapter, u32 *vers)
|
||||
{
|
||||
u32 vpdrev_param;
|
||||
int ret;
|
||||
|
||||
vpdrev_param = (V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
|
||||
V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_VPDREV));
|
||||
ret = t4_query_params(adapter, adapter->mbox, adapter->pf, 0,
|
||||
1, &vpdrev_param, vers);
|
||||
if (ret)
|
||||
*vers = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_get_version_info - extract various chip/firmware version information
|
||||
* @adapter: the adapter
|
||||
*
|
||||
* Reads various chip/firmware version numbers and stores them into the
|
||||
* adapter Adapter Parameters structure. If any of the efforts fails
|
||||
* the first failure will be returned, but all of the version numbers
|
||||
* will be read.
|
||||
*/
|
||||
int t4_get_version_info(struct adapter *adapter)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
#define FIRST_RET(__getvinfo) \
|
||||
do { \
|
||||
int __ret = __getvinfo; \
|
||||
if (__ret && !ret) \
|
||||
ret = __ret; \
|
||||
} while (0)
|
||||
|
||||
FIRST_RET(t4_get_fw_version(adapter, &adapter->params.fw_vers));
|
||||
FIRST_RET(t4_get_bs_version(adapter, &adapter->params.bs_vers));
|
||||
FIRST_RET(t4_get_tp_version(adapter, &adapter->params.tp_vers));
|
||||
FIRST_RET(t4_get_exprom_version(adapter, &adapter->params.er_vers));
|
||||
FIRST_RET(t4_get_scfg_version(adapter, &adapter->params.scfg_vers));
|
||||
FIRST_RET(t4_get_vpd_version(adapter, &adapter->params.vpd_vers));
|
||||
|
||||
#undef FIRST_RET
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* t4_flash_erase_sectors - erase a range of flash sectors
|
||||
* @adapter: the adapter
|
||||
|
|
|
|||
|
|
@ -4206,6 +4206,8 @@ enum fw_params_param_dev {
|
|||
FW_PARAMS_PARAM_DEV_ULPTX_MEMWRITE_DSGL = 0x17,
|
||||
FW_PARAMS_PARAM_DEV_FWCACHE = 0x18,
|
||||
FW_PARAMS_PARAM_DEV_RSSINFO = 0x19,
|
||||
FW_PARAMS_PARAM_DEV_SCFGREV = 0x1A,
|
||||
FW_PARAMS_PARAM_DEV_VPDREV = 0x1B,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -2882,32 +2882,6 @@ prep_firmware(struct adapter *sc)
|
|||
goto done;
|
||||
}
|
||||
|
||||
/* We're using whatever's on the card and it's known to be good. */
|
||||
sc->params.fw_vers = ntohl(card_fw->fw_ver);
|
||||
snprintf(sc->fw_version, sizeof(sc->fw_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.fw_vers));
|
||||
|
||||
t4_get_tp_version(sc, &sc->params.tp_vers);
|
||||
snprintf(sc->tp_version, sizeof(sc->tp_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.tp_vers));
|
||||
|
||||
if (t4_get_exprom_version(sc, &sc->params.exprom_vers) != 0)
|
||||
sc->params.exprom_vers = 0;
|
||||
else {
|
||||
snprintf(sc->exprom_version, sizeof(sc->exprom_version),
|
||||
"%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.exprom_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.exprom_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.exprom_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.exprom_vers));
|
||||
}
|
||||
|
||||
/* Reset device */
|
||||
if (need_fw_reset &&
|
||||
(rc = -t4_fw_reset(sc, sc->mbox, F_PIORSTMODE | F_PIORST)) != 0) {
|
||||
|
|
@ -3152,6 +3126,32 @@ get_params__pre_init(struct adapter *sc)
|
|||
int rc;
|
||||
uint32_t param[2], val[2];
|
||||
|
||||
t4_get_version_info(sc);
|
||||
|
||||
snprintf(sc->fw_version, sizeof(sc->fw_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.fw_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.fw_vers));
|
||||
|
||||
snprintf(sc->bs_version, sizeof(sc->bs_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.bs_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.bs_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.bs_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.bs_vers));
|
||||
|
||||
snprintf(sc->tp_version, sizeof(sc->tp_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.tp_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.tp_vers));
|
||||
|
||||
snprintf(sc->er_version, sizeof(sc->er_version), "%u.%u.%u.%u",
|
||||
G_FW_HDR_FW_VER_MAJOR(sc->params.er_vers),
|
||||
G_FW_HDR_FW_VER_MINOR(sc->params.er_vers),
|
||||
G_FW_HDR_FW_VER_MICRO(sc->params.er_vers),
|
||||
G_FW_HDR_FW_VER_BUILD(sc->params.er_vers));
|
||||
|
||||
param[0] = FW_PARAM_DEV(PORTVEC);
|
||||
param[1] = FW_PARAM_DEV(CCLK);
|
||||
rc = -t4_query_params(sc, sc->mbox, sc->pf, 0, 2, param, val);
|
||||
|
|
@ -3365,9 +3365,7 @@ t4_set_desc(struct adapter *sc)
|
|||
char buf[128];
|
||||
struct adapter_params *p = &sc->params;
|
||||
|
||||
snprintf(buf, sizeof(buf), "Chelsio %s %sNIC (rev %d), S/N:%s, "
|
||||
"P/N:%s, E/C:%s", p->vpd.id, is_offload(sc) ? "R" : "",
|
||||
chip_rev(sc), p->vpd.sn, p->vpd.pn, p->vpd.ec);
|
||||
snprintf(buf, sizeof(buf), "Chelsio %s", p->vpd.id);
|
||||
|
||||
device_set_desc_copy(sc->dev, buf);
|
||||
}
|
||||
|
|
@ -4621,17 +4619,36 @@ t4_sysctls(struct adapter *sc)
|
|||
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "hw_revision", CTLFLAG_RD,
|
||||
NULL, chip_rev(sc), "chip hardware revision");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "sn",
|
||||
CTLFLAG_RD, sc->params.vpd.sn, 0, "serial number");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "pn",
|
||||
CTLFLAG_RD, sc->params.vpd.pn, 0, "part number");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "ec",
|
||||
CTLFLAG_RD, sc->params.vpd.ec, 0, "engineering change");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "na",
|
||||
CTLFLAG_RD, sc->params.vpd.na, 0, "network address");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "tp_version",
|
||||
CTLFLAG_RD, sc->tp_version, 0, "TP microcode version");
|
||||
|
||||
if (sc->params.exprom_vers != 0) {
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "exprom_version",
|
||||
CTLFLAG_RD, sc->exprom_version, 0, "expansion ROM version");
|
||||
}
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "er_version", CTLFLAG_RD,
|
||||
sc->er_version, 0, "expansion ROM version");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "firmware_version",
|
||||
CTLFLAG_RD, sc->fw_version, 0, "firmware version");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "bs_version", CTLFLAG_RD,
|
||||
sc->bs_version, 0, "bootstrap firmware version");
|
||||
|
||||
SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "scfg_version", CTLFLAG_RD,
|
||||
NULL, sc->params.scfg_vers, "serial config version");
|
||||
|
||||
SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "vpd_version", CTLFLAG_RD,
|
||||
NULL, sc->params.vpd_vers, "VPD version");
|
||||
|
||||
SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "cf",
|
||||
CTLFLAG_RD, sc->cfg_file, 0, "configuration file");
|
||||
|
||||
|
|
@ -4641,7 +4658,7 @@ t4_sysctls(struct adapter *sc)
|
|||
#define SYSCTL_CAP(name, n, text) \
|
||||
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, #name, \
|
||||
CTLTYPE_STRING | CTLFLAG_RD, caps_decoder[n], sc->name, \
|
||||
sysctl_bitfield, "A", "available " text "capabilities")
|
||||
sysctl_bitfield, "A", "available " text " capabilities")
|
||||
|
||||
SYSCTL_CAP(nbmcaps, 0, "NBM");
|
||||
SYSCTL_CAP(linkcaps, 1, "link");
|
||||
|
|
|
|||
Loading…
Reference in a new issue