Commit b7adfa76 authored by Franky Lin's avatar Franky Lin Committed by Greg Kroah-Hartman

staging: brcm80211: move waitqueue code to dhd_sdio.c

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: default avatarFranky Lin <frankyl@broadcom.com>
Reviewed-by: default avatarRoland Vossen <rvossen@broadcom.com>
Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ad3a7c49
...@@ -963,9 +963,6 @@ extern int brcmf_sendpkt(dhd_pub_t *dhdp, int ifidx, struct sk_buff *pkt); ...@@ -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_devreset(dhd_pub_t *dhdp, u8 flag);
extern int brcmf_bus_start(dhd_pub_t *dhdp); 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_set(dhd_pub_t *dhd, char *arg);
extern void brcmf_c_pktfilter_offload_enable(dhd_pub_t *dhd, char *arg, extern void brcmf_c_pktfilter_offload_enable(dhd_pub_t *dhd, char *arg,
int enable, int master_mode); int enable, int master_mode);
......
...@@ -100,7 +100,6 @@ typedef struct dhd_info { ...@@ -100,7 +100,6 @@ typedef struct dhd_info {
bool set_multicast; bool set_multicast;
bool set_macaddress; bool set_macaddress;
u8 macvalue[ETH_ALEN]; u8 macvalue[ETH_ALEN];
wait_queue_head_t ctrl_wait;
atomic_t pend_8021x_cnt; atomic_t pend_8021x_cnt;
#ifdef CONFIG_HAS_EARLYSUSPEND #ifdef CONFIG_HAS_EARLYSUSPEND
...@@ -1641,7 +1640,6 @@ dhd_pub_t *brcmf_attach(struct dhd_bus *bus, uint bus_hdrlen) ...@@ -1641,7 +1640,6 @@ dhd_pub_t *brcmf_attach(struct dhd_bus *bus, uint bus_hdrlen)
sema_init(&dhd->proto_sem, 1); sema_init(&dhd->proto_sem, 1);
/* Initialize other structure content */ /* Initialize other structure content */
init_waitqueue_head(&dhd->ioctl_resp_wait); init_waitqueue_head(&dhd->ioctl_resp_wait);
init_waitqueue_head(&dhd->ctrl_wait);
/* Initialize the spinlocks */ /* Initialize the spinlocks */
spin_lock_init(&dhd->sdlock); spin_lock_init(&dhd->sdlock);
...@@ -2255,24 +2253,6 @@ static int brcmf_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata, ...@@ -2255,24 +2253,6 @@ static int brcmf_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata,
return bcmerror; 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) int brcmf_netdev_reset(struct net_device *dev, u8 flag)
{ {
dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(dev); dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(dev);
......
...@@ -586,6 +586,7 @@ typedef struct dhd_bus { ...@@ -586,6 +586,7 @@ typedef struct dhd_bus {
bool ctrl_frame_stat; bool ctrl_frame_stat;
spinlock_t txqlock; spinlock_t txqlock;
wait_queue_head_t ctrl_wait;
} dhd_bus_t; } dhd_bus_t;
typedef volatile struct _sbconfig { typedef volatile struct _sbconfig {
...@@ -777,6 +778,8 @@ static void brcmf_sdbrcm_chip_resetcore(struct brcmf_sdio *sdh, u32 corebase); ...@@ -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, static void brcmf_sdbrcm_sdiod_drive_strength_init(struct dhd_bus *bus,
u32 drivestrength); u32 drivestrength);
static void brcmf_sdbrcm_chip_detach(struct dhd_bus *bus); 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. /* Packet free applicable unconditionally for sdio and sdspi.
* Conditional if bufpool was present for gspi bus. * Conditional if bufpool was present for gspi bus.
...@@ -1501,7 +1504,7 @@ brcmf_sdbrcm_bus_txctl(struct dhd_bus *bus, unsigned char *msg, uint msglen) ...@@ -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_buf = frame;
bus->ctrl_frame_len = len; 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) { if (bus->ctrl_frame_stat == false) {
DHD_INFO(("%s: ctrl_frame_stat == false\n", __func__)); DHD_INFO(("%s: ctrl_frame_stat == false\n", __func__));
...@@ -4577,7 +4580,7 @@ bool brcmf_sdbrcm_dpc(dhd_bus_t *bus) ...@@ -4577,7 +4580,7 @@ bool brcmf_sdbrcm_dpc(dhd_bus_t *bus)
DHD_INFO(("Return_dpc value is : %d\n", ret)); DHD_INFO(("Return_dpc value is : %d\n", ret));
bus->ctrl_frame_stat = false; 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) */ /* Send queued frames (limit 1 if rx may still be pending) */
else if ((bus->clkstate == CLK_AVAIL) && !bus->fcstate && else if ((bus->clkstate == CLK_AVAIL) && !bus->fcstate &&
...@@ -5213,6 +5216,7 @@ static void *brcmf_sdbrcm_probe(u16 venid, u16 devid, u16 bus_no, ...@@ -5213,6 +5216,7 @@ static void *brcmf_sdbrcm_probe(u16 venid, u16 devid, u16 bus_no,
} }
spin_lock_init(&bus->txqlock); spin_lock_init(&bus->txqlock);
init_waitqueue_head(&bus->ctrl_wait);
/* Attach to the dhd/OS/network interface */ /* Attach to the dhd/OS/network interface */
bus->dhd = brcmf_attach(bus, SDPCM_RESERVE); bus->dhd = brcmf_attach(bus, SDPCM_RESERVE);
...@@ -6317,3 +6321,21 @@ brcmf_sdbrcm_chip_detach(struct dhd_bus *bus) ...@@ -6317,3 +6321,21 @@ brcmf_sdbrcm_chip_detach(struct dhd_bus *bus)
kfree(bus->ci); kfree(bus->ci);
bus->ci = NULL; 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;
}
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