Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 265456
b: refs/heads/master
c: da22069
h: refs/heads/master
v: v3
  • Loading branch information
Vasanthakumar Thiagarajan authored and Kalle Valo committed Aug 9, 2011
1 parent 5b4f646 commit e5b4fc7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4a005c3ed0e6424e991daeea385bd08a9b97b67a
refs/heads/master: da220695f03a81fc8f6fcf1921e2b6f1c2be6db6
51 changes: 30 additions & 21 deletions trunk/drivers/net/wireless/ath/ath6kl/sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,33 @@ static int ath6kl_sdio_func0_cmd52_wr_byte(struct mmc_card *card,
return mmc_wait_for_cmd(card->host, &io_cmd, 0);
}

static int ath6kl_sdio_io(struct sdio_func *func, u32 request, u32 addr,
u8 *buf, u32 len)
{
int ret = 0;

if (request & HIF_WRITE) {
if (addr >= HIF_MBOX_BASE_ADDR &&
addr <= HIF_MBOX_END_ADDR)
addr += (HIF_MBOX_WIDTH - len);

if (addr == HIF_MBOX0_EXT_BASE_ADDR)
addr += HIF_MBOX0_EXT_WIDTH - len;

if (request & HIF_FIXED_ADDRESS)
ret = sdio_writesb(func, addr, buf, len);
else
ret = sdio_memcpy_toio(func, addr, buf, len);
} else {
if (request & HIF_FIXED_ADDRESS)
ret = sdio_readsb(func, buf, addr, len);
else
ret = sdio_memcpy_fromio(func, buf, addr, len);
}

return ret;
}

static struct bus_request *ath6kl_sdio_alloc_busreq(struct ath6kl_sdio *ar_sdio)
{
struct bus_request *bus_req;
Expand Down Expand Up @@ -355,27 +382,9 @@ static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf,
tbuf = buf;

sdio_claim_host(ar_sdio->func);
if (request & HIF_WRITE) {
if (addr >= HIF_MBOX_BASE_ADDR &&
addr <= HIF_MBOX_END_ADDR)
addr += (HIF_MBOX_WIDTH - len);

if (addr == HIF_MBOX0_EXT_BASE_ADDR)
addr += HIF_MBOX0_EXT_WIDTH - len;

if (request & HIF_FIXED_ADDRESS)
ret = sdio_writesb(ar_sdio->func, addr, tbuf, len);
else
ret = sdio_memcpy_toio(ar_sdio->func, addr, tbuf, len);
} else {
if (request & HIF_FIXED_ADDRESS)
ret = sdio_readsb(ar_sdio->func, tbuf, addr, len);
else
ret = sdio_memcpy_fromio(ar_sdio->func, tbuf,
addr, len);
if (bounced)
memcpy(buf, tbuf, len);
}
ret = ath6kl_sdio_io(ar_sdio->func, request, addr, tbuf, len);
if ((request & HIF_READ) && bounced)
memcpy(buf, tbuf, len);
sdio_release_host(ar_sdio->func);

return ret;
Expand Down

0 comments on commit e5b4fc7

Please sign in to comment.