mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
net: rockchip_wlan: cywdhd: update version to 1.363.125.19-20210427
1. Add to support Low Power Solution. 2. Fix that system can't suspend in Android. 3. Fix that the SSID list will be shown very slowly when disable/enable wifi in Android. Signed-off-by: Alex Zhao <zzc@rock-chips.com> Change-Id: Ib0f9387e670cb2cb4aca9e2279f76f24dec3aa99
This commit is contained in:
@@ -400,6 +400,9 @@ typedef struct dhd_pub {
|
||||
|
||||
/* Internal dhd items */
|
||||
bool up; /* Driver up/down (to OS) */
|
||||
#ifdef WL_CFG80211
|
||||
spinlock_t up_lock; /* Synchronization with CFG80211 down */
|
||||
#endif
|
||||
bool txoff; /* Transmit flow-controlled */
|
||||
bool dongle_reset; /* TRUE = DEVRESET put dongle into reset */
|
||||
enum dhd_bus_state busstate;
|
||||
|
||||
@@ -6257,6 +6257,9 @@ static int
|
||||
dhd_stop(struct net_device *net)
|
||||
{
|
||||
int ifidx = 0;
|
||||
#ifdef WL_CFG80211
|
||||
unsigned long flags = 0;
|
||||
#endif
|
||||
dhd_info_t *dhd = DHD_DEV_INFO(net);
|
||||
DHD_OS_WAKE_LOCK(&dhd->pub);
|
||||
DHD_PERIM_LOCK(&dhd->pub);
|
||||
@@ -6280,7 +6283,13 @@ dhd_stop(struct net_device *net)
|
||||
|
||||
/* Set state and stop OS transmissions */
|
||||
netif_stop_queue(net);
|
||||
#ifdef WL_CFG80211
|
||||
spin_lock_irqsave(&dhd->pub.up_lock, flags);
|
||||
dhd->pub.up = 0;
|
||||
spin_unlock_irqrestore(&dhd->pub.up_lock, flags);
|
||||
#else
|
||||
dhd->pub.up = 0;
|
||||
#endif
|
||||
|
||||
#ifdef WL_CFG80211
|
||||
if (ifidx == 0) {
|
||||
@@ -7543,6 +7552,7 @@ dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
|
||||
dhd_state |= DHD_ATTACH_STATE_PROT_ATTACH;
|
||||
|
||||
#ifdef WL_CFG80211
|
||||
spin_lock_init(&dhd->pub.up_lock);
|
||||
/* Attach and link in the cfg80211 */
|
||||
if (unlikely(wl_cfg80211_attach(net, &dhd->pub))) {
|
||||
DHD_ERROR(("wl_cfg80211_attach failed\n"));
|
||||
@@ -11024,6 +11034,9 @@ dhd_wl_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata, uint16 pktlen,
|
||||
wl_event_msg_t *event, void **data)
|
||||
{
|
||||
int bcmerror = 0;
|
||||
#ifdef WL_CFG80211
|
||||
unsigned long flags = 0;
|
||||
#endif /* WL_CFG80211 */
|
||||
ASSERT(dhd != NULL);
|
||||
|
||||
#ifdef SHOW_LOGTRACE
|
||||
@@ -11055,8 +11068,13 @@ dhd_wl_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata, uint16 pktlen,
|
||||
#ifdef WL_CFG80211
|
||||
ASSERT(dhd->iflist[*ifidx] != NULL);
|
||||
ASSERT(dhd->iflist[*ifidx]->net != NULL);
|
||||
if (dhd->iflist[*ifidx]->net)
|
||||
wl_cfg80211_event(dhd->iflist[*ifidx]->net, event, *data);
|
||||
if (dhd->iflist[*ifidx]->net) {
|
||||
spin_lock_irqsave(&dhd->pub.up_lock, flags);
|
||||
if (dhd->pub.up) {
|
||||
wl_cfg80211_event(dhd->iflist[*ifidx]->net, event, *data);
|
||||
}
|
||||
spin_unlock_irqrestore(&dhd->pub.up_lock, flags);
|
||||
}
|
||||
#endif /* defined(WL_CFG80211) */
|
||||
|
||||
return (bcmerror);
|
||||
|
||||
@@ -11265,6 +11265,7 @@ void wl_terminate_event_handler(void)
|
||||
|
||||
if (cfg) {
|
||||
wl_destroy_event_handler(cfg);
|
||||
wl_flush_eq(cfg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12673,7 +12674,7 @@ static s32 wl_event_handler(void *data)
|
||||
while (down_interruptible (&tsk->sema) == 0) {
|
||||
SMP_RD_BARRIER_DEPENDS();
|
||||
if (tsk->terminated) {
|
||||
DHD_EVENT_WAKE_LOCK(cfg->pub);
|
||||
DHD_EVENT_WAKE_UNLOCK(cfg->pub);
|
||||
break;
|
||||
}
|
||||
while ((e = wl_deq_event(cfg))) {
|
||||
@@ -12707,7 +12708,7 @@ static s32 wl_event_handler(void *data)
|
||||
fail:
|
||||
wl_put_event(e);
|
||||
}
|
||||
DHD_EVENT_WAKE_LOCK(cfg->pub);
|
||||
DHD_EVENT_WAKE_UNLOCK(cfg->pub);
|
||||
}
|
||||
WL_ERR(("was terminated\n"));
|
||||
complete_and_exit(&tsk->completed, 0);
|
||||
|
||||
Reference in New Issue
Block a user