Commit 28a53442 authored by Arend van Spriel's avatar Arend van Spriel Committed by John W. Linville

brcm80211: smac: change ai_attach interface taking a bcma_bus object

The ai_attach now takes a bcma_bus object as its parameter to
obtain all required information needed for chip control.
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarAlwin Beukers <alwin@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarFranky Lin <frankyl@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent cbc80db2
...@@ -1022,22 +1022,25 @@ static __used void ai_nvram_process(struct si_info *sii) ...@@ -1022,22 +1022,25 @@ static __used void ai_nvram_process(struct si_info *sii)
} }
static struct si_info *ai_doattach(struct si_info *sii, static struct si_info *ai_doattach(struct si_info *sii,
void __iomem *regs, struct pci_dev *pbus) struct bcma_bus *pbus)
{ {
void __iomem *regs = pbus->mmio;
struct si_pub *sih = &sii->pub; struct si_pub *sih = &sii->pub;
u32 w, savewin; u32 w, savewin;
struct chipcregs __iomem *cc; struct chipcregs __iomem *cc;
uint socitype; uint socitype;
uint origidx; uint origidx;
/* assume the window is looking at chipcommon */
WARN_ON(pbus->mapped_core->id.id != BCMA_CORE_CHIPCOMMON);
memset((unsigned char *) sii, 0, sizeof(struct si_info)); memset((unsigned char *) sii, 0, sizeof(struct si_info));
savewin = 0; savewin = 0;
sii->icbus = pbus;
sii->buscoreidx = BADIDX; sii->buscoreidx = BADIDX;
sii->curmap = regs; sii->curmap = regs;
sii->pcibus = pbus; sii->pcibus = pbus->host_pci;
/* find Chipcommon address */ /* find Chipcommon address */
pci_read_config_dword(sii->pcibus, PCI_BAR0_WIN, &savewin); pci_read_config_dword(sii->pcibus, PCI_BAR0_WIN, &savewin);
...@@ -1160,13 +1163,10 @@ static struct si_info *ai_doattach(struct si_info *sii, ...@@ -1160,13 +1163,10 @@ static struct si_info *ai_doattach(struct si_info *sii,
} }
/* /*
* Allocate a si handle. * Allocate a si handle and do the attach.
* devid - pci device id (used to determine chip#)
* osh - opaque OS handle
* regs - virtual address of initial core registers
*/ */
struct si_pub * struct si_pub *
ai_attach(void __iomem *regs, struct pci_dev *sdh) ai_attach(struct bcma_bus *pbus)
{ {
struct si_info *sii; struct si_info *sii;
...@@ -1175,7 +1175,7 @@ ai_attach(void __iomem *regs, struct pci_dev *sdh) ...@@ -1175,7 +1175,7 @@ ai_attach(void __iomem *regs, struct pci_dev *sdh)
if (sii == NULL) if (sii == NULL)
return NULL; return NULL;
if (ai_doattach(sii, regs, sdh) == NULL) { if (ai_doattach(sii, pbus) == NULL) {
kfree(sii); kfree(sii);
return NULL; return NULL;
} }
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#ifndef _BRCM_AIUTILS_H_ #ifndef _BRCM_AIUTILS_H_
#define _BRCM_AIUTILS_H_ #define _BRCM_AIUTILS_H_
#include <linux/bcma/bcma.h>
#include "types.h" #include "types.h"
/* /*
...@@ -170,6 +172,7 @@ struct gpioh_item { ...@@ -170,6 +172,7 @@ struct gpioh_item {
/* misc si info needed by some of the routines */ /* misc si info needed by some of the routines */
struct si_info { struct si_info {
struct si_pub pub; /* back plane public state (must be first) */ struct si_pub pub; /* back plane public state (must be first) */
struct bcma_bus *icbus; /* handle to soc interconnect bus */
struct pci_dev *pcibus; /* handle to pci bus */ struct pci_dev *pcibus; /* handle to pci bus */
uint dev_coreid; /* the core provides driver functions */ uint dev_coreid; /* the core provides driver functions */
void *intr_arg; /* interrupt callback function arg */ void *intr_arg; /* interrupt callback function arg */
...@@ -235,7 +238,7 @@ extern u32 ai_addrspacesize(struct si_pub *sih, uint asidx); ...@@ -235,7 +238,7 @@ extern u32 ai_addrspacesize(struct si_pub *sih, uint asidx);
extern void ai_write_wrap_reg(struct si_pub *sih, u32 offset, u32 val); extern void ai_write_wrap_reg(struct si_pub *sih, u32 offset, u32 val);
/* === exported functions === */ /* === exported functions === */
extern struct si_pub *ai_attach(void __iomem *regs, struct pci_dev *sdh); extern struct si_pub *ai_attach(struct bcma_bus *pbus);
extern void ai_detach(struct si_pub *sih); extern void ai_detach(struct si_pub *sih);
extern uint ai_coreid(struct si_pub *sih); extern uint ai_coreid(struct si_pub *sih);
extern uint ai_corerev(struct si_pub *sih); extern uint ai_corerev(struct si_pub *sih);
......
...@@ -4469,7 +4469,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, ...@@ -4469,7 +4469,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
* Do the hardware portion of the attach. Also initialize software * Do the hardware portion of the attach. Also initialize software
* state that depends on the particular hardware we are running. * state that depends on the particular hardware we are running.
*/ */
wlc_hw->sih = ai_attach(core->bus->mmio, core->bus->host_pci); wlc_hw->sih = ai_attach(core->bus);
if (wlc_hw->sih == NULL) { if (wlc_hw->sih == NULL) {
wiphy_err(wiphy, "wl%d: brcms_b_attach: si_attach failed\n", wiphy_err(wiphy, "wl%d: brcms_b_attach: si_attach failed\n",
unit); unit);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment