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);
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
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);
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);
bool ctrl_frame_stat;
spinlock_t txqlock;
+ wait_queue_head_t ctrl_wait;
} dhd_bus_t;
typedef volatile struct _sbconfig {
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.
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__));
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 &&
}
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);
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;
+}