mirror of https://gitee.com/openkylin/linux.git
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_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);
|
||||
|
|
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
@ -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.
|
||||
|
@ -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__));
|
||||
|
@ -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 &&
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue