aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/mwl8k.c51
1 files changed, 13 insertions, 38 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index f93eddda9c0f..0251b6144f57 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -184,7 +184,7 @@ struct mwl8k_priv {
184 /* PHY parameters */ 184 /* PHY parameters */
185 struct ieee80211_supported_band band; 185 struct ieee80211_supported_band band;
186 struct ieee80211_channel channels[14]; 186 struct ieee80211_channel channels[14];
187 struct ieee80211_rate rates[13]; 187 struct ieee80211_rate rates[14];
188 188
189 bool radio_on; 189 bool radio_on;
190 bool radio_short_preamble; 190 bool radio_short_preamble;
@@ -220,15 +220,6 @@ struct mwl8k_vif {
220 u8 bssid[ETH_ALEN]; 220 u8 bssid[ETH_ALEN];
221 u8 mac_addr[ETH_ALEN]; 221 u8 mac_addr[ETH_ALEN];
222 222
223 /*
224 * Subset of supported legacy rates.
225 * Intersection of AP and STA supported rates.
226 */
227 struct ieee80211_rate legacy_rates[13];
228
229 /* number of supported legacy rates */
230 u8 legacy_nrates;
231
232 /* Index into station database.Returned by update_sta_db call */ 223 /* Index into station database.Returned by update_sta_db call */
233 u8 peer_id; 224 u8 peer_id;
234 225
@@ -266,6 +257,11 @@ static const struct ieee80211_rate mwl8k_rates[] = {
266 { .bitrate = 360, .hw_value = 72, }, 257 { .bitrate = 360, .hw_value = 72, },
267 { .bitrate = 480, .hw_value = 96, }, 258 { .bitrate = 480, .hw_value = 96, },
268 { .bitrate = 540, .hw_value = 108, }, 259 { .bitrate = 540, .hw_value = 108, },
260 { .bitrate = 720, .hw_value = 144, },
261};
262
263static const u8 mwl8k_rateids[12] = {
264 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108,
269}; 265};
270 266
271/* Set or get info from Firmware */ 267/* Set or get info from Firmware */
@@ -633,8 +629,6 @@ struct ewc_ht_info {
633/* Peer Entry flags - used to define the type of the peer node */ 629/* Peer Entry flags - used to define the type of the peer node */
634#define MWL8K_PEER_TYPE_ACCESSPOINT 2 630#define MWL8K_PEER_TYPE_ACCESSPOINT 2
635 631
636#define MWL8K_IEEE_LEGACY_DATA_RATES 13
637
638struct peer_capability_info { 632struct peer_capability_info {
639 /* Peer type - AP vs. STA. */ 633 /* Peer type - AP vs. STA. */
640 __u8 peer_type; 634 __u8 peer_type;
@@ -651,7 +645,7 @@ struct peer_capability_info {
651 struct ewc_ht_info ewc_info; 645 struct ewc_ht_info ewc_info;
652 646
653 /* Legacy rate table. Intersection of our rates and peer rates. */ 647 /* Legacy rate table. Intersection of our rates and peer rates. */
654 __u8 legacy_rates[MWL8K_IEEE_LEGACY_DATA_RATES]; 648 __u8 legacy_rates[12];
655 649
656 /* HT rate table. Intersection of our rates and peer rates. */ 650 /* HT rate table. Intersection of our rates and peer rates. */
657 __u8 ht_rates[16]; 651 __u8 ht_rates[16];
@@ -2514,9 +2508,7 @@ static int mwl8k_cmd_update_sta_db(struct ieee80211_hw *hw,
2514 struct ieee80211_bss_conf *info = &mv_vif->bss_info; 2508 struct ieee80211_bss_conf *info = &mv_vif->bss_info;
2515 struct mwl8k_cmd_update_sta_db *cmd; 2509 struct mwl8k_cmd_update_sta_db *cmd;
2516 struct peer_capability_info *peer_info; 2510 struct peer_capability_info *peer_info;
2517 struct ieee80211_rate *bitrates = mv_vif->legacy_rates;
2518 int rc; 2511 int rc;
2519 __u8 count, *rates;
2520 2512
2521 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 2513 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
2522 if (cmd == NULL) 2514 if (cmd == NULL)
@@ -2535,13 +2527,11 @@ static int mwl8k_cmd_update_sta_db(struct ieee80211_hw *hw,
2535 /* Build peer_info block */ 2527 /* Build peer_info block */
2536 peer_info->peer_type = MWL8K_PEER_TYPE_ACCESSPOINT; 2528 peer_info->peer_type = MWL8K_PEER_TYPE_ACCESSPOINT;
2537 peer_info->basic_caps = cpu_to_le16(info->assoc_capability); 2529 peer_info->basic_caps = cpu_to_le16(info->assoc_capability);
2530 memcpy(peer_info->legacy_rates, mwl8k_rateids,
2531 sizeof(mwl8k_rateids));
2538 peer_info->interop = 1; 2532 peer_info->interop = 1;
2539 peer_info->amsdu_enabled = 0; 2533 peer_info->amsdu_enabled = 0;
2540 2534
2541 rates = peer_info->legacy_rates;
2542 for (count = 0; count < mv_vif->legacy_nrates; count++)
2543 rates[count] = bitrates[count].hw_value;
2544
2545 rc = mwl8k_post_cmd(hw, &cmd->header); 2535 rc = mwl8k_post_cmd(hw, &cmd->header);
2546 if (rc == 0) 2536 if (rc == 0)
2547 mv_vif->peer_id = peer_info->station_id; 2537 mv_vif->peer_id = peer_info->station_id;
@@ -2564,8 +2554,6 @@ static int mwl8k_cmd_update_sta_db(struct ieee80211_hw *hw,
2564/* 2554/*
2565 * CMD_SET_AID. 2555 * CMD_SET_AID.
2566 */ 2556 */
2567#define MWL8K_RATE_INDEX_MAX_ARRAY 14
2568
2569#define MWL8K_FRAME_PROT_DISABLED 0x00 2557#define MWL8K_FRAME_PROT_DISABLED 0x00
2570#define MWL8K_FRAME_PROT_11G 0x07 2558#define MWL8K_FRAME_PROT_11G 0x07
2571#define MWL8K_FRAME_PROT_11N_HT_40MHZ_ONLY 0x02 2559#define MWL8K_FRAME_PROT_11N_HT_40MHZ_ONLY 0x02
@@ -2578,7 +2566,7 @@ struct mwl8k_cmd_update_set_aid {
2578 /* AP's MAC address (BSSID) */ 2566 /* AP's MAC address (BSSID) */
2579 __u8 bssid[ETH_ALEN]; 2567 __u8 bssid[ETH_ALEN];
2580 __le16 protection_mode; 2568 __le16 protection_mode;
2581 __u8 supp_rates[MWL8K_RATE_INDEX_MAX_ARRAY]; 2569 __u8 supp_rates[14];
2582} __attribute__((packed)); 2570} __attribute__((packed));
2583 2571
2584static int mwl8k_cmd_set_aid(struct ieee80211_hw *hw, 2572static int mwl8k_cmd_set_aid(struct ieee80211_hw *hw,
@@ -2587,8 +2575,6 @@ static int mwl8k_cmd_set_aid(struct ieee80211_hw *hw,
2587 struct mwl8k_vif *mv_vif = MWL8K_VIF(vif); 2575 struct mwl8k_vif *mv_vif = MWL8K_VIF(vif);
2588 struct ieee80211_bss_conf *info = &mv_vif->bss_info; 2576 struct ieee80211_bss_conf *info = &mv_vif->bss_info;
2589 struct mwl8k_cmd_update_set_aid *cmd; 2577 struct mwl8k_cmd_update_set_aid *cmd;
2590 struct ieee80211_rate *bitrates = mv_vif->legacy_rates;
2591 int count;
2592 u16 prot_mode; 2578 u16 prot_mode;
2593 int rc; 2579 int rc;
2594 2580
@@ -2620,8 +2606,7 @@ static int mwl8k_cmd_set_aid(struct ieee80211_hw *hw,
2620 } 2606 }
2621 cmd->protection_mode = cpu_to_le16(prot_mode); 2607 cmd->protection_mode = cpu_to_le16(prot_mode);
2622 2608
2623 for (count = 0; count < mv_vif->legacy_nrates; count++) 2609 memcpy(cmd->supp_rates, mwl8k_rateids, sizeof(mwl8k_rateids));
2624 cmd->supp_rates[count] = bitrates[count].hw_value;
2625 2610
2626 rc = mwl8k_post_cmd(hw, &cmd->header); 2611 rc = mwl8k_post_cmd(hw, &cmd->header);
2627 kfree(cmd); 2612 kfree(cmd);
@@ -2634,7 +2619,7 @@ static int mwl8k_cmd_set_aid(struct ieee80211_hw *hw,
2634 */ 2619 */
2635struct mwl8k_cmd_update_rateset { 2620struct mwl8k_cmd_update_rateset {
2636 struct mwl8k_cmd_pkt header; 2621 struct mwl8k_cmd_pkt header;
2637 __u8 legacy_rates[MWL8K_RATE_INDEX_MAX_ARRAY]; 2622 __u8 legacy_rates[14];
2638 2623
2639 /* Bitmap for supported MCS codes. */ 2624 /* Bitmap for supported MCS codes. */
2640 __u8 mcs_set[16]; 2625 __u8 mcs_set[16];
@@ -2644,10 +2629,7 @@ struct mwl8k_cmd_update_rateset {
2644static int mwl8k_update_rateset(struct ieee80211_hw *hw, 2629static int mwl8k_update_rateset(struct ieee80211_hw *hw,
2645 struct ieee80211_vif *vif) 2630 struct ieee80211_vif *vif)
2646{ 2631{
2647 struct mwl8k_vif *mv_vif = MWL8K_VIF(vif);
2648 struct mwl8k_cmd_update_rateset *cmd; 2632 struct mwl8k_cmd_update_rateset *cmd;
2649 struct ieee80211_rate *bitrates = mv_vif->legacy_rates;
2650 int count;
2651 int rc; 2633 int rc;
2652 2634
2653 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 2635 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
@@ -2656,9 +2638,7 @@ static int mwl8k_update_rateset(struct ieee80211_hw *hw,
2656 2638
2657 cmd->header.code = cpu_to_le16(MWL8K_CMD_SET_RATE); 2639 cmd->header.code = cpu_to_le16(MWL8K_CMD_SET_RATE);
2658 cmd->header.length = cpu_to_le16(sizeof(*cmd)); 2640 cmd->header.length = cpu_to_le16(sizeof(*cmd));
2659 2641 memcpy(cmd->legacy_rates, mwl8k_rateids, sizeof(mwl8k_rateids));
2660 for (count = 0; count < mv_vif->legacy_nrates; count++)
2661 cmd->legacy_rates[count] = bitrates[count].hw_value;
2662 2642
2663 rc = mwl8k_post_cmd(hw, &cmd->header); 2643 rc = mwl8k_post_cmd(hw, &cmd->header);
2664 kfree(cmd); 2644 kfree(cmd);
@@ -2931,11 +2911,6 @@ static int mwl8k_add_interface(struct ieee80211_hw *hw,
2931 /* Back pointer to parent config block */ 2911 /* Back pointer to parent config block */
2932 mwl8k_vif->priv = priv; 2912 mwl8k_vif->priv = priv;
2933 2913
2934 /* Setup initial PHY parameters */
2935 memcpy(mwl8k_vif->legacy_rates,
2936 priv->rates, sizeof(mwl8k_vif->legacy_rates));
2937 mwl8k_vif->legacy_nrates = ARRAY_SIZE(priv->rates);
2938
2939 /* Set Initial sequence number to zero */ 2914 /* Set Initial sequence number to zero */
2940 mwl8k_vif->seqno = 0; 2915 mwl8k_vif->seqno = 0;
2941 2916