Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
This commit is contained in:
Коммит
812e4dafa4
|
@ -7277,7 +7277,6 @@ F: drivers/video/aty/aty128fb.c
|
||||||
RALINK RT2X00 WIRELESS LAN DRIVER
|
RALINK RT2X00 WIRELESS LAN DRIVER
|
||||||
P: rt2x00 project
|
P: rt2x00 project
|
||||||
M: Ivo van Doorn <IvDoorn@gmail.com>
|
M: Ivo van Doorn <IvDoorn@gmail.com>
|
||||||
M: Gertjan van Wingerde <gwingerde@gmail.com>
|
|
||||||
M: Helmut Schaa <helmut.schaa@googlemail.com>
|
M: Helmut Schaa <helmut.schaa@googlemail.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
L: users@rt2x00.serialmonkey.com (moderated for non-subscribers)
|
L: users@rt2x00.serialmonkey.com (moderated for non-subscribers)
|
||||||
|
|
|
@ -82,6 +82,7 @@ static const struct usb_device_id ath3k_table[] = {
|
||||||
{ USB_DEVICE(0x04CA, 0x3004) },
|
{ USB_DEVICE(0x04CA, 0x3004) },
|
||||||
{ USB_DEVICE(0x04CA, 0x3005) },
|
{ USB_DEVICE(0x04CA, 0x3005) },
|
||||||
{ USB_DEVICE(0x04CA, 0x3006) },
|
{ USB_DEVICE(0x04CA, 0x3006) },
|
||||||
|
{ USB_DEVICE(0x04CA, 0x3007) },
|
||||||
{ USB_DEVICE(0x04CA, 0x3008) },
|
{ USB_DEVICE(0x04CA, 0x3008) },
|
||||||
{ USB_DEVICE(0x04CA, 0x300b) },
|
{ USB_DEVICE(0x04CA, 0x300b) },
|
||||||
{ USB_DEVICE(0x0930, 0x0219) },
|
{ USB_DEVICE(0x0930, 0x0219) },
|
||||||
|
@ -131,6 +132,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
|
||||||
{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
|
||||||
|
{ USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||||
|
|
|
@ -152,6 +152,7 @@ static const struct usb_device_id blacklist_table[] = {
|
||||||
{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
|
||||||
|
{ USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
|
||||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||||
|
@ -1485,10 +1486,8 @@ static int btusb_probe(struct usb_interface *intf,
|
||||||
if (id->driver_info & BTUSB_BCM92035)
|
if (id->driver_info & BTUSB_BCM92035)
|
||||||
hdev->setup = btusb_setup_bcm92035;
|
hdev->setup = btusb_setup_bcm92035;
|
||||||
|
|
||||||
if (id->driver_info & BTUSB_INTEL) {
|
if (id->driver_info & BTUSB_INTEL)
|
||||||
usb_enable_autosuspend(data->udev);
|
|
||||||
hdev->setup = btusb_setup_intel;
|
hdev->setup = btusb_setup_intel;
|
||||||
}
|
|
||||||
|
|
||||||
/* Interface numbers are hardcoded in the specification */
|
/* Interface numbers are hardcoded in the specification */
|
||||||
data->isoc = usb_ifnum_to_if(data->udev, 1);
|
data->isoc = usb_ifnum_to_if(data->udev, 1);
|
||||||
|
|
|
@ -86,7 +86,6 @@ static int ath_ahb_probe(struct platform_device *pdev)
|
||||||
int irq;
|
int irq;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct ath_hw *ah;
|
struct ath_hw *ah;
|
||||||
struct ath_common *common;
|
|
||||||
char hw_name[64];
|
char hw_name[64];
|
||||||
|
|
||||||
if (!dev_get_platdata(&pdev->dev)) {
|
if (!dev_get_platdata(&pdev->dev)) {
|
||||||
|
@ -146,9 +145,6 @@ static int ath_ahb_probe(struct platform_device *pdev)
|
||||||
wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
|
wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
|
||||||
hw_name, (unsigned long)mem, irq);
|
hw_name, (unsigned long)mem, irq);
|
||||||
|
|
||||||
common = ath9k_hw_common(sc->sc_ah);
|
|
||||||
/* Will be cleared in ath9k_start() */
|
|
||||||
set_bit(ATH_OP_INVALID, &common->op_flags);
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_irq:
|
err_irq:
|
||||||
|
|
|
@ -155,6 +155,9 @@ static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel,
|
||||||
ATH9K_ANI_RSSI_THR_LOW,
|
ATH9K_ANI_RSSI_THR_LOW,
|
||||||
ATH9K_ANI_RSSI_THR_HIGH);
|
ATH9K_ANI_RSSI_THR_HIGH);
|
||||||
|
|
||||||
|
if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL)
|
||||||
|
immunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
|
||||||
|
|
||||||
if (!scan)
|
if (!scan)
|
||||||
aniState->ofdmNoiseImmunityLevel = immunityLevel;
|
aniState->ofdmNoiseImmunityLevel = immunityLevel;
|
||||||
|
|
||||||
|
@ -235,6 +238,9 @@ static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel,
|
||||||
BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
|
BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
|
||||||
ATH9K_ANI_RSSI_THR_HIGH);
|
ATH9K_ANI_RSSI_THR_HIGH);
|
||||||
|
|
||||||
|
if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
|
||||||
|
immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
|
||||||
|
|
||||||
if (ah->opmode == NL80211_IFTYPE_STATION &&
|
if (ah->opmode == NL80211_IFTYPE_STATION &&
|
||||||
BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
|
BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
|
||||||
immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
|
immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
|
||||||
|
|
|
@ -251,7 +251,6 @@ struct ath_atx_tid {
|
||||||
|
|
||||||
s8 bar_index;
|
s8 bar_index;
|
||||||
bool sched;
|
bool sched;
|
||||||
bool paused;
|
|
||||||
bool active;
|
bool active;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ static ssize_t read_file_node_aggr(struct file *file, char __user *user_buf,
|
||||||
ath_txq_lock(sc, txq);
|
ath_txq_lock(sc, txq);
|
||||||
if (tid->active) {
|
if (tid->active) {
|
||||||
len += scnprintf(buf + len, size - len,
|
len += scnprintf(buf + len, size - len,
|
||||||
"%3d%11d%10d%10d%10d%10d%9d%6d%8d\n",
|
"%3d%11d%10d%10d%10d%10d%9d%6d\n",
|
||||||
tid->tidno,
|
tid->tidno,
|
||||||
tid->seq_start,
|
tid->seq_start,
|
||||||
tid->seq_next,
|
tid->seq_next,
|
||||||
|
@ -80,8 +80,7 @@ static ssize_t read_file_node_aggr(struct file *file, char __user *user_buf,
|
||||||
tid->baw_head,
|
tid->baw_head,
|
||||||
tid->baw_tail,
|
tid->baw_tail,
|
||||||
tid->bar_index,
|
tid->bar_index,
|
||||||
tid->sched,
|
tid->sched);
|
||||||
tid->paused);
|
|
||||||
}
|
}
|
||||||
ath_txq_unlock(sc, txq);
|
ath_txq_unlock(sc, txq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -783,6 +783,9 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||||
common = ath9k_hw_common(ah);
|
common = ath9k_hw_common(ah);
|
||||||
ath9k_set_hw_capab(sc, hw);
|
ath9k_set_hw_capab(sc, hw);
|
||||||
|
|
||||||
|
/* Will be cleared in ath9k_start() */
|
||||||
|
set_bit(ATH_OP_INVALID, &common->op_flags);
|
||||||
|
|
||||||
/* Initialize regulatory */
|
/* Initialize regulatory */
|
||||||
error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
|
error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
|
||||||
ath9k_reg_notifier);
|
ath9k_reg_notifier);
|
||||||
|
|
|
@ -784,7 +784,6 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
{
|
{
|
||||||
struct ath_softc *sc;
|
struct ath_softc *sc;
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct ath_common *common;
|
|
||||||
u8 csz;
|
u8 csz;
|
||||||
u32 val;
|
u32 val;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -877,10 +876,6 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
|
wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
|
||||||
hw_name, (unsigned long)sc->mem, pdev->irq);
|
hw_name, (unsigned long)sc->mem, pdev->irq);
|
||||||
|
|
||||||
/* Will be cleared in ath9k_start() */
|
|
||||||
common = ath9k_hw_common(sc->sc_ah);
|
|
||||||
set_bit(ATH_OP_INVALID, &common->op_flags);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_init:
|
err_init:
|
||||||
|
|
|
@ -975,6 +975,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
|
||||||
u64 tsf = 0;
|
u64 tsf = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
dma_addr_t new_buf_addr;
|
dma_addr_t new_buf_addr;
|
||||||
|
unsigned int budget = 512;
|
||||||
|
|
||||||
if (edma)
|
if (edma)
|
||||||
dma_type = DMA_BIDIRECTIONAL;
|
dma_type = DMA_BIDIRECTIONAL;
|
||||||
|
@ -1113,15 +1114,17 @@ requeue_drop_frag:
|
||||||
}
|
}
|
||||||
requeue:
|
requeue:
|
||||||
list_add_tail(&bf->list, &sc->rx.rxbuf);
|
list_add_tail(&bf->list, &sc->rx.rxbuf);
|
||||||
if (flush)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (edma) {
|
if (edma) {
|
||||||
ath_rx_edma_buf_link(sc, qtype);
|
ath_rx_edma_buf_link(sc, qtype);
|
||||||
} else {
|
} else {
|
||||||
ath_rx_buf_relink(sc, bf);
|
ath_rx_buf_relink(sc, bf);
|
||||||
ath9k_hw_rxena(ah);
|
if (!flush)
|
||||||
|
ath9k_hw_rxena(ah);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!budget--)
|
||||||
|
break;
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
if (!(ah->imask & ATH9K_INT_RXEOL)) {
|
if (!(ah->imask & ATH9K_INT_RXEOL)) {
|
||||||
|
|
|
@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_txq *txq, struct ath_atx_tid *tid)
|
||||||
{
|
{
|
||||||
struct ath_atx_ac *ac = tid->ac;
|
struct ath_atx_ac *ac = tid->ac;
|
||||||
|
|
||||||
if (tid->paused)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (tid->sched)
|
if (tid->sched)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1407,7 +1404,6 @@ int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta,
|
||||||
ath_tx_tid_change_state(sc, txtid);
|
ath_tx_tid_change_state(sc, txtid);
|
||||||
|
|
||||||
txtid->active = true;
|
txtid->active = true;
|
||||||
txtid->paused = true;
|
|
||||||
*ssn = txtid->seq_start = txtid->seq_next;
|
*ssn = txtid->seq_start = txtid->seq_next;
|
||||||
txtid->bar_index = -1;
|
txtid->bar_index = -1;
|
||||||
|
|
||||||
|
@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid)
|
||||||
|
|
||||||
ath_txq_lock(sc, txq);
|
ath_txq_lock(sc, txq);
|
||||||
txtid->active = false;
|
txtid->active = false;
|
||||||
txtid->paused = false;
|
|
||||||
ath_tx_flush_tid(sc, txtid);
|
ath_tx_flush_tid(sc, txtid);
|
||||||
ath_tx_tid_change_state(sc, txtid);
|
ath_tx_tid_change_state(sc, txtid);
|
||||||
ath_txq_unlock_complete(sc, txq);
|
ath_txq_unlock_complete(sc, txq);
|
||||||
|
@ -1487,7 +1482,7 @@ void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an)
|
||||||
ath_txq_lock(sc, txq);
|
ath_txq_lock(sc, txq);
|
||||||
ac->clear_ps_filter = true;
|
ac->clear_ps_filter = true;
|
||||||
|
|
||||||
if (!tid->paused && ath_tid_has_buffered(tid)) {
|
if (ath_tid_has_buffered(tid)) {
|
||||||
ath_tx_queue_tid(txq, tid);
|
ath_tx_queue_tid(txq, tid);
|
||||||
ath_txq_schedule(sc, txq);
|
ath_txq_schedule(sc, txq);
|
||||||
}
|
}
|
||||||
|
@ -1510,7 +1505,6 @@ void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta,
|
||||||
ath_txq_lock(sc, txq);
|
ath_txq_lock(sc, txq);
|
||||||
|
|
||||||
tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
|
tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
|
||||||
tid->paused = false;
|
|
||||||
|
|
||||||
if (ath_tid_has_buffered(tid)) {
|
if (ath_tid_has_buffered(tid)) {
|
||||||
ath_tx_queue_tid(txq, tid);
|
ath_tx_queue_tid(txq, tid);
|
||||||
|
@ -1544,8 +1538,6 @@ void ath9k_release_buffered_frames(struct ieee80211_hw *hw,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tid = ATH_AN_2_TID(an, i);
|
tid = ATH_AN_2_TID(an, i);
|
||||||
if (tid->paused)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ath_txq_lock(sc, tid->ac->txq);
|
ath_txq_lock(sc, tid->ac->txq);
|
||||||
while (nframes > 0) {
|
while (nframes > 0) {
|
||||||
|
@ -1844,9 +1836,6 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
|
||||||
list_del(&tid->list);
|
list_del(&tid->list);
|
||||||
tid->sched = false;
|
tid->sched = false;
|
||||||
|
|
||||||
if (tid->paused)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (ath_tx_sched_aggr(sc, txq, tid, &stop))
|
if (ath_tx_sched_aggr(sc, txq, tid, &stop))
|
||||||
sent = true;
|
sent = true;
|
||||||
|
|
||||||
|
@ -2698,7 +2687,6 @@ void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an)
|
||||||
tid->baw_size = WME_MAX_BA;
|
tid->baw_size = WME_MAX_BA;
|
||||||
tid->baw_head = tid->baw_tail = 0;
|
tid->baw_head = tid->baw_tail = 0;
|
||||||
tid->sched = false;
|
tid->sched = false;
|
||||||
tid->paused = false;
|
|
||||||
tid->active = false;
|
tid->active = false;
|
||||||
__skb_queue_head_init(&tid->buf_q);
|
__skb_queue_head_init(&tid->buf_q);
|
||||||
__skb_queue_head_init(&tid->retry_q);
|
__skb_queue_head_init(&tid->retry_q);
|
||||||
|
|
|
@ -303,10 +303,10 @@ static void brcmf_chip_ai_coredisable(struct brcmf_core_priv *core,
|
||||||
|
|
||||||
ci = core->chip;
|
ci = core->chip;
|
||||||
|
|
||||||
/* if core is already in reset, just return */
|
/* if core is already in reset, skip reset */
|
||||||
regdata = ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL);
|
regdata = ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL);
|
||||||
if ((regdata & BCMA_RESET_CTL_RESET) != 0)
|
if ((regdata & BCMA_RESET_CTL_RESET) != 0)
|
||||||
return;
|
goto in_reset_configure;
|
||||||
|
|
||||||
/* configure reset */
|
/* configure reset */
|
||||||
ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
|
ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
|
||||||
|
@ -322,6 +322,7 @@ static void brcmf_chip_ai_coredisable(struct brcmf_core_priv *core,
|
||||||
SPINWAIT(ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL) !=
|
SPINWAIT(ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL) !=
|
||||||
BCMA_RESET_CTL_RESET, 300);
|
BCMA_RESET_CTL_RESET, 300);
|
||||||
|
|
||||||
|
in_reset_configure:
|
||||||
/* in-reset configure */
|
/* in-reset configure */
|
||||||
ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
|
ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
|
||||||
reset | BCMA_IOCTL_FGC | BCMA_IOCTL_CLK);
|
reset | BCMA_IOCTL_FGC | BCMA_IOCTL_CLK);
|
||||||
|
|
|
@ -620,21 +620,19 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
rt2x00lib_config_intf(rt2x00dev, intf, vif->type, NULL,
|
rt2x00lib_config_intf(rt2x00dev, intf, vif->type, NULL,
|
||||||
bss_conf->bssid);
|
bss_conf->bssid);
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the beacon. This is only required on USB devices. PCI
|
|
||||||
* devices fetch beacons periodically.
|
|
||||||
*/
|
|
||||||
if (changes & BSS_CHANGED_BEACON && rt2x00_is_usb(rt2x00dev))
|
|
||||||
rt2x00queue_update_beacon(rt2x00dev, vif);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start/stop beaconing.
|
* Start/stop beaconing.
|
||||||
*/
|
*/
|
||||||
if (changes & BSS_CHANGED_BEACON_ENABLED) {
|
if (changes & BSS_CHANGED_BEACON_ENABLED) {
|
||||||
if (!bss_conf->enable_beacon && intf->enable_beacon) {
|
if (!bss_conf->enable_beacon && intf->enable_beacon) {
|
||||||
rt2x00queue_clear_beacon(rt2x00dev, vif);
|
|
||||||
rt2x00dev->intf_beaconing--;
|
rt2x00dev->intf_beaconing--;
|
||||||
intf->enable_beacon = false;
|
intf->enable_beacon = false;
|
||||||
|
/*
|
||||||
|
* Clear beacon in the H/W for this vif. This is needed
|
||||||
|
* to disable beaconing on this particular interface
|
||||||
|
* and keep it running on other interfaces.
|
||||||
|
*/
|
||||||
|
rt2x00queue_clear_beacon(rt2x00dev, vif);
|
||||||
|
|
||||||
if (rt2x00dev->intf_beaconing == 0) {
|
if (rt2x00dev->intf_beaconing == 0) {
|
||||||
/*
|
/*
|
||||||
|
@ -645,11 +643,15 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
rt2x00queue_stop_queue(rt2x00dev->bcn);
|
rt2x00queue_stop_queue(rt2x00dev->bcn);
|
||||||
mutex_unlock(&intf->beacon_skb_mutex);
|
mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} else if (bss_conf->enable_beacon && !intf->enable_beacon) {
|
} else if (bss_conf->enable_beacon && !intf->enable_beacon) {
|
||||||
rt2x00dev->intf_beaconing++;
|
rt2x00dev->intf_beaconing++;
|
||||||
intf->enable_beacon = true;
|
intf->enable_beacon = true;
|
||||||
|
/*
|
||||||
|
* Upload beacon to the H/W. This is only required on
|
||||||
|
* USB devices. PCI devices fetch beacons periodically.
|
||||||
|
*/
|
||||||
|
if (rt2x00_is_usb(rt2x00dev))
|
||||||
|
rt2x00queue_update_beacon(rt2x00dev, vif);
|
||||||
|
|
||||||
if (rt2x00dev->intf_beaconing == 1) {
|
if (rt2x00dev->intf_beaconing == 1) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -293,7 +293,7 @@ static void _rtl88ee_translate_rx_signal_stuff(struct ieee80211_hw *hw,
|
||||||
u8 *psaddr;
|
u8 *psaddr;
|
||||||
__le16 fc;
|
__le16 fc;
|
||||||
u16 type, ufc;
|
u16 type, ufc;
|
||||||
bool match_bssid, packet_toself, packet_beacon, addr;
|
bool match_bssid, packet_toself, packet_beacon = false, addr;
|
||||||
|
|
||||||
tmp_buf = skb->data + pstatus->rx_drvinfo_size + pstatus->rx_bufshift;
|
tmp_buf = skb->data + pstatus->rx_drvinfo_size + pstatus->rx_bufshift;
|
||||||
|
|
||||||
|
|
|
@ -1001,7 +1001,7 @@ int rtl92cu_hw_init(struct ieee80211_hw *hw)
|
||||||
err = _rtl92cu_init_mac(hw);
|
err = _rtl92cu_init_mac(hw);
|
||||||
if (err) {
|
if (err) {
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "init mac failed!\n");
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "init mac failed!\n");
|
||||||
return err;
|
goto exit;
|
||||||
}
|
}
|
||||||
err = rtl92c_download_fw(hw);
|
err = rtl92c_download_fw(hw);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -49,6 +49,12 @@ static u8 _rtl92se_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 skb_queue)
|
||||||
if (ieee80211_is_nullfunc(fc))
|
if (ieee80211_is_nullfunc(fc))
|
||||||
return QSLT_HIGH;
|
return QSLT_HIGH;
|
||||||
|
|
||||||
|
/* Kernel commit 1bf4bbb4024dcdab changed EAPOL packets to use
|
||||||
|
* queue V0 at priority 7; however, the RTL8192SE appears to have
|
||||||
|
* that queue at priority 6
|
||||||
|
*/
|
||||||
|
if (skb->priority == 7)
|
||||||
|
return QSLT_VO;
|
||||||
return skb->priority;
|
return skb->priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -819,14 +819,17 @@ static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
|
||||||
if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
|
if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
|
||||||
struct hci_cp_auth_requested cp;
|
struct hci_cp_auth_requested cp;
|
||||||
|
|
||||||
/* encrypt must be pending if auth is also pending */
|
|
||||||
set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
|
|
||||||
|
|
||||||
cp.handle = cpu_to_le16(conn->handle);
|
cp.handle = cpu_to_le16(conn->handle);
|
||||||
hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
|
hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
|
||||||
sizeof(cp), &cp);
|
sizeof(cp), &cp);
|
||||||
|
|
||||||
|
/* If we're already encrypted set the REAUTH_PEND flag,
|
||||||
|
* otherwise set the ENCRYPT_PEND.
|
||||||
|
*/
|
||||||
if (conn->key_type != 0xff)
|
if (conn->key_type != 0xff)
|
||||||
set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
|
set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
|
||||||
|
else
|
||||||
|
set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -3330,6 +3330,12 @@ static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
|
||||||
if (!conn)
|
if (!conn)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
|
/* For BR/EDR the necessary steps are taken through the
|
||||||
|
* auth_complete event.
|
||||||
|
*/
|
||||||
|
if (conn->type != LE_LINK)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
if (!ev->status)
|
if (!ev->status)
|
||||||
conn->sec_level = conn->pending_sec_level;
|
conn->sec_level = conn->pending_sec_level;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче