aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlegacy/iwl3945-base.c
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2011-11-15 05:29:04 -0500
committerStanislaw Gruszka <sgruszka@redhat.com>2011-11-15 05:29:04 -0500
commit7c2cde2ef278cb833581fe599c6654fc28b11a7e (patch)
treeacc1efd4d4bf4bddc0543c1fb659f73f6e8bb2a5 /drivers/net/wireless/iwlegacy/iwl3945-base.c
parentdcae1c641a4d7b7a00b1a566355ffaa517588aa6 (diff)
iwlegacy: partial rxon context cleanup
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Diffstat (limited to 'drivers/net/wireless/iwlegacy/iwl3945-base.c')
-rw-r--r--drivers/net/wireless/iwlegacy/iwl3945-base.c84
1 files changed, 40 insertions, 44 deletions
diff --git a/drivers/net/wireless/iwlegacy/iwl3945-base.c b/drivers/net/wireless/iwlegacy/iwl3945-base.c
index 216c86fb0929..dd8ce29ce84b 100644
--- a/drivers/net/wireless/iwlegacy/iwl3945-base.c
+++ b/drivers/net/wireless/iwlegacy/iwl3945-base.c
@@ -144,7 +144,7 @@ static int il3945_set_ccmp_dynamic_key_info(struct il_priv *il,
144 key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK); 144 key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK);
145 key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); 145 key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
146 146
147 if (sta_id == il->contexts[IL_RXON_CTX_BSS].bcast_sta_id) 147 if (sta_id == il->ctx.bcast_sta_id)
148 key_flags |= STA_KEY_MULTICAST_MSK; 148 key_flags |= STA_KEY_MULTICAST_MSK;
149 149
150 keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; 150 keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
@@ -318,7 +318,7 @@ unsigned int il3945_fill_beacon_frame(struct il_priv *il,
318 int left) 318 int left)
319{ 319{
320 320
321 if (!il_is_associated(il, IL_RXON_CTX_BSS) || !il->beacon_skb) 321 if (!il_is_associated(il) || !il->beacon_skb)
322 return 0; 322 return 0;
323 323
324 if (il->beacon_skb->len > left) 324 if (il->beacon_skb->len > left)
@@ -345,7 +345,7 @@ static int il3945_send_beacon_cmd(struct il_priv *il)
345 } 345 }
346 346
347 rate = il_get_lowest_plcp(il, 347 rate = il_get_lowest_plcp(il,
348 &il->contexts[IL_RXON_CTX_BSS]); 348 &il->ctx);
349 349
350 frame_size = il3945_hw_get_beacon_cmd(il, frame, rate); 350 frame_size = il3945_hw_get_beacon_cmd(il, frame, rate);
351 351
@@ -515,7 +515,7 @@ static int il3945_tx_skb(struct il_priv *il, struct sk_buff *skb)
515 515
516 /* Find index into station table for destination station */ 516 /* Find index into station table for destination station */
517 sta_id = il_sta_id_or_broadcast( 517 sta_id = il_sta_id_or_broadcast(
518 il, &il->contexts[IL_RXON_CTX_BSS], 518 il, &il->ctx,
519 info->control.sta); 519 info->control.sta);
520 if (sta_id == IL_INVALID_STATION) { 520 if (sta_id == IL_INVALID_STATION) {
521 D_DROP("Dropping - INVALID STATION: %pM\n", 521 D_DROP("Dropping - INVALID STATION: %pM\n",
@@ -546,7 +546,7 @@ static int il3945_tx_skb(struct il_priv *il, struct sk_buff *skb)
546 /* Set up driver data for this TFD */ 546 /* Set up driver data for this TFD */
547 memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct il_tx_info)); 547 memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct il_tx_info));
548 txq->txb[q->write_ptr].skb = skb; 548 txq->txb[q->write_ptr].skb = skb;
549 txq->txb[q->write_ptr].ctx = &il->contexts[IL_RXON_CTX_BSS]; 549 txq->txb[q->write_ptr].ctx = &il->ctx;
550 550
551 /* Init first empty entry in queue's array of Tx/cmd buffers */ 551 /* Init first empty entry in queue's array of Tx/cmd buffers */
552 out_cmd = txq->cmd[idx]; 552 out_cmd = txq->cmd[idx];
@@ -681,9 +681,9 @@ static int il3945_get_measurement(struct il_priv *il,
681 int rc; 681 int rc;
682 int spectrum_resp_status; 682 int spectrum_resp_status;
683 int duration = le16_to_cpu(params->duration); 683 int duration = le16_to_cpu(params->duration);
684 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 684 struct il_rxon_context *ctx = &il->ctx;
685 685
686 if (il_is_associated(il, IL_RXON_CTX_BSS)) 686 if (il_is_associated(il))
687 add_time = il_usecs_to_beacons(il, 687 add_time = il_usecs_to_beacons(il,
688 le64_to_cpu(params->start_time) - il->_3945.last_tsf, 688 le64_to_cpu(params->start_time) - il->_3945.last_tsf,
689 le16_to_cpu(ctx->timing.beacon_interval)); 689 le16_to_cpu(ctx->timing.beacon_interval));
@@ -697,7 +697,7 @@ static int il3945_get_measurement(struct il_priv *il,
697 cmd.len = sizeof(spectrum); 697 cmd.len = sizeof(spectrum);
698 spectrum.len = cpu_to_le16(cmd.len - sizeof(spectrum.len)); 698 spectrum.len = cpu_to_le16(cmd.len - sizeof(spectrum.len));
699 699
700 if (il_is_associated(il, IL_RXON_CTX_BSS)) 700 if (il_is_associated(il))
701 spectrum.start_time = 701 spectrum.start_time =
702 il_add_beacon_time(il, 702 il_add_beacon_time(il,
703 il->_3945.last_beacon_time, add_time, 703 il->_3945.last_beacon_time, add_time,
@@ -2189,7 +2189,7 @@ static void il3945_alive_start(struct il_priv *il)
2189{ 2189{
2190 int thermal_spin = 0; 2190 int thermal_spin = 0;
2191 u32 rfkill; 2191 u32 rfkill;
2192 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 2192 struct il_rxon_context *ctx = &il->ctx;
2193 2193
2194 D_INFO("Runtime Alive received.\n"); 2194 D_INFO("Runtime Alive received.\n");
2195 2195
@@ -2243,7 +2243,7 @@ static void il3945_alive_start(struct il_priv *il)
2243 2243
2244 il_power_update_mode(il, true); 2244 il_power_update_mode(il, true);
2245 2245
2246 if (il_is_associated(il, IL_RXON_CTX_BSS)) { 2246 if (il_is_associated(il)) {
2247 struct il3945_rxon_cmd *active_rxon = 2247 struct il3945_rxon_cmd *active_rxon =
2248 (struct il3945_rxon_cmd *)(&ctx->active); 2248 (struct il3945_rxon_cmd *)(&ctx->active);
2249 2249
@@ -2372,7 +2372,7 @@ static void il3945_down(struct il_priv *il)
2372 2372
2373static int il3945_alloc_bcast_station(struct il_priv *il) 2373static int il3945_alloc_bcast_station(struct il_priv *il)
2374{ 2374{
2375 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 2375 struct il_rxon_context *ctx = &il->ctx;
2376 unsigned long flags; 2376 unsigned long flags;
2377 u8 sta_id; 2377 u8 sta_id;
2378 2378
@@ -2581,7 +2581,7 @@ int il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif)
2581 scan->quiet_plcp_th = IL_PLCP_QUIET_THRESH; 2581 scan->quiet_plcp_th = IL_PLCP_QUIET_THRESH;
2582 scan->quiet_time = IL_ACTIVE_QUIET_TIME; 2582 scan->quiet_time = IL_ACTIVE_QUIET_TIME;
2583 2583
2584 if (il_is_associated(il, IL_RXON_CTX_BSS)) { 2584 if (il_is_associated(il)) {
2585 u16 interval; 2585 u16 interval;
2586 u32 extra; 2586 u32 extra;
2587 u32 suspend_time = 100; 2587 u32 suspend_time = 100;
@@ -2634,7 +2634,7 @@ int il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif)
2634 /* We don't build a direct scan probe request; the uCode will do 2634 /* We don't build a direct scan probe request; the uCode will do
2635 * that based on the direct_mask added to each channel entry */ 2635 * that based on the direct_mask added to each channel entry */
2636 scan->tx_cmd.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK; 2636 scan->tx_cmd.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK;
2637 scan->tx_cmd.sta_id = il->contexts[IL_RXON_CTX_BSS].bcast_sta_id; 2637 scan->tx_cmd.sta_id = il->ctx.bcast_sta_id;
2638 scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE; 2638 scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
2639 2639
2640 /* flags + rate selection */ 2640 /* flags + rate selection */
@@ -2692,7 +2692,7 @@ int il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif)
2692 2692
2693void il3945_post_scan(struct il_priv *il) 2693void il3945_post_scan(struct il_priv *il)
2694{ 2694{
2695 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 2695 struct il_rxon_context *ctx = &il->ctx;
2696 2696
2697 /* 2697 /*
2698 * Since setting the RXON may have been deferred while 2698 * Since setting the RXON may have been deferred while
@@ -2750,7 +2750,7 @@ void il3945_post_associate(struct il_priv *il)
2750{ 2750{
2751 int rc = 0; 2751 int rc = 0;
2752 struct ieee80211_conf *conf = NULL; 2752 struct ieee80211_conf *conf = NULL;
2753 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 2753 struct il_rxon_context *ctx = &il->ctx;
2754 2754
2755 if (!ctx->vif || !il->is_open) 2755 if (!ctx->vif || !il->is_open)
2756 return; 2756 return;
@@ -2917,7 +2917,7 @@ static void il3945_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
2917 2917
2918void il3945_config_ap(struct il_priv *il) 2918void il3945_config_ap(struct il_priv *il)
2919{ 2919{
2920 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 2920 struct il_rxon_context *ctx = &il->ctx;
2921 struct ieee80211_vif *vif = ctx->vif; 2921 struct ieee80211_vif *vif = ctx->vif;
2922 int rc = 0; 2922 int rc = 0;
2923 2923
@@ -2925,7 +2925,7 @@ void il3945_config_ap(struct il_priv *il)
2925 return; 2925 return;
2926 2926
2927 /* The following should be done only at AP bring up */ 2927 /* The following should be done only at AP bring up */
2928 if (!(il_is_associated(il, IL_RXON_CTX_BSS))) { 2928 if (!(il_is_associated(il))) {
2929 2929
2930 /* RXON - unassoc (to set timing command) */ 2930 /* RXON - unassoc (to set timing command) */
2931 ctx->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK; 2931 ctx->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
@@ -2986,11 +2986,11 @@ static int il3945_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2986 !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) 2986 !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
2987 return -EOPNOTSUPP; 2987 return -EOPNOTSUPP;
2988 2988
2989 static_key = !il_is_associated(il, IL_RXON_CTX_BSS); 2989 static_key = !il_is_associated(il);
2990 2990
2991 if (!static_key) { 2991 if (!static_key) {
2992 sta_id = il_sta_id_or_broadcast( 2992 sta_id = il_sta_id_or_broadcast(
2993 il, &il->contexts[IL_RXON_CTX_BSS], sta); 2993 il, &il->ctx, sta);
2994 if (sta_id == IL_INVALID_STATION) 2994 if (sta_id == IL_INVALID_STATION)
2995 return -EINVAL; 2995 return -EINVAL;
2996 } 2996 }
@@ -3042,7 +3042,7 @@ static int il3945_mac_sta_add(struct ieee80211_hw *hw,
3042 3042
3043 3043
3044 ret = il_add_station_common(il, 3044 ret = il_add_station_common(il,
3045 &il->contexts[IL_RXON_CTX_BSS], 3045 &il->ctx,
3046 sta->addr, is_ap, sta, &sta_id); 3046 sta->addr, is_ap, sta, &sta_id);
3047 if (ret) { 3047 if (ret) {
3048 IL_ERR("Unable to add station %pM (%d)\n", 3048 IL_ERR("Unable to add station %pM (%d)\n",
@@ -3070,7 +3070,7 @@ static void il3945_configure_filter(struct ieee80211_hw *hw,
3070{ 3070{
3071 struct il_priv *il = hw->priv; 3071 struct il_priv *il = hw->priv;
3072 __le32 filter_or = 0, filter_nand = 0; 3072 __le32 filter_or = 0, filter_nand = 0;
3073 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3073 struct il_rxon_context *ctx = &il->ctx;
3074 3074
3075#define CHK(test, flag) do { \ 3075#define CHK(test, flag) do { \
3076 if (*total_flags & (test)) \ 3076 if (*total_flags & (test)) \
@@ -3205,7 +3205,7 @@ static ssize_t il3945_show_flags(struct device *d,
3205 struct device_attribute *attr, char *buf) 3205 struct device_attribute *attr, char *buf)
3206{ 3206{
3207 struct il_priv *il = dev_get_drvdata(d); 3207 struct il_priv *il = dev_get_drvdata(d);
3208 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3208 struct il_rxon_context *ctx = &il->ctx;
3209 3209
3210 return sprintf(buf, "0x%04X\n", ctx->active.flags); 3210 return sprintf(buf, "0x%04X\n", ctx->active.flags);
3211} 3211}
@@ -3216,7 +3216,7 @@ static ssize_t il3945_store_flags(struct device *d,
3216{ 3216{
3217 struct il_priv *il = dev_get_drvdata(d); 3217 struct il_priv *il = dev_get_drvdata(d);
3218 u32 flags = simple_strtoul(buf, NULL, 0); 3218 u32 flags = simple_strtoul(buf, NULL, 0);
3219 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3219 struct il_rxon_context *ctx = &il->ctx;
3220 3220
3221 mutex_lock(&il->mutex); 3221 mutex_lock(&il->mutex);
3222 if (le32_to_cpu(ctx->staging.flags) != flags) { 3222 if (le32_to_cpu(ctx->staging.flags) != flags) {
@@ -3241,7 +3241,7 @@ static ssize_t il3945_show_filter_flags(struct device *d,
3241 struct device_attribute *attr, char *buf) 3241 struct device_attribute *attr, char *buf)
3242{ 3242{
3243 struct il_priv *il = dev_get_drvdata(d); 3243 struct il_priv *il = dev_get_drvdata(d);
3244 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3244 struct il_rxon_context *ctx = &il->ctx;
3245 3245
3246 return sprintf(buf, "0x%04X\n", 3246 return sprintf(buf, "0x%04X\n",
3247 le32_to_cpu(ctx->active.filter_flags)); 3247 le32_to_cpu(ctx->active.filter_flags));
@@ -3252,7 +3252,7 @@ static ssize_t il3945_store_filter_flags(struct device *d,
3252 const char *buf, size_t count) 3252 const char *buf, size_t count)
3253{ 3253{
3254 struct il_priv *il = dev_get_drvdata(d); 3254 struct il_priv *il = dev_get_drvdata(d);
3255 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3255 struct il_rxon_context *ctx = &il->ctx;
3256 u32 filter_flags = simple_strtoul(buf, NULL, 0); 3256 u32 filter_flags = simple_strtoul(buf, NULL, 0);
3257 3257
3258 mutex_lock(&il->mutex); 3258 mutex_lock(&il->mutex);
@@ -3313,7 +3313,7 @@ static ssize_t il3945_store_measurement(struct device *d,
3313 const char *buf, size_t count) 3313 const char *buf, size_t count)
3314{ 3314{
3315 struct il_priv *il = dev_get_drvdata(d); 3315 struct il_priv *il = dev_get_drvdata(d);
3316 struct il_rxon_context *ctx = &il->contexts[IL_RXON_CTX_BSS]; 3316 struct il_rxon_context *ctx = &il->ctx;
3317 struct ieee80211_measurement_params params = { 3317 struct ieee80211_measurement_params params = {
3318 .channel = le16_to_cpu(ctx->active.channel), 3318 .channel = le16_to_cpu(ctx->active.channel),
3319 .start_time = cpu_to_le64(il->_3945.last_tsf), 3319 .start_time = cpu_to_le64(il->_3945.last_tsf),
@@ -3599,7 +3599,7 @@ static int il3945_setup_mac(struct il_priv *il)
3599 IEEE80211_HW_SPECTRUM_MGMT; 3599 IEEE80211_HW_SPECTRUM_MGMT;
3600 3600
3601 hw->wiphy->interface_modes = 3601 hw->wiphy->interface_modes =
3602 il->contexts[IL_RXON_CTX_BSS].interface_modes; 3602 il->ctx.interface_modes;
3603 3603
3604 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY | 3604 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
3605 WIPHY_FLAG_DISABLE_BEACON_HINTS | 3605 WIPHY_FLAG_DISABLE_BEACON_HINTS |
@@ -3634,7 +3634,7 @@ static int il3945_setup_mac(struct il_priv *il)
3634 3634
3635static int il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) 3635static int il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3636{ 3636{
3637 int err = 0, i; 3637 int err = 0;
3638 struct il_priv *il; 3638 struct il_priv *il;
3639 struct ieee80211_hw *hw; 3639 struct ieee80211_hw *hw;
3640 struct il_cfg *cfg = (struct il_cfg *)(ent->driver_data); 3640 struct il_cfg *cfg = (struct il_cfg *)(ent->driver_data);
@@ -3658,24 +3658,20 @@ static int il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *en
3658 3658
3659 il->cmd_queue = IL39_CMD_QUEUE_NUM; 3659 il->cmd_queue = IL39_CMD_QUEUE_NUM;
3660 3660
3661 /* 3945 has only one valid context */ 3661 il->ctx.ctxid = 0;
3662 il->valid_contexts = BIT(IL_RXON_CTX_BSS);
3663 3662
3664 for (i = 0; i < NUM_IL_RXON_CTX; i++) 3663 il->ctx.rxon_cmd = REPLY_RXON;
3665 il->contexts[i].ctxid = i; 3664 il->ctx.rxon_timing_cmd = REPLY_RXON_TIMING;
3666 3665 il->ctx.rxon_assoc_cmd = REPLY_RXON_ASSOC;
3667 il->contexts[IL_RXON_CTX_BSS].rxon_cmd = REPLY_RXON; 3666 il->ctx.qos_cmd = REPLY_QOS_PARAM;
3668 il->contexts[IL_RXON_CTX_BSS].rxon_timing_cmd = REPLY_RXON_TIMING; 3667 il->ctx.ap_sta_id = IL_AP_ID;
3669 il->contexts[IL_RXON_CTX_BSS].rxon_assoc_cmd = REPLY_RXON_ASSOC; 3668 il->ctx.wep_key_cmd = REPLY_WEPKEY;
3670 il->contexts[IL_RXON_CTX_BSS].qos_cmd = REPLY_QOS_PARAM; 3669 il->ctx.interface_modes =
3671 il->contexts[IL_RXON_CTX_BSS].ap_sta_id = IL_AP_ID;
3672 il->contexts[IL_RXON_CTX_BSS].wep_key_cmd = REPLY_WEPKEY;
3673 il->contexts[IL_RXON_CTX_BSS].interface_modes =
3674 BIT(NL80211_IFTYPE_STATION) | 3670 BIT(NL80211_IFTYPE_STATION) |
3675 BIT(NL80211_IFTYPE_ADHOC); 3671 BIT(NL80211_IFTYPE_ADHOC);
3676 il->contexts[IL_RXON_CTX_BSS].ibss_devtype = RXON_DEV_TYPE_IBSS; 3672 il->ctx.ibss_devtype = RXON_DEV_TYPE_IBSS;
3677 il->contexts[IL_RXON_CTX_BSS].station_devtype = RXON_DEV_TYPE_ESS; 3673 il->ctx.station_devtype = RXON_DEV_TYPE_ESS;
3678 il->contexts[IL_RXON_CTX_BSS].unused_devtype = RXON_DEV_TYPE_ESS; 3674 il->ctx.unused_devtype = RXON_DEV_TYPE_ESS;
3679 3675
3680 /* 3676 /*
3681 * Disabling hardware scan means that mac80211 will perform scans 3677 * Disabling hardware scan means that mac80211 will perform scans
@@ -3812,7 +3808,7 @@ static int il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *en
3812 3808
3813 il_set_rxon_channel(il, 3809 il_set_rxon_channel(il,
3814 &il->bands[IEEE80211_BAND_2GHZ].channels[5], 3810 &il->bands[IEEE80211_BAND_2GHZ].channels[5],
3815 &il->contexts[IL_RXON_CTX_BSS]); 3811 &il->ctx);
3816 il3945_setup_deferred_work(il); 3812 il3945_setup_deferred_work(il);
3817 il3945_setup_rx_handlers(il); 3813 il3945_setup_rx_handlers(il);
3818 il_power_initialize(il); 3814 il_power_initialize(il);