Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 328220
b: refs/heads/master
c: 03d5c36
h: refs/heads/master
v: v3
  • Loading branch information
Franky Lin authored and John W. Linville committed Sep 24, 2012
1 parent e6af5da commit 498a693
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 21 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: f1e68c2e0a7af39907355e300dbbc76fcebc7fc8
refs/heads/master: 03d5c360dcbcb62cfc45caaca163cce8e10f00d6
27 changes: 7 additions & 20 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -2330,15 +2330,11 @@ static void brcmf_sdbrcm_dpc(struct brcmf_sdio *bus)
bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN;
}
bus->clkstate = CLK_AVAIL;
} else {
goto clkwait;
}
}

/* Make sure backplane clock is on */
brcmf_sdbrcm_clkctl(bus, CLK_AVAIL, true);
if (bus->clkstate == CLK_PENDING)
goto clkwait;

/* Pending interrupt indicates new device status */
if (atomic_read(&bus->ipend) > 0) {
Expand Down Expand Up @@ -2412,7 +2408,7 @@ static void brcmf_sdbrcm_dpc(struct brcmf_sdio *bus)
intstatus &= ~I_HMB_FRAME_IND;

/* On frame indication, read available frames */
if (PKT_AVAILABLE()) {
if (PKT_AVAILABLE() && bus->clkstate == CLK_AVAIL) {
framecnt = brcmf_sdbrcm_readframes(bus, rxlimit, &rxdone);
if (rxdone || bus->rxskip)
intstatus &= ~I_HMB_FRAME_IND;
Expand All @@ -2422,22 +2418,21 @@ static void brcmf_sdbrcm_dpc(struct brcmf_sdio *bus)
/* Keep still-pending events for next scheduling */
bus->intstatus = intstatus;

clkwait:
brcmf_sdbrcm_clrintr(bus);

if (data_ok(bus) && bus->ctrl_frame_stat &&
(bus->clkstate == CLK_AVAIL)) {
int ret, i;
int i;

ret = brcmf_sdcard_send_buf(bus->sdiodev, bus->sdiodev->sbwad,
err = brcmf_sdcard_send_buf(bus->sdiodev, bus->sdiodev->sbwad,
SDIO_FUNC_2, F2SYNC, bus->ctrl_frame_buf,
(u32) bus->ctrl_frame_len);

if (ret < 0) {
if (err < 0) {
/* On failure, abort the command and
terminate the frame */
brcmf_dbg(INFO, "sdio error %d, abort command and terminate frame\n",
ret);
err);
bus->sdcnt.tx_sderrs++;

brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2);
Expand All @@ -2459,10 +2454,9 @@ static void brcmf_sdbrcm_dpc(struct brcmf_sdio *bus)
break;
}

}
if (ret == 0)
} else {
bus->tx_seq = (bus->tx_seq + 1) % SDPCM_SEQUENCE_WRAP;

}
bus->ctrl_frame_stat = false;
brcmf_sdbrcm_wait_event_wakeup(bus);
}
Expand All @@ -2475,17 +2469,10 @@ static void brcmf_sdbrcm_dpc(struct brcmf_sdio *bus)
txlimit -= framecnt;
}

/* Resched if events or tx frames are pending,
else await next interrupt */
/* On failed register access, all bets are off:
no resched or interrupts */
if ((bus->sdiodev->bus_if->state == BRCMF_BUS_DOWN) || (err != 0)) {
brcmf_dbg(ERROR, "failed backplane access over SDIO, halting operation\n");
bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN;
bus->intstatus = 0;
} else if (bus->clkstate == CLK_PENDING) {
brcmf_dbg(INFO, "rescheduled due to CLK_PENDING awaiting I_CHIPACTIVE interrupt\n");
brcmf_sdbrcm_adddpctsk(bus);
} else if (bus->intstatus || atomic_read(&bus->ipend) > 0 ||
(!bus->fcstate && brcmu_pktq_mlen(&bus->txq, ~bus->flowcontrol)
&& data_ok(bus)) || PKT_AVAILABLE()) {
Expand Down

0 comments on commit 498a693

Please sign in to comment.