staging: brcm80211: remove struct brcmf_sdio_card from brcmfmac

Use brcmf_sdio_dev as the unified structure to store information
of wifi dongle

Reviewed-by: Roland Vossen <rvossen@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Franky Lin
2011-08-08 15:58:53 +02:00
committed by Greg Kroah-Hartman
parent a493f4e1b5
commit 306f49ba57
4 changed files with 317 additions and 328 deletions

View File

@@ -41,48 +41,40 @@
#define SDIOH_DATA_PIO 0 /* PIO mode */ #define SDIOH_DATA_PIO 0 /* PIO mode */
#define SDIOH_DATA_DMA 1 /* DMA mode */ #define SDIOH_DATA_DMA 1 /* DMA mode */
struct brcmf_sdio_card {
bool init_success; /* underlying driver successfully attached */
void *sdioh; /* handler for sdioh */
bool regfail; /* Save status of last
reg_read/reg_write call */
u32 sbwad; /* Save backplane window address */
};
/* Module parameters specific to each host-controller driver */ /* Module parameters specific to each host-controller driver */
module_param(sd_f2_blocksize, int, 0); module_param(sd_f2_blocksize, int, 0);
int int
brcmf_sdcard_iovar_op(struct brcmf_sdio_card *card, const char *name, brcmf_sdcard_iovar_op(struct brcmf_sdio_dev *sdiodev, const char *name,
void *params, int plen, void *arg, int len, bool set) void *params, int plen, void *arg, int len, bool set)
{ {
return brcmf_sdioh_iovar_op(card->sdioh, name, params, plen, arg, return brcmf_sdioh_iovar_op(sdiodev->sdioh, name, params, plen, arg,
len, set); len, set);
} }
int brcmf_sdcard_intr_enable(struct brcmf_sdio_card *card) int brcmf_sdcard_intr_enable(struct brcmf_sdio_dev *sdiodev)
{ {
return brcmf_sdioh_interrupt_set(card->sdioh, true); return brcmf_sdioh_interrupt_set(sdiodev->sdioh, true);
} }
int brcmf_sdcard_intr_disable(struct brcmf_sdio_card *card) int brcmf_sdcard_intr_disable(struct brcmf_sdio_dev *sdiodev)
{ {
return brcmf_sdioh_interrupt_set(card->sdioh, false); return brcmf_sdioh_interrupt_set(sdiodev->sdioh, false);
} }
int brcmf_sdcard_intr_reg(struct brcmf_sdio_card *card, int brcmf_sdcard_intr_reg(struct brcmf_sdio_dev *sdiodev,
void (*fn)(void *), void *argh) void (*fn)(void *), void *argh)
{ {
return brcmf_sdioh_interrupt_register(card->sdioh, fn, argh); return brcmf_sdioh_interrupt_register(sdiodev->sdioh, fn, argh);
} }
int brcmf_sdcard_intr_dereg(struct brcmf_sdio_card *card) int brcmf_sdcard_intr_dereg(struct brcmf_sdio_dev *sdiodev)
{ {
return brcmf_sdioh_interrupt_deregister(card->sdioh); return brcmf_sdioh_interrupt_deregister(sdiodev->sdioh);
} }
u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_card *card, uint fnc_num, u32 addr, u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_dev *sdiodev, uint fnc_num, u32 addr,
int *err) int *err)
{ {
int status; int status;
@@ -93,7 +85,7 @@ u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_card *card, uint fnc_num, u32 addr,
if (retry) /* wait for 1 ms till bus get settled down */ if (retry) /* wait for 1 ms till bus get settled down */
udelay(1000); udelay(1000);
status = status =
brcmf_sdioh_cfg_read(card->sdioh, fnc_num, addr, brcmf_sdioh_cfg_read(sdiodev->sdioh, fnc_num, addr,
(u8 *) &data); (u8 *) &data);
} while (status != 0 } while (status != 0
&& (retry++ < SDIOH_API_ACCESS_RETRY_LIMIT)); && (retry++ < SDIOH_API_ACCESS_RETRY_LIMIT));
@@ -107,7 +99,7 @@ u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_card *card, uint fnc_num, u32 addr,
} }
void void
brcmf_sdcard_cfg_write(struct brcmf_sdio_card *card, uint fnc_num, u32 addr, brcmf_sdcard_cfg_write(struct brcmf_sdio_dev *sdiodev, uint fnc_num, u32 addr,
u8 data, int *err) u8 data, int *err)
{ {
int status; int status;
@@ -117,7 +109,7 @@ brcmf_sdcard_cfg_write(struct brcmf_sdio_card *card, uint fnc_num, u32 addr,
if (retry) /* wait for 1 ms till bus get settled down */ if (retry) /* wait for 1 ms till bus get settled down */
udelay(1000); udelay(1000);
status = status =
brcmf_sdioh_cfg_write(card->sdioh, fnc_num, addr, brcmf_sdioh_cfg_write(sdiodev->sdioh, fnc_num, addr,
(u8 *) &data); (u8 *) &data);
} while (status != 0 } while (status != 0
&& (retry++ < SDIOH_API_ACCESS_RETRY_LIMIT)); && (retry++ < SDIOH_API_ACCESS_RETRY_LIMIT));
@@ -128,13 +120,13 @@ brcmf_sdcard_cfg_write(struct brcmf_sdio_card *card, uint fnc_num, u32 addr,
__func__, fnc_num, addr, data)); __func__, fnc_num, addr, data));
} }
u32 brcmf_sdcard_cfg_read_word(struct brcmf_sdio_card *card, uint fnc_num, u32 brcmf_sdcard_cfg_read_word(struct brcmf_sdio_dev *sdiodev, uint fnc_num,
u32 addr, int *err) u32 addr, int *err)
{ {
int status; int status;
u32 data = 0; u32 data = 0;
status = brcmf_sdioh_request_word(card->sdioh, SDIOH_CMD_TYPE_NORMAL, status = brcmf_sdioh_request_word(sdiodev->sdioh, SDIOH_CMD_TYPE_NORMAL,
SDIOH_READ, fnc_num, addr, &data, 4); SDIOH_READ, fnc_num, addr, &data, 4);
if (err) if (err)
@@ -147,13 +139,13 @@ u32 brcmf_sdcard_cfg_read_word(struct brcmf_sdio_card *card, uint fnc_num,
} }
void void
brcmf_sdcard_cfg_write_word(struct brcmf_sdio_card *card, uint fnc_num, brcmf_sdcard_cfg_write_word(struct brcmf_sdio_dev *sdiodev, uint fnc_num,
u32 addr, u32 data, int *err) u32 addr, u32 data, int *err)
{ {
int status; int status;
status = status =
brcmf_sdioh_request_word(card->sdioh, SDIOH_CMD_TYPE_NORMAL, brcmf_sdioh_request_word(sdiodev->sdioh, SDIOH_CMD_TYPE_NORMAL,
SDIOH_WRITE, fnc_num, addr, &data, 4); SDIOH_WRITE, fnc_num, addr, &data, 4);
if (err) if (err)
@@ -163,7 +155,7 @@ brcmf_sdcard_cfg_write_word(struct brcmf_sdio_card *card, uint fnc_num,
__func__, fnc_num, addr, data)); __func__, fnc_num, addr, data));
} }
int brcmf_sdcard_cis_read(struct brcmf_sdio_card *card, uint func, u8 * cis, int brcmf_sdcard_cis_read(struct brcmf_sdio_dev *sdiodev, uint func, u8 * cis,
uint length) uint length)
{ {
int status; int status;
@@ -173,7 +165,7 @@ int brcmf_sdcard_cis_read(struct brcmf_sdio_card *card, uint func, u8 * cis,
bool ascii = func & ~0xf; bool ascii = func & ~0xf;
func &= 0x7; func &= 0x7;
status = brcmf_sdioh_cis_read(card->sdioh, func, cis, length); status = brcmf_sdioh_cis_read(sdiodev->sdioh, func, cis, length);
if (ascii) { if (ascii) {
/* Move binary bits to tmp and format them /* Move binary bits to tmp and format them
@@ -197,18 +189,18 @@ int brcmf_sdcard_cis_read(struct brcmf_sdio_card *card, uint func, u8 * cis,
} }
static int static int
brcmf_sdcard_set_sbaddr_window(struct brcmf_sdio_card *card, u32 address) brcmf_sdcard_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address)
{ {
int err = 0; int err = 0;
brcmf_sdcard_cfg_write(card, SDIO_FUNC_1, SBSDIO_FUNC1_SBADDRLOW, brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1, SBSDIO_FUNC1_SBADDRLOW,
(address >> 8) & SBSDIO_SBADDRLOW_MASK, &err); (address >> 8) & SBSDIO_SBADDRLOW_MASK, &err);
if (!err) if (!err)
brcmf_sdcard_cfg_write(card, SDIO_FUNC_1, brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1,
SBSDIO_FUNC1_SBADDRMID, SBSDIO_FUNC1_SBADDRMID,
(address >> 16) & SBSDIO_SBADDRMID_MASK, (address >> 16) & SBSDIO_SBADDRMID_MASK,
&err); &err);
if (!err) if (!err)
brcmf_sdcard_cfg_write(card, SDIO_FUNC_1, brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1,
SBSDIO_FUNC1_SBADDRHIGH, SBSDIO_FUNC1_SBADDRHIGH,
(address >> 24) & SBSDIO_SBADDRHIGH_MASK, (address >> 24) & SBSDIO_SBADDRHIGH_MASK,
&err); &err);
@@ -216,7 +208,7 @@ brcmf_sdcard_set_sbaddr_window(struct brcmf_sdio_card *card, u32 address)
return err; return err;
} }
u32 brcmf_sdcard_reg_read(struct brcmf_sdio_card *card, u32 addr, uint size) u32 brcmf_sdcard_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr, uint size)
{ {
int status; int status;
u32 word = 0; u32 word = 0;
@@ -224,21 +216,21 @@ u32 brcmf_sdcard_reg_read(struct brcmf_sdio_card *card, u32 addr, uint size)
BRCMF_INFO(("%s:fun = 1, addr = 0x%x, ", __func__, addr)); BRCMF_INFO(("%s:fun = 1, addr = 0x%x, ", __func__, addr));
if (bar0 != card->sbwad) { if (bar0 != sdiodev->sbwad) {
if (brcmf_sdcard_set_sbaddr_window(card, bar0)) if (brcmf_sdcard_set_sbaddr_window(sdiodev, bar0))
return 0xFFFFFFFF; return 0xFFFFFFFF;
card->sbwad = bar0; sdiodev->sbwad = bar0;
} }
addr &= SBSDIO_SB_OFT_ADDR_MASK; addr &= SBSDIO_SB_OFT_ADDR_MASK;
if (size == 4) if (size == 4)
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
status = brcmf_sdioh_request_word(card->sdioh, SDIOH_CMD_TYPE_NORMAL, status = brcmf_sdioh_request_word(sdiodev->sdioh, SDIOH_CMD_TYPE_NORMAL,
SDIOH_READ, SDIO_FUNC_1, addr, &word, size); SDIOH_READ, SDIO_FUNC_1, addr, &word, size);
card->regfail = (status != 0); sdiodev->regfail = (status != 0);
BRCMF_INFO(("u32data = 0x%x\n", word)); BRCMF_INFO(("u32data = 0x%x\n", word));
@@ -252,7 +244,7 @@ u32 brcmf_sdcard_reg_read(struct brcmf_sdio_card *card, u32 addr, uint size)
case sizeof(u32): case sizeof(u32):
return word; return word;
default: default:
card->regfail = true; sdiodev->regfail = true;
} }
} }
@@ -263,7 +255,7 @@ u32 brcmf_sdcard_reg_read(struct brcmf_sdio_card *card, u32 addr, uint size)
return 0xFFFFFFFF; return 0xFFFFFFFF;
} }
u32 brcmf_sdcard_reg_write(struct brcmf_sdio_card *card, u32 addr, uint size, u32 brcmf_sdcard_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr, uint size,
u32 data) u32 data)
{ {
int status; int status;
@@ -273,21 +265,21 @@ u32 brcmf_sdcard_reg_write(struct brcmf_sdio_card *card, u32 addr, uint size,
BRCMF_INFO(("%s:fun = 1, addr = 0x%x, uint%ddata = 0x%x\n", BRCMF_INFO(("%s:fun = 1, addr = 0x%x, uint%ddata = 0x%x\n",
__func__, addr, size * 8, data)); __func__, addr, size * 8, data));
if (bar0 != card->sbwad) { if (bar0 != sdiodev->sbwad) {
err = brcmf_sdcard_set_sbaddr_window(card, bar0); err = brcmf_sdcard_set_sbaddr_window(sdiodev, bar0);
if (err) if (err)
return err; return err;
card->sbwad = bar0; sdiodev->sbwad = bar0;
} }
addr &= SBSDIO_SB_OFT_ADDR_MASK; addr &= SBSDIO_SB_OFT_ADDR_MASK;
if (size == 4) if (size == 4)
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
status = status =
brcmf_sdioh_request_word(card->sdioh, SDIOH_CMD_TYPE_NORMAL, brcmf_sdioh_request_word(sdiodev->sdioh, SDIOH_CMD_TYPE_NORMAL,
SDIOH_WRITE, SDIO_FUNC_1, addr, &data, size); SDIOH_WRITE, SDIO_FUNC_1, addr, &data, size);
card->regfail = (status != 0); sdiodev->regfail = (status != 0);
if (status == 0) if (status == 0)
return 0; return 0;
@@ -297,13 +289,13 @@ u32 brcmf_sdcard_reg_write(struct brcmf_sdio_card *card, u32 addr, uint size,
return 0xFFFFFFFF; return 0xFFFFFFFF;
} }
bool brcmf_sdcard_regfail(struct brcmf_sdio_card *card) bool brcmf_sdcard_regfail(struct brcmf_sdio_dev *sdiodev)
{ {
return card->regfail; return sdiodev->regfail;
} }
int int
brcmf_sdcard_recv_buf(struct brcmf_sdio_card *card, u32 addr, uint fn, brcmf_sdcard_recv_buf(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
uint flags, uint flags,
u8 *buf, uint nbytes, struct sk_buff *pkt, u8 *buf, uint nbytes, struct sk_buff *pkt,
void (*complete)(void *handle, int status, void (*complete)(void *handle, int status,
@@ -323,12 +315,12 @@ brcmf_sdcard_recv_buf(struct brcmf_sdio_card *card, u32 addr, uint fn,
if (flags & SDIO_REQ_ASYNC) if (flags & SDIO_REQ_ASYNC)
return -ENOTSUPP; return -ENOTSUPP;
if (bar0 != card->sbwad) { if (bar0 != sdiodev->sbwad) {
err = brcmf_sdcard_set_sbaddr_window(card, bar0); err = brcmf_sdcard_set_sbaddr_window(sdiodev, bar0);
if (err) if (err)
return err; return err;
card->sbwad = bar0; sdiodev->sbwad = bar0;
} }
addr &= SBSDIO_SB_OFT_ADDR_MASK; addr &= SBSDIO_SB_OFT_ADDR_MASK;
@@ -338,14 +330,14 @@ brcmf_sdcard_recv_buf(struct brcmf_sdio_card *card, u32 addr, uint fn,
if (width == 4) if (width == 4)
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
status = brcmf_sdioh_request_buffer(card->sdioh, SDIOH_DATA_PIO, status = brcmf_sdioh_request_buffer(sdiodev->sdioh, SDIOH_DATA_PIO,
incr_fix, SDIOH_READ, fn, addr, width, nbytes, buf, pkt); incr_fix, SDIOH_READ, fn, addr, width, nbytes, buf, pkt);
return status; return status;
} }
int int
brcmf_sdcard_send_buf(struct brcmf_sdio_card *card, u32 addr, uint fn, brcmf_sdcard_send_buf(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
uint flags, u8 *buf, uint nbytes, void *pkt, uint flags, u8 *buf, uint nbytes, void *pkt,
void (*complete)(void *handle, int status, void (*complete)(void *handle, int status,
bool sync_waiting), bool sync_waiting),
@@ -363,12 +355,12 @@ brcmf_sdcard_send_buf(struct brcmf_sdio_card *card, u32 addr, uint fn,
if (flags & SDIO_REQ_ASYNC) if (flags & SDIO_REQ_ASYNC)
return -ENOTSUPP; return -ENOTSUPP;
if (bar0 != card->sbwad) { if (bar0 != sdiodev->sbwad) {
err = brcmf_sdcard_set_sbaddr_window(card, bar0); err = brcmf_sdcard_set_sbaddr_window(sdiodev, bar0);
if (err) if (err)
return err; return err;
card->sbwad = bar0; sdiodev->sbwad = bar0;
} }
addr &= SBSDIO_SB_OFT_ADDR_MASK; addr &= SBSDIO_SB_OFT_ADDR_MASK;
@@ -378,29 +370,29 @@ brcmf_sdcard_send_buf(struct brcmf_sdio_card *card, u32 addr, uint fn,
if (width == 4) if (width == 4)
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
return brcmf_sdioh_request_buffer(card->sdioh, SDIOH_DATA_PIO, return brcmf_sdioh_request_buffer(sdiodev->sdioh, SDIOH_DATA_PIO,
incr_fix, SDIOH_WRITE, fn, addr, width, nbytes, buf, pkt); incr_fix, SDIOH_WRITE, fn, addr, width, nbytes, buf, pkt);
} }
int brcmf_sdcard_rwdata(struct brcmf_sdio_card *card, uint rw, u32 addr, int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw, u32 addr,
u8 *buf, uint nbytes) u8 *buf, uint nbytes)
{ {
addr &= SBSDIO_SB_OFT_ADDR_MASK; addr &= SBSDIO_SB_OFT_ADDR_MASK;
addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
return brcmf_sdioh_request_buffer(card->sdioh, SDIOH_DATA_PIO, return brcmf_sdioh_request_buffer(sdiodev->sdioh, SDIOH_DATA_PIO,
SDIOH_DATA_INC, (rw ? SDIOH_WRITE : SDIOH_READ), SDIO_FUNC_1, SDIOH_DATA_INC, (rw ? SDIOH_WRITE : SDIOH_READ), SDIO_FUNC_1,
addr, 4, nbytes, buf, NULL); addr, 4, nbytes, buf, NULL);
} }
int brcmf_sdcard_abort(struct brcmf_sdio_card *card, uint fn) int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn)
{ {
return brcmf_sdioh_abort(card->sdioh, fn); return brcmf_sdioh_abort(sdiodev->sdioh, fn);
} }
u32 brcmf_sdcard_cur_sbwad(struct brcmf_sdio_card *card) u32 brcmf_sdcard_cur_sbwad(struct brcmf_sdio_dev *sdiodev)
{ {
return card->sbwad; return sdiodev->sbwad;
} }
int brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) int brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
@@ -408,28 +400,19 @@ int brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
u32 regs = 0; u32 regs = 0;
int ret = 0; int ret = 0;
sdiodev->card = kzalloc(sizeof(struct brcmf_sdio_card), GFP_ATOMIC); sdiodev->sdioh = brcmf_sdioh_attach((void *)0);
if (sdiodev->card == NULL) { if (!sdiodev->sdioh) {
BRCMF_ERROR(("sdcard_attach: out of memory"));
ret = -ENOMEM;
goto out;
}
sdiodev->card->sdioh = brcmf_sdioh_attach((void *)0);
if (!sdiodev->card->sdioh) {
ret = -ENODEV; ret = -ENODEV;
goto out; goto out;
} }
sdiodev->card->init_success = true;
regs = SI_ENUM_BASE; regs = SI_ENUM_BASE;
/* Report the BAR, to fix if needed */ /* Report the BAR, to fix if needed */
sdiodev->card->sbwad = SI_ENUM_BASE; sdiodev->sbwad = SI_ENUM_BASE;
/* try to attach to the target device */ /* try to attach to the target device */
sdiodev->bus = brcmf_sdbrcm_probe(0, 0, 0, 0, regs, sdiodev->card); sdiodev->bus = brcmf_sdbrcm_probe(0, 0, 0, 0, regs, sdiodev);
if (!sdiodev->bus) { if (!sdiodev->bus) {
BRCMF_ERROR(("%s: device attach failed\n", __func__)); BRCMF_ERROR(("%s: device attach failed\n", __func__));
ret = -ENODEV; ret = -ENODEV;
@@ -451,13 +434,13 @@ int brcmf_sdio_remove(struct brcmf_sdio_dev *sdiodev)
sdiodev->bus = NULL; sdiodev->bus = NULL;
} }
if (sdiodev->card) { if (sdiodev->sdioh) {
if (sdiodev->card->sdioh) brcmf_sdioh_detach(sdiodev->sdioh);
brcmf_sdioh_detach(sdiodev->card->sdioh); sdiodev->sdioh = NULL;
kfree(sdiodev->card);
sdiodev->card = NULL;
} }
sdiodev->sbwad = 0;
return 0; return 0;
} }
EXPORT_SYMBOL(brcmf_sdio_remove); EXPORT_SYMBOL(brcmf_sdio_remove);

View File

@@ -75,7 +75,4 @@ extern void brcmf_bus_clearcounts(struct brcmf_pub *drvr);
extern void brcmf_sdbrcm_wd_timer(struct brcmf_bus *bus, uint wdtick); extern void brcmf_sdbrcm_wd_timer(struct brcmf_bus *bus, uint wdtick);
extern void *brcmf_sdbrcm_probe(u16 bus_no, u16 slot, u16 func, uint bustype,
u32 regsva, void *card);
extern void brcmf_sdbrcm_disconnect(void *ptr);
#endif /* _BRCMF_BUS_H_ */ #endif /* _BRCMF_BUS_H_ */

File diff suppressed because it is too large Load Diff

View File

@@ -116,9 +116,6 @@
#define SUCCESS 0 #define SUCCESS 0
#define ERROR 1 #define ERROR 1
/* forward declarations */
struct brcmf_sdio_card;
struct brcmf_sdreg { struct brcmf_sdreg {
int func; int func;
int offset; int offset;
@@ -158,20 +155,22 @@ struct brcmf_sdmmc_instance {
struct brcmf_sdio_dev { struct brcmf_sdio_dev {
struct sdio_func *func1; struct sdio_func *func1;
struct sdio_func *func2; struct sdio_func *func2;
struct brcmf_sdio_card *card; void *sdioh; /* sdioh handler */
u32 sbwad; /* Save backplane window address */
bool regfail; /* status of last reg_r/w call */
void *bus; void *bus;
}; };
/* Enable/disable SD interrupt */ /* Enable/disable SD interrupt */
extern int brcmf_sdcard_intr_enable(struct brcmf_sdio_card *card); extern int brcmf_sdcard_intr_enable(struct brcmf_sdio_dev *sdiodev);
extern int brcmf_sdcard_intr_disable(struct brcmf_sdio_card *card); extern int brcmf_sdcard_intr_disable(struct brcmf_sdio_dev *sdiodev);
/* Register/deregister device interrupt handler. */ /* Register/deregister device interrupt handler. */
extern int extern int
brcmf_sdcard_intr_reg(struct brcmf_sdio_card *card, brcmf_sdcard_intr_reg(struct brcmf_sdio_dev *sdiodev,
void (*fn)(void *), void *argh); void (*fn)(void *), void *argh);
extern int brcmf_sdcard_intr_dereg(struct brcmf_sdio_card *card); extern int brcmf_sdcard_intr_dereg(struct brcmf_sdio_dev *sdiodev);
/* Access SDIO address space (e.g. CCCR) using CMD52 (single-byte interface). /* Access SDIO address space (e.g. CCCR) using CMD52 (single-byte interface).
* fn: function number * fn: function number
@@ -179,17 +178,17 @@ extern int brcmf_sdcard_intr_dereg(struct brcmf_sdio_card *card);
* data: data byte to write * data: data byte to write
* err: pointer to error code (or NULL) * err: pointer to error code (or NULL)
*/ */
extern u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_card *card, uint func, extern u8 brcmf_sdcard_cfg_read(struct brcmf_sdio_dev *sdiodev, uint func,
u32 addr, int *err); u32 addr, int *err);
extern void brcmf_sdcard_cfg_write(struct brcmf_sdio_card *card, uint func, extern void brcmf_sdcard_cfg_write(struct brcmf_sdio_dev *sdiodev, uint func,
u32 addr, u8 data, int *err); u32 addr, u8 data, int *err);
/* Read/Write 4bytes from/to cfg space */ /* Read/Write 4bytes from/to cfg space */
extern u32 extern u32
brcmf_sdcard_cfg_read_word(struct brcmf_sdio_card *card, uint fnc_num, brcmf_sdcard_cfg_read_word(struct brcmf_sdio_dev *sdiodev, uint fnc_num,
u32 addr, int *err); u32 addr, int *err);
extern void brcmf_sdcard_cfg_write_word(struct brcmf_sdio_card *card, extern void brcmf_sdcard_cfg_write_word(struct brcmf_sdio_dev *sdiodev,
uint fnc_num, u32 addr, uint fnc_num, u32 addr,
u32 data, int *err); u32 data, int *err);
@@ -200,7 +199,7 @@ extern void brcmf_sdcard_cfg_write_word(struct brcmf_sdio_card *card,
* Internally, this routine uses the values from the cis base regs (0x9-0xB) * Internally, this routine uses the values from the cis base regs (0x9-0xB)
* to form an SDIO-space address to read the data from. * to form an SDIO-space address to read the data from.
*/ */
extern int brcmf_sdcard_cis_read(struct brcmf_sdio_card *card, uint func, extern int brcmf_sdcard_cis_read(struct brcmf_sdio_dev *sdiodev, uint func,
u8 *cis, uint length); u8 *cis, uint length);
/* Synchronous access to device (client) core registers via CMD53 to F1. /* Synchronous access to device (client) core registers via CMD53 to F1.
@@ -209,14 +208,14 @@ extern int brcmf_sdcard_cis_read(struct brcmf_sdio_card *card, uint func,
* data: data for register write * data: data for register write
*/ */
extern u32 extern u32
brcmf_sdcard_reg_read(struct brcmf_sdio_card *card, u32 addr, uint size); brcmf_sdcard_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr, uint size);
extern u32 extern u32
brcmf_sdcard_reg_write(struct brcmf_sdio_card *card, u32 addr, uint size, brcmf_sdcard_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr, uint size,
u32 data); u32 data);
/* Indicate if last reg read/write failed */ /* Indicate if last reg read/write failed */
extern bool brcmf_sdcard_regfail(struct brcmf_sdio_card *card); extern bool brcmf_sdcard_regfail(struct brcmf_sdio_dev *sdiodev);
/* Buffer transfer to/from device (client) core via cmd53. /* Buffer transfer to/from device (client) core via cmd53.
* fn: function number * fn: function number
@@ -231,13 +230,13 @@ extern bool brcmf_sdcard_regfail(struct brcmf_sdio_card *card);
* NOTE: Async operation is not currently supported. * NOTE: Async operation is not currently supported.
*/ */
extern int extern int
brcmf_sdcard_send_buf(struct brcmf_sdio_card *card, u32 addr, uint fn, brcmf_sdcard_send_buf(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
uint flags, u8 *buf, uint nbytes, void *pkt, uint flags, u8 *buf, uint nbytes, void *pkt,
void (*complete)(void *handle, int status, void (*complete)(void *handle, int status,
bool sync_waiting), bool sync_waiting),
void *handle); void *handle);
extern int extern int
brcmf_sdcard_recv_buf(struct brcmf_sdio_card *card, u32 addr, uint fn, brcmf_sdcard_recv_buf(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
uint flags, u8 *buf, uint nbytes, struct sk_buff *pkt, uint flags, u8 *buf, uint nbytes, struct sk_buff *pkt,
void (*complete)(void *handle, int status, void (*complete)(void *handle, int status,
bool sync_waiting), bool sync_waiting),
@@ -262,16 +261,16 @@ brcmf_sdcard_recv_buf(struct brcmf_sdio_card *card, u32 addr, uint fn,
* nbytes: number of bytes to transfer to/from buf * nbytes: number of bytes to transfer to/from buf
* Returns 0 or error code. * Returns 0 or error code.
*/ */
extern int brcmf_sdcard_rwdata(struct brcmf_sdio_card *card, uint rw, u32 addr, extern int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw,
u8 *buf, uint nbytes); u32 addr, u8 *buf, uint nbytes);
/* Issue an abort to the specified function */ /* Issue an abort to the specified function */
extern int brcmf_sdcard_abort(struct brcmf_sdio_card *card, uint fn); extern int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn);
/* Miscellaneous knob tweaker. */ /* Miscellaneous knob tweaker. */
extern int brcmf_sdcard_iovar_op(struct brcmf_sdio_card *card, const char *name, extern int brcmf_sdcard_iovar_op(struct brcmf_sdio_dev *sdiodev,
void *params, int plen, void *arg, int len, const char *name, void *params, int plen,
bool set); void *arg, int len, bool set);
/* helper functions */ /* helper functions */
@@ -286,7 +285,7 @@ extern int brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev);
extern int brcmf_sdio_remove(struct brcmf_sdio_dev *sdiodev); extern int brcmf_sdio_remove(struct brcmf_sdio_dev *sdiodev);
/* Function to return current window addr */ /* Function to return current window addr */
extern u32 brcmf_sdcard_cur_sbwad(struct brcmf_sdio_card *card); extern u32 brcmf_sdcard_cur_sbwad(struct brcmf_sdio_dev *sdiodev);
/* Allocate/init/free per-OS private data */ /* Allocate/init/free per-OS private data */
extern int brcmf_sdioh_osinit(struct sdioh_info *sd); extern int brcmf_sdioh_osinit(struct sdioh_info *sd);
@@ -355,4 +354,7 @@ extern uint sd_f2_blocksize;
extern struct brcmf_sdmmc_instance *gInstance; extern struct brcmf_sdmmc_instance *gInstance;
extern void *brcmf_sdbrcm_probe(u16 bus_no, u16 slot, u16 func, uint bustype,
u32 regsva, struct brcmf_sdio_dev *sdiodev);
extern void brcmf_sdbrcm_disconnect(void *ptr);
#endif /* _BRCM_SDH_H_ */ #endif /* _BRCM_SDH_H_ */