Loading drivers/net/wireless/wl12xx/cmd.c +25 −1 Original line number Diff line number Diff line Loading @@ -459,23 +459,39 @@ int wl12xx_cmd_role_disable(struct wl1271 *wl, u8 *role_id) int wl12xx_allocate_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid) { unsigned long flags; u8 link = find_first_zero_bit(wl->links_map, WL12XX_MAX_LINKS); if (link >= WL12XX_MAX_LINKS) return -EBUSY; /* these bits are used by op_tx */ spin_lock_irqsave(&wl->wl_lock, flags); __set_bit(link, wl->links_map); __set_bit(link, wlvif->links_map); spin_unlock_irqrestore(&wl->wl_lock, flags); *hlid = link; return 0; } void wl12xx_free_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid) { unsigned long flags; if (*hlid == WL12XX_INVALID_LINK_ID) return; /* these bits are used by op_tx */ spin_lock_irqsave(&wl->wl_lock, flags); __clear_bit(*hlid, wl->links_map); __clear_bit(*hlid, wlvif->links_map); spin_unlock_irqrestore(&wl->wl_lock, flags); /* * At this point op_tx() will not add more packets to the queues. We * can purge them. */ wl1271_tx_reset_link_queues(wl, *hlid); *hlid = WL12XX_INVALID_LINK_ID; } Loading Loading @@ -515,7 +531,7 @@ static int wl12xx_cmd_role_start_dev(struct wl1271 *wl, goto out_free; } cmd->device.hlid = wlvif->dev_hlid; cmd->device.session = wlvif->session_counter; cmd->device.session = wl12xx_get_new_session_id(wl, wlvif); wl1271_debug(DEBUG_CMD, "role start: roleid=%d, hlid=%d, session=%d", cmd->role_id, cmd->device.hlid, cmd->device.session); Loading Loading @@ -1802,6 +1818,14 @@ int wl12xx_croc(struct wl1271 *wl, u8 role_id) goto out; __clear_bit(role_id, wl->roc_map); /* * Rearm the tx watchdog when removing the last ROC. This prevents * recoveries due to just finished ROCs - when Tx hasn't yet had * a chance to get out. */ if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) >= WL12XX_MAX_ROLES) wl12xx_rearm_tx_watchdog_locked(wl); out: return ret; } Loading drivers/net/wireless/wl12xx/conf.h +3 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,9 @@ struct conf_tx_settings { */ u8 tmpl_short_retry_limit; u8 tmpl_long_retry_limit; /* Time in ms for Tx watchdog timer to expire */ u32 tx_watchdog_timeout; }; enum { Loading drivers/net/wireless/wl12xx/main.c +246 −192 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/net/wireless/wl12xx/ps.c +1 −3 Original line number Diff line number Diff line Loading @@ -69,8 +69,6 @@ void wl1271_elp_work(struct work_struct *work) mutex_unlock(&wl->mutex); } #define ELP_ENTRY_DELAY 5 /* Routines to toggle sleep mode while in ELP */ void wl1271_ps_elp_sleep(struct wl1271 *wl) { Loading @@ -90,7 +88,7 @@ void wl1271_ps_elp_sleep(struct wl1271 *wl) } ieee80211_queue_delayed_work(wl->hw, &wl->elp_work, msecs_to_jiffies(ELP_ENTRY_DELAY)); msecs_to_jiffies(wl->conf.conn.dynamic_ps_timeout)); } int wl1271_ps_elp_wakeup(struct wl1271 *wl) Loading drivers/net/wireless/wl12xx/scan.c +6 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,12 @@ void wl1271_scan_complete_work(struct work_struct *work) vif = wl->scan_vif; wlvif = wl12xx_vif_to_data(vif); /* * Rearm the tx watchdog just before idling scan. This * prevents just-finished scans from triggering the watchdog */ wl12xx_rearm_tx_watchdog_locked(wl); wl->scan.state = WL1271_SCAN_STATE_IDLE; memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch)); wl->scan.req = NULL; Loading Loading
drivers/net/wireless/wl12xx/cmd.c +25 −1 Original line number Diff line number Diff line Loading @@ -459,23 +459,39 @@ int wl12xx_cmd_role_disable(struct wl1271 *wl, u8 *role_id) int wl12xx_allocate_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid) { unsigned long flags; u8 link = find_first_zero_bit(wl->links_map, WL12XX_MAX_LINKS); if (link >= WL12XX_MAX_LINKS) return -EBUSY; /* these bits are used by op_tx */ spin_lock_irqsave(&wl->wl_lock, flags); __set_bit(link, wl->links_map); __set_bit(link, wlvif->links_map); spin_unlock_irqrestore(&wl->wl_lock, flags); *hlid = link; return 0; } void wl12xx_free_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid) { unsigned long flags; if (*hlid == WL12XX_INVALID_LINK_ID) return; /* these bits are used by op_tx */ spin_lock_irqsave(&wl->wl_lock, flags); __clear_bit(*hlid, wl->links_map); __clear_bit(*hlid, wlvif->links_map); spin_unlock_irqrestore(&wl->wl_lock, flags); /* * At this point op_tx() will not add more packets to the queues. We * can purge them. */ wl1271_tx_reset_link_queues(wl, *hlid); *hlid = WL12XX_INVALID_LINK_ID; } Loading Loading @@ -515,7 +531,7 @@ static int wl12xx_cmd_role_start_dev(struct wl1271 *wl, goto out_free; } cmd->device.hlid = wlvif->dev_hlid; cmd->device.session = wlvif->session_counter; cmd->device.session = wl12xx_get_new_session_id(wl, wlvif); wl1271_debug(DEBUG_CMD, "role start: roleid=%d, hlid=%d, session=%d", cmd->role_id, cmd->device.hlid, cmd->device.session); Loading Loading @@ -1802,6 +1818,14 @@ int wl12xx_croc(struct wl1271 *wl, u8 role_id) goto out; __clear_bit(role_id, wl->roc_map); /* * Rearm the tx watchdog when removing the last ROC. This prevents * recoveries due to just finished ROCs - when Tx hasn't yet had * a chance to get out. */ if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) >= WL12XX_MAX_ROLES) wl12xx_rearm_tx_watchdog_locked(wl); out: return ret; } Loading
drivers/net/wireless/wl12xx/conf.h +3 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,9 @@ struct conf_tx_settings { */ u8 tmpl_short_retry_limit; u8 tmpl_long_retry_limit; /* Time in ms for Tx watchdog timer to expire */ u32 tx_watchdog_timeout; }; enum { Loading
drivers/net/wireless/wl12xx/main.c +246 −192 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/net/wireless/wl12xx/ps.c +1 −3 Original line number Diff line number Diff line Loading @@ -69,8 +69,6 @@ void wl1271_elp_work(struct work_struct *work) mutex_unlock(&wl->mutex); } #define ELP_ENTRY_DELAY 5 /* Routines to toggle sleep mode while in ELP */ void wl1271_ps_elp_sleep(struct wl1271 *wl) { Loading @@ -90,7 +88,7 @@ void wl1271_ps_elp_sleep(struct wl1271 *wl) } ieee80211_queue_delayed_work(wl->hw, &wl->elp_work, msecs_to_jiffies(ELP_ENTRY_DELAY)); msecs_to_jiffies(wl->conf.conn.dynamic_ps_timeout)); } int wl1271_ps_elp_wakeup(struct wl1271 *wl) Loading
drivers/net/wireless/wl12xx/scan.c +6 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,12 @@ void wl1271_scan_complete_work(struct work_struct *work) vif = wl->scan_vif; wlvif = wl12xx_vif_to_data(vif); /* * Rearm the tx watchdog just before idling scan. This * prevents just-finished scans from triggering the watchdog */ wl12xx_rearm_tx_watchdog_locked(wl); wl->scan.state = WL1271_SCAN_STATE_IDLE; memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch)); wl->scan.req = NULL; Loading