aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2011-12-12 18:15:11 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-12-13 15:48:32 -0500
commite922602edad30d1f225c32c1cddd80fb3740a8d3 (patch)
tree11ebbc1055d3703d544222346ecedc225167c18f
parent99559f136559e6822f20fcf1b63e6910df126941 (diff)
brcm80211: smac: cleanup buscore handling in aiutils.c
Instead of storing the buscore information now the BCMA core device is kept for quick reference in si_info structure. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Alwin Beukers <alwin@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/aiutils.c52
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/aiutils.h23
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/nicpci.c3
3 files changed, 34 insertions, 44 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index 34a5e022509..372bee8dd92 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -479,10 +479,9 @@ static bool ai_buscore_prep(struct si_info *sii)
479static bool 479static bool
480ai_buscore_setup(struct si_info *sii, struct bcma_device *cc) 480ai_buscore_setup(struct si_info *sii, struct bcma_device *cc)
481{ 481{
482 struct bcma_device *pci = NULL;
483 struct bcma_device *pcie = NULL;
482 struct bcma_device *core; 484 struct bcma_device *core;
483 bool pci, pcie;
484 uint i;
485 uint pciidx, pcieidx, pcirev, pcierev;
486 485
487 486
488 /* no cores found, bail out */ 487 /* no cores found, bail out */
@@ -506,15 +505,7 @@ ai_buscore_setup(struct si_info *sii, struct bcma_device *cc)
506 sii->pub.pmurev = sii->pub.pmucaps & PCAP_REV_MASK; 505 sii->pub.pmurev = sii->pub.pmucaps & PCAP_REV_MASK;
507 } 506 }
508 507
509 /* figure out bus/orignal core idx */ 508 /* figure out buscore */
510 sii->pub.buscoretype = NODEV_CORE_ID;
511 sii->pub.buscorerev = NOREV;
512 sii->buscoreidx = BADIDX;
513
514 pci = pcie = false;
515 pcirev = pcierev = NOREV;
516 pciidx = pcieidx = BADIDX;
517
518 list_for_each_entry(core, &cc->bus->cores, list) { 509 list_for_each_entry(core, &cc->bus->cores, list) {
519 uint cid, crev; 510 uint cid, crev;
520 511
@@ -522,30 +513,22 @@ ai_buscore_setup(struct si_info *sii, struct bcma_device *cc)
522 crev = core->id.rev; 513 crev = core->id.rev;
523 514
524 if (cid == PCI_CORE_ID) { 515 if (cid == PCI_CORE_ID) {
525 pciidx = i; 516 pci = core;
526 pcirev = crev;
527 pci = true;
528 } else if (cid == PCIE_CORE_ID) { 517 } else if (cid == PCIE_CORE_ID) {
529 pcieidx = i; 518 pcie = core;
530 pcierev = crev;
531 pcie = true;
532 } 519 }
533 } 520 }
534 521
535 if (pci && pcie) { 522 if (pci && pcie) {
536 if (ai_ispcie(sii)) 523 if (ai_ispcie(sii))
537 pci = false; 524 pci = NULL;
538 else 525 else
539 pcie = false; 526 pcie = NULL;
540 } 527 }
541 if (pci) { 528 if (pci) {
542 sii->pub.buscoretype = PCI_CORE_ID; 529 sii->buscore = pci;
543 sii->pub.buscorerev = pcirev;
544 sii->buscoreidx = pciidx;
545 } else if (pcie) { 530 } else if (pcie) {
546 sii->pub.buscoretype = PCIE_CORE_ID; 531 sii->buscore = pcie;
547 sii->pub.buscorerev = pcierev;
548 sii->buscoreidx = pcieidx;
549 } 532 }
550 533
551 /* fixup necessary chip/core configurations */ 534 /* fixup necessary chip/core configurations */
@@ -554,10 +537,8 @@ ai_buscore_setup(struct si_info *sii, struct bcma_device *cc)
554 if (sii->pch == NULL) 537 if (sii->pch == NULL)
555 return false; 538 return false;
556 } 539 }
557 if (ai_pci_fixcfg(&sii->pub)) { 540 if (ai_pci_fixcfg(&sii->pub))
558 /* si_doattach: si_pci_fixcfg failed */
559 return false; 541 return false;
560 }
561 542
562 return true; 543 return true;
563} 544}
@@ -589,7 +570,6 @@ static struct si_info *ai_doattach(struct si_info *sii,
589 savewin = 0; 570 savewin = 0;
590 571
591 sii->icbus = pbus; 572 sii->icbus = pbus;
592 sii->buscoreidx = BADIDX;
593 sii->pcibus = pbus->host_pci; 573 sii->pcibus = pbus->host_pci;
594 574
595 /* switch to Chipcommon core */ 575 /* switch to Chipcommon core */
@@ -1248,3 +1228,15 @@ bool ai_is_otp_disabled(struct si_pub *sih)
1248 return false; 1228 return false;
1249 } 1229 }
1250} 1230}
1231
1232uint ai_get_buscoretype(struct si_pub *sih)
1233{
1234 struct si_info *sii = (struct si_info *)sih;
1235 return sii->buscore->id.id;
1236}
1237
1238uint ai_get_buscorerev(struct si_pub *sih)
1239{
1240 struct si_info *sii = (struct si_info *)sih;
1241 return sii->buscore->id.rev;
1242}
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
index f9f88ddbe4a..f84c6f78169 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
@@ -146,8 +146,6 @@
146 * public (read-only) portion of aiutils handle returned by si_attach() 146 * public (read-only) portion of aiutils handle returned by si_attach()
147 */ 147 */
148struct si_pub { 148struct si_pub {
149 uint buscoretype; /* PCI_CORE_ID, PCIE_CORE_ID, PCMCIA_CORE_ID */
150 uint buscorerev; /* buscore rev */
151 int ccrev; /* chip common core rev */ 149 int ccrev; /* chip common core rev */
152 u32 cccaps; /* chip common capabilities */ 150 u32 cccaps; /* chip common capabilities */
153 int pmurev; /* pmu core rev */ 151 int pmurev; /* pmu core rev */
@@ -175,11 +173,10 @@ struct si_info {
175 struct bcma_bus *icbus; /* handle to soc interconnect bus */ 173 struct bcma_bus *icbus; /* handle to soc interconnect bus */
176 struct pci_dev *pcibus; /* handle to pci bus */ 174 struct pci_dev *pcibus; /* handle to pci bus */
177 struct pcicore_info *pch; /* PCI/E core handle */ 175 struct pcicore_info *pch; /* PCI/E core handle */
178 176 struct bcma_device *buscore;
179 struct list_head var_list; /* list of srom variables */ 177 struct list_head var_list; /* list of srom variables */
180 178
181 u32 chipst; /* chip status */ 179 u32 chipst; /* chip status */
182 uint buscoreidx; /* buscore index */
183}; 180};
184 181
185/* 182/*
@@ -224,47 +221,49 @@ extern void ai_chipcontrl_epa4331(struct si_pub *sih, bool on);
224/* Enable Ex-PA for 4313 */ 221/* Enable Ex-PA for 4313 */
225extern void ai_epa_4313war(struct si_pub *sih); 222extern void ai_epa_4313war(struct si_pub *sih);
226 223
227static inline uint ai_get_buscoretype(struct si_pub *sih) 224extern uint ai_get_buscoretype(struct si_pub *sih);
228{ 225extern uint ai_get_buscorerev(struct si_pub *sih);
229 return sih->buscoretype;
230}
231 226
232static inline uint ai_get_buscorerev(struct si_pub *sih)
233{
234 return sih->buscorerev;
235}
236static inline int ai_get_ccrev(struct si_pub *sih) 227static inline int ai_get_ccrev(struct si_pub *sih)
237{ 228{
238 return sih->ccrev; 229 return sih->ccrev;
239} 230}
231
240static inline u32 ai_get_cccaps(struct si_pub *sih) 232static inline u32 ai_get_cccaps(struct si_pub *sih)
241{ 233{
242 return sih->cccaps; 234 return sih->cccaps;
243} 235}
236
244static inline int ai_get_pmurev(struct si_pub *sih) 237static inline int ai_get_pmurev(struct si_pub *sih)
245{ 238{
246 return sih->pmurev; 239 return sih->pmurev;
247} 240}
241
248static inline u32 ai_get_pmucaps(struct si_pub *sih) 242static inline u32 ai_get_pmucaps(struct si_pub *sih)
249{ 243{
250 return sih->pmucaps; 244 return sih->pmucaps;
251} 245}
246
252static inline uint ai_get_boardtype(struct si_pub *sih) 247static inline uint ai_get_boardtype(struct si_pub *sih)
253{ 248{
254 return sih->boardtype; 249 return sih->boardtype;
255} 250}
251
256static inline uint ai_get_boardvendor(struct si_pub *sih) 252static inline uint ai_get_boardvendor(struct si_pub *sih)
257{ 253{
258 return sih->boardvendor; 254 return sih->boardvendor;
259} 255}
256
260static inline uint ai_get_chip_id(struct si_pub *sih) 257static inline uint ai_get_chip_id(struct si_pub *sih)
261{ 258{
262 return sih->chip; 259 return sih->chip;
263} 260}
261
264static inline uint ai_get_chiprev(struct si_pub *sih) 262static inline uint ai_get_chiprev(struct si_pub *sih)
265{ 263{
266 return sih->chiprev; 264 return sih->chiprev;
267} 265}
266
268static inline uint ai_get_chippkg(struct si_pub *sih) 267static inline uint ai_get_chippkg(struct si_pub *sih)
269{ 268{
270 return sih->chippkg; 269 return sih->chippkg;
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c b/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c
index a4330416b43..7fad6dc1925 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/nicpci.c
@@ -408,7 +408,7 @@ pcie_mdioop(struct pcicore_info *pi, uint physmedia, uint regaddr, bool write,
408 bcma_write32(pi->core, PCIEREGOFFS(mdiocontrol), 408 bcma_write32(pi->core, PCIEREGOFFS(mdiocontrol),
409 MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL); 409 MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
410 410
411 if (pi->sih->buscorerev >= 10) { 411 if (ai_get_buscorerev(pi->sih) >= 10) {
412 /* new serdes is slower in rw, 412 /* new serdes is slower in rw,
413 * using two layers of reg address mapping 413 * using two layers of reg address mapping
414 */ 414 */
@@ -782,7 +782,6 @@ void pcicore_down(struct pcicore_info *pi, int state)
782 pcie_extendL1timer(pi, false); 782 pcie_extendL1timer(pi, false);
783} 783}
784 784
785/* precondition: current core is sii->buscoretype */
786void pcicore_fixcfg(struct pcicore_info *pi) 785void pcicore_fixcfg(struct pcicore_info *pi)
787{ 786{
788 struct bcma_device *core = pi->core; 787 struct bcma_device *core = pi->core;