aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2015-01-25 14:31:39 -0500
committerKalle Valo <kvalo@codeaurora.org>2015-01-29 02:59:11 -0500
commit9b1933a3bd7c4568edc4d906bf1cc0e901ce1ec4 (patch)
treedbb54e8da12740cc8ff357a172b8522811e8eb69 /drivers/net/wireless/brcm80211
parent31fc436f184dc4219d837d4ffc97ad7c2ca0954d (diff)
brcmfmac: determine chip info when not provided by bus layer
In some scenarios the chip number and revision may not be provided by the bus layer. If the chip number is not filled, the common layer will ask the firmware for this information. Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com> Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/brcm80211')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/core.c15
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwil.h1
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h41
3 files changed, 57 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/core.c b/drivers/net/wireless/brcm80211/brcmfmac/core.c
index b8520c30af7c..5f16a7e75d93 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
@@ -948,6 +948,7 @@ int brcmf_bus_start(struct device *dev)
948 struct brcmf_pub *drvr = bus_if->drvr; 948 struct brcmf_pub *drvr = bus_if->drvr;
949 struct brcmf_if *ifp; 949 struct brcmf_if *ifp;
950 struct brcmf_if *p2p_ifp; 950 struct brcmf_if *p2p_ifp;
951 struct brcmf_rev_info_le revinfo;
951 952
952 brcmf_dbg(TRACE, "\n"); 953 brcmf_dbg(TRACE, "\n");
953 954
@@ -971,6 +972,20 @@ int brcmf_bus_start(struct device *dev)
971 if (ret < 0) 972 if (ret < 0)
972 goto fail; 973 goto fail;
973 974
975 /* assure we have chipid before feature attach */
976 if (!bus_if->chip) {
977 ret = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO, &revinfo,
978 sizeof(revinfo));
979 if (ret < 0) {
980 brcmf_err("no chipid determined - device may malfunction\n");
981 } else {
982 bus_if->chip = le32_to_cpu(revinfo.chipnum);
983 bus_if->chiprev = le32_to_cpu(revinfo.chiprev);
984 brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n",
985 bus_if->chip, bus_if->chip,
986 bus_if->chiprev);
987 }
988 }
974 brcmf_feat_attach(drvr); 989 brcmf_feat_attach(drvr);
975 990
976 ret = brcmf_fws_init(drvr); 991 ret = brcmf_fws_init(drvr);
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil.h b/drivers/net/wireless/brcm80211/brcmfmac/fwil.h
index 37345e7b873d..5434dcf64f7d 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwil.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil.h
@@ -59,6 +59,7 @@
59#define BRCMF_C_SET_COUNTRY 84 59#define BRCMF_C_SET_COUNTRY 84
60#define BRCMF_C_GET_PM 85 60#define BRCMF_C_GET_PM 85
61#define BRCMF_C_SET_PM 86 61#define BRCMF_C_SET_PM 86
62#define BRCMF_C_GET_REVINFO 98
62#define BRCMF_C_GET_CURR_RATESET 114 63#define BRCMF_C_GET_CURR_RATESET 114
63#define BRCMF_C_GET_AP 117 64#define BRCMF_C_GET_AP 117
64#define BRCMF_C_SET_AP 118 65#define BRCMF_C_SET_AP 118
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
index 619669bbdb83..374920965108 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
@@ -539,4 +539,45 @@ struct brcmf_fil_country_le {
539 char ccode[BRCMF_COUNTRY_BUF_SZ]; 539 char ccode[BRCMF_COUNTRY_BUF_SZ];
540}; 540};
541 541
542/**
543 * struct brcmf_rev_info_le - device revision info.
544 *
545 * @vendorid: PCI vendor id.
546 * @deviceid: device id of chip.
547 * @radiorev: radio revision.
548 * @chiprev: chip revision.
549 * @corerev: core revision.
550 * @boardid: board identifier (usu. PCI sub-device id).
551 * @boardvendor: board vendor (usu. PCI sub-vendor id).
552 * @boardrev: board revision.
553 * @driverrev: driver version.
554 * @ucoderev: microcode version.
555 * @bus: bus type.
556 * @chipnum: chip number.
557 * @phytype: phy type.
558 * @phyrev: phy revision.
559 * @anarev: anacore rev.
560 * @chippkg: chip package info.
561 * @nvramrev: nvram revision number.
562 */
563struct brcmf_rev_info_le {
564 __le32 vendorid;
565 __le32 deviceid;
566 __le32 radiorev;
567 __le32 chiprev;
568 __le32 corerev;
569 __le32 boardid;
570 __le32 boardvendor;
571 __le32 boardrev;
572 __le32 driverrev;
573 __le32 ucoderev;
574 __le32 bus;
575 __le32 chipnum;
576 __le32 phytype;
577 __le32 phyrev;
578 __le32 anarev;
579 __le32 chippkg;
580 __le32 nvramrev;
581};
582
542#endif /* FWIL_TYPES_H_ */ 583#endif /* FWIL_TYPES_H_ */