diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2012-04-28 20:50:25 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-05-16 12:45:23 -0400 |
commit | 898d3c3b2462cd439edb575f43b732425693aff0 (patch) | |
tree | 51e4fe1eec628acbed53fbfc37808bdc52e401bd | |
parent | 2b2715b83c433d22b10bd654e102baea6f5589b0 (diff) |
brcmsmac: use sprom from bcma
bcma now provides all sprom attributes needed by brcmsmac and also
parses them from the pci sprom ant otp.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/aiutils.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/antsel.c | 16 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/channel.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/main.c | 66 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/nicpci.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 67 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c | 331 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/stf.c | 6 |
8 files changed, 179 insertions, 323 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c index c93ea35bceec..f0cef235516b 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c | |||
@@ -564,6 +564,7 @@ static struct si_info *ai_doattach(struct si_info *sii, | |||
564 | u32 w, savewin; | 564 | u32 w, savewin; |
565 | struct bcma_device *cc; | 565 | struct bcma_device *cc; |
566 | uint socitype; | 566 | uint socitype; |
567 | struct ssb_sprom *sprom = &pbus->sprom; | ||
567 | 568 | ||
568 | savewin = 0; | 569 | savewin = 0; |
569 | 570 | ||
@@ -617,7 +618,8 @@ static struct si_info *ai_doattach(struct si_info *sii, | |||
617 | } | 618 | } |
618 | 619 | ||
619 | /* setup the GPIO based LED powersave register */ | 620 | /* setup the GPIO based LED powersave register */ |
620 | w = getintvar(sih, BRCMS_SROM_LEDDC); | 621 | w = (sprom->leddc_on_time << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | |
622 | (sprom->leddc_off_time << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT); | ||
621 | if (w == 0) | 623 | if (w == 0) |
622 | w = DEFAULT_GPIOTIMERVAL; | 624 | w = DEFAULT_GPIOTIMERVAL; |
623 | ai_cc_reg(sih, offsetof(struct chipcregs, gpiotimerval), | 625 | ai_cc_reg(sih, offsetof(struct chipcregs, gpiotimerval), |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/antsel.c b/drivers/net/wireless/brcm80211/brcmsmac/antsel.c index a47ce25cb9a2..55e12c327911 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/antsel.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/antsel.c | |||
@@ -108,7 +108,7 @@ brcms_c_antsel_init_cfg(struct antsel_info *asi, struct brcms_antselcfg *antsel, | |||
108 | struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) | 108 | struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) |
109 | { | 109 | { |
110 | struct antsel_info *asi; | 110 | struct antsel_info *asi; |
111 | struct si_pub *sih = wlc->hw->sih; | 111 | struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom; |
112 | 112 | ||
113 | asi = kzalloc(sizeof(struct antsel_info), GFP_ATOMIC); | 113 | asi = kzalloc(sizeof(struct antsel_info), GFP_ATOMIC); |
114 | if (!asi) | 114 | if (!asi) |
@@ -118,7 +118,7 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) | |||
118 | asi->pub = wlc->pub; | 118 | asi->pub = wlc->pub; |
119 | asi->antsel_type = ANTSEL_NA; | 119 | asi->antsel_type = ANTSEL_NA; |
120 | asi->antsel_avail = false; | 120 | asi->antsel_avail = false; |
121 | asi->antsel_antswitch = (u8) getintvar(sih, BRCMS_SROM_ANTSWITCH); | 121 | asi->antsel_antswitch = sprom->antswitch; |
122 | 122 | ||
123 | if ((asi->pub->sromrev >= 4) && (asi->antsel_antswitch != 0)) { | 123 | if ((asi->pub->sromrev >= 4) && (asi->antsel_antswitch != 0)) { |
124 | switch (asi->antsel_antswitch) { | 124 | switch (asi->antsel_antswitch) { |
@@ -128,12 +128,12 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) | |||
128 | /* 4321/2 board with 2x3 switch logic */ | 128 | /* 4321/2 board with 2x3 switch logic */ |
129 | asi->antsel_type = ANTSEL_2x3; | 129 | asi->antsel_type = ANTSEL_2x3; |
130 | /* Antenna selection availability */ | 130 | /* Antenna selection availability */ |
131 | if (((u16) getintvar(sih, BRCMS_SROM_AA2G) == 7) || | 131 | if ((sprom->ant_available_bg == 7) || |
132 | ((u16) getintvar(sih, BRCMS_SROM_AA5G) == 7)) { | 132 | (sprom->ant_available_a == 7)) { |
133 | asi->antsel_avail = true; | 133 | asi->antsel_avail = true; |
134 | } else if ( | 134 | } else if ( |
135 | (u16) getintvar(sih, BRCMS_SROM_AA2G) == 3 || | 135 | sprom->ant_available_bg == 3 || |
136 | (u16) getintvar(sih, BRCMS_SROM_AA5G) == 3) { | 136 | sprom->ant_available_a == 3) { |
137 | asi->antsel_avail = false; | 137 | asi->antsel_avail = false; |
138 | } else { | 138 | } else { |
139 | asi->antsel_avail = false; | 139 | asi->antsel_avail = false; |
@@ -146,8 +146,8 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) | |||
146 | break; | 146 | break; |
147 | } | 147 | } |
148 | } else if ((asi->pub->sromrev == 4) && | 148 | } else if ((asi->pub->sromrev == 4) && |
149 | ((u16) getintvar(sih, BRCMS_SROM_AA2G) == 7) && | 149 | (sprom->ant_available_bg == 7) && |
150 | ((u16) getintvar(sih, BRCMS_SROM_AA5G) == 0)) { | 150 | (sprom->ant_available_a == 0)) { |
151 | /* hack to match old 4321CB2 cards with 2of3 antenna switch */ | 151 | /* hack to match old 4321CB2 cards with 2of3 antenna switch */ |
152 | asi->antsel_type = ANTSEL_2x3; | 152 | asi->antsel_type = ANTSEL_2x3; |
153 | asi->antsel_avail = true; | 153 | asi->antsel_avail = true; |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/channel.c b/drivers/net/wireless/brcm80211/brcmsmac/channel.c index 0efe88e25a9a..eb77ac3cfb6b 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/channel.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/channel.c | |||
@@ -1110,7 +1110,7 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc) | |||
1110 | char country_abbrev[BRCM_CNTRY_BUF_SZ]; | 1110 | char country_abbrev[BRCM_CNTRY_BUF_SZ]; |
1111 | const struct country_info *country; | 1111 | const struct country_info *country; |
1112 | struct brcms_pub *pub = wlc->pub; | 1112 | struct brcms_pub *pub = wlc->pub; |
1113 | char *ccode; | 1113 | struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom; |
1114 | 1114 | ||
1115 | BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit); | 1115 | BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit); |
1116 | 1116 | ||
@@ -1122,9 +1122,8 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc) | |||
1122 | wlc->cmi = wlc_cm; | 1122 | wlc->cmi = wlc_cm; |
1123 | 1123 | ||
1124 | /* store the country code for passing up as a regulatory hint */ | 1124 | /* store the country code for passing up as a regulatory hint */ |
1125 | ccode = getvar(wlc->hw->sih, BRCMS_SROM_CCODE); | 1125 | if (sprom->alpha2 && brcms_c_country_valid(sprom->alpha2)) |
1126 | if (ccode && brcms_c_country_valid(ccode)) | 1126 | strncpy(wlc->pub->srom_ccode, sprom->alpha2, sizeof(sprom->alpha2)); |
1127 | strncpy(wlc->pub->srom_ccode, ccode, BRCM_CNTRY_BUF_SZ - 1); | ||
1128 | 1127 | ||
1129 | /* | 1128 | /* |
1130 | * internal country information which must match | 1129 | * internal country information which must match |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c index b4d92792c502..6b32536ab1b7 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c | |||
@@ -1882,27 +1882,20 @@ static bool brcms_c_validboardtype(struct brcms_hardware *wlc_hw) | |||
1882 | return true; | 1882 | return true; |
1883 | } | 1883 | } |
1884 | 1884 | ||
1885 | static char *brcms_c_get_macaddr(struct brcms_hardware *wlc_hw) | 1885 | static void brcms_c_get_macaddr(struct brcms_hardware *wlc_hw, u8 etheraddr[ETH_ALEN]) |
1886 | { | 1886 | { |
1887 | enum brcms_srom_id var_id = BRCMS_SROM_MACADDR; | 1887 | struct ssb_sprom *sprom = &wlc_hw->d11core->bus->sprom; |
1888 | char *macaddr; | ||
1889 | 1888 | ||
1890 | /* If macaddr exists, use it (Sromrev4, CIS, ...). */ | 1889 | /* If macaddr exists, use it (Sromrev4, CIS, ...). */ |
1891 | macaddr = getvar(wlc_hw->sih, var_id); | 1890 | if (!is_zero_ether_addr(sprom->il0mac)) { |
1892 | if (macaddr != NULL) | 1891 | memcpy(etheraddr, sprom->il0mac, 6); |
1893 | return macaddr; | 1892 | return; |
1893 | } | ||
1894 | 1894 | ||
1895 | if (wlc_hw->_nbands > 1) | 1895 | if (wlc_hw->_nbands > 1) |
1896 | var_id = BRCMS_SROM_ET1MACADDR; | 1896 | memcpy(etheraddr, sprom->et1mac, 6); |
1897 | else | 1897 | else |
1898 | var_id = BRCMS_SROM_IL0MACADDR; | 1898 | memcpy(etheraddr, sprom->il0mac, 6); |
1899 | |||
1900 | macaddr = getvar(wlc_hw->sih, var_id); | ||
1901 | if (macaddr == NULL) | ||
1902 | wiphy_err(wlc_hw->wlc->wiphy, "wl%d: wlc_get_macaddr: macaddr " | ||
1903 | "getvar(%d) not found\n", wlc_hw->unit, var_id); | ||
1904 | |||
1905 | return macaddr; | ||
1906 | } | 1899 | } |
1907 | 1900 | ||
1908 | /* power both the pll and external oscillator on/off */ | 1901 | /* power both the pll and external oscillator on/off */ |
@@ -4436,13 +4429,13 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, | |||
4436 | uint unit, bool piomode) | 4429 | uint unit, bool piomode) |
4437 | { | 4430 | { |
4438 | struct brcms_hardware *wlc_hw; | 4431 | struct brcms_hardware *wlc_hw; |
4439 | char *macaddr = NULL; | ||
4440 | uint err = 0; | 4432 | uint err = 0; |
4441 | uint j; | 4433 | uint j; |
4442 | bool wme = false; | 4434 | bool wme = false; |
4443 | struct shared_phy_params sha_params; | 4435 | struct shared_phy_params sha_params; |
4444 | struct wiphy *wiphy = wlc->wiphy; | 4436 | struct wiphy *wiphy = wlc->wiphy; |
4445 | struct pci_dev *pcidev = core->bus->host_pci; | 4437 | struct pci_dev *pcidev = core->bus->host_pci; |
4438 | struct ssb_sprom *sprom = &core->bus->sprom; | ||
4446 | 4439 | ||
4447 | BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit, | 4440 | BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit, |
4448 | pcidev->vendor, | 4441 | pcidev->vendor, |
@@ -4512,7 +4505,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, | |||
4512 | } | 4505 | } |
4513 | 4506 | ||
4514 | /* get the board rev, used just below */ | 4507 | /* get the board rev, used just below */ |
4515 | j = getintvar(wlc_hw->sih, BRCMS_SROM_BOARDREV); | 4508 | j = sprom->board_rev; |
4516 | /* promote srom boardrev of 0xFF to 1 */ | 4509 | /* promote srom boardrev of 0xFF to 1 */ |
4517 | if (j == BOARDREV_PROMOTABLE) | 4510 | if (j == BOARDREV_PROMOTABLE) |
4518 | j = BOARDREV_PROMOTED; | 4511 | j = BOARDREV_PROMOTED; |
@@ -4525,11 +4518,9 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, | |||
4525 | err = 15; | 4518 | err = 15; |
4526 | goto fail; | 4519 | goto fail; |
4527 | } | 4520 | } |
4528 | wlc_hw->sromrev = (u8) getintvar(wlc_hw->sih, BRCMS_SROM_REV); | 4521 | wlc_hw->sromrev = sprom->revision; |
4529 | wlc_hw->boardflags = (u32) getintvar(wlc_hw->sih, | 4522 | wlc_hw->boardflags = sprom->boardflags_lo + (sprom->boardflags_hi << 16); |
4530 | BRCMS_SROM_BOARDFLAGS); | 4523 | wlc_hw->boardflags2 = sprom->boardflags2_lo + (sprom->boardflags2_hi << 16); |
4531 | wlc_hw->boardflags2 = (u32) getintvar(wlc_hw->sih, | ||
4532 | BRCMS_SROM_BOARDFLAGS2); | ||
4533 | 4524 | ||
4534 | if (wlc_hw->boardflags & BFL_NOPLLDOWN) | 4525 | if (wlc_hw->boardflags & BFL_NOPLLDOWN) |
4535 | brcms_b_pllreq(wlc_hw, true, BRCMS_PLLREQ_SHARED); | 4526 | brcms_b_pllreq(wlc_hw, true, BRCMS_PLLREQ_SHARED); |
@@ -4702,25 +4693,18 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, | |||
4702 | */ | 4693 | */ |
4703 | 4694 | ||
4704 | /* init etheraddr state variables */ | 4695 | /* init etheraddr state variables */ |
4705 | macaddr = brcms_c_get_macaddr(wlc_hw); | 4696 | brcms_c_get_macaddr(wlc_hw, wlc_hw->etheraddr); |
4706 | if (macaddr == NULL) { | 4697 | |
4707 | wiphy_err(wiphy, "wl%d: brcms_b_attach: macaddr not found\n", | 4698 | if (is_broadcast_ether_addr(wlc_hw->etheraddr) || |
4708 | unit); | ||
4709 | err = 21; | ||
4710 | goto fail; | ||
4711 | } | ||
4712 | if (!mac_pton(macaddr, wlc_hw->etheraddr) || | ||
4713 | is_broadcast_ether_addr(wlc_hw->etheraddr) || | ||
4714 | is_zero_ether_addr(wlc_hw->etheraddr)) { | 4699 | is_zero_ether_addr(wlc_hw->etheraddr)) { |
4715 | wiphy_err(wiphy, "wl%d: brcms_b_attach: bad macaddr %s\n", | 4700 | wiphy_err(wiphy, "wl%d: brcms_b_attach: bad macaddr\n", |
4716 | unit, macaddr); | 4701 | unit); |
4717 | err = 22; | 4702 | err = 22; |
4718 | goto fail; | 4703 | goto fail; |
4719 | } | 4704 | } |
4720 | 4705 | ||
4721 | BCMMSG(wlc->wiphy, "deviceid 0x%x nbands %d board 0x%x macaddr: %s\n", | 4706 | BCMMSG(wlc->wiphy, "deviceid 0x%x nbands %d board 0x%x\n", |
4722 | wlc_hw->deviceid, wlc_hw->_nbands, ai_get_boardtype(wlc_hw->sih), | 4707 | wlc_hw->deviceid, wlc_hw->_nbands, ai_get_boardtype(wlc_hw->sih)); |
4723 | macaddr); | ||
4724 | 4708 | ||
4725 | return err; | 4709 | return err; |
4726 | 4710 | ||
@@ -4770,16 +4754,16 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc) | |||
4770 | int aa; | 4754 | int aa; |
4771 | uint unit; | 4755 | uint unit; |
4772 | int bandtype; | 4756 | int bandtype; |
4773 | struct si_pub *sih = wlc->hw->sih; | 4757 | struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom; |
4774 | 4758 | ||
4775 | unit = wlc->pub->unit; | 4759 | unit = wlc->pub->unit; |
4776 | bandtype = wlc->band->bandtype; | 4760 | bandtype = wlc->band->bandtype; |
4777 | 4761 | ||
4778 | /* get antennas available */ | 4762 | /* get antennas available */ |
4779 | if (bandtype == BRCM_BAND_5G) | 4763 | if (bandtype == BRCM_BAND_5G) |
4780 | aa = (s8) getintvar(sih, BRCMS_SROM_AA5G); | 4764 | aa = sprom->ant_available_a; |
4781 | else | 4765 | else |
4782 | aa = (s8) getintvar(sih, BRCMS_SROM_AA2G); | 4766 | aa = sprom->ant_available_bg; |
4783 | 4767 | ||
4784 | if ((aa < 1) || (aa > 15)) { | 4768 | if ((aa < 1) || (aa > 15)) { |
4785 | wiphy_err(wlc->wiphy, "wl%d: %s: Invalid antennas available in" | 4769 | wiphy_err(wlc->wiphy, "wl%d: %s: Invalid antennas available in" |
@@ -4799,9 +4783,9 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc) | |||
4799 | 4783 | ||
4800 | /* Compute Antenna Gain */ | 4784 | /* Compute Antenna Gain */ |
4801 | if (bandtype == BRCM_BAND_5G) | 4785 | if (bandtype == BRCM_BAND_5G) |
4802 | wlc->band->antgain = (s8) getintvar(sih, BRCMS_SROM_AG1); | 4786 | wlc->band->antgain = sprom->antenna_gain.a1; |
4803 | else | 4787 | else |
4804 | wlc->band->antgain = (s8) getintvar(sih, BRCMS_SROM_AG0); | 4788 | wlc->band->antgain = sprom->antenna_gain.a0; |
4805 | 4789 | ||
4806 | brcms_c_attach_antgain_init(wlc); | 4790 | brcms_c_attach_antgain_init(wlc); |
4807 | 4791 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c b/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c index 7fad6dc19258..6cabc226c0e7 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c | |||
@@ -714,7 +714,10 @@ static void pcie_war_pci_setup(struct pcicore_info *pi) | |||
714 | void pcicore_attach(struct pcicore_info *pi, int state) | 714 | void pcicore_attach(struct pcicore_info *pi, int state) |
715 | { | 715 | { |
716 | struct si_pub *sih = pi->sih; | 716 | struct si_pub *sih = pi->sih; |
717 | u32 bfl2 = (u32)getintvar(sih, BRCMS_SROM_BOARDFLAGS2); | 717 | struct ssb_sprom *sprom = &pi->core->bus->sprom; |
718 | u32 bfl2; | ||
719 | |||
720 | bfl2 = sprom->boardflags2_lo + (sprom->boardflags2_hi << 16); | ||
718 | 721 | ||
719 | /* Determine if this board needs override */ | 722 | /* Determine if this board needs override */ |
720 | if (PCIE_ASPM(sih)) { | 723 | if (PCIE_ASPM(sih)) { |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c index 0fce56235f38..abfd78822fb8 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | |||
@@ -4817,28 +4817,23 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4817 | s8 txpwr = 0; | 4817 | s8 txpwr = 0; |
4818 | int i; | 4818 | int i; |
4819 | struct brcms_phy_lcnphy *pi_lcn = pi->u.pi_lcnphy; | 4819 | struct brcms_phy_lcnphy *pi_lcn = pi->u.pi_lcnphy; |
4820 | struct phy_shim_info *shim = pi->sh->physhim; | 4820 | struct ssb_sprom *sprom = &pi->d11core->bus->sprom; |
4821 | 4821 | ||
4822 | if (CHSPEC_IS2G(pi->radio_chanspec)) { | 4822 | if (CHSPEC_IS2G(pi->radio_chanspec)) { |
4823 | u16 cckpo = 0; | 4823 | u16 cckpo = 0; |
4824 | u32 offset_ofdm, offset_mcs; | 4824 | u32 offset_ofdm, offset_mcs; |
4825 | 4825 | ||
4826 | pi_lcn->lcnphy_tr_isolation_mid = | 4826 | pi_lcn->lcnphy_tr_isolation_mid = sprom->fem.ghz2.tr_iso; |
4827 | (u8)wlapi_getintvar(shim, BRCMS_SROM_TRISO2G); | ||
4828 | 4827 | ||
4829 | pi_lcn->lcnphy_rx_power_offset = | 4828 | pi_lcn->lcnphy_rx_power_offset = sprom->rxpo2g; |
4830 | (u8)wlapi_getintvar(shim, BRCMS_SROM_RXPO2G); | ||
4831 | 4829 | ||
4832 | pi->txpa_2g[0] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B0); | 4830 | pi->txpa_2g[0] = sprom->pa0b0; |
4833 | pi->txpa_2g[1] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B1); | 4831 | pi->txpa_2g[1] = sprom->pa0b1; |
4834 | pi->txpa_2g[2] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B2); | 4832 | pi->txpa_2g[2] = sprom->pa0b2; |
4835 | 4833 | ||
4836 | pi_lcn->lcnphy_rssi_vf = | 4834 | pi_lcn->lcnphy_rssi_vf = sprom->rssismf2g; |
4837 | (u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISMF2G); | 4835 | pi_lcn->lcnphy_rssi_vc = sprom->rssismc2g; |
4838 | pi_lcn->lcnphy_rssi_vc = | 4836 | pi_lcn->lcnphy_rssi_gs = sprom->rssisav2g; |
4839 | (u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISMC2G); | ||
4840 | pi_lcn->lcnphy_rssi_gs = | ||
4841 | (u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISAV2G); | ||
4842 | 4837 | ||
4843 | pi_lcn->lcnphy_rssi_vf_lowtemp = pi_lcn->lcnphy_rssi_vf; | 4838 | pi_lcn->lcnphy_rssi_vf_lowtemp = pi_lcn->lcnphy_rssi_vf; |
4844 | pi_lcn->lcnphy_rssi_vc_lowtemp = pi_lcn->lcnphy_rssi_vc; | 4839 | pi_lcn->lcnphy_rssi_vc_lowtemp = pi_lcn->lcnphy_rssi_vc; |
@@ -4848,7 +4843,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4848 | pi_lcn->lcnphy_rssi_vc_hightemp = pi_lcn->lcnphy_rssi_vc; | 4843 | pi_lcn->lcnphy_rssi_vc_hightemp = pi_lcn->lcnphy_rssi_vc; |
4849 | pi_lcn->lcnphy_rssi_gs_hightemp = pi_lcn->lcnphy_rssi_gs; | 4844 | pi_lcn->lcnphy_rssi_gs_hightemp = pi_lcn->lcnphy_rssi_gs; |
4850 | 4845 | ||
4851 | txpwr = (s8)wlapi_getintvar(shim, BRCMS_SROM_MAXP2GA0); | 4846 | txpwr = sprom->core_pwr_info[0].maxpwr_2g; |
4852 | pi->tx_srom_max_2g = txpwr; | 4847 | pi->tx_srom_max_2g = txpwr; |
4853 | 4848 | ||
4854 | for (i = 0; i < PWRTBL_NUM_COEFF; i++) { | 4849 | for (i = 0; i < PWRTBL_NUM_COEFF; i++) { |
@@ -4856,8 +4851,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4856 | pi->txpa_2g_high_temp[i] = pi->txpa_2g[i]; | 4851 | pi->txpa_2g_high_temp[i] = pi->txpa_2g[i]; |
4857 | } | 4852 | } |
4858 | 4853 | ||
4859 | cckpo = (u16)wlapi_getintvar(shim, BRCMS_SROM_CCK2GPO); | 4854 | cckpo = sprom->cck2gpo; |
4860 | offset_ofdm = (u32)wlapi_getintvar(shim, BRCMS_SROM_OFDM2GPO); | 4855 | offset_ofdm = sprom->ofdm2gpo; |
4861 | if (cckpo) { | 4856 | if (cckpo) { |
4862 | uint max_pwr_chan = txpwr; | 4857 | uint max_pwr_chan = txpwr; |
4863 | 4858 | ||
@@ -4876,7 +4871,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4876 | } else { | 4871 | } else { |
4877 | u8 opo = 0; | 4872 | u8 opo = 0; |
4878 | 4873 | ||
4879 | opo = (u8)wlapi_getintvar(shim, BRCMS_SROM_OPO); | 4874 | opo = sprom->opo; |
4880 | 4875 | ||
4881 | for (i = TXP_FIRST_CCK; i <= TXP_LAST_CCK; i++) | 4876 | for (i = TXP_FIRST_CCK; i <= TXP_LAST_CCK; i++) |
4882 | pi->tx_srom_max_rate_2g[i] = txpwr; | 4877 | pi->tx_srom_max_rate_2g[i] = txpwr; |
@@ -4886,12 +4881,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4886 | ((offset_ofdm & 0xf) * 2); | 4881 | ((offset_ofdm & 0xf) * 2); |
4887 | offset_ofdm >>= 4; | 4882 | offset_ofdm >>= 4; |
4888 | } | 4883 | } |
4889 | offset_mcs = | 4884 | offset_mcs = sprom->mcs2gpo[1] << 16; |
4890 | wlapi_getintvar(shim, | 4885 | offset_mcs |= sprom->mcs2gpo[0]; |
4891 | BRCMS_SROM_MCS2GPO1) << 16; | ||
4892 | offset_mcs |= | ||
4893 | (u16) wlapi_getintvar(shim, | ||
4894 | BRCMS_SROM_MCS2GPO0); | ||
4895 | pi_lcn->lcnphy_mcs20_po = offset_mcs; | 4886 | pi_lcn->lcnphy_mcs20_po = offset_mcs; |
4896 | for (i = TXP_FIRST_SISO_MCS_20; | 4887 | for (i = TXP_FIRST_SISO_MCS_20; |
4897 | i <= TXP_LAST_SISO_MCS_20; i++) { | 4888 | i <= TXP_LAST_SISO_MCS_20; i++) { |
@@ -4901,25 +4892,17 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) | |||
4901 | } | 4892 | } |
4902 | } | 4893 | } |
4903 | 4894 | ||
4904 | pi_lcn->lcnphy_rawtempsense = | 4895 | pi_lcn->lcnphy_rawtempsense = sprom->rawtempsense; |
4905 | (u16)wlapi_getintvar(shim, BRCMS_SROM_RAWTEMPSENSE); | 4896 | pi_lcn->lcnphy_measPower = sprom->measpower; |
4906 | pi_lcn->lcnphy_measPower = | 4897 | pi_lcn->lcnphy_tempsense_slope = sprom->tempsense_slope; |
4907 | (u8)wlapi_getintvar(shim, BRCMS_SROM_MEASPOWER); | 4898 | pi_lcn->lcnphy_hw_iqcal_en = sprom->hw_iqcal_en; |
4908 | pi_lcn->lcnphy_tempsense_slope = | 4899 | pi_lcn->lcnphy_iqcal_swp_dis = sprom->iqcal_swp_dis; |
4909 | (u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPSENSE_SLOPE); | 4900 | pi_lcn->lcnphy_tempcorrx = sprom->tempcorrx; |
4910 | pi_lcn->lcnphy_hw_iqcal_en = | 4901 | pi_lcn->lcnphy_tempsense_option = sprom->tempsense_option; |
4911 | (bool)wlapi_getintvar(shim, BRCMS_SROM_HW_IQCAL_EN); | 4902 | pi_lcn->lcnphy_freqoffset_corr = sprom->freqoffset_corr; |
4912 | pi_lcn->lcnphy_iqcal_swp_dis = | 4903 | if (sprom->ant_available_bg > 1) |
4913 | (bool)wlapi_getintvar(shim, BRCMS_SROM_IQCAL_SWP_DIS); | ||
4914 | pi_lcn->lcnphy_tempcorrx = | ||
4915 | (u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPCORRX); | ||
4916 | pi_lcn->lcnphy_tempsense_option = | ||
4917 | (u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPSENSE_OPTION); | ||
4918 | pi_lcn->lcnphy_freqoffset_corr = | ||
4919 | (u8)wlapi_getintvar(shim, BRCMS_SROM_FREQOFFSET_CORR); | ||
4920 | if ((u8)wlapi_getintvar(shim, BRCMS_SROM_AA2G) > 1) | ||
4921 | wlc_phy_ant_rxdiv_set((struct brcms_phy_pub *) pi, | 4904 | wlc_phy_ant_rxdiv_set((struct brcms_phy_pub *) pi, |
4922 | (u8) wlapi_getintvar(shim, BRCMS_SROM_AA2G)); | 4905 | sprom->ant_available_bg); |
4923 | } | 4906 | } |
4924 | pi_lcn->lcnphy_cck_dig_filt_type = -1; | 4907 | pi_lcn->lcnphy_cck_dig_filt_type = -1; |
4925 | 4908 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c index 812b6e38526e..c26387bbd4dc 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c | |||
@@ -14386,30 +14386,30 @@ static void wlc_phy_txpwr_srom_read_ppr_nphy(struct brcms_phy *pi) | |||
14386 | { | 14386 | { |
14387 | u16 bw40po, cddpo, stbcpo, bwduppo; | 14387 | u16 bw40po, cddpo, stbcpo, bwduppo; |
14388 | uint band_num; | 14388 | uint band_num; |
14389 | struct phy_shim_info *shim = pi->sh->physhim; | 14389 | struct ssb_sprom *sprom = &pi->d11core->bus->sprom; |
14390 | 14390 | ||
14391 | if (pi->sh->sromrev >= 9) | 14391 | if (pi->sh->sromrev >= 9) |
14392 | return; | 14392 | return; |
14393 | 14393 | ||
14394 | bw40po = (u16) wlapi_getintvar(shim, BRCMS_SROM_BW40PO); | 14394 | bw40po = sprom->bw40po; |
14395 | pi->bw402gpo = bw40po & 0xf; | 14395 | pi->bw402gpo = bw40po & 0xf; |
14396 | pi->bw405gpo = (bw40po & 0xf0) >> 4; | 14396 | pi->bw405gpo = (bw40po & 0xf0) >> 4; |
14397 | pi->bw405glpo = (bw40po & 0xf00) >> 8; | 14397 | pi->bw405glpo = (bw40po & 0xf00) >> 8; |
14398 | pi->bw405ghpo = (bw40po & 0xf000) >> 12; | 14398 | pi->bw405ghpo = (bw40po & 0xf000) >> 12; |
14399 | 14399 | ||
14400 | cddpo = (u16) wlapi_getintvar(shim, BRCMS_SROM_CDDPO); | 14400 | cddpo = sprom->cddpo; |
14401 | pi->cdd2gpo = cddpo & 0xf; | 14401 | pi->cdd2gpo = cddpo & 0xf; |
14402 | pi->cdd5gpo = (cddpo & 0xf0) >> 4; | 14402 | pi->cdd5gpo = (cddpo & 0xf0) >> 4; |
14403 | pi->cdd5glpo = (cddpo & 0xf00) >> 8; | 14403 | pi->cdd5glpo = (cddpo & 0xf00) >> 8; |
14404 | pi->cdd5ghpo = (cddpo & 0xf000) >> 12; | 14404 | pi->cdd5ghpo = (cddpo & 0xf000) >> 12; |
14405 | 14405 | ||
14406 | stbcpo = (u16) wlapi_getintvar(shim, BRCMS_SROM_STBCPO); | 14406 | stbcpo = sprom->stbcpo; |
14407 | pi->stbc2gpo = stbcpo & 0xf; | 14407 | pi->stbc2gpo = stbcpo & 0xf; |
14408 | pi->stbc5gpo = (stbcpo & 0xf0) >> 4; | 14408 | pi->stbc5gpo = (stbcpo & 0xf0) >> 4; |
14409 | pi->stbc5glpo = (stbcpo & 0xf00) >> 8; | 14409 | pi->stbc5glpo = (stbcpo & 0xf00) >> 8; |
14410 | pi->stbc5ghpo = (stbcpo & 0xf000) >> 12; | 14410 | pi->stbc5ghpo = (stbcpo & 0xf000) >> 12; |
14411 | 14411 | ||
14412 | bwduppo = (u16) wlapi_getintvar(shim, BRCMS_SROM_BWDUPPO); | 14412 | bwduppo = sprom->bwduppo; |
14413 | pi->bwdup2gpo = bwduppo & 0xf; | 14413 | pi->bwdup2gpo = bwduppo & 0xf; |
14414 | pi->bwdup5gpo = (bwduppo & 0xf0) >> 4; | 14414 | pi->bwdup5gpo = (bwduppo & 0xf0) >> 4; |
14415 | pi->bwdup5glpo = (bwduppo & 0xf00) >> 8; | 14415 | pi->bwdup5glpo = (bwduppo & 0xf00) >> 8; |
@@ -14419,242 +14419,137 @@ static void wlc_phy_txpwr_srom_read_ppr_nphy(struct brcms_phy *pi) | |||
14419 | band_num++) { | 14419 | band_num++) { |
14420 | switch (band_num) { | 14420 | switch (band_num) { |
14421 | case 0: | 14421 | case 0: |
14422 | |||
14423 | pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_2g = | 14422 | pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_2g = |
14424 | (s8) wlapi_getintvar(shim, | 14423 | sprom->core_pwr_info[0].maxpwr_2g; |
14425 | BRCMS_SROM_MAXP2GA0); | ||
14426 | pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_2g = | 14424 | pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_2g = |
14427 | (s8) wlapi_getintvar(shim, | 14425 | sprom->core_pwr_info[1].maxpwr_2g; |
14428 | BRCMS_SROM_MAXP2GA1); | ||
14429 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_a1 = | 14426 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_a1 = |
14430 | (s16) wlapi_getintvar(shim, | 14427 | sprom->core_pwr_info[0].pa_2g[0]; |
14431 | BRCMS_SROM_PA2GW0A0); | ||
14432 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_a1 = | 14428 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_a1 = |
14433 | (s16) wlapi_getintvar(shim, | 14429 | sprom->core_pwr_info[1].pa_2g[0]; |
14434 | BRCMS_SROM_PA2GW0A1); | ||
14435 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b0 = | 14430 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b0 = |
14436 | (s16) wlapi_getintvar(shim, | 14431 | sprom->core_pwr_info[0].pa_2g[1]; |
14437 | BRCMS_SROM_PA2GW1A0); | ||
14438 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b0 = | 14432 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b0 = |
14439 | (s16) wlapi_getintvar(shim, | 14433 | sprom->core_pwr_info[1].pa_2g[1]; |
14440 | BRCMS_SROM_PA2GW1A1); | ||
14441 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b1 = | 14434 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b1 = |
14442 | (s16) wlapi_getintvar(shim, | 14435 | sprom->core_pwr_info[0].pa_2g[2]; |
14443 | BRCMS_SROM_PA2GW2A0); | ||
14444 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b1 = | 14436 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b1 = |
14445 | (s16) wlapi_getintvar(shim, | 14437 | sprom->core_pwr_info[1].pa_2g[2]; |
14446 | BRCMS_SROM_PA2GW2A1); | ||
14447 | pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_2g = | 14438 | pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_2g = |
14448 | (s8) wlapi_getintvar(shim, BRCMS_SROM_ITT2GA0); | 14439 | sprom->core_pwr_info[0].itssi_2g; |
14449 | pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_2g = | 14440 | pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_2g = |
14450 | (s8) wlapi_getintvar(shim, BRCMS_SROM_ITT2GA1); | 14441 | sprom->core_pwr_info[1].itssi_2g; |
14451 | 14442 | ||
14452 | pi->cck2gpo = (u16) wlapi_getintvar(shim, | 14443 | pi->cck2gpo = sprom->cck2gpo; |
14453 | BRCMS_SROM_CCK2GPO); | 14444 | |
14454 | 14445 | pi->ofdm2gpo = sprom->ofdm2gpo; | |
14455 | pi->ofdm2gpo = | 14446 | |
14456 | (u32) wlapi_getintvar(shim, | 14447 | pi->mcs2gpo[0] = sprom->mcs2gpo[0]; |
14457 | BRCMS_SROM_OFDM2GPO); | 14448 | pi->mcs2gpo[1] = sprom->mcs2gpo[1]; |
14458 | 14449 | pi->mcs2gpo[2] = sprom->mcs2gpo[2]; | |
14459 | pi->mcs2gpo[0] = | 14450 | pi->mcs2gpo[3] = sprom->mcs2gpo[3]; |
14460 | (u16) wlapi_getintvar(shim, | 14451 | pi->mcs2gpo[4] = sprom->mcs2gpo[4]; |
14461 | BRCMS_SROM_MCS2GPO0); | 14452 | pi->mcs2gpo[5] = sprom->mcs2gpo[5]; |
14462 | pi->mcs2gpo[1] = | 14453 | pi->mcs2gpo[6] = sprom->mcs2gpo[6]; |
14463 | (u16) wlapi_getintvar(shim, | 14454 | pi->mcs2gpo[7] = sprom->mcs2gpo[7]; |
14464 | BRCMS_SROM_MCS2GPO1); | ||
14465 | pi->mcs2gpo[2] = | ||
14466 | (u16) wlapi_getintvar(shim, | ||
14467 | BRCMS_SROM_MCS2GPO2); | ||
14468 | pi->mcs2gpo[3] = | ||
14469 | (u16) wlapi_getintvar(shim, | ||
14470 | BRCMS_SROM_MCS2GPO3); | ||
14471 | pi->mcs2gpo[4] = | ||
14472 | (u16) wlapi_getintvar(shim, | ||
14473 | BRCMS_SROM_MCS2GPO4); | ||
14474 | pi->mcs2gpo[5] = | ||
14475 | (u16) wlapi_getintvar(shim, | ||
14476 | BRCMS_SROM_MCS2GPO5); | ||
14477 | pi->mcs2gpo[6] = | ||
14478 | (u16) wlapi_getintvar(shim, | ||
14479 | BRCMS_SROM_MCS2GPO6); | ||
14480 | pi->mcs2gpo[7] = | ||
14481 | (u16) wlapi_getintvar(shim, | ||
14482 | BRCMS_SROM_MCS2GPO7); | ||
14483 | break; | 14455 | break; |
14484 | case 1: | 14456 | case 1: |
14485 | 14457 | ||
14486 | pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_5gm = | 14458 | pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_5gm = |
14487 | (s8) wlapi_getintvar(shim, BRCMS_SROM_MAXP5GA0); | 14459 | sprom->core_pwr_info[0].maxpwr_5g; |
14488 | pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_5gm = | 14460 | pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_5gm = |
14489 | (s8) wlapi_getintvar(shim, | 14461 | sprom->core_pwr_info[1].maxpwr_5g; |
14490 | BRCMS_SROM_MAXP5GA1); | ||
14491 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_a1 = | 14462 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_a1 = |
14492 | (s16) wlapi_getintvar(shim, | 14463 | sprom->core_pwr_info[0].pa_5g[0]; |
14493 | BRCMS_SROM_PA5GW0A0); | ||
14494 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_a1 = | 14464 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_a1 = |
14495 | (s16) wlapi_getintvar(shim, | 14465 | sprom->core_pwr_info[1].pa_5g[0]; |
14496 | BRCMS_SROM_PA5GW0A1); | ||
14497 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b0 = | 14466 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b0 = |
14498 | (s16) wlapi_getintvar(shim, | 14467 | sprom->core_pwr_info[0].pa_5g[1]; |
14499 | BRCMS_SROM_PA5GW1A0); | ||
14500 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b0 = | 14468 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b0 = |
14501 | (s16) wlapi_getintvar(shim, | 14469 | sprom->core_pwr_info[1].pa_5g[1]; |
14502 | BRCMS_SROM_PA5GW1A1); | ||
14503 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b1 = | 14470 | pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b1 = |
14504 | (s16) wlapi_getintvar(shim, | 14471 | sprom->core_pwr_info[0].pa_5g[2]; |
14505 | BRCMS_SROM_PA5GW2A0); | ||
14506 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b1 = | 14472 | pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b1 = |
14507 | (s16) wlapi_getintvar(shim, | 14473 | sprom->core_pwr_info[1].pa_5g[2]; |
14508 | BRCMS_SROM_PA5GW2A1); | ||
14509 | pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_5gm = | 14474 | pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_5gm = |
14510 | (s8) wlapi_getintvar(shim, BRCMS_SROM_ITT5GA0); | 14475 | sprom->core_pwr_info[0].itssi_5g; |
14511 | pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_5gm = | 14476 | pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_5gm = |
14512 | (s8) wlapi_getintvar(shim, BRCMS_SROM_ITT5GA1); | 14477 | sprom->core_pwr_info[1].itssi_5g; |
14513 | 14478 | ||
14514 | pi->ofdm5gpo = | 14479 | pi->ofdm5gpo = sprom->ofdm5gpo; |
14515 | (u32) wlapi_getintvar(shim, | 14480 | |
14516 | BRCMS_SROM_OFDM5GPO); | 14481 | pi->mcs5gpo[0] = sprom->mcs5gpo[0]; |
14517 | 14482 | pi->mcs5gpo[1] = sprom->mcs5gpo[1]; | |
14518 | pi->mcs5gpo[0] = | 14483 | pi->mcs5gpo[2] = sprom->mcs5gpo[2]; |
14519 | (u16) wlapi_getintvar(shim, | 14484 | pi->mcs5gpo[3] = sprom->mcs5gpo[3]; |
14520 | BRCMS_SROM_MCS5GPO0); | 14485 | pi->mcs5gpo[4] = sprom->mcs5gpo[4]; |
14521 | pi->mcs5gpo[1] = | 14486 | pi->mcs5gpo[5] = sprom->mcs5gpo[5]; |
14522 | (u16) wlapi_getintvar(shim, | 14487 | pi->mcs5gpo[6] = sprom->mcs5gpo[6]; |
14523 | BRCMS_SROM_MCS5GPO1); | 14488 | pi->mcs5gpo[7] = sprom->mcs5gpo[7]; |
14524 | pi->mcs5gpo[2] = | ||
14525 | (u16) wlapi_getintvar(shim, | ||
14526 | BRCMS_SROM_MCS5GPO2); | ||
14527 | pi->mcs5gpo[3] = | ||
14528 | (u16) wlapi_getintvar(shim, | ||
14529 | BRCMS_SROM_MCS5GPO3); | ||
14530 | pi->mcs5gpo[4] = | ||
14531 | (u16) wlapi_getintvar(shim, | ||
14532 | BRCMS_SROM_MCS5GPO4); | ||
14533 | pi->mcs5gpo[5] = | ||
14534 | (u16) wlapi_getintvar(shim, | ||
14535 | BRCMS_SROM_MCS5GPO5); | ||
14536 | pi->mcs5gpo[6] = | ||
14537 | (u16) wlapi_getintvar(shim, | ||
14538 | BRCMS_SROM_MCS5GPO6); | ||
14539 | pi->mcs5gpo[7] = | ||
14540 | (u16) wlapi_getintvar(shim, | ||
14541 | BRCMS_SROM_MCS5GPO7); | ||
14542 | break; | 14489 | break; |
14543 | case 2: | 14490 | case 2: |
14544 | 14491 | ||
14545 | pi->nphy_pwrctrl_info[0].max_pwr_5gl = | 14492 | pi->nphy_pwrctrl_info[0].max_pwr_5gl = |
14546 | (s8) wlapi_getintvar(shim, | 14493 | sprom->core_pwr_info[0].maxpwr_5gl; |
14547 | BRCMS_SROM_MAXP5GLA0); | ||
14548 | pi->nphy_pwrctrl_info[1].max_pwr_5gl = | 14494 | pi->nphy_pwrctrl_info[1].max_pwr_5gl = |
14549 | (s8) wlapi_getintvar(shim, | 14495 | sprom->core_pwr_info[1].maxpwr_5gl; |
14550 | BRCMS_SROM_MAXP5GLA1); | ||
14551 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_a1 = | 14496 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_a1 = |
14552 | (s16) wlapi_getintvar(shim, | 14497 | sprom->core_pwr_info[0].pa_5gl[0]; |
14553 | BRCMS_SROM_PA5GLW0A0); | ||
14554 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_a1 = | 14498 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_a1 = |
14555 | (s16) wlapi_getintvar(shim, | 14499 | sprom->core_pwr_info[1].pa_5gl[0]; |
14556 | BRCMS_SROM_PA5GLW0A1); | ||
14557 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_b0 = | 14500 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_b0 = |
14558 | (s16) wlapi_getintvar(shim, | 14501 | sprom->core_pwr_info[0].pa_5gl[1]; |
14559 | BRCMS_SROM_PA5GLW1A0); | ||
14560 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_b0 = | 14502 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_b0 = |
14561 | (s16) wlapi_getintvar(shim, | 14503 | sprom->core_pwr_info[1].pa_5gl[1]; |
14562 | BRCMS_SROM_PA5GLW1A1); | ||
14563 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_b1 = | 14504 | pi->nphy_pwrctrl_info[0].pwrdet_5gl_b1 = |
14564 | (s16) wlapi_getintvar(shim, | 14505 | sprom->core_pwr_info[0].pa_5gl[2]; |
14565 | BRCMS_SROM_PA5GLW2A0); | ||
14566 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_b1 = | 14506 | pi->nphy_pwrctrl_info[1].pwrdet_5gl_b1 = |
14567 | (s16) wlapi_getintvar(shim, | 14507 | sprom->core_pwr_info[1].pa_5gl[2]; |
14568 | BRCMS_SROM_PA5GLW2A1); | ||
14569 | pi->nphy_pwrctrl_info[0].idle_targ_5gl = 0; | 14508 | pi->nphy_pwrctrl_info[0].idle_targ_5gl = 0; |
14570 | pi->nphy_pwrctrl_info[1].idle_targ_5gl = 0; | 14509 | pi->nphy_pwrctrl_info[1].idle_targ_5gl = 0; |
14571 | 14510 | ||
14572 | pi->ofdm5glpo = | 14511 | pi->ofdm5glpo = sprom->ofdm5glpo; |
14573 | (u32) wlapi_getintvar(shim, | 14512 | |
14574 | BRCMS_SROM_OFDM5GLPO); | 14513 | pi->mcs5glpo[0] = sprom->mcs5glpo[0]; |
14575 | 14514 | pi->mcs5glpo[1] = sprom->mcs5glpo[1]; | |
14576 | pi->mcs5glpo[0] = | 14515 | pi->mcs5glpo[2] = sprom->mcs5glpo[2]; |
14577 | (u16) wlapi_getintvar(shim, | 14516 | pi->mcs5glpo[3] = sprom->mcs5glpo[3]; |
14578 | BRCMS_SROM_MCS5GLPO0); | 14517 | pi->mcs5glpo[4] = sprom->mcs5glpo[4]; |
14579 | pi->mcs5glpo[1] = | 14518 | pi->mcs5glpo[5] = sprom->mcs5glpo[5]; |
14580 | (u16) wlapi_getintvar(shim, | 14519 | pi->mcs5glpo[6] = sprom->mcs5glpo[6]; |
14581 | BRCMS_SROM_MCS5GLPO1); | 14520 | pi->mcs5glpo[7] = sprom->mcs5glpo[7]; |
14582 | pi->mcs5glpo[2] = | ||
14583 | (u16) wlapi_getintvar(shim, | ||
14584 | BRCMS_SROM_MCS5GLPO2); | ||
14585 | pi->mcs5glpo[3] = | ||
14586 | (u16) wlapi_getintvar(shim, | ||
14587 | BRCMS_SROM_MCS5GLPO3); | ||
14588 | pi->mcs5glpo[4] = | ||
14589 | (u16) wlapi_getintvar(shim, | ||
14590 | BRCMS_SROM_MCS5GLPO4); | ||
14591 | pi->mcs5glpo[5] = | ||
14592 | (u16) wlapi_getintvar(shim, | ||
14593 | BRCMS_SROM_MCS5GLPO5); | ||
14594 | pi->mcs5glpo[6] = | ||
14595 | (u16) wlapi_getintvar(shim, | ||
14596 | BRCMS_SROM_MCS5GLPO6); | ||
14597 | pi->mcs5glpo[7] = | ||
14598 | (u16) wlapi_getintvar(shim, | ||
14599 | BRCMS_SROM_MCS5GLPO7); | ||
14600 | break; | 14521 | break; |
14601 | case 3: | 14522 | case 3: |
14602 | 14523 | ||
14603 | pi->nphy_pwrctrl_info[0].max_pwr_5gh = | 14524 | pi->nphy_pwrctrl_info[0].max_pwr_5gh = |
14604 | (s8) wlapi_getintvar(shim, | 14525 | sprom->core_pwr_info[0].maxpwr_5gh; |
14605 | BRCMS_SROM_MAXP5GHA0); | ||
14606 | pi->nphy_pwrctrl_info[1].max_pwr_5gh = | 14526 | pi->nphy_pwrctrl_info[1].max_pwr_5gh = |
14607 | (s8) wlapi_getintvar(shim, | 14527 | sprom->core_pwr_info[1].maxpwr_5gh; |
14608 | BRCMS_SROM_MAXP5GHA1); | ||
14609 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_a1 = | 14528 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_a1 = |
14610 | (s16) wlapi_getintvar(shim, | 14529 | sprom->core_pwr_info[0].pa_5gh[0]; |
14611 | BRCMS_SROM_PA5GHW0A0); | ||
14612 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_a1 = | 14530 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_a1 = |
14613 | (s16) wlapi_getintvar(shim, | 14531 | sprom->core_pwr_info[1].pa_5gh[0]; |
14614 | BRCMS_SROM_PA5GHW0A1); | ||
14615 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_b0 = | 14532 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_b0 = |
14616 | (s16) wlapi_getintvar(shim, | 14533 | sprom->core_pwr_info[0].pa_5gh[1]; |
14617 | BRCMS_SROM_PA5GHW1A0); | ||
14618 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_b0 = | 14534 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_b0 = |
14619 | (s16) wlapi_getintvar(shim, | 14535 | sprom->core_pwr_info[1].pa_5gh[1]; |
14620 | BRCMS_SROM_PA5GHW1A1); | ||
14621 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_b1 = | 14536 | pi->nphy_pwrctrl_info[0].pwrdet_5gh_b1 = |
14622 | (s16) wlapi_getintvar(shim, | 14537 | sprom->core_pwr_info[0].pa_5gh[2]; |
14623 | BRCMS_SROM_PA5GHW2A0); | ||
14624 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_b1 = | 14538 | pi->nphy_pwrctrl_info[1].pwrdet_5gh_b1 = |
14625 | (s16) wlapi_getintvar(shim, | 14539 | sprom->core_pwr_info[1].pa_5gh[2]; |
14626 | BRCMS_SROM_PA5GHW2A1); | ||
14627 | pi->nphy_pwrctrl_info[0].idle_targ_5gh = 0; | 14540 | pi->nphy_pwrctrl_info[0].idle_targ_5gh = 0; |
14628 | pi->nphy_pwrctrl_info[1].idle_targ_5gh = 0; | 14541 | pi->nphy_pwrctrl_info[1].idle_targ_5gh = 0; |
14629 | 14542 | ||
14630 | pi->ofdm5ghpo = | 14543 | pi->ofdm5ghpo = sprom->ofdm5ghpo; |
14631 | (u32) wlapi_getintvar(shim, | 14544 | |
14632 | BRCMS_SROM_OFDM5GHPO); | 14545 | pi->mcs5ghpo[0] = sprom->mcs5ghpo[0]; |
14633 | 14546 | pi->mcs5ghpo[1] = sprom->mcs5ghpo[1]; | |
14634 | pi->mcs5ghpo[0] = | 14547 | pi->mcs5ghpo[2] = sprom->mcs5ghpo[2]; |
14635 | (u16) wlapi_getintvar(shim, | 14548 | pi->mcs5ghpo[3] = sprom->mcs5ghpo[3]; |
14636 | BRCMS_SROM_MCS5GHPO0); | 14549 | pi->mcs5ghpo[4] = sprom->mcs5ghpo[4]; |
14637 | pi->mcs5ghpo[1] = | 14550 | pi->mcs5ghpo[5] = sprom->mcs5ghpo[5]; |
14638 | (u16) wlapi_getintvar(shim, | 14551 | pi->mcs5ghpo[6] = sprom->mcs5ghpo[6]; |
14639 | BRCMS_SROM_MCS5GHPO1); | 14552 | pi->mcs5ghpo[7] = sprom->mcs5ghpo[7]; |
14640 | pi->mcs5ghpo[2] = | ||
14641 | (u16) wlapi_getintvar(shim, | ||
14642 | BRCMS_SROM_MCS5GHPO2); | ||
14643 | pi->mcs5ghpo[3] = | ||
14644 | (u16) wlapi_getintvar(shim, | ||
14645 | BRCMS_SROM_MCS5GHPO3); | ||
14646 | pi->mcs5ghpo[4] = | ||
14647 | (u16) wlapi_getintvar(shim, | ||
14648 | BRCMS_SROM_MCS5GHPO4); | ||
14649 | pi->mcs5ghpo[5] = | ||
14650 | (u16) wlapi_getintvar(shim, | ||
14651 | BRCMS_SROM_MCS5GHPO5); | ||
14652 | pi->mcs5ghpo[6] = | ||
14653 | (u16) wlapi_getintvar(shim, | ||
14654 | BRCMS_SROM_MCS5GHPO6); | ||
14655 | pi->mcs5ghpo[7] = | ||
14656 | (u16) wlapi_getintvar(shim, | ||
14657 | BRCMS_SROM_MCS5GHPO7); | ||
14658 | break; | 14553 | break; |
14659 | } | 14554 | } |
14660 | } | 14555 | } |
@@ -14664,45 +14559,34 @@ static void wlc_phy_txpwr_srom_read_ppr_nphy(struct brcms_phy *pi) | |||
14664 | 14559 | ||
14665 | static bool wlc_phy_txpwr_srom_read_nphy(struct brcms_phy *pi) | 14560 | static bool wlc_phy_txpwr_srom_read_nphy(struct brcms_phy *pi) |
14666 | { | 14561 | { |
14667 | struct phy_shim_info *shim = pi->sh->physhim; | 14562 | struct ssb_sprom *sprom = &pi->d11core->bus->sprom; |
14668 | 14563 | ||
14669 | pi->antswitch = (u8) wlapi_getintvar(shim, BRCMS_SROM_ANTSWITCH); | 14564 | pi->antswitch = sprom->antswitch; |
14670 | pi->aa2g = (u8) wlapi_getintvar(shim, BRCMS_SROM_AA2G); | 14565 | pi->aa2g = sprom->ant_available_bg; |
14671 | pi->aa5g = (u8) wlapi_getintvar(shim, BRCMS_SROM_AA5G); | 14566 | pi->aa5g = sprom->ant_available_a; |
14672 | 14567 | ||
14673 | pi->srom_fem2g.tssipos = (u8) wlapi_getintvar(shim, | 14568 | pi->srom_fem2g.tssipos = sprom->fem.ghz2.tssipos; |
14674 | BRCMS_SROM_TSSIPOS2G); | 14569 | pi->srom_fem2g.extpagain = sprom->fem.ghz2.extpa_gain; |
14675 | pi->srom_fem2g.extpagain = (u8) wlapi_getintvar(shim, | 14570 | pi->srom_fem2g.pdetrange = sprom->fem.ghz2.pdet_range; |
14676 | BRCMS_SROM_EXTPAGAIN2G); | 14571 | pi->srom_fem2g.triso = sprom->fem.ghz2.tr_iso; |
14677 | pi->srom_fem2g.pdetrange = (u8) wlapi_getintvar(shim, | 14572 | pi->srom_fem2g.antswctrllut = sprom->fem.ghz2.antswlut; |
14678 | BRCMS_SROM_PDETRANGE2G); | 14573 | |
14679 | pi->srom_fem2g.triso = (u8) wlapi_getintvar(shim, BRCMS_SROM_TRISO2G); | 14574 | pi->srom_fem5g.tssipos = sprom->fem.ghz5.tssipos; |
14680 | pi->srom_fem2g.antswctrllut = | 14575 | pi->srom_fem5g.extpagain = sprom->fem.ghz5.extpa_gain; |
14681 | (u8) wlapi_getintvar(shim, BRCMS_SROM_ANTSWCTL2G); | 14576 | pi->srom_fem5g.pdetrange = sprom->fem.ghz5.pdet_range; |
14682 | 14577 | pi->srom_fem5g.triso = sprom->fem.ghz5.tr_iso; | |
14683 | pi->srom_fem5g.tssipos = (u8) wlapi_getintvar(shim, | 14578 | if (sprom->fem.ghz5.antswlut) |
14684 | BRCMS_SROM_TSSIPOS5G); | 14579 | pi->srom_fem5g.antswctrllut = sprom->fem.ghz5.antswlut; |
14685 | pi->srom_fem5g.extpagain = (u8) wlapi_getintvar(shim, | ||
14686 | BRCMS_SROM_EXTPAGAIN5G); | ||
14687 | pi->srom_fem5g.pdetrange = (u8) wlapi_getintvar(shim, | ||
14688 | BRCMS_SROM_PDETRANGE5G); | ||
14689 | pi->srom_fem5g.triso = (u8) wlapi_getintvar(shim, BRCMS_SROM_TRISO5G); | ||
14690 | if (wlapi_getvar(shim, BRCMS_SROM_ANTSWCTL5G)) | ||
14691 | pi->srom_fem5g.antswctrllut = | ||
14692 | (u8) wlapi_getintvar(shim, BRCMS_SROM_ANTSWCTL5G); | ||
14693 | else | 14580 | else |
14694 | pi->srom_fem5g.antswctrllut = | 14581 | pi->srom_fem5g.antswctrllut = sprom->fem.ghz2.antswlut; |
14695 | (u8) wlapi_getintvar(shim, BRCMS_SROM_ANTSWCTL2G); | ||
14696 | 14582 | ||
14697 | wlc_phy_txpower_ipa_upd(pi); | 14583 | wlc_phy_txpower_ipa_upd(pi); |
14698 | 14584 | ||
14699 | pi->phy_txcore_disable_temp = | 14585 | pi->phy_txcore_disable_temp = sprom->tempthresh; |
14700 | (s16) wlapi_getintvar(shim, BRCMS_SROM_TEMPTHRESH); | ||
14701 | if (pi->phy_txcore_disable_temp == 0) | 14586 | if (pi->phy_txcore_disable_temp == 0) |
14702 | pi->phy_txcore_disable_temp = PHY_CHAIN_TX_DISABLE_TEMP; | 14587 | pi->phy_txcore_disable_temp = PHY_CHAIN_TX_DISABLE_TEMP; |
14703 | 14588 | ||
14704 | pi->phy_tempsense_offset = (s8) wlapi_getintvar(shim, | 14589 | pi->phy_tempsense_offset = sprom->tempoffset; |
14705 | BRCMS_SROM_TEMPOFFSET); | ||
14706 | if (pi->phy_tempsense_offset != 0) { | 14590 | if (pi->phy_tempsense_offset != 0) { |
14707 | if (pi->phy_tempsense_offset > | 14591 | if (pi->phy_tempsense_offset > |
14708 | (NPHY_SROM_TEMPSHIFT + NPHY_SROM_MAXTEMPOFFSET)) | 14592 | (NPHY_SROM_TEMPSHIFT + NPHY_SROM_MAXTEMPOFFSET)) |
@@ -14717,8 +14601,7 @@ static bool wlc_phy_txpwr_srom_read_nphy(struct brcms_phy *pi) | |||
14717 | pi->phy_txcore_enable_temp = | 14601 | pi->phy_txcore_enable_temp = |
14718 | pi->phy_txcore_disable_temp - PHY_HYSTERESIS_DELTATEMP; | 14602 | pi->phy_txcore_disable_temp - PHY_HYSTERESIS_DELTATEMP; |
14719 | 14603 | ||
14720 | pi->phycal_tempdelta = | 14604 | pi->phycal_tempdelta = sprom->phycal_tempdelta; |
14721 | (u8) wlapi_getintvar(shim, BRCMS_SROM_PHYCAL_TEMPDELTA); | ||
14722 | if (pi->phycal_tempdelta > NPHY_CAL_MAXTEMPDELTA) | 14605 | if (pi->phycal_tempdelta > NPHY_CAL_MAXTEMPDELTA) |
14723 | pi->phycal_tempdelta = 0; | 14606 | pi->phycal_tempdelta = 0; |
14724 | 14607 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/stf.c b/drivers/net/wireless/brcm80211/brcmsmac/stf.c index d8f528eb180c..ed1d1aa71d2d 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/stf.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/stf.c | |||
@@ -370,9 +370,11 @@ void brcms_c_stf_phy_txant_upd(struct brcms_c_info *wlc) | |||
370 | 370 | ||
371 | void brcms_c_stf_phy_chain_calc(struct brcms_c_info *wlc) | 371 | void brcms_c_stf_phy_chain_calc(struct brcms_c_info *wlc) |
372 | { | 372 | { |
373 | struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom; | ||
374 | |||
373 | /* get available rx/tx chains */ | 375 | /* get available rx/tx chains */ |
374 | wlc->stf->hw_txchain = (u8) getintvar(wlc->hw->sih, BRCMS_SROM_TXCHAIN); | 376 | wlc->stf->hw_txchain = sprom->txchain; |
375 | wlc->stf->hw_rxchain = (u8) getintvar(wlc->hw->sih, BRCMS_SROM_RXCHAIN); | 377 | wlc->stf->hw_rxchain = sprom->rxchain; |
376 | 378 | ||
377 | /* these parameter are intended to be used for all PHY types */ | 379 | /* these parameter are intended to be used for all PHY types */ |
378 | if (wlc->stf->hw_txchain == 0 || wlc->stf->hw_txchain == 0xf) { | 380 | if (wlc->stf->hw_txchain == 0 || wlc->stf->hw_txchain == 0xf) { |