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: 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>
This commit is contained in:
parent
ad3a7c4933
commit
b7adfa7608
@ -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 {
|
|||||||
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)
|
|||||||
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,
|
|||||||
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 {
|
|||||||
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);
|
|||||||
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)
|
|||||||
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 @@ clkwait:
|
|||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user