brcmfmac: store revinfo retrieval result
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / brcm80211 / brcmfmac / common.c
index 1861a13e8d03d6157455001ac5a37fb18de1dc63..fe54844c75e089cfba03ef8add1e5aae9648d9be 100644 (file)
@@ -25,6 +25,9 @@
 #include "fwil.h"
 #include "fwil_types.h"
 #include "tracepoint.h"
+#include "common.h"
+
+const u8 ALLFFMAC[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
 #define BRCMF_DEFAULT_BCN_TIMEOUT      3
 #define BRCMF_DEFAULT_SCAN_CHANNEL_TIME        40
@@ -38,6 +41,8 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
        s8 eventmask[BRCMF_EVENTING_MASK_LEN];
        u8 buf[BRCMF_DCMD_SMLEN];
        struct brcmf_join_pref_params join_pref_params[2];
+       struct brcmf_rev_info_le revinfo;
+       struct brcmf_rev_info *ri;
        char *ptr;
        s32 err;
 
@@ -45,12 +50,37 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
        err = brcmf_fil_iovar_data_get(ifp, "cur_etheraddr", ifp->mac_addr,
                                       sizeof(ifp->mac_addr));
        if (err < 0) {
-               brcmf_err("Retreiving cur_etheraddr failed, %d\n",
-                         err);
+               brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
                goto done;
        }
        memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
 
+       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->vendorid = le32_to_cpu(revinfo.vendorid);
+               ri->deviceid = le32_to_cpu(revinfo.deviceid);
+               ri->radiorev = le32_to_cpu(revinfo.radiorev);
+               ri->chiprev = le32_to_cpu(revinfo.chiprev);
+               ri->corerev = le32_to_cpu(revinfo.corerev);
+               ri->boardid = le32_to_cpu(revinfo.boardid);
+               ri->boardvendor = le32_to_cpu(revinfo.boardvendor);
+               ri->boardrev = le32_to_cpu(revinfo.boardrev);
+               ri->driverrev = le32_to_cpu(revinfo.driverrev);
+               ri->ucoderev = le32_to_cpu(revinfo.ucoderev);
+               ri->bus = le32_to_cpu(revinfo.bus);
+               ri->chipnum = le32_to_cpu(revinfo.chipnum);
+               ri->phytype = le32_to_cpu(revinfo.phytype);
+               ri->phyrev = le32_to_cpu(revinfo.phyrev);
+               ri->anarev = le32_to_cpu(revinfo.anarev);
+               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));
        strcpy(buf, "ver");