You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-next-2.6
This commit is contained in:
@@ -43,6 +43,23 @@ static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Update the rfkill state */
|
||||
static void b43_rfkill_update_state(struct b43_wldev *dev)
|
||||
{
|
||||
struct b43_rfkill *rfk = &(dev->wl->rfkill);
|
||||
|
||||
if (!dev->radio_hw_enable) {
|
||||
rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dev->phy.radio_on)
|
||||
rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED;
|
||||
else
|
||||
rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
|
||||
|
||||
}
|
||||
|
||||
/* The poll callback for the hardware button. */
|
||||
static void b43_rfkill_poll(struct input_polled_dev *poll_dev)
|
||||
{
|
||||
@@ -60,6 +77,7 @@ static void b43_rfkill_poll(struct input_polled_dev *poll_dev)
|
||||
if (unlikely(enabled != dev->radio_hw_enable)) {
|
||||
dev->radio_hw_enable = enabled;
|
||||
report_change = 1;
|
||||
b43_rfkill_update_state(dev);
|
||||
b43info(wl, "Radio hardware status changed to %s\n",
|
||||
enabled ? "ENABLED" : "DISABLED");
|
||||
}
|
||||
@@ -135,7 +153,7 @@ void b43_rfkill_init(struct b43_wldev *dev)
|
||||
snprintf(rfk->name, sizeof(rfk->name),
|
||||
"b43-%s", wiphy_name(wl->hw->wiphy));
|
||||
rfk->rfkill->name = rfk->name;
|
||||
rfk->rfkill->state = RFKILL_STATE_ON;
|
||||
rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
|
||||
rfk->rfkill->data = dev;
|
||||
rfk->rfkill->toggle_radio = b43_rfkill_soft_toggle;
|
||||
rfk->rfkill->user_claim_unsupported = 1;
|
||||
|
||||
@@ -44,6 +44,23 @@ static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Update the rfkill state */
|
||||
static void b43legacy_rfkill_update_state(struct b43legacy_wldev *dev)
|
||||
{
|
||||
struct b43legacy_rfkill *rfk = &(dev->wl->rfkill);
|
||||
|
||||
if (!dev->radio_hw_enable) {
|
||||
rfk->rfkill->state = RFKILL_STATE_HARD_BLOCKED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dev->phy.radio_on)
|
||||
rfk->rfkill->state = RFKILL_STATE_SOFT_BLOCKED;
|
||||
else
|
||||
rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
|
||||
|
||||
}
|
||||
|
||||
/* The poll callback for the hardware button. */
|
||||
static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev)
|
||||
{
|
||||
@@ -61,6 +78,7 @@ static void b43legacy_rfkill_poll(struct input_polled_dev *poll_dev)
|
||||
if (unlikely(enabled != dev->radio_hw_enable)) {
|
||||
dev->radio_hw_enable = enabled;
|
||||
report_change = 1;
|
||||
b43legacy_rfkill_update_state(dev);
|
||||
b43legacyinfo(wl, "Radio hardware status changed to %s\n",
|
||||
enabled ? "ENABLED" : "DISABLED");
|
||||
}
|
||||
@@ -139,7 +157,7 @@ void b43legacy_rfkill_init(struct b43legacy_wldev *dev)
|
||||
snprintf(rfk->name, sizeof(rfk->name),
|
||||
"b43legacy-%s", wiphy_name(wl->hw->wiphy));
|
||||
rfk->rfkill->name = rfk->name;
|
||||
rfk->rfkill->state = RFKILL_STATE_ON;
|
||||
rfk->rfkill->state = RFKILL_STATE_UNBLOCKED;
|
||||
rfk->rfkill->data = dev;
|
||||
rfk->rfkill->toggle_radio = b43legacy_rfkill_soft_toggle;
|
||||
rfk->rfkill->user_claim_unsupported = 1;
|
||||
|
||||
@@ -78,6 +78,9 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb,
|
||||
prism_header = 2;
|
||||
phdrlen = sizeof(struct linux_wlan_ng_cap_hdr);
|
||||
}
|
||||
} else if (dev->type == ARPHRD_IEEE80211_RADIOTAP) {
|
||||
prism_header = 3;
|
||||
phdrlen = sizeof(struct hostap_radiotap_rx);
|
||||
} else {
|
||||
prism_header = 0;
|
||||
phdrlen = 0;
|
||||
@@ -165,6 +168,24 @@ hdr->f.status = s; hdr->f.len = l; hdr->f.data = d
|
||||
hdr->ssi_noise = htonl(rx_stats->noise);
|
||||
hdr->preamble = htonl(0); /* unknown */
|
||||
hdr->encoding = htonl(1); /* cck */
|
||||
} else if (prism_header == 3) {
|
||||
struct hostap_radiotap_rx *hdr;
|
||||
hdr = (struct hostap_radiotap_rx *)skb_push(skb, phdrlen);
|
||||
memset(hdr, 0, phdrlen);
|
||||
hdr->hdr.it_len = cpu_to_le16(phdrlen);
|
||||
hdr->hdr.it_present =
|
||||
cpu_to_le32((1 << IEEE80211_RADIOTAP_TSFT) |
|
||||
(1 << IEEE80211_RADIOTAP_CHANNEL) |
|
||||
(1 << IEEE80211_RADIOTAP_RATE) |
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTNOISE));
|
||||
hdr->tsft = cpu_to_le64(rx_stats->mac_time);
|
||||
hdr->chan_freq = cpu_to_le16(freq_list[local->channel - 1]);
|
||||
hdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_CCK |
|
||||
IEEE80211_CHAN_2GHZ);
|
||||
hdr->rate = rx_stats->rate / 5;
|
||||
hdr->dbm_antsignal = rx_stats->signal;
|
||||
hdr->dbm_antnoise = rx_stats->noise;
|
||||
}
|
||||
|
||||
ret = skb->len - phdrlen;
|
||||
|
||||
@@ -3204,6 +3204,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
|
||||
local->auth_algs = PRISM2_AUTH_OPEN | PRISM2_AUTH_SHARED_KEY;
|
||||
local->sram_type = -1;
|
||||
local->scan_channel_mask = 0xffff;
|
||||
local->monitor_type = PRISM2_MONITOR_RADIOTAP;
|
||||
|
||||
/* Initialize task queue structures */
|
||||
INIT_WORK(&local->reset_queue, handle_reset_queue);
|
||||
|
||||
@@ -897,6 +897,8 @@ static void hostap_monitor_set_type(local_info_t *local)
|
||||
if (local->monitor_type == PRISM2_MONITOR_PRISM ||
|
||||
local->monitor_type == PRISM2_MONITOR_CAPHDR) {
|
||||
dev->type = ARPHRD_IEEE80211_PRISM;
|
||||
} else if (local->monitor_type == PRISM2_MONITOR_RADIOTAP) {
|
||||
dev->type = ARPHRD_IEEE80211_RADIOTAP;
|
||||
} else {
|
||||
dev->type = ARPHRD_IEEE80211;
|
||||
}
|
||||
@@ -2520,7 +2522,8 @@ static int prism2_ioctl_priv_prism2_param(struct net_device *dev,
|
||||
case PRISM2_PARAM_MONITOR_TYPE:
|
||||
if (value != PRISM2_MONITOR_80211 &&
|
||||
value != PRISM2_MONITOR_CAPHDR &&
|
||||
value != PRISM2_MONITOR_PRISM) {
|
||||
value != PRISM2_MONITOR_PRISM &&
|
||||
value != PRISM2_MONITOR_RADIOTAP) {
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -596,25 +596,7 @@ void hostap_dump_tx_header(const char *name, const struct hfa384x_tx_frame *tx)
|
||||
|
||||
int hostap_80211_header_parse(const struct sk_buff *skb, unsigned char *haddr)
|
||||
{
|
||||
struct hostap_interface *iface = netdev_priv(skb->dev);
|
||||
local_info_t *local = iface->local;
|
||||
|
||||
if (local->monitor_type == PRISM2_MONITOR_PRISM ||
|
||||
local->monitor_type == PRISM2_MONITOR_CAPHDR) {
|
||||
const unsigned char *mac = skb_mac_header(skb);
|
||||
|
||||
if (*(u32 *)mac == LWNG_CAP_DID_BASE) {
|
||||
memcpy(haddr,
|
||||
mac + sizeof(struct linux_wlan_ng_prism_hdr) + 10,
|
||||
ETH_ALEN); /* addr2 */
|
||||
} else { /* (*(u32 *)mac == htonl(LWNG_CAPHDR_VERSION)) */
|
||||
memcpy(haddr,
|
||||
mac + sizeof(struct linux_wlan_ng_cap_hdr) + 10,
|
||||
ETH_ALEN); /* addr2 */
|
||||
}
|
||||
} else
|
||||
memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */
|
||||
|
||||
memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */
|
||||
return ETH_ALEN;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <net/iw_handler.h>
|
||||
#include <net/ieee80211_radiotap.h>
|
||||
|
||||
#include "hostap_config.h"
|
||||
#include "hostap_common.h"
|
||||
@@ -55,6 +56,17 @@ struct linux_wlan_ng_cap_hdr {
|
||||
__be32 encoding;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct hostap_radiotap_rx {
|
||||
struct ieee80211_radiotap_header hdr;
|
||||
__le64 tsft;
|
||||
u8 rate;
|
||||
u8 padding;
|
||||
__le16 chan_freq;
|
||||
__le16 chan_flags;
|
||||
s8 dbm_antsignal;
|
||||
s8 dbm_antnoise;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define LWNG_CAP_DID_BASE (4 | (1 << 6)) /* section 4, group 1 */
|
||||
#define LWNG_CAPHDR_VERSION 0x80211001
|
||||
|
||||
@@ -734,7 +746,7 @@ struct local_info {
|
||||
unsigned long scan_timestamp; /* Time started to scan */
|
||||
enum {
|
||||
PRISM2_MONITOR_80211 = 0, PRISM2_MONITOR_PRISM = 1,
|
||||
PRISM2_MONITOR_CAPHDR = 2
|
||||
PRISM2_MONITOR_CAPHDR = 2, PRISM2_MONITOR_RADIOTAP = 3
|
||||
} monitor_type;
|
||||
int monitor_allow_fcserr;
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ config IWLCORE
|
||||
select MAC80211_LEDS if IWLWIFI_LEDS
|
||||
select LEDS_CLASS if IWLWIFI_LEDS
|
||||
select RFKILL if IWLWIFI_RFKILL
|
||||
select RFKILL_INPUT if (IWLWIFI_RFKILL && INPUT)
|
||||
|
||||
config IWLWIFI_LEDS
|
||||
bool
|
||||
|
||||
@@ -36,6 +36,10 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <net/ieee80211_radiotap.h>
|
||||
|
||||
/*used for rfkill*/
|
||||
#include <linux/rfkill.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
/* Hardware specific file defines the PCI IDs table for that hardware module */
|
||||
extern struct pci_device_id iwl3945_hw_card_ids[];
|
||||
|
||||
@@ -686,6 +690,23 @@ enum {
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_RFKILL
|
||||
struct iwl3945_priv;
|
||||
|
||||
struct iwl3945_rfkill_mngr {
|
||||
struct rfkill *rfkill;
|
||||
struct input_dev *input_dev;
|
||||
};
|
||||
|
||||
void iwl3945_rfkill_set_hw_state(struct iwl3945_priv *priv);
|
||||
void iwl3945_rfkill_unregister(struct iwl3945_priv *priv);
|
||||
int iwl3945_rfkill_init(struct iwl3945_priv *priv);
|
||||
#else
|
||||
static inline void iwl3945_rfkill_set_hw_state(struct iwl3945_priv *priv) {}
|
||||
static inline void iwl3945_rfkill_unregister(struct iwl3945_priv *priv) {}
|
||||
static inline int iwl3945_rfkill_init(struct iwl3945_priv *priv) { return 0; }
|
||||
#endif
|
||||
|
||||
#define IWL_MAX_NUM_QUEUES IWL39_MAX_NUM_QUEUES
|
||||
|
||||
struct iwl3945_priv {
|
||||
@@ -779,6 +800,10 @@ struct iwl3945_priv {
|
||||
struct iwl3945_init_alive_resp card_alive_init;
|
||||
struct iwl3945_alive_resp card_alive;
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_RFKILL
|
||||
struct iwl3945_rfkill_mngr rfkill_mngr;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IWL3945_LEDS
|
||||
struct iwl3945_led led[IWL_LED_TRG_MAX];
|
||||
unsigned long last_blink_time;
|
||||
|
||||
@@ -822,9 +822,6 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev,
|
||||
|
||||
lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv;
|
||||
|
||||
if (!priv->lq_mngr.lq_ready)
|
||||
goto out;
|
||||
|
||||
if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) &&
|
||||
!lq_sta->ibss_sta_added)
|
||||
goto out;
|
||||
@@ -1678,10 +1675,6 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
|
||||
if (!sta || !sta->rate_ctrl_priv)
|
||||
return;
|
||||
|
||||
if (!priv->lq_mngr.lq_ready) {
|
||||
IWL_DEBUG_RATE("still rate scaling not ready\n");
|
||||
return;
|
||||
}
|
||||
lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv;
|
||||
|
||||
tid = rs_tl_add_packet(lq_sta, hdr);
|
||||
@@ -2140,11 +2133,8 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev,
|
||||
lq_sta->ibss_sta_added = 1;
|
||||
rs_initialize_lq(priv, conf, sta);
|
||||
}
|
||||
if (!lq_sta->ibss_sta_added)
|
||||
goto done;
|
||||
}
|
||||
|
||||
done:
|
||||
if ((i < 0) || (i > IWL_RATE_COUNT)) {
|
||||
sel->rate_idx = rate_lowest_index(local, sband, sta);
|
||||
goto out;
|
||||
@@ -2279,9 +2269,6 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
|
||||
lq_sta->drv = priv;
|
||||
#endif
|
||||
|
||||
if (priv->assoc_station_added)
|
||||
priv->lq_mngr.lq_ready = 1;
|
||||
|
||||
rs_initialize_lq(priv, conf, sta);
|
||||
}
|
||||
|
||||
@@ -2421,7 +2408,7 @@ static void rs_clear(void *priv_rate)
|
||||
|
||||
IWL_DEBUG_RATE("enter\n");
|
||||
|
||||
priv->lq_mngr.lq_ready = 0;
|
||||
/* TODO - add rate scale state reset */
|
||||
|
||||
IWL_DEBUG_RATE("leave\n");
|
||||
}
|
||||
@@ -2716,13 +2703,6 @@ int iwl4965_fill_rs_info(struct ieee80211_hw *hw, char *buf, u8 sta_id)
|
||||
return cnt;
|
||||
}
|
||||
|
||||
void iwl4965_rate_scale_init(struct ieee80211_hw *hw, s32 sta_id)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
|
||||
priv->lq_mngr.lq_ready = 1;
|
||||
}
|
||||
|
||||
int iwl4965_rate_control_register(void)
|
||||
{
|
||||
return ieee80211_rate_control_register(&rs_ops);
|
||||
|
||||
@@ -295,14 +295,6 @@ static inline u8 iwl4965_get_prev_ieee_rate(u8 rate_index)
|
||||
*/
|
||||
extern int iwl4965_fill_rs_info(struct ieee80211_hw *, char *buf, u8 sta_id);
|
||||
|
||||
/**
|
||||
* iwl4965_rate_scale_init - Initialize the rate scale table based on assoc info
|
||||
*
|
||||
* The specific throughput table used is based on the type of network
|
||||
* the associated with, including A, B, G, and G w/ TGG protection
|
||||
*/
|
||||
extern void iwl4965_rate_scale_init(struct ieee80211_hw *hw, s32 sta_id);
|
||||
|
||||
/**
|
||||
* iwl4965_rate_control_register - Register the rate control algorithm callbacks
|
||||
*
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -675,7 +675,7 @@ static void iwl5000_init_alive_start(struct iwl_priv *priv)
|
||||
goto restart;
|
||||
}
|
||||
|
||||
iwlcore_clear_stations_table(priv);
|
||||
iwl_clear_stations_table(priv);
|
||||
ret = priv->cfg->ops->lib->alive_notify(priv);
|
||||
if (ret) {
|
||||
IWL_WARNING("Could not complete ALIVE transition: %d\n", ret);
|
||||
@@ -807,11 +807,8 @@ static int iwl5000_alive_notify(struct iwl_priv *priv)
|
||||
|
||||
iwl5000_send_Xtal_calib(priv);
|
||||
|
||||
if (priv->ucode_type == UCODE_RT) {
|
||||
if (priv->ucode_type == UCODE_RT)
|
||||
iwl5000_send_calib_results(priv);
|
||||
set_bit(STATUS_READY, &priv->status);
|
||||
priv->is_open = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -827,19 +824,11 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv)
|
||||
|
||||
priv->hw_params.max_txq_num = priv->cfg->mod_params->num_of_queues;
|
||||
priv->hw_params.first_ampdu_q = IWL50_FIRST_AMPDU_QUEUE;
|
||||
priv->hw_params.sw_crypto = priv->cfg->mod_params->sw_crypto;
|
||||
priv->hw_params.max_rxq_size = RX_QUEUE_SIZE;
|
||||
priv->hw_params.max_rxq_log = RX_QUEUE_SIZE_LOG;
|
||||
if (priv->cfg->mod_params->amsdu_size_8K)
|
||||
priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_8K;
|
||||
else
|
||||
priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_4K;
|
||||
priv->hw_params.max_pkt_size = priv->hw_params.rx_buf_size - 256;
|
||||
priv->hw_params.max_stations = IWL5000_STATION_COUNT;
|
||||
priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID;
|
||||
priv->hw_params.max_data_size = IWL50_RTC_DATA_SIZE;
|
||||
priv->hw_params.max_inst_size = IWL50_RTC_INST_SIZE;
|
||||
priv->hw_params.max_bsm_size = BSM_SRAM_SIZE;
|
||||
priv->hw_params.max_bsm_size = 0;
|
||||
priv->hw_params.fat_channel = BIT(IEEE80211_BAND_2GHZ) |
|
||||
BIT(IEEE80211_BAND_5GHZ);
|
||||
priv->hw_params.sens = &iwl5000_sensitivity;
|
||||
@@ -1426,13 +1415,18 @@ static int iwl5000_send_tx_power(struct iwl_priv *priv)
|
||||
|
||||
/* half dBm need to multiply */
|
||||
tx_power_cmd.global_lmt = (s8)(2 * priv->tx_power_user_lmt);
|
||||
tx_power_cmd.flags = 0;
|
||||
tx_power_cmd.flags = IWL50_TX_POWER_NO_CLOSED;
|
||||
tx_power_cmd.srv_chan_lmt = IWL50_TX_POWER_AUTO;
|
||||
return iwl_send_cmd_pdu_async(priv, REPLY_TX_POWER_DBM_CMD,
|
||||
sizeof(tx_power_cmd), &tx_power_cmd,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void iwl5000_temperature(struct iwl_priv *priv)
|
||||
{
|
||||
/* store temperature from statistics (in Celsius) */
|
||||
priv->temperature = le32_to_cpu(priv->statistics.general.temperature);
|
||||
}
|
||||
|
||||
static struct iwl_hcmd_ops iwl5000_hcmd = {
|
||||
.rxon_assoc = iwl5000_send_rxon_assoc,
|
||||
@@ -1462,6 +1456,7 @@ static struct iwl_lib_ops iwl5000_lib = {
|
||||
.init_alive_start = iwl5000_init_alive_start,
|
||||
.alive_notify = iwl5000_alive_notify,
|
||||
.send_tx_power = iwl5000_send_tx_power,
|
||||
.temperature = iwl5000_temperature,
|
||||
.apm_ops = {
|
||||
.init = iwl5000_apm_init,
|
||||
.reset = iwl5000_apm_reset,
|
||||
@@ -1541,6 +1536,8 @@ module_param_named(queues_num50, iwl50_mod_params.num_of_queues, int, 0444);
|
||||
MODULE_PARM_DESC(queues_num50, "number of hw queues in 50xx series");
|
||||
module_param_named(qos_enable50, iwl50_mod_params.enable_qos, int, 0444);
|
||||
MODULE_PARM_DESC(qos_enable50, "enable all 50XX QoS functionality");
|
||||
module_param_named(11n_disable50, iwl50_mod_params.disable_11n, int, 0444);
|
||||
MODULE_PARM_DESC(11n_disable50, "disable 50XX 11n functionality");
|
||||
module_param_named(amsdu_size_8K50, iwl50_mod_params.amsdu_size_8K, int, 0444);
|
||||
MODULE_PARM_DESC(amsdu_size_8K50, "enable 8K amsdu size in 50XX series");
|
||||
module_param_named(fw_restart50, iwl50_mod_params.restart_fw, int, 0444);
|
||||
|
||||
@@ -470,7 +470,7 @@ void iwl_init_sensitivity(struct iwl_priv *priv)
|
||||
EXPORT_SYMBOL(iwl_init_sensitivity);
|
||||
|
||||
void iwl_sensitivity_calibration(struct iwl_priv *priv,
|
||||
struct iwl4965_notif_statistics *resp)
|
||||
struct iwl_notif_statistics *resp)
|
||||
{
|
||||
u32 rx_enable_time;
|
||||
u32 fa_cck;
|
||||
@@ -584,7 +584,7 @@ EXPORT_SYMBOL(iwl_sensitivity_calibration);
|
||||
* 2) Differential rx gain settings to balance the 3 receivers.
|
||||
*/
|
||||
void iwl_chain_noise_calibration(struct iwl_priv *priv,
|
||||
struct iwl4965_notif_statistics *stat_resp)
|
||||
struct iwl_notif_statistics *stat_resp)
|
||||
{
|
||||
struct iwl_chain_noise_data *data = NULL;
|
||||
|
||||
|
||||
@@ -67,9 +67,9 @@
|
||||
#include "iwl-commands.h"
|
||||
|
||||
void iwl_chain_noise_calibration(struct iwl_priv *priv,
|
||||
struct iwl4965_notif_statistics *stat_resp);
|
||||
struct iwl_notif_statistics *stat_resp);
|
||||
void iwl_sensitivity_calibration(struct iwl_priv *priv,
|
||||
struct iwl4965_notif_statistics *resp);
|
||||
struct iwl_notif_statistics *resp);
|
||||
|
||||
void iwl_init_sensitivity(struct iwl_priv *priv);
|
||||
void iwl_reset_run_time_calib(struct iwl_priv *priv);
|
||||
|
||||
@@ -336,6 +336,8 @@ struct iwl4965_tx_power_db {
|
||||
* struct iwl5000_tx_power_dbm_cmd
|
||||
*/
|
||||
#define IWL50_TX_POWER_AUTO 0x7f
|
||||
#define IWL50_TX_POWER_NO_CLOSED (0x1 << 6)
|
||||
|
||||
struct iwl5000_tx_power_dbm_cmd {
|
||||
s8 global_lmt; /*in half-dBm (e.g. 30 = 15 dBm) */
|
||||
u8 flags;
|
||||
@@ -1534,7 +1536,7 @@ struct iwl5000_tx_resp {
|
||||
*
|
||||
* Reports Block-Acknowledge from recipient station
|
||||
*/
|
||||
struct iwl4965_compressed_ba_resp {
|
||||
struct iwl_compressed_ba_resp {
|
||||
__le32 sta_addr_lo32;
|
||||
__le16 sta_addr_hi16;
|
||||
__le16 reserved;
|
||||
@@ -2504,7 +2506,7 @@ struct statistics_general {
|
||||
*/
|
||||
#define IWL_STATS_CONF_CLEAR_STATS __constant_cpu_to_le32(0x1) /* see above */
|
||||
#define IWL_STATS_CONF_DISABLE_NOTIF __constant_cpu_to_le32(0x2)/* see above */
|
||||
struct iwl4965_statistics_cmd {
|
||||
struct iwl_statistics_cmd {
|
||||
__le32 configuration_flags; /* IWL_STATS_CONF_* */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
@@ -2525,7 +2527,7 @@ struct iwl4965_statistics_cmd {
|
||||
*/
|
||||
#define STATISTICS_REPLY_FLG_BAND_24G_MSK __constant_cpu_to_le32(0x2)
|
||||
#define STATISTICS_REPLY_FLG_FAT_MODE_MSK __constant_cpu_to_le32(0x8)
|
||||
struct iwl4965_notif_statistics {
|
||||
struct iwl_notif_statistics {
|
||||
__le32 flag;
|
||||
struct statistics_rx rx;
|
||||
struct statistics_tx tx;
|
||||
@@ -2998,8 +3000,8 @@ struct iwl_rx_packet {
|
||||
struct iwl_rem_sta_resp rem_sta;
|
||||
struct iwl4965_sleep_notification sleep_notif;
|
||||
struct iwl4965_spectrum_resp spectrum;
|
||||
struct iwl4965_notif_statistics stats;
|
||||
struct iwl4965_compressed_ba_resp compressed_ba;
|
||||
struct iwl_notif_statistics stats;
|
||||
struct iwl_compressed_ba_resp compressed_ba;
|
||||
struct iwl4965_missed_beacon_notif missed_beacon;
|
||||
struct iwl5000_calibration calib;
|
||||
__le32 status;
|
||||
|
||||
@@ -273,22 +273,27 @@ int iwl_hw_nic_init(struct iwl_priv *priv)
|
||||
EXPORT_SYMBOL(iwl_hw_nic_init);
|
||||
|
||||
/**
|
||||
* iwlcore_clear_stations_table - Clear the driver's station table
|
||||
* iwl_clear_stations_table - Clear the driver's station table
|
||||
*
|
||||
* NOTE: This does not clear or otherwise alter the device's station table.
|
||||
*/
|
||||
void iwlcore_clear_stations_table(struct iwl_priv *priv)
|
||||
void iwl_clear_stations_table(struct iwl_priv *priv)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->sta_lock, flags);
|
||||
|
||||
if (iwl_is_alive(priv) &&
|
||||
!test_bit(STATUS_EXIT_PENDING, &priv->status) &&
|
||||
iwl_send_cmd_pdu_async(priv, REPLY_REMOVE_ALL_STA, 0, NULL, NULL))
|
||||
IWL_ERROR("Couldn't clear the station table\n");
|
||||
|
||||
priv->num_stations = 0;
|
||||
memset(priv->stations, 0, sizeof(priv->stations));
|
||||
|
||||
spin_unlock_irqrestore(&priv->sta_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(iwlcore_clear_stations_table);
|
||||
EXPORT_SYMBOL(iwl_clear_stations_table);
|
||||
|
||||
void iwl_reset_qos(struct iwl_priv *priv)
|
||||
{
|
||||
@@ -490,7 +495,9 @@ static int iwlcore_init_geos(struct iwl_priv *priv)
|
||||
sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
|
||||
sband->n_bitrates = IWL_RATE_COUNT - IWL_FIRST_OFDM_RATE;
|
||||
|
||||
iwlcore_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_5GHZ);
|
||||
if (priv->cfg->sku & IWL_SKU_N)
|
||||
iwlcore_init_ht_hw_capab(priv, &sband->ht_info,
|
||||
IEEE80211_BAND_5GHZ);
|
||||
|
||||
sband = &priv->bands[IEEE80211_BAND_2GHZ];
|
||||
sband->channels = channels;
|
||||
@@ -498,7 +505,9 @@ static int iwlcore_init_geos(struct iwl_priv *priv)
|
||||
sband->bitrates = rates;
|
||||
sband->n_bitrates = IWL_RATE_COUNT;
|
||||
|
||||
iwlcore_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_2GHZ);
|
||||
if (priv->cfg->sku & IWL_SKU_N)
|
||||
iwlcore_init_ht_hw_capab(priv, &sband->ht_info,
|
||||
IEEE80211_BAND_2GHZ);
|
||||
|
||||
priv->ieee_channels = channels;
|
||||
priv->ieee_rates = rates;
|
||||
@@ -814,8 +823,9 @@ int iwl_setup_mac(struct iwl_priv *priv)
|
||||
IEEE80211_HW_NOISE_DBM;
|
||||
/* Default value; 4 EDCA QOS priorities */
|
||||
hw->queues = 4;
|
||||
/* Enhanced value; more queues, to support 11n aggregation */
|
||||
hw->ampdu_queues = 12;
|
||||
/* queues to support 11n aggregation */
|
||||
if (priv->cfg->sku & IWL_SKU_N)
|
||||
hw->ampdu_queues = 12;
|
||||
|
||||
hw->conf.beacon_int = 100;
|
||||
|
||||
@@ -837,11 +847,28 @@ int iwl_setup_mac(struct iwl_priv *priv)
|
||||
}
|
||||
EXPORT_SYMBOL(iwl_setup_mac);
|
||||
|
||||
int iwl_set_hw_params(struct iwl_priv *priv)
|
||||
{
|
||||
priv->hw_params.sw_crypto = priv->cfg->mod_params->sw_crypto;
|
||||
priv->hw_params.max_rxq_size = RX_QUEUE_SIZE;
|
||||
priv->hw_params.max_rxq_log = RX_QUEUE_SIZE_LOG;
|
||||
if (priv->cfg->mod_params->amsdu_size_8K)
|
||||
priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_8K;
|
||||
else
|
||||
priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_4K;
|
||||
priv->hw_params.max_pkt_size = priv->hw_params.rx_buf_size - 256;
|
||||
|
||||
if (priv->cfg->mod_params->disable_11n)
|
||||
priv->cfg->sku &= ~IWL_SKU_N;
|
||||
|
||||
/* Device-specific setup */
|
||||
return priv->cfg->ops->lib->set_hw_params(priv);
|
||||
}
|
||||
EXPORT_SYMBOL(iwl_set_hw_params);
|
||||
|
||||
int iwl_init_drv(struct iwl_priv *priv)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
priv->retry_rate = 1;
|
||||
priv->ibss_beacon = NULL;
|
||||
@@ -852,15 +879,12 @@ int iwl_init_drv(struct iwl_priv *priv)
|
||||
spin_lock_init(&priv->hcmd_lock);
|
||||
spin_lock_init(&priv->lq_mngr.lock);
|
||||
|
||||
for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++)
|
||||
INIT_LIST_HEAD(&priv->ibss_mac_hash[i]);
|
||||
|
||||
INIT_LIST_HEAD(&priv->free_frames);
|
||||
|
||||
mutex_init(&priv->mutex);
|
||||
|
||||
/* Clear the driver's (not device's) station table */
|
||||
iwlcore_clear_stations_table(priv);
|
||||
iwl_clear_stations_table(priv);
|
||||
|
||||
priv->data_retry_limit = -1;
|
||||
priv->ieee_channels = NULL;
|
||||
@@ -1383,7 +1407,14 @@ int iwl_radio_kill_sw_enable_radio(struct iwl_priv *priv)
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
|
||||
|
||||
clear_bit(STATUS_RF_KILL_SW, &priv->status);
|
||||
/* If the driver is up it will receive CARD_STATE_NOTIFICATION
|
||||
* notification where it will clear SW rfkill status.
|
||||
* Setting it here would break the handler. Only if the
|
||||
* interface is down we can set here since we don't
|
||||
* receive any further notification.
|
||||
*/
|
||||
if (!priv->is_open)
|
||||
clear_bit(STATUS_RF_KILL_SW, &priv->status);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
/* wake up ucode */
|
||||
@@ -1401,8 +1432,10 @@ int iwl_radio_kill_sw_enable_radio(struct iwl_priv *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (priv->is_open)
|
||||
queue_work(priv->workqueue, &priv->restart);
|
||||
/* If the driver is already loaded, it will receive
|
||||
* CARD_STATE_NOTIFICATION notifications and the handler will
|
||||
* call restart to reload the driver.
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(iwl_radio_kill_sw_enable_radio);
|
||||
|
||||
@@ -140,6 +140,7 @@ struct iwl_lib_ops {
|
||||
int (*set_power)(struct iwl_priv *priv, void *cmd);
|
||||
int (*send_tx_power) (struct iwl_priv *priv);
|
||||
void (*update_chain_flags)(struct iwl_priv *priv);
|
||||
void (*temperature) (struct iwl_priv *priv);
|
||||
/* eeprom operations (as defined in iwl-eeprom.h) */
|
||||
struct iwl_eeprom_ops eeprom_ops;
|
||||
};
|
||||
@@ -157,6 +158,7 @@ struct iwl_mod_params {
|
||||
int disable_hw_scan; /* def: 0 = use h/w scan */
|
||||
int num_of_queues; /* def: HW dependent */
|
||||
int enable_qos; /* def: 1 = use quality of service */
|
||||
int disable_11n; /* def: 0 = disable 11n capabilities */
|
||||
int amsdu_size_8K; /* def: 1 = enable 8K amsdu size */
|
||||
int antenna; /* def: 0 = both antennas (use diversity) */
|
||||
int restart_fw; /* def: 1 = restart firmware */
|
||||
@@ -179,7 +181,7 @@ struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
|
||||
struct ieee80211_ops *hw_ops);
|
||||
void iwl_hw_detect(struct iwl_priv *priv);
|
||||
|
||||
void iwlcore_clear_stations_table(struct iwl_priv *priv);
|
||||
void iwl_clear_stations_table(struct iwl_priv *priv);
|
||||
void iwl_free_calib_results(struct iwl_priv *priv);
|
||||
void iwl_reset_qos(struct iwl_priv *priv);
|
||||
void iwl_set_rxon_chain(struct iwl_priv *priv);
|
||||
@@ -191,6 +193,7 @@ u8 iwl_is_fat_tx_allowed(struct iwl_priv *priv,
|
||||
struct ieee80211_ht_info *sta_ht_inf);
|
||||
int iwl_hw_nic_init(struct iwl_priv *priv);
|
||||
int iwl_setup_mac(struct iwl_priv *priv);
|
||||
int iwl_set_hw_params(struct iwl_priv *priv);
|
||||
int iwl_init_drv(struct iwl_priv *priv);
|
||||
void iwl_uninit_drv(struct iwl_priv *priv);
|
||||
/* "keep warm" functions */
|
||||
@@ -209,6 +212,8 @@ int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv,
|
||||
void iwl_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
|
||||
void iwl_rx_replenish(struct iwl_priv *priv);
|
||||
int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
|
||||
int iwl_rx_agg_start(struct iwl_priv *priv, const u8 *addr, int tid, u16 ssn);
|
||||
int iwl_rx_agg_stop(struct iwl_priv *priv, const u8 *addr, int tid);
|
||||
/* FIXME: remove when TX is moved to iwl core */
|
||||
int iwl_rx_queue_restock(struct iwl_priv *priv);
|
||||
int iwl_rx_queue_space(const struct iwl_rx_queue *q);
|
||||
@@ -218,6 +223,8 @@ int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index);
|
||||
/* Handlers */
|
||||
void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
void iwl_rx_statistics(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
|
||||
/* TX helpers */
|
||||
|
||||
@@ -368,7 +375,13 @@ extern void iwl_rf_kill_ct_config(struct iwl_priv *priv);
|
||||
extern int iwl_send_statistics_request(struct iwl_priv *priv, u8 flags);
|
||||
extern int iwl_verify_ucode(struct iwl_priv *priv);
|
||||
extern int iwl_send_lq_cmd(struct iwl_priv *priv,
|
||||
struct iwl_link_quality_cmd *lq, u8 flags);
|
||||
struct iwl_link_quality_cmd *lq, u8 flags);
|
||||
extern void iwl_rx_reply_rx(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
extern void iwl_rx_reply_rx_phy(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
void iwl_rx_reply_compressed_ba(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
|
||||
static inline int iwl_send_rxon_assoc(struct iwl_priv *priv)
|
||||
{
|
||||
|
||||
@@ -591,11 +591,6 @@ extern int iwl_send_add_sta(struct iwl_priv *priv,
|
||||
struct iwl_addsta_cmd *sta, u8 flags);
|
||||
u8 iwl_add_station_flags(struct iwl_priv *priv, const u8 *addr, int is_ap,
|
||||
u8 flags, struct ieee80211_ht_info *ht_info);
|
||||
extern int iwl4965_is_network_packet(struct iwl_priv *priv,
|
||||
struct ieee80211_hdr *header);
|
||||
extern int iwl4965_is_duplicate_packet(struct iwl_priv *priv,
|
||||
struct ieee80211_hdr *header);
|
||||
extern int iwl4965_calc_sig_qual(int rssi_dbm, int noise_dbm);
|
||||
extern unsigned int iwl4965_fill_beacon_frame(struct iwl_priv *priv,
|
||||
struct ieee80211_hdr *hdr,
|
||||
const u8 *dest, int left);
|
||||
@@ -624,11 +619,7 @@ extern int iwl_rxq_stop(struct iwl_priv *priv);
|
||||
extern void iwl_txq_ctx_stop(struct iwl_priv *priv);
|
||||
extern unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv,
|
||||
struct iwl_frame *frame, u8 rate);
|
||||
extern void iwl4965_hw_rx_statistics(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
extern void iwl4965_disable_events(struct iwl_priv *priv);
|
||||
extern void iwl4965_rx_reply_rx(struct iwl_priv *priv,
|
||||
struct iwl_rx_mem_buffer *rxb);
|
||||
|
||||
extern int iwl4965_hw_channel_switch(struct iwl_priv *priv, u16 channel);
|
||||
extern int iwl_queue_space(const struct iwl_queue *q);
|
||||
@@ -702,7 +693,6 @@ struct iwl4965_lq_mngr {
|
||||
unsigned long stamp_last;
|
||||
u32 flush_time;
|
||||
u32 tx_packets;
|
||||
u8 lq_ready;
|
||||
};
|
||||
|
||||
/* Sensitivity and chain noise calibration */
|
||||
@@ -994,7 +984,7 @@ struct iwl_priv {
|
||||
|
||||
struct iwl_power_mgr power_data;
|
||||
|
||||
struct iwl4965_notif_statistics statistics;
|
||||
struct iwl_notif_statistics statistics;
|
||||
unsigned long last_statistics_time;
|
||||
|
||||
/* context information */
|
||||
@@ -1026,14 +1016,6 @@ struct iwl_priv {
|
||||
u32 last_beacon_time;
|
||||
u64 last_tsf;
|
||||
|
||||
/* Duplicate packet detection */
|
||||
u16 last_seq_num;
|
||||
u16 last_frag_num;
|
||||
unsigned long last_packet_time;
|
||||
|
||||
/* Hash table for finding stations in IBSS network */
|
||||
struct list_head ibss_mac_hash[IWL_IBSS_MAC_HASH_SIZE];
|
||||
|
||||
/* eeprom */
|
||||
u8 *eeprom;
|
||||
struct iwl_eeprom_calib_info *calib_info;
|
||||
|
||||
@@ -93,6 +93,7 @@ const char *get_cmd_string(u8 cmd)
|
||||
IWL_CMD(CALIBRATION_CFG_CMD);
|
||||
IWL_CMD(CALIBRATION_RES_NOTIFICATION);
|
||||
IWL_CMD(CALIBRATION_COMPLETE_NOTIFICATION);
|
||||
IWL_CMD(REPLY_TX_POWER_DBM_CMD);
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user