Skip to content

Commit

Permalink
brcmfmac: store revinfo retrieval result
Browse files Browse the repository at this point in the history
When revinfo retrieval fails we can not show the firmware version
in ethtool driver info. Store the result to be used when handling
ethtool driver info callback.

Reviewed-by: Hante Meuleman <[email protected]>
Reviewed-by: Pieter-Paul Giesberts <[email protected]>
Signed-off-by: Arend van Spriel <[email protected]>
Signed-off-by: Kalle Valo <[email protected]>
  • Loading branch information
Arend van Spriel authored and Kalle Valo committed Jan 29, 2015
1 parent e749c7d commit 7f52c81
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
3 changes: 2 additions & 1 deletion drivers/net/wireless/brcm80211/brcmfmac/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)

err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
&revinfo, sizeof(revinfo));
ri = &ifp->drvr->revinfo;
if (err < 0) {
brcmf_err("retrieving revision info failed, %d\n", err);
} else {
ri = &ifp->drvr->revinfo;
ri->vendorid = le32_to_cpu(revinfo.vendorid);
ri->deviceid = le32_to_cpu(revinfo.deviceid);
ri->radiorev = le32_to_cpu(revinfo.radiorev);
Expand All @@ -79,6 +79,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
ri->chippkg = le32_to_cpu(revinfo.chippkg);
ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
}
ri->result = err;

/* query for 'ver' to get version info from firmware */
memset(buf, 0, sizeof(buf));
Expand Down
7 changes: 4 additions & 3 deletions drivers/net/wireless/brcm80211/brcmfmac/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -601,11 +601,12 @@ static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
{
struct brcmf_if *ifp = netdev_priv(ndev);
struct brcmf_pub *drvr = ifp->drvr;
char drev[BRCMU_DOTREV_LEN];
char drev[BRCMU_DOTREV_LEN] = "n/a";

if (drvr->revinfo.result == 0)
brcmu_dotrev_str(drvr->revinfo.driverrev, drev);
strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
strlcpy(info->version, brcmu_dotrev_str(drvr->revinfo.driverrev, drev),
sizeof(info->version));
strlcpy(info->version, drev, sizeof(info->version));
strlcpy(info->fw_version, drvr->fwver, sizeof(info->fw_version));
strlcpy(info->bus_info, dev_name(drvr->bus_if->dev),
sizeof(info->bus_info));
Expand Down
10 changes: 9 additions & 1 deletion drivers/net/wireless/brcm80211/brcmfmac/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,16 @@ struct brcmf_proto; /* device communication protocol info */
struct brcmf_cfg80211_dev; /* cfg80211 device info */
struct brcmf_fws_info; /* firmware signalling info */

/* see struct brcmf_rev_info_le in fwil_types.h */
/*
* struct brcmf_rev_info
*
* The result field stores the error code of the
* revision info request from firmware. For the
* other fields see struct brcmf_rev_info_le in
* fwil_types.h
*/
struct brcmf_rev_info {
int result;
u32 vendorid;
u32 deviceid;
u32 radiorev;
Expand Down

0 comments on commit 7f52c81

Please sign in to comment.