Skip to content

Commit

Permalink
staging: brcm80211: move waitqueue code to dhd_sdio.c
Browse files Browse the repository at this point in the history
In fullmac waitqueue for tx control is used by bus interface layer
only. So move the related code to dhd_sdio.c

Signed-off-by: Franky Lin <frankyl@broadcom.com>
Reviewed-by: Roland Vossen <rvossen@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Franky Lin authored and Greg Kroah-Hartman committed Jul 5, 2011
1 parent ad3a7c4 commit b7adfa7
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 25 deletions.
3 changes: 0 additions & 3 deletions drivers/staging/brcm80211/brcmfmac/dhd.h
Original file line number Diff line number Diff line change
Expand Up @@ -963,9 +963,6 @@ extern int brcmf_sendpkt(dhd_pub_t *dhdp, int ifidx, struct sk_buff *pkt);
extern int brcmf_bus_devreset(dhd_pub_t *dhdp, u8 flag);
extern int brcmf_bus_start(dhd_pub_t *dhdp);

extern void brcmf_wait_for_event(dhd_pub_t *dhd, bool * lockvar);
extern void brcmf_wait_event_wakeup(dhd_pub_t *dhd);

extern void brcmf_c_pktfilter_offload_set(dhd_pub_t *dhd, char *arg);
extern void brcmf_c_pktfilter_offload_enable(dhd_pub_t *dhd, char *arg,
int enable, int master_mode);
Expand Down
20 changes: 0 additions & 20 deletions drivers/staging/brcm80211/brcmfmac/dhd_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ typedef struct dhd_info {
bool set_multicast;
bool set_macaddress;
u8 macvalue[ETH_ALEN];
wait_queue_head_t ctrl_wait;
atomic_t pend_8021x_cnt;

#ifdef CONFIG_HAS_EARLYSUSPEND
Expand Down Expand Up @@ -1641,7 +1640,6 @@ dhd_pub_t *brcmf_attach(struct dhd_bus *bus, uint bus_hdrlen)
sema_init(&dhd->proto_sem, 1);
/* Initialize other structure content */
init_waitqueue_head(&dhd->ioctl_resp_wait);
init_waitqueue_head(&dhd->ctrl_wait);

/* Initialize the spinlocks */
spin_lock_init(&dhd->sdlock);
Expand Down Expand Up @@ -2255,24 +2253,6 @@ static int brcmf_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata,
return bcmerror;
}

void brcmf_wait_for_event(dhd_pub_t *dhd, bool *lockvar)
{
struct dhd_info *dhdinfo = dhd->info;
brcmf_os_sdunlock(dhd);
wait_event_interruptible_timeout(dhdinfo->ctrl_wait,
(*lockvar == false), HZ * 2);
brcmf_os_sdlock(dhd);
return;
}

void brcmf_wait_event_wakeup(dhd_pub_t *dhd)
{
struct dhd_info *dhdinfo = dhd->info;
if (waitqueue_active(&dhdinfo->ctrl_wait))
wake_up_interruptible(&dhdinfo->ctrl_wait);
return;
}

int brcmf_netdev_reset(struct net_device *dev, u8 flag)
{
dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(dev);
Expand Down
26 changes: 24 additions & 2 deletions drivers/staging/brcm80211/brcmfmac/dhd_sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,7 @@ typedef struct dhd_bus {
bool ctrl_frame_stat;

spinlock_t txqlock;
wait_queue_head_t ctrl_wait;
} dhd_bus_t;

typedef volatile struct _sbconfig {
Expand Down Expand Up @@ -777,6 +778,8 @@ static void brcmf_sdbrcm_chip_resetcore(struct brcmf_sdio *sdh, u32 corebase);
static void brcmf_sdbrcm_sdiod_drive_strength_init(struct dhd_bus *bus,
u32 drivestrength);
static void brcmf_sdbrcm_chip_detach(struct dhd_bus *bus);
static void brcmf_sdbrcm_wait_for_event(dhd_pub_t *dhd, bool *lockvar);
static void brcmf_sdbrcm_wait_event_wakeup(dhd_bus_t *bus);

/* Packet free applicable unconditionally for sdio and sdspi.
* Conditional if bufpool was present for gspi bus.
Expand Down Expand Up @@ -1501,7 +1504,7 @@ brcmf_sdbrcm_bus_txctl(struct dhd_bus *bus, unsigned char *msg, uint msglen)
bus->ctrl_frame_buf = frame;
bus->ctrl_frame_len = len;

brcmf_wait_for_event(bus->dhd, &bus->ctrl_frame_stat);
brcmf_sdbrcm_wait_for_event(bus->dhd, &bus->ctrl_frame_stat);

if (bus->ctrl_frame_stat == false) {
DHD_INFO(("%s: ctrl_frame_stat == false\n", __func__));
Expand Down Expand Up @@ -4577,7 +4580,7 @@ bool brcmf_sdbrcm_dpc(dhd_bus_t *bus)

DHD_INFO(("Return_dpc value is : %d\n", ret));
bus->ctrl_frame_stat = false;
brcmf_wait_event_wakeup(bus->dhd);
brcmf_sdbrcm_wait_event_wakeup(bus);
}
/* Send queued frames (limit 1 if rx may still be pending) */
else if ((bus->clkstate == CLK_AVAIL) && !bus->fcstate &&
Expand Down Expand Up @@ -5213,6 +5216,7 @@ static void *brcmf_sdbrcm_probe(u16 venid, u16 devid, u16 bus_no,
}

spin_lock_init(&bus->txqlock);
init_waitqueue_head(&bus->ctrl_wait);

/* Attach to the dhd/OS/network interface */
bus->dhd = brcmf_attach(bus, SDPCM_RESERVE);
Expand Down Expand Up @@ -6317,3 +6321,21 @@ brcmf_sdbrcm_chip_detach(struct dhd_bus *bus)
kfree(bus->ci);
bus->ci = NULL;
}

static void
brcmf_sdbrcm_wait_for_event(dhd_pub_t *dhd, bool *lockvar)
{
brcmf_os_sdunlock(dhd);
wait_event_interruptible_timeout(dhd->bus->ctrl_wait,
(*lockvar == false), HZ * 2);
brcmf_os_sdlock(dhd);
return;
}

static void
brcmf_sdbrcm_wait_event_wakeup(dhd_bus_t *bus)
{
if (waitqueue_active(&bus->ctrl_wait))
wake_up_interruptible(&bus->ctrl_wait);
return;
}

0 comments on commit b7adfa7

Please sign in to comment.