aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlan Peer <ilan.peer@intel.com>2013-02-07 10:09:09 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-03-06 10:47:23 -0500
commit831e85f3fe078297ba452e12c0dba96008c59438 (patch)
tree597b226ec9032d2d1fdcc00e90aaf05d4b0b1f26
parent6e6cc9f319bf81b292ceb281228ab1d261172cac (diff)
iwlwifi: mvm: Add support for additional addresses
Use the number of addresses (max 5) from the NVM instead of limiting to 2 artificially. Signed-off-by: Ilan Peer <ilan.peer@intel.com> Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c14
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h2
2 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 65fc5531f7ba..d08ae2604d7b 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -105,7 +105,7 @@ static const struct ieee80211_iface_combination iwl_mvm_iface_combinations[] = {
105int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) 105int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
106{ 106{
107 struct ieee80211_hw *hw = mvm->hw; 107 struct ieee80211_hw *hw = mvm->hw;
108 int num_mac, ret; 108 int num_mac, ret, i;
109 109
110 /* Tell mac80211 our characteristics */ 110 /* Tell mac80211 our characteristics */
111 hw->flags = IEEE80211_HW_SIGNAL_DBM | 111 hw->flags = IEEE80211_HW_SIGNAL_DBM |
@@ -156,11 +156,15 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
156 memcpy(mvm->addresses[0].addr, mvm->nvm_data->hw_addr, ETH_ALEN); 156 memcpy(mvm->addresses[0].addr, mvm->nvm_data->hw_addr, ETH_ALEN);
157 hw->wiphy->addresses = mvm->addresses; 157 hw->wiphy->addresses = mvm->addresses;
158 hw->wiphy->n_addresses = 1; 158 hw->wiphy->n_addresses = 1;
159 num_mac = mvm->nvm_data->n_hw_addrs; 159
160 if (num_mac > 1) { 160 /* Extract additional MAC addresses if available */
161 memcpy(mvm->addresses[1].addr, mvm->addresses[0].addr, 161 num_mac = (mvm->nvm_data->n_hw_addrs > 1) ?
162 min(IWL_MVM_MAX_ADDRESSES, mvm->nvm_data->n_hw_addrs) : 1;
163
164 for (i = 1; i < num_mac; i++) {
165 memcpy(mvm->addresses[i].addr, mvm->addresses[i-1].addr,
162 ETH_ALEN); 166 ETH_ALEN);
163 mvm->addresses[1].addr[5]++; 167 mvm->addresses[i].addr[5]++;
164 hw->wiphy->n_addresses++; 168 hw->wiphy->n_addresses++;
165 } 169 }
166 170
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index 23c39eab4d97..efe5da992897 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -79,7 +79,7 @@
79#include "fw-api.h" 79#include "fw-api.h"
80 80
81#define IWL_INVALID_MAC80211_QUEUE 0xff 81#define IWL_INVALID_MAC80211_QUEUE 0xff
82#define IWL_MVM_MAX_ADDRESSES 2 82#define IWL_MVM_MAX_ADDRESSES 5
83/* RSSI offset for WkP */ 83/* RSSI offset for WkP */
84#define IWL_RSSI_OFFSET 50 84#define IWL_RSSI_OFFSET 50
85 85