Loading drivers/net/wireless/b43/b43.h +1 −0 Original line number Diff line number Diff line Loading @@ -737,6 +737,7 @@ struct b43_wl { struct ieee80211_tx_control beacon_txctl; bool beacon0_uploaded; bool beacon1_uploaded; bool beacon_templates_virgin; /* Never wrote the templates? */ struct work_struct beacon_update_trigger; /* The current QOS parameters for the 4 queues. Loading drivers/net/wireless/b43/main.c +54 −16 Original line number Diff line number Diff line Loading @@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev, kfree(probe_resp_data); } static void b43_upload_beacon0(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; if (wl->beacon0_uploaded) return; b43_write_beacon_template(dev, 0x68, 0x18); /* FIXME: Probe resp upload doesn't really belong here, * but we don't use that feature anyway. */ b43_write_probe_resp_template(dev, 0x268, 0x4A, &__b43_ratetable[3]); wl->beacon0_uploaded = 1; } static void b43_upload_beacon1(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; if (wl->beacon1_uploaded) return; b43_write_beacon_template(dev, 0x468, 0x1A); wl->beacon1_uploaded = 1; } static void handle_irq_beacon(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; Loading @@ -1568,26 +1592,29 @@ static void handle_irq_beacon(struct b43_wldev *dev) return; } if (unlikely(wl->beacon_templates_virgin)) { /* We never uploaded a beacon before. * Upload both templates now, but only mark one valid. */ wl->beacon_templates_virgin = 0; b43_upload_beacon0(dev); b43_upload_beacon1(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON0_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } else { if (!beacon0_valid) { if (!wl->beacon0_uploaded) { b43_write_beacon_template(dev, 0x68, 0x18); b43_write_probe_resp_template(dev, 0x268, 0x4A, &__b43_ratetable[3]); wl->beacon0_uploaded = 1; } b43_upload_beacon0(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON0_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } else if (!beacon1_valid) { if (!wl->beacon1_uploaded) { b43_write_beacon_template(dev, 0x468, 0x1A); wl->beacon1_uploaded = 1; } b43_upload_beacon1(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON1_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } } } static void b43_beacon_update_trigger_work(struct work_struct *work) { Loading Loading @@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw) wl->filter_flags = 0; wl->radiotap_enabled = 0; b43_qos_clear(wl); wl->beacon0_uploaded = 0; wl->beacon1_uploaded = 0; wl->beacon_templates_virgin = 1; /* First register RFkill. * LEDs that are registered later depend on it. */ Loading Loading @@ -4242,6 +4272,8 @@ static void b43_chip_reset(struct work_struct *work) } } out: if (err) wl->current_dev = NULL; /* Failed to init the dev. */ mutex_unlock(&wl->mutex); if (err) b43err(wl, "Controller restart FAILED\n"); Loading Loading @@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev) struct b43_wldev *wldev; struct b43_wl *wl; /* Do not cancel ieee80211-workqueue based work here. * See comment in b43_remove(). */ wldev = ssb_get_drvdata(dev); wl = wldev->wl; cancel_work_sync(&wldev->restart_work); b43_debugfs_remove_device(wldev); b43_wireless_core_detach(wldev); list_del(&wldev->list); Loading Loading @@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev) struct b43_wl *wl = ssb_get_devtypedata(dev); struct b43_wldev *wldev = ssb_get_drvdata(dev); /* We must cancel any work here before unregistering from ieee80211, * as the ieee80211 unreg will destroy the workqueue. */ cancel_work_sync(&wldev->restart_work); B43_WARN_ON(!wl); if (wl->current_dev == wldev) ieee80211_unregister_hw(wl->hw); Loading drivers/net/wireless/iwlwifi/iwl-4965-rs.c +1 −2 Original line number Diff line number Diff line Loading @@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, /* Higher rate not available, use the original */ } else { new_rate = rate; break; } } Loading Loading @@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, * 2) Not just finishing up a search * 3) Allowing a new search */ if (!update_lq && !done_search && !lq_sta->stay_in_tbl) { if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { /* Save current throughput to compare with "search" throughput*/ lq_sta->last_tpt = current_tpt; Loading drivers/net/wireless/rndis_wlan.c +63 −2 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval, #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) #define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f) #define OID_802_11_PMKID ccpu2(0x0d010123) #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) Loading Loading @@ -271,6 +272,26 @@ struct ndis_config_param { __le32 value_length; } __attribute__((packed)); struct ndis_80211_assoc_info { __le32 length; __le16 req_ies; struct req_ie { __le16 capa; __le16 listen_interval; u8 cur_ap_address[6]; } req_ie; __le32 req_ie_length; __le32 offset_req_ies; __le16 resp_ies; struct resp_ie { __le16 capa; __le16 status_code; __le16 assoc_id; } resp_ie; __le32 resp_ie_length; __le32 offset_resp_ies; } __attribute__((packed)); /* these have to match what is in wpa_supplicant */ enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, Loading Loading @@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN]) return ret; } static int get_association_info(struct usbnet *usbdev, struct ndis_80211_assoc_info *info, int len) { return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION, info, &len); } static int is_associated(struct usbnet *usbdev) { Loading Loading @@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work) struct usbnet *usbdev = priv->usbdev; union iwreq_data evt; unsigned char bssid[ETH_ALEN]; int ret; struct ndis_80211_assoc_info *info; int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32; int ret, offset; if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { ret = get_bssid(usbdev, bssid); info = kzalloc(assoc_size, GFP_KERNEL); if (!info) goto get_bssid; /* Get association info IEs from device and send them back to * userspace. */ ret = get_association_info(usbdev, info, assoc_size); if (!ret) { evt.data.length = le32_to_cpu(info->req_ie_length); if (evt.data.length > 0) { offset = le32_to_cpu(info->offset_req_ies); wireless_send_event(usbdev->net, IWEVASSOCREQIE, &evt, (char *)info + offset); } evt.data.length = le32_to_cpu(info->resp_ie_length); if (evt.data.length > 0) { offset = le32_to_cpu(info->offset_resp_ies); wireless_send_event(usbdev->net, IWEVASSOCRESPIE, &evt, (char *)info + offset); } } kfree(info); get_bssid: ret = get_bssid(usbdev, bssid); if (!ret) { evt.data.flags = 0; evt.data.length = 0; Loading Loading @@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev) else if (priv->param_power_save > 2) priv->param_power_save = 2; if (priv->param_power_output < 0) priv->param_power_output = 0; else if (priv->param_power_output > 3) priv->param_power_output = 3; if (priv->param_roamtrigger < -80) priv->param_roamtrigger = -80; else if (priv->param_roamtrigger > -60) Loading drivers/net/wireless/rt2x00/rt2x00.h +5 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link) return DEFAULT_RSSI; } static inline void rt2x00_reset_link_ant_rssi(struct link *link) { link->ant.rssi_ant = 0; } static inline int rt2x00_get_link_ant_rssi_history(struct link *link, enum antenna ant) { Loading Loading
drivers/net/wireless/b43/b43.h +1 −0 Original line number Diff line number Diff line Loading @@ -737,6 +737,7 @@ struct b43_wl { struct ieee80211_tx_control beacon_txctl; bool beacon0_uploaded; bool beacon1_uploaded; bool beacon_templates_virgin; /* Never wrote the templates? */ struct work_struct beacon_update_trigger; /* The current QOS parameters for the 4 queues. Loading
drivers/net/wireless/b43/main.c +54 −16 Original line number Diff line number Diff line Loading @@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev, kfree(probe_resp_data); } static void b43_upload_beacon0(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; if (wl->beacon0_uploaded) return; b43_write_beacon_template(dev, 0x68, 0x18); /* FIXME: Probe resp upload doesn't really belong here, * but we don't use that feature anyway. */ b43_write_probe_resp_template(dev, 0x268, 0x4A, &__b43_ratetable[3]); wl->beacon0_uploaded = 1; } static void b43_upload_beacon1(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; if (wl->beacon1_uploaded) return; b43_write_beacon_template(dev, 0x468, 0x1A); wl->beacon1_uploaded = 1; } static void handle_irq_beacon(struct b43_wldev *dev) { struct b43_wl *wl = dev->wl; Loading @@ -1568,26 +1592,29 @@ static void handle_irq_beacon(struct b43_wldev *dev) return; } if (unlikely(wl->beacon_templates_virgin)) { /* We never uploaded a beacon before. * Upload both templates now, but only mark one valid. */ wl->beacon_templates_virgin = 0; b43_upload_beacon0(dev); b43_upload_beacon1(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON0_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } else { if (!beacon0_valid) { if (!wl->beacon0_uploaded) { b43_write_beacon_template(dev, 0x68, 0x18); b43_write_probe_resp_template(dev, 0x268, 0x4A, &__b43_ratetable[3]); wl->beacon0_uploaded = 1; } b43_upload_beacon0(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON0_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } else if (!beacon1_valid) { if (!wl->beacon1_uploaded) { b43_write_beacon_template(dev, 0x468, 0x1A); wl->beacon1_uploaded = 1; } b43_upload_beacon1(dev); cmd = b43_read32(dev, B43_MMIO_MACCMD); cmd |= B43_MACCMD_BEACON1_VALID; b43_write32(dev, B43_MMIO_MACCMD, cmd); } } } static void b43_beacon_update_trigger_work(struct work_struct *work) { Loading Loading @@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw) wl->filter_flags = 0; wl->radiotap_enabled = 0; b43_qos_clear(wl); wl->beacon0_uploaded = 0; wl->beacon1_uploaded = 0; wl->beacon_templates_virgin = 1; /* First register RFkill. * LEDs that are registered later depend on it. */ Loading Loading @@ -4242,6 +4272,8 @@ static void b43_chip_reset(struct work_struct *work) } } out: if (err) wl->current_dev = NULL; /* Failed to init the dev. */ mutex_unlock(&wl->mutex); if (err) b43err(wl, "Controller restart FAILED\n"); Loading Loading @@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev) struct b43_wldev *wldev; struct b43_wl *wl; /* Do not cancel ieee80211-workqueue based work here. * See comment in b43_remove(). */ wldev = ssb_get_drvdata(dev); wl = wldev->wl; cancel_work_sync(&wldev->restart_work); b43_debugfs_remove_device(wldev); b43_wireless_core_detach(wldev); list_del(&wldev->list); Loading Loading @@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev) struct b43_wl *wl = ssb_get_devtypedata(dev); struct b43_wldev *wldev = ssb_get_drvdata(dev); /* We must cancel any work here before unregistering from ieee80211, * as the ieee80211 unreg will destroy the workqueue. */ cancel_work_sync(&wldev->restart_work); B43_WARN_ON(!wl); if (wl->current_dev == wldev) ieee80211_unregister_hw(wl->hw); Loading
drivers/net/wireless/iwlwifi/iwl-4965-rs.c +1 −2 Original line number Diff line number Diff line Loading @@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, /* Higher rate not available, use the original */ } else { new_rate = rate; break; } } Loading Loading @@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, * 2) Not just finishing up a search * 3) Allowing a new search */ if (!update_lq && !done_search && !lq_sta->stay_in_tbl) { if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { /* Save current throughput to compare with "search" throughput*/ lq_sta->last_tpt = current_tpt; Loading
drivers/net/wireless/rndis_wlan.c +63 −2 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval, #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) #define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f) #define OID_802_11_PMKID ccpu2(0x0d010123) #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) Loading Loading @@ -271,6 +272,26 @@ struct ndis_config_param { __le32 value_length; } __attribute__((packed)); struct ndis_80211_assoc_info { __le32 length; __le16 req_ies; struct req_ie { __le16 capa; __le16 listen_interval; u8 cur_ap_address[6]; } req_ie; __le32 req_ie_length; __le32 offset_req_ies; __le16 resp_ies; struct resp_ie { __le16 capa; __le16 status_code; __le16 assoc_id; } resp_ie; __le32 resp_ie_length; __le32 offset_resp_ies; } __attribute__((packed)); /* these have to match what is in wpa_supplicant */ enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, Loading Loading @@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN]) return ret; } static int get_association_info(struct usbnet *usbdev, struct ndis_80211_assoc_info *info, int len) { return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION, info, &len); } static int is_associated(struct usbnet *usbdev) { Loading Loading @@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work) struct usbnet *usbdev = priv->usbdev; union iwreq_data evt; unsigned char bssid[ETH_ALEN]; int ret; struct ndis_80211_assoc_info *info; int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32; int ret, offset; if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { ret = get_bssid(usbdev, bssid); info = kzalloc(assoc_size, GFP_KERNEL); if (!info) goto get_bssid; /* Get association info IEs from device and send them back to * userspace. */ ret = get_association_info(usbdev, info, assoc_size); if (!ret) { evt.data.length = le32_to_cpu(info->req_ie_length); if (evt.data.length > 0) { offset = le32_to_cpu(info->offset_req_ies); wireless_send_event(usbdev->net, IWEVASSOCREQIE, &evt, (char *)info + offset); } evt.data.length = le32_to_cpu(info->resp_ie_length); if (evt.data.length > 0) { offset = le32_to_cpu(info->offset_resp_ies); wireless_send_event(usbdev->net, IWEVASSOCRESPIE, &evt, (char *)info + offset); } } kfree(info); get_bssid: ret = get_bssid(usbdev, bssid); if (!ret) { evt.data.flags = 0; evt.data.length = 0; Loading Loading @@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev) else if (priv->param_power_save > 2) priv->param_power_save = 2; if (priv->param_power_output < 0) priv->param_power_output = 0; else if (priv->param_power_output > 3) priv->param_power_output = 3; if (priv->param_roamtrigger < -80) priv->param_roamtrigger = -80; else if (priv->param_roamtrigger > -60) Loading
drivers/net/wireless/rt2x00/rt2x00.h +5 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link) return DEFAULT_RSSI; } static inline void rt2x00_reset_link_ant_rssi(struct link *link) { link->ant.rssi_ant = 0; } static inline int rt2x00_get_link_ant_rssi_history(struct link *link, enum antenna ant) { Loading