Merge branch 'fixes' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
a80f509f4a
|
@ -153,7 +153,7 @@ static int ath5k_pci_resume(struct pci_dev *pdev);
|
||||||
#define ath5k_pci_resume NULL
|
#define ath5k_pci_resume NULL
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
static struct pci_driver ath5k_pci_drv_id = {
|
static struct pci_driver ath5k_pci_driver = {
|
||||||
.name = "ath5k_pci",
|
.name = "ath5k_pci",
|
||||||
.id_table = ath5k_pci_id_table,
|
.id_table = ath5k_pci_id_table,
|
||||||
.probe = ath5k_pci_probe,
|
.probe = ath5k_pci_probe,
|
||||||
|
@ -329,7 +329,7 @@ init_ath5k_pci(void)
|
||||||
|
|
||||||
ath5k_debug_init();
|
ath5k_debug_init();
|
||||||
|
|
||||||
ret = pci_register_driver(&ath5k_pci_drv_id);
|
ret = pci_register_driver(&ath5k_pci_driver);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printk(KERN_ERR "ath5k_pci: can't register pci driver\n");
|
printk(KERN_ERR "ath5k_pci: can't register pci driver\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -341,7 +341,7 @@ init_ath5k_pci(void)
|
||||||
static void __exit
|
static void __exit
|
||||||
exit_ath5k_pci(void)
|
exit_ath5k_pci(void)
|
||||||
{
|
{
|
||||||
pci_unregister_driver(&ath5k_pci_drv_id);
|
pci_unregister_driver(&ath5k_pci_driver);
|
||||||
|
|
||||||
ath5k_debug_finish();
|
ath5k_debug_finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,9 +238,10 @@ void iwl3945_hw_rx_statistics(struct iwl3945_priv *priv, struct iwl3945_rx_mem_b
|
||||||
priv->last_statistics_time = jiffies;
|
priv->last_statistics_time = jiffies;
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwl3945_add_radiotap(struct iwl3945_priv *priv, struct sk_buff *skb,
|
static void iwl3945_add_radiotap(struct iwl3945_priv *priv,
|
||||||
struct iwl3945_rx_frame_hdr *rx_hdr,
|
struct sk_buff *skb,
|
||||||
struct ieee80211_rx_status *stats)
|
struct iwl3945_rx_frame_hdr *rx_hdr,
|
||||||
|
struct ieee80211_rx_status *stats)
|
||||||
{
|
{
|
||||||
/* First cache any information we need before we overwrite
|
/* First cache any information we need before we overwrite
|
||||||
* the information provided in the skb from the hardware */
|
* the information provided in the skb from the hardware */
|
||||||
|
|
|
@ -4658,17 +4658,30 @@ void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index,
|
||||||
struct ieee80211_ht_info *sta_ht_inf)
|
struct ieee80211_ht_info *sta_ht_inf)
|
||||||
{
|
{
|
||||||
__le32 sta_flags;
|
__le32 sta_flags;
|
||||||
|
u8 mimo_ps_mode;
|
||||||
|
|
||||||
if (!sta_ht_inf || !sta_ht_inf->ht_supported)
|
if (!sta_ht_inf || !sta_ht_inf->ht_supported)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_MIMO_PS) >> 2;
|
||||||
|
|
||||||
sta_flags = priv->stations[index].sta.station_flags;
|
sta_flags = priv->stations[index].sta.station_flags;
|
||||||
|
|
||||||
if (((sta_ht_inf->cap & IEEE80211_HT_CAP_MIMO_PS >> 2))
|
sta_flags &= ~(STA_FLG_RTS_MIMO_PROT_MSK | STA_FLG_MIMO_DIS_MSK);
|
||||||
== IWL_MIMO_PS_DYNAMIC)
|
|
||||||
|
switch (mimo_ps_mode) {
|
||||||
|
case WLAN_HT_CAP_MIMO_PS_STATIC:
|
||||||
|
sta_flags |= STA_FLG_MIMO_DIS_MSK;
|
||||||
|
break;
|
||||||
|
case WLAN_HT_CAP_MIMO_PS_DYNAMIC:
|
||||||
sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK;
|
sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK;
|
||||||
else
|
break;
|
||||||
sta_flags &= ~STA_FLG_RTS_MIMO_PROT_MSK;
|
case WLAN_HT_CAP_MIMO_PS_DISABLED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
IWL_WARNING("Invalid MIMO PS mode %d", mimo_ps_mode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
sta_flags |= cpu_to_le32(
|
sta_flags |= cpu_to_le32(
|
||||||
(u32)sta_ht_inf->ampdu_factor << STA_FLG_MAX_AGG_SIZE_POS);
|
(u32)sta_ht_inf->ampdu_factor << STA_FLG_MAX_AGG_SIZE_POS);
|
||||||
|
@ -4679,7 +4692,7 @@ void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index,
|
||||||
if (iwl4965_is_fat_tx_allowed(priv, sta_ht_inf))
|
if (iwl4965_is_fat_tx_allowed(priv, sta_ht_inf))
|
||||||
sta_flags |= STA_FLG_FAT_EN_MSK;
|
sta_flags |= STA_FLG_FAT_EN_MSK;
|
||||||
else
|
else
|
||||||
sta_flags &= (~STA_FLG_FAT_EN_MSK);
|
sta_flags &= ~STA_FLG_FAT_EN_MSK;
|
||||||
|
|
||||||
priv->stations[index].sta.station_flags = sta_flags;
|
priv->stations[index].sta.station_flags = sta_flags;
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -147,9 +147,6 @@ static inline struct ieee80211_conf *ieee80211_get_hw_conf(
|
||||||
|
|
||||||
#define QOS_CONTROL_LEN 2
|
#define QOS_CONTROL_LEN 2
|
||||||
|
|
||||||
#define IEEE80211_STYPE_BACK_REQ 0x0080
|
|
||||||
#define IEEE80211_STYPE_BACK 0x0090
|
|
||||||
|
|
||||||
|
|
||||||
static inline int ieee80211_is_management(u16 fc)
|
static inline int ieee80211_is_management(u16 fc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6330,6 +6330,11 @@ static int __iwl3945_up(struct iwl3945_priv *priv)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
|
||||||
|
IWL_ERROR("ucode not available for device bringup\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
/* If platform's RF_KILL switch is NOT set to KILL */
|
/* If platform's RF_KILL switch is NOT set to KILL */
|
||||||
if (iwl3945_read32(priv, CSR_GP_CNTRL) &
|
if (iwl3945_read32(priv, CSR_GP_CNTRL) &
|
||||||
CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
|
CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
|
||||||
|
@ -6342,11 +6347,6 @@ static int __iwl3945_up(struct iwl3945_priv *priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
|
|
||||||
IWL_ERROR("ucode not available for device bringup\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
iwl3945_write32(priv, CSR_INT, 0xFFFFFFFF);
|
iwl3945_write32(priv, CSR_INT, 0xFFFFFFFF);
|
||||||
|
|
||||||
rc = iwl3945_hw_nic_init(priv);
|
rc = iwl3945_hw_nic_init(priv);
|
||||||
|
|
|
@ -6755,6 +6755,11 @@ static int __iwl4965_up(struct iwl4965_priv *priv)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
|
||||||
|
IWL_ERROR("ucode not available for device bringup\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
/* If platform's RF_KILL switch is NOT set to KILL */
|
/* If platform's RF_KILL switch is NOT set to KILL */
|
||||||
if (iwl4965_read32(priv, CSR_GP_CNTRL) &
|
if (iwl4965_read32(priv, CSR_GP_CNTRL) &
|
||||||
CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
|
CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
|
||||||
|
@ -6767,11 +6772,6 @@ static int __iwl4965_up(struct iwl4965_priv *priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
|
|
||||||
IWL_ERROR("ucode not available for device bringup\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
iwl4965_write32(priv, CSR_INT, 0xFFFFFFFF);
|
iwl4965_write32(priv, CSR_INT, 0xFFFFFFFF);
|
||||||
|
|
||||||
rc = iwl4965_hw_nic_init(priv);
|
rc = iwl4965_hw_nic_init(priv);
|
||||||
|
|
|
@ -287,6 +287,12 @@ struct ieee80211_ht_addt_info {
|
||||||
#define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004
|
#define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004
|
||||||
#define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010
|
#define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010
|
||||||
|
|
||||||
|
/* MIMO Power Save Modes */
|
||||||
|
#define WLAN_HT_CAP_MIMO_PS_STATIC 0
|
||||||
|
#define WLAN_HT_CAP_MIMO_PS_DYNAMIC 1
|
||||||
|
#define WLAN_HT_CAP_MIMO_PS_INVALID 2
|
||||||
|
#define WLAN_HT_CAP_MIMO_PS_DISABLED 3
|
||||||
|
|
||||||
/* Authentication algorithms */
|
/* Authentication algorithms */
|
||||||
#define WLAN_AUTH_OPEN 0
|
#define WLAN_AUTH_OPEN 0
|
||||||
#define WLAN_AUTH_SHARED_KEY 1
|
#define WLAN_AUTH_SHARED_KEY 1
|
||||||
|
|
|
@ -98,6 +98,18 @@ config MAC80211_DEBUGFS
|
||||||
|
|
||||||
Say N unless you know you need this.
|
Say N unless you know you need this.
|
||||||
|
|
||||||
|
config MAC80211_DEBUG_PACKET_ALIGNMENT
|
||||||
|
bool "Enable packet alignment debugging"
|
||||||
|
depends on MAC80211
|
||||||
|
help
|
||||||
|
This option is recommended for driver authors and strongly
|
||||||
|
discouraged for everybody else, it will trigger a warning
|
||||||
|
when a driver hands mac80211 a buffer that is aligned in
|
||||||
|
a way that will cause problems with the IP stack on some
|
||||||
|
architectures.
|
||||||
|
|
||||||
|
Say N unless you're writing a mac80211 based driver.
|
||||||
|
|
||||||
config MAC80211_DEBUG
|
config MAC80211_DEBUG
|
||||||
bool "Enable debugging output"
|
bool "Enable debugging output"
|
||||||
depends on MAC80211
|
depends on MAC80211
|
||||||
|
|
|
@ -1344,17 +1344,17 @@ static int __init ieee80211_init(void)
|
||||||
|
|
||||||
ret = rc80211_simple_init();
|
ret = rc80211_simple_init();
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto out;
|
||||||
|
|
||||||
ret = rc80211_pid_init();
|
ret = rc80211_pid_init();
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail_simple;
|
goto out_cleanup_simple;
|
||||||
|
|
||||||
ret = ieee80211_wme_register();
|
ret = ieee80211_wme_register();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printk(KERN_DEBUG "ieee80211_init: failed to "
|
printk(KERN_DEBUG "ieee80211_init: failed to "
|
||||||
"initialize WME (err=%d)\n", ret);
|
"initialize WME (err=%d)\n", ret);
|
||||||
goto fail_pid;
|
goto out_cleanup_pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
ieee80211_debugfs_netdev_init();
|
ieee80211_debugfs_netdev_init();
|
||||||
|
@ -1362,11 +1362,11 @@ static int __init ieee80211_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_pid:
|
out_cleanup_pid:
|
||||||
rc80211_simple_exit();
|
|
||||||
fail_simple:
|
|
||||||
rc80211_pid_exit();
|
rc80211_pid_exit();
|
||||||
fail:
|
out_cleanup_simple:
|
||||||
|
rc80211_simple_exit();
|
||||||
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -538,7 +538,7 @@ int __init rc80211_pid_init(void)
|
||||||
return ieee80211_rate_control_register(&mac80211_rcpid);
|
return ieee80211_rate_control_register(&mac80211_rcpid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __exit rc80211_pid_exit(void)
|
void rc80211_pid_exit(void)
|
||||||
{
|
{
|
||||||
ieee80211_rate_control_unregister(&mac80211_rcpid);
|
ieee80211_rate_control_unregister(&mac80211_rcpid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -389,7 +389,7 @@ int __init rc80211_simple_init(void)
|
||||||
return ieee80211_rate_control_register(&mac80211_rcsimple);
|
return ieee80211_rate_control_register(&mac80211_rcsimple);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __exit rc80211_simple_exit(void)
|
void rc80211_simple_exit(void)
|
||||||
{
|
{
|
||||||
ieee80211_rate_control_unregister(&mac80211_rcsimple);
|
ieee80211_rate_control_unregister(&mac80211_rcsimple);
|
||||||
}
|
}
|
||||||
|
|
|
@ -340,11 +340,15 @@ static u32 ieee80211_rx_load_stats(struct ieee80211_local *local,
|
||||||
return load;
|
return load;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT
|
||||||
static ieee80211_txrx_result
|
static ieee80211_txrx_result
|
||||||
ieee80211_rx_h_verify_ip_alignment(struct ieee80211_txrx_data *rx)
|
ieee80211_rx_h_verify_ip_alignment(struct ieee80211_txrx_data *rx)
|
||||||
{
|
{
|
||||||
int hdrlen;
|
int hdrlen;
|
||||||
|
|
||||||
|
if (!WLAN_FC_DATA_PRESENT(rx->fc))
|
||||||
|
return TXRX_CONTINUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Drivers are required to align the payload data in a way that
|
* Drivers are required to align the payload data in a way that
|
||||||
* guarantees that the contained IP header is aligned to a four-
|
* guarantees that the contained IP header is aligned to a four-
|
||||||
|
@ -371,11 +375,14 @@ ieee80211_rx_h_verify_ip_alignment(struct ieee80211_txrx_data *rx)
|
||||||
|
|
||||||
return TXRX_CONTINUE;
|
return TXRX_CONTINUE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ieee80211_rx_handler ieee80211_rx_pre_handlers[] =
|
ieee80211_rx_handler ieee80211_rx_pre_handlers[] =
|
||||||
{
|
{
|
||||||
ieee80211_rx_h_parse_qos,
|
ieee80211_rx_h_parse_qos,
|
||||||
|
#ifdef CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT
|
||||||
ieee80211_rx_h_verify_ip_alignment,
|
ieee80211_rx_h_verify_ip_alignment,
|
||||||
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue