Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
eca4c3d2dd
|
@ -1332,6 +1332,9 @@ int iwl_setup_mac(struct iwl_priv *priv)
|
|||
|
||||
hw->wiphy->custom_regulatory = true;
|
||||
|
||||
/* Firmware does not support this */
|
||||
hw->wiphy->disable_beacon_hints = true;
|
||||
|
||||
hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX;
|
||||
/* we create the 802.11 header and a zero-length SSID element */
|
||||
hw->wiphy->max_scan_ie_len = IWL_MAX_PROBE_REQUEST - 24 - 2;
|
||||
|
|
|
@ -308,18 +308,18 @@ static ssize_t iwl_dbgfs_nvm_read(struct file *file,
|
|||
return -ENODATA;
|
||||
}
|
||||
|
||||
ptr = priv->eeprom;
|
||||
if (!ptr) {
|
||||
IWL_ERR(priv, "Invalid EEPROM/OTP memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* 4 characters for byte 0xYY */
|
||||
buf = kzalloc(buf_size, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
IWL_ERR(priv, "Can not allocate Buffer\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ptr = priv->eeprom;
|
||||
if (!ptr) {
|
||||
IWL_ERR(priv, "Invalid EEPROM/OTP memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
pos += scnprintf(buf + pos, buf_size - pos, "NVM Type: %s\n",
|
||||
(priv->nvm_device_type == NVM_DEVICE_TYPE_OTP)
|
||||
? "OTP" : "EEPROM");
|
||||
|
|
|
@ -566,6 +566,8 @@ int iwl_remove_default_wep_key(struct iwl_priv *priv,
|
|||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->sta_lock, flags);
|
||||
IWL_DEBUG_WEP(priv, "Removing default WEP key: idx=%d\n",
|
||||
keyconf->keyidx);
|
||||
|
||||
if (!test_and_clear_bit(keyconf->keyidx, &priv->ucode_key_table))
|
||||
IWL_ERR(priv, "index %d not used in uCode key table.\n",
|
||||
|
@ -573,6 +575,11 @@ int iwl_remove_default_wep_key(struct iwl_priv *priv,
|
|||
|
||||
priv->default_wep_key--;
|
||||
memset(&priv->wep_keys[keyconf->keyidx], 0, sizeof(priv->wep_keys[0]));
|
||||
if (iwl_is_rfkill(priv)) {
|
||||
IWL_DEBUG_WEP(priv, "Not sending REPLY_WEPKEY command due to RFKILL.\n");
|
||||
spin_unlock_irqrestore(&priv->sta_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
ret = iwl_send_static_wepkey_cmd(priv, 1);
|
||||
IWL_DEBUG_WEP(priv, "Remove default WEP key: idx=%d ret=%d\n",
|
||||
keyconf->keyidx, ret);
|
||||
|
@ -853,6 +860,11 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
|
|||
priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
|
||||
priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
|
||||
|
||||
if (iwl_is_rfkill(priv)) {
|
||||
IWL_DEBUG_WEP(priv, "Not sending REPLY_ADD_STA command because RFKILL enabled. \n");
|
||||
spin_unlock_irqrestore(&priv->sta_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC);
|
||||
spin_unlock_irqrestore(&priv->sta_lock, flags);
|
||||
return ret;
|
||||
|
|
|
@ -3968,6 +3968,9 @@ static int iwl3945_setup_mac(struct iwl_priv *priv)
|
|||
|
||||
hw->wiphy->custom_regulatory = true;
|
||||
|
||||
/* Firmware does not support this */
|
||||
hw->wiphy->disable_beacon_hints = true;
|
||||
|
||||
hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
|
||||
/* we create the 802.11 header and a zero-length SSID element */
|
||||
hw->wiphy->max_scan_ie_len = IWL_MAX_PROBE_REQUEST - 24 - 2;
|
||||
|
|
|
@ -220,6 +220,7 @@ int iwm_store_rxiq_calib_result(struct iwm_priv *iwm)
|
|||
eeprom_rxiq = iwm_eeprom_access(iwm, IWM_EEPROM_CALIB_RXIQ);
|
||||
if (IS_ERR(eeprom_rxiq)) {
|
||||
IWM_ERR(iwm, "Couldn't access EEPROM RX IQ entry\n");
|
||||
kfree(rxiq);
|
||||
return PTR_ERR(eeprom_rxiq);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ static u8 lbs_region_2_code(u8 *region)
|
|||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; region[i] && i < COUNTRY_CODE_LEN; i++)
|
||||
for (i = 0; i < COUNTRY_CODE_LEN && region[i]; i++)
|
||||
region[i] = toupper(region[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(region_code_mapping); i++) {
|
||||
|
|
|
@ -698,7 +698,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
|
|||
&& !mac->pass_ctrl)
|
||||
return 0;
|
||||
|
||||
fc = *(__le16 *)buffer;
|
||||
fc = get_unaligned((__le16*)buffer);
|
||||
need_padding = ieee80211_is_data_qos(fc) ^ ieee80211_has_a4(fc);
|
||||
|
||||
skb = dev_alloc_skb(length + (need_padding ? 2 : 0));
|
||||
|
|
|
@ -979,6 +979,10 @@ struct cfg80211_ops {
|
|||
* channels at a later time. This can be used for devices which do not
|
||||
* have calibration information gauranteed for frequencies or settings
|
||||
* outside of its regulatory domain.
|
||||
* @disable_beacon_hints: enable this if your driver needs to ensure that
|
||||
* passive scan flags and beaconing flags may not be lifted by cfg80211
|
||||
* due to regulatory beacon hints. For more information on beacon
|
||||
* hints read the documenation for regulatory_hint_found_beacon()
|
||||
* @reg_notifier: the driver's regulatory notification callback
|
||||
* @regd: the driver's regulatory domain, if one was requested via
|
||||
* the regulatory_hint() API. This can be used by the driver
|
||||
|
@ -1004,6 +1008,7 @@ struct wiphy {
|
|||
|
||||
bool custom_regulatory;
|
||||
bool strict_regulatory;
|
||||
bool disable_beacon_hints;
|
||||
|
||||
enum cfg80211_signal_type signal_type;
|
||||
|
||||
|
|
|
@ -1089,17 +1089,18 @@ static void handle_reg_beacon(struct wiphy *wiphy,
|
|||
|
||||
chan->beacon_found = true;
|
||||
|
||||
if (wiphy->disable_beacon_hints)
|
||||
return;
|
||||
|
||||
chan_before.center_freq = chan->center_freq;
|
||||
chan_before.flags = chan->flags;
|
||||
|
||||
if ((chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) &&
|
||||
!(chan->orig_flags & IEEE80211_CHAN_PASSIVE_SCAN)) {
|
||||
if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) {
|
||||
chan->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
||||
channel_changed = true;
|
||||
}
|
||||
|
||||
if ((chan->flags & IEEE80211_CHAN_NO_IBSS) &&
|
||||
!(chan->orig_flags & IEEE80211_CHAN_NO_IBSS)) {
|
||||
if (chan->flags & IEEE80211_CHAN_NO_IBSS) {
|
||||
chan->flags &= ~IEEE80211_CHAN_NO_IBSS;
|
||||
channel_changed = true;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ int set_regdom(const struct ieee80211_regdomain *rd);
|
|||
* non-radar 5 GHz channels.
|
||||
*
|
||||
* Drivers do not need to call this, cfg80211 will do it for after a scan
|
||||
* on a newly found BSS.
|
||||
* on a newly found BSS. If you cannot make use of this feature you can
|
||||
* set the wiphy->disable_beacon_hints to true.
|
||||
*/
|
||||
int regulatory_hint_found_beacon(struct wiphy *wiphy,
|
||||
struct ieee80211_channel *beacon_chan,
|
||||
|
|
|
@ -118,7 +118,7 @@ static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2)
|
|||
|
||||
if (!ie1 && !ie2)
|
||||
return 0;
|
||||
if (!ie1)
|
||||
if (!ie1 || !ie2)
|
||||
return -1;
|
||||
|
||||
r = memcmp(ie1 + 2, ie2 + 2, min(ie1[1], ie2[1]));
|
||||
|
@ -171,6 +171,8 @@ static bool is_mesh(struct cfg80211_bss *a,
|
|||
ie = find_ie(WLAN_EID_MESH_CONFIG,
|
||||
a->information_elements,
|
||||
a->len_information_elements);
|
||||
if (!ie)
|
||||
return false;
|
||||
if (ie[1] != IEEE80211_MESH_CONFIG_LEN)
|
||||
return false;
|
||||
|
||||
|
|
Loading…
Reference in a new issue