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 git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
This commit is contained in:
@@ -79,6 +79,8 @@ static const struct pci_device_id ath5k_led_devices[] = {
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) },
|
||||
/* IBM-specific AR5212 (all others) */
|
||||
{ PCI_VDEVICE(ATHEROS, PCI_DEVICE_ID_ATHEROS_AR5212_IBM), ATH_LED(0, 0) },
|
||||
/* Dell Vostro A860 (shahar@shahar-or.co.il) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0112), ATH_LED(3, 0) },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
@@ -2078,7 +2078,7 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
|
||||
&txq->axq_q, lastbf->list.prev);
|
||||
|
||||
txq->axq_depth--;
|
||||
txok = (ds->ds_txstat.ts_status == 0);
|
||||
txok = !(ds->ds_txstat.ts_status & ATH9K_TXERR_FILT);
|
||||
txq->axq_tx_inprogress = false;
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
|
||||
@@ -1353,7 +1353,7 @@ int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid)
|
||||
if (priv->stations[sta_id].tid[tid].agg.state ==
|
||||
IWL_EMPTYING_HW_QUEUE_ADDBA) {
|
||||
IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
|
||||
ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid);
|
||||
ieee80211_stop_tx_ba_cb_irqsafe(priv->vif, ra, tid);
|
||||
priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+171
-172
File diff suppressed because it is too large
Load Diff
@@ -427,7 +427,7 @@ int hermesi_program_init(hermes_t *hw, u32 offset)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
pr_debug(KERN_DEBUG PFX "Enabling volatile, EP 0x%08x\n", offset);
|
||||
pr_debug(PFX "Enabling volatile, EP 0x%08x\n", offset);
|
||||
err = hermes_doicmd_wait(hw,
|
||||
HERMES_PROGRAM_ENABLE_VOLATILE,
|
||||
offset & 0xFFFFu,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#define RTL8187_EEPROM_TXPWR_CHAN_1 0x16 /* 3 channels */
|
||||
#define RTL8187_EEPROM_TXPWR_CHAN_6 0x1B /* 2 channels */
|
||||
#define RTL8187_EEPROM_TXPWR_CHAN_4 0x3D /* 2 channels */
|
||||
#define RTL8187_EEPROM_SELECT_GPIO 0x3B
|
||||
|
||||
#define RTL8187_REQT_READ 0xC0
|
||||
#define RTL8187_REQT_WRITE 0x40
|
||||
@@ -31,6 +32,9 @@
|
||||
|
||||
#define RTL8187_MAX_RX 0x9C4
|
||||
|
||||
#define RFKILL_MASK_8187_89_97 0x2
|
||||
#define RFKILL_MASK_8198 0x4
|
||||
|
||||
struct rtl8187_rx_info {
|
||||
struct urb *urb;
|
||||
struct ieee80211_hw *dev;
|
||||
@@ -122,6 +126,7 @@ struct rtl8187_priv {
|
||||
u8 noise;
|
||||
u8 slot_time;
|
||||
u8 aifsn[4];
|
||||
u8 rfkill_mask;
|
||||
struct {
|
||||
__le64 buf;
|
||||
struct sk_buff_head queue;
|
||||
|
||||
@@ -1322,6 +1322,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
struct ieee80211_channel *channel;
|
||||
const char *chip_name;
|
||||
u16 txpwr, reg;
|
||||
u16 product_id = le16_to_cpu(udev->descriptor.idProduct);
|
||||
int err, i;
|
||||
|
||||
dev = ieee80211_alloc_hw(sizeof(*priv), &rtl8187_ops);
|
||||
@@ -1481,6 +1482,13 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
(*channel++).hw_value = txpwr & 0xFF;
|
||||
(*channel++).hw_value = txpwr >> 8;
|
||||
}
|
||||
/* Handle the differing rfkill GPIO bit in different models */
|
||||
priv->rfkill_mask = RFKILL_MASK_8187_89_97;
|
||||
if (product_id == 0x8197 || product_id == 0x8198) {
|
||||
eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_SELECT_GPIO, ®);
|
||||
if (reg & 0xFF00)
|
||||
priv->rfkill_mask = RFKILL_MASK_8198;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX: Once this driver supports anything that requires
|
||||
@@ -1509,9 +1517,9 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
mutex_init(&priv->conf_mutex);
|
||||
skb_queue_head_init(&priv->b_tx_status.queue);
|
||||
|
||||
printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s\n",
|
||||
printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s, rfkill mask %d\n",
|
||||
wiphy_name(dev->wiphy), dev->wiphy->perm_addr,
|
||||
chip_name, priv->asic_rev, priv->rf->name);
|
||||
chip_name, priv->asic_rev, priv->rf->name, priv->rfkill_mask);
|
||||
|
||||
#ifdef CONFIG_RTL8187_LEDS
|
||||
eeprom_93cx6_read(&eeprom, 0x3F, ®);
|
||||
|
||||
@@ -25,10 +25,10 @@ static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv)
|
||||
u8 gpio;
|
||||
|
||||
gpio = rtl818x_ioread8(priv, &priv->map->GPIO0);
|
||||
rtl818x_iowrite8(priv, &priv->map->GPIO0, gpio & ~0x02);
|
||||
rtl818x_iowrite8(priv, &priv->map->GPIO0, gpio & ~priv->rfkill_mask);
|
||||
gpio = rtl818x_ioread8(priv, &priv->map->GPIO1);
|
||||
|
||||
return gpio & 0x02;
|
||||
return gpio & priv->rfkill_mask;
|
||||
}
|
||||
|
||||
void rtl8187_rfkill_init(struct ieee80211_hw *hw)
|
||||
|
||||
@@ -629,10 +629,6 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
|
||||
goto out_sleep;
|
||||
}
|
||||
|
||||
ret = wl1251_build_null_data(wl);
|
||||
if (ret < 0)
|
||||
goto out_sleep;
|
||||
|
||||
if (conf->flags & IEEE80211_CONF_PS && !wl->psm_requested) {
|
||||
wl1251_debug(DEBUG_PSM, "psm enabled");
|
||||
|
||||
@@ -1110,6 +1106,21 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (changed & BSS_CHANGED_BSSID) {
|
||||
memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
|
||||
|
||||
ret = wl1251_build_null_data(wl);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (wl->bss_type != BSS_TYPE_IBSS) {
|
||||
ret = wl1251_join(wl, wl->bss_type, wl->channel,
|
||||
wl->beacon_int, wl->dtim_period);
|
||||
if (ret < 0)
|
||||
goto out_sleep;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_ASSOC) {
|
||||
if (bss_conf->assoc) {
|
||||
wl->beacon_int = bss_conf->beacon_int;
|
||||
@@ -1169,23 +1180,6 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
}
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_BSSID) {
|
||||
memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
|
||||
|
||||
ret = wl1251_build_null_data(wl);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (wl->bss_type != BSS_TYPE_IBSS) {
|
||||
ret = wl1251_join(wl, wl->bss_type, wl->channel,
|
||||
wl->beacon_int, wl->dtim_period);
|
||||
if (ret < 0)
|
||||
goto out_sleep;
|
||||
wl1251_warning("Set ctsprotect failed %d", ret);
|
||||
goto out_sleep;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_BEACON) {
|
||||
beacon = ieee80211_beacon_get(hw, vif);
|
||||
ret = wl1251_cmd_template_set(wl, CMD_BEACON, beacon->data,
|
||||
|
||||
@@ -746,6 +746,7 @@ struct ieee80211_local {
|
||||
unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */
|
||||
|
||||
bool pspolling;
|
||||
bool scan_ps_enabled;
|
||||
/*
|
||||
* PS can only be enabled when we have exactly one managed
|
||||
* interface (and monitors) in PS, this then points there.
|
||||
|
||||
+8
-2
@@ -1083,8 +1083,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
ieee80211_set_wmm_default(sdata);
|
||||
|
||||
ieee80211_recalc_idle(local);
|
||||
|
||||
/* channel(_type) changes are handled by ieee80211_hw_config */
|
||||
local->oper_channel_type = NL80211_CHAN_NO_HT;
|
||||
|
||||
@@ -1370,6 +1368,7 @@ ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
if (!wk) {
|
||||
ieee80211_set_disassoc(sdata, true);
|
||||
ieee80211_recalc_idle(sdata->local);
|
||||
} else {
|
||||
list_del(&wk->list);
|
||||
kfree(wk);
|
||||
@@ -1403,6 +1402,7 @@ ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
sdata->dev->name, mgmt->sa, reason_code);
|
||||
|
||||
ieee80211_set_disassoc(sdata, false);
|
||||
ieee80211_recalc_idle(sdata->local);
|
||||
return RX_MGMT_CFG80211_DISASSOC;
|
||||
}
|
||||
|
||||
@@ -2117,6 +2117,7 @@ static void ieee80211_sta_work(struct work_struct *work)
|
||||
" after %dms, disconnecting.\n",
|
||||
bssid, (1000 * IEEE80211_PROBE_WAIT)/HZ);
|
||||
ieee80211_set_disassoc(sdata, true);
|
||||
ieee80211_recalc_idle(local);
|
||||
mutex_unlock(&ifmgd->mtx);
|
||||
/*
|
||||
* must be outside lock due to cfg80211,
|
||||
@@ -2560,6 +2561,8 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
|
||||
IEEE80211_STYPE_DEAUTH, req->reason_code,
|
||||
cookie);
|
||||
|
||||
ieee80211_recalc_idle(sdata->local);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2592,5 +2595,8 @@ int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bss->bssid,
|
||||
IEEE80211_STYPE_DISASSOC, req->reason_code,
|
||||
cookie);
|
||||
|
||||
ieee80211_recalc_idle(sdata->local);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+16
-4
@@ -227,7 +227,8 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
|
||||
static void ieee80211_scan_ps_enable(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
bool ps = false;
|
||||
|
||||
local->scan_ps_enabled = false;
|
||||
|
||||
/* FIXME: what to do when local->pspolling is true? */
|
||||
|
||||
@@ -235,12 +236,13 @@ static void ieee80211_scan_ps_enable(struct ieee80211_sub_if_data *sdata)
|
||||
cancel_work_sync(&local->dynamic_ps_enable_work);
|
||||
|
||||
if (local->hw.conf.flags & IEEE80211_CONF_PS) {
|
||||
ps = true;
|
||||
local->scan_ps_enabled = true;
|
||||
local->hw.conf.flags &= ~IEEE80211_CONF_PS;
|
||||
ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
|
||||
}
|
||||
|
||||
if (!ps || !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK))
|
||||
if (!(local->scan_ps_enabled) ||
|
||||
!(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK))
|
||||
/*
|
||||
* If power save was enabled, no need to send a nullfunc
|
||||
* frame because AP knows that we are sleeping. But if the
|
||||
@@ -261,7 +263,7 @@ static void ieee80211_scan_ps_disable(struct ieee80211_sub_if_data *sdata)
|
||||
|
||||
if (!local->ps_sdata)
|
||||
ieee80211_send_nullfunc(local, sdata, 0);
|
||||
else {
|
||||
else if (local->scan_ps_enabled) {
|
||||
/*
|
||||
* In !IEEE80211_HW_PS_NULLFUNC_STACK case the hardware
|
||||
* will send a nullfunc frame with the powersave bit set
|
||||
@@ -277,6 +279,16 @@ static void ieee80211_scan_ps_disable(struct ieee80211_sub_if_data *sdata)
|
||||
*/
|
||||
local->hw.conf.flags |= IEEE80211_CONF_PS;
|
||||
ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
|
||||
} else if (local->hw.conf.dynamic_ps_timeout > 0) {
|
||||
/*
|
||||
* If IEEE80211_CONF_PS was not set and the dynamic_ps_timer
|
||||
* had been running before leaving the operating channel,
|
||||
* restart the timer now and send a nullfunc frame to inform
|
||||
* the AP that we are awake.
|
||||
*/
|
||||
ieee80211_send_nullfunc(local, sdata, 0);
|
||||
mod_timer(&local->dynamic_ps_timer, jiffies +
|
||||
msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -579,7 +579,7 @@ u32 ieee802_11_parse_elems_crc(u8 *start, size_t len,
|
||||
if (elen > left)
|
||||
break;
|
||||
|
||||
if (calc_crc && id < 64 && (filter & BIT(id)))
|
||||
if (calc_crc && id < 64 && (filter & (1ULL << id)))
|
||||
crc = crc32_be(crc, pos - 2, elen + 2);
|
||||
|
||||
switch (id) {
|
||||
|
||||
+2
-2
@@ -579,6 +579,8 @@ static ssize_t rfkill_name_show(struct device *dev,
|
||||
|
||||
static const char *rfkill_get_type_str(enum rfkill_type type)
|
||||
{
|
||||
BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_FM + 1);
|
||||
|
||||
switch (type) {
|
||||
case RFKILL_TYPE_WLAN:
|
||||
return "wlan";
|
||||
@@ -597,8 +599,6 @@ static const char *rfkill_get_type_str(enum rfkill_type type)
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_FM + 1);
|
||||
}
|
||||
|
||||
static ssize_t rfkill_type_show(struct device *dev,
|
||||
|
||||
Reference in New Issue
Block a user