aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwl8k.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mwl8k.c')
-rw-r--r--drivers/net/wireless/mwl8k.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 12fdcb25fd38..808adb909095 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -750,7 +750,6 @@ mwl8k_rxd_8366_ap_process(void *_rxd, struct ieee80211_rx_status *status,
750 memset(status, 0, sizeof(*status)); 750 memset(status, 0, sizeof(*status));
751 751
752 status->signal = -rxd->rssi; 752 status->signal = -rxd->rssi;
753 status->noise = -rxd->noise_floor;
754 753
755 if (rxd->rate & MWL8K_8366_AP_RATE_INFO_MCS_FORMAT) { 754 if (rxd->rate & MWL8K_8366_AP_RATE_INFO_MCS_FORMAT) {
756 status->flag |= RX_FLAG_HT; 755 status->flag |= RX_FLAG_HT;
@@ -852,7 +851,6 @@ mwl8k_rxd_sta_process(void *_rxd, struct ieee80211_rx_status *status,
852 memset(status, 0, sizeof(*status)); 851 memset(status, 0, sizeof(*status));
853 852
854 status->signal = -rxd->rssi; 853 status->signal = -rxd->rssi;
855 status->noise = -rxd->noise_level;
856 status->antenna = MWL8K_STA_RATE_INFO_ANTSELECT(rate_info); 854 status->antenna = MWL8K_STA_RATE_INFO_ANTSELECT(rate_info);
857 status->rate_idx = MWL8K_STA_RATE_INFO_RATEID(rate_info); 855 status->rate_idx = MWL8K_STA_RATE_INFO_RATEID(rate_info);
858 856
@@ -1939,11 +1937,15 @@ struct mwl8k_cmd_mac_multicast_adr {
1939 1937
1940static struct mwl8k_cmd_pkt * 1938static struct mwl8k_cmd_pkt *
1941__mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti, 1939__mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,
1942 int mc_count, struct dev_addr_list *mclist) 1940 struct netdev_hw_addr_list *mc_list)
1943{ 1941{
1944 struct mwl8k_priv *priv = hw->priv; 1942 struct mwl8k_priv *priv = hw->priv;
1945 struct mwl8k_cmd_mac_multicast_adr *cmd; 1943 struct mwl8k_cmd_mac_multicast_adr *cmd;
1946 int size; 1944 int size;
1945 int mc_count = 0;
1946
1947 if (mc_list)
1948 mc_count = netdev_hw_addr_list_count(mc_list);
1947 1949
1948 if (allmulti || mc_count > priv->num_mcaddrs) { 1950 if (allmulti || mc_count > priv->num_mcaddrs) {
1949 allmulti = 1; 1951 allmulti = 1;
@@ -1964,17 +1966,13 @@ __mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,
1964 if (allmulti) { 1966 if (allmulti) {
1965 cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_ALL_MULTICAST); 1967 cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_ALL_MULTICAST);
1966 } else if (mc_count) { 1968 } else if (mc_count) {
1967 int i; 1969 struct netdev_hw_addr *ha;
1970 int i = 0;
1968 1971
1969 cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_MULTICAST); 1972 cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_MULTICAST);
1970 cmd->numaddr = cpu_to_le16(mc_count); 1973 cmd->numaddr = cpu_to_le16(mc_count);
1971 for (i = 0; i < mc_count && mclist; i++) { 1974 netdev_hw_addr_list_for_each(ha, mc_list) {
1972 if (mclist->da_addrlen != ETH_ALEN) { 1975 memcpy(cmd->addr[i], ha->addr, ETH_ALEN);
1973 kfree(cmd);
1974 return NULL;
1975 }
1976 memcpy(cmd->addr[i], mclist->da_addr, ETH_ALEN);
1977 mclist = mclist->next;
1978 } 1976 }
1979 } 1977 }
1980 1978
@@ -3553,7 +3551,7 @@ mwl8k_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3553} 3551}
3554 3552
3555static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw, 3553static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
3556 int mc_count, struct dev_addr_list *mclist) 3554 struct netdev_hw_addr_list *mc_list)
3557{ 3555{
3558 struct mwl8k_cmd_pkt *cmd; 3556 struct mwl8k_cmd_pkt *cmd;
3559 3557
@@ -3564,7 +3562,7 @@ static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
3564 * we'll end up throwing this packet away and creating a new 3562 * we'll end up throwing this packet away and creating a new
3565 * one in mwl8k_configure_filter(). 3563 * one in mwl8k_configure_filter().
3566 */ 3564 */
3567 cmd = __mwl8k_cmd_mac_multicast_adr(hw, 0, mc_count, mclist); 3565 cmd = __mwl8k_cmd_mac_multicast_adr(hw, 0, mc_list);
3568 3566
3569 return (unsigned long)cmd; 3567 return (unsigned long)cmd;
3570} 3568}
@@ -3687,7 +3685,7 @@ static void mwl8k_configure_filter(struct ieee80211_hw *hw,
3687 */ 3685 */
3688 if (*total_flags & FIF_ALLMULTI) { 3686 if (*total_flags & FIF_ALLMULTI) {
3689 kfree(cmd); 3687 kfree(cmd);
3690 cmd = __mwl8k_cmd_mac_multicast_adr(hw, 1, 0, NULL); 3688 cmd = __mwl8k_cmd_mac_multicast_adr(hw, 1, NULL);
3691 } 3689 }
3692 3690
3693 if (cmd != NULL) { 3691 if (cmd != NULL) {
@@ -3984,8 +3982,8 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
3984 3982
3985 hw->queues = MWL8K_TX_QUEUES; 3983 hw->queues = MWL8K_TX_QUEUES;
3986 3984
3987 /* Set rssi and noise values to dBm */ 3985 /* Set rssi values to dBm */
3988 hw->flags |= IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_NOISE_DBM; 3986 hw->flags |= IEEE80211_HW_SIGNAL_DBM;
3989 hw->vif_data_size = sizeof(struct mwl8k_vif); 3987 hw->vif_data_size = sizeof(struct mwl8k_vif);
3990 hw->sta_data_size = sizeof(struct mwl8k_sta); 3988 hw->sta_data_size = sizeof(struct mwl8k_sta);
3991 3989