mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-19 02:54:00 +08:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
07bfa524d4
@ -37,7 +37,7 @@ static bool ath9k_hw_ar9287_fill_eeprom(struct ath_hw *ah)
|
|||||||
int addr, eep_start_loc;
|
int addr, eep_start_loc;
|
||||||
eep_data = (u16 *)eep;
|
eep_data = (u16 *)eep;
|
||||||
|
|
||||||
if (ah->hw_version.devid == 0x7015)
|
if (AR9287_HTC_DEVID(ah))
|
||||||
eep_start_loc = AR9287_HTC_EEP_START_LOC;
|
eep_start_loc = AR9287_HTC_EEP_START_LOC;
|
||||||
else
|
else
|
||||||
eep_start_loc = AR9287_EEP_START_LOC;
|
eep_start_loc = AR9287_EEP_START_LOC;
|
||||||
|
@ -36,8 +36,13 @@ static struct usb_device_id ath9k_hif_usb_ids[] = {
|
|||||||
{ USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
|
{ USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
|
||||||
{ USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
|
{ USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
|
||||||
{ USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */
|
{ USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */
|
||||||
|
{ USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */
|
||||||
|
{ USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
|
||||||
|
{ USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
|
||||||
{ USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
|
{ USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
|
||||||
{ USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */
|
{ USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */
|
||||||
|
{ USB_DEVICE(0x040D, 0x3801) }, /* VIA */
|
||||||
|
{ USB_DEVICE(0x1668, 0x1200) }, /* Verizon */
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -806,6 +811,8 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
|
|||||||
case 0x7010:
|
case 0x7010:
|
||||||
case 0x7015:
|
case 0x7015:
|
||||||
case 0x9018:
|
case 0x9018:
|
||||||
|
case 0xA704:
|
||||||
|
case 0x1200:
|
||||||
firm_offset = AR7010_FIRMWARE_TEXT;
|
firm_offset = AR7010_FIRMWARE_TEXT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -928,6 +935,8 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
|
|||||||
case 0x7010:
|
case 0x7010:
|
||||||
case 0x7015:
|
case 0x7015:
|
||||||
case 0x9018:
|
case 0x9018:
|
||||||
|
case 0xA704:
|
||||||
|
case 0x1200:
|
||||||
if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
|
if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
|
||||||
hif_dev->fw_name = FIRMWARE_AR7010_1_1;
|
hif_dev->fw_name = FIRMWARE_AR7010_1_1;
|
||||||
else
|
else
|
||||||
|
@ -249,6 +249,8 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid)
|
|||||||
case 0x7010:
|
case 0x7010:
|
||||||
case 0x7015:
|
case 0x7015:
|
||||||
case 0x9018:
|
case 0x9018:
|
||||||
|
case 0xA704:
|
||||||
|
case 0x1200:
|
||||||
priv->htc->credits = 45;
|
priv->htc->credits = 45;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -121,7 +121,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb)
|
|||||||
tx_hdr.data_type = ATH9K_HTC_NORMAL;
|
tx_hdr.data_type = ATH9K_HTC_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ieee80211_is_data(fc)) {
|
if (ieee80211_is_data_qos(fc)) {
|
||||||
qc = ieee80211_get_qos_ctl(hdr);
|
qc = ieee80211_get_qos_ctl(hdr);
|
||||||
tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
|
tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
|
||||||
}
|
}
|
||||||
|
@ -817,8 +817,6 @@ void ath9k_deinit_device(struct ath_softc *sc)
|
|||||||
|
|
||||||
ath9k_ps_wakeup(sc);
|
ath9k_ps_wakeup(sc);
|
||||||
|
|
||||||
pm_qos_remove_request(&ath9k_pm_qos_req);
|
|
||||||
|
|
||||||
wiphy_rfkill_stop_polling(sc->hw->wiphy);
|
wiphy_rfkill_stop_polling(sc->hw->wiphy);
|
||||||
ath_deinit_leds(sc);
|
ath_deinit_leds(sc);
|
||||||
|
|
||||||
@ -832,6 +830,7 @@ void ath9k_deinit_device(struct ath_softc *sc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ieee80211_unregister_hw(hw);
|
ieee80211_unregister_hw(hw);
|
||||||
|
pm_qos_remove_request(&ath9k_pm_qos_req);
|
||||||
ath_rx_cleanup(sc);
|
ath_rx_cleanup(sc);
|
||||||
ath_tx_cleanup(sc);
|
ath_tx_cleanup(sc);
|
||||||
ath9k_deinit_softc(sc);
|
ath9k_deinit_softc(sc);
|
||||||
|
@ -866,7 +866,13 @@
|
|||||||
#define AR_DEVID_7010(_ah) \
|
#define AR_DEVID_7010(_ah) \
|
||||||
(((_ah)->hw_version.devid == 0x7010) || \
|
(((_ah)->hw_version.devid == 0x7010) || \
|
||||||
((_ah)->hw_version.devid == 0x7015) || \
|
((_ah)->hw_version.devid == 0x7015) || \
|
||||||
((_ah)->hw_version.devid == 0x9018))
|
((_ah)->hw_version.devid == 0x9018) || \
|
||||||
|
((_ah)->hw_version.devid == 0xA704) || \
|
||||||
|
((_ah)->hw_version.devid == 0x1200))
|
||||||
|
|
||||||
|
#define AR9287_HTC_DEVID(_ah) \
|
||||||
|
(((_ah)->hw_version.devid == 0x7015) || \
|
||||||
|
((_ah)->hw_version.devid == 0x1200))
|
||||||
|
|
||||||
#define AR_RADIO_SREV_MAJOR 0xf0
|
#define AR_RADIO_SREV_MAJOR 0xf0
|
||||||
#define AR_RAD5133_SREV_MAJOR 0xc0
|
#define AR_RAD5133_SREV_MAJOR 0xc0
|
||||||
|
@ -553,12 +553,12 @@ static int carl9170_usb_flush(struct ar9170 *ar)
|
|||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, HZ);
|
ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
err = -ETIMEDOUT;
|
err = -ETIMEDOUT;
|
||||||
|
|
||||||
/* lets wait a while until the tx - queues are dried out */
|
/* lets wait a while until the tx - queues are dried out */
|
||||||
ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, HZ);
|
ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
err = -ETIMEDOUT;
|
err = -ETIMEDOUT;
|
||||||
|
|
||||||
|
@ -1355,7 +1355,7 @@ enum wiphy_flags {
|
|||||||
WIPHY_FLAG_4ADDR_AP = BIT(5),
|
WIPHY_FLAG_4ADDR_AP = BIT(5),
|
||||||
WIPHY_FLAG_4ADDR_STATION = BIT(6),
|
WIPHY_FLAG_4ADDR_STATION = BIT(6),
|
||||||
WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
|
WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
|
||||||
WIPHY_FLAG_IBSS_RSN = BIT(7),
|
WIPHY_FLAG_IBSS_RSN = BIT(8),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mac_address {
|
struct mac_address {
|
||||||
|
@ -44,6 +44,38 @@ rdev_freq_to_chan(struct cfg80211_registered_device *rdev,
|
|||||||
return chan;
|
return chan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool can_beacon_sec_chan(struct wiphy *wiphy,
|
||||||
|
struct ieee80211_channel *chan,
|
||||||
|
enum nl80211_channel_type channel_type)
|
||||||
|
{
|
||||||
|
struct ieee80211_channel *sec_chan;
|
||||||
|
int diff;
|
||||||
|
|
||||||
|
switch (channel_type) {
|
||||||
|
case NL80211_CHAN_HT40PLUS:
|
||||||
|
diff = 20;
|
||||||
|
break;
|
||||||
|
case NL80211_CHAN_HT40MINUS:
|
||||||
|
diff = -20;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sec_chan = ieee80211_get_channel(wiphy, chan->center_freq + diff);
|
||||||
|
if (!sec_chan)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* we'll need a DFS capability later */
|
||||||
|
if (sec_chan->flags & (IEEE80211_CHAN_DISABLED |
|
||||||
|
IEEE80211_CHAN_PASSIVE_SCAN |
|
||||||
|
IEEE80211_CHAN_NO_IBSS |
|
||||||
|
IEEE80211_CHAN_RADAR))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
|
int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
|
||||||
struct wireless_dev *wdev, int freq,
|
struct wireless_dev *wdev, int freq,
|
||||||
enum nl80211_channel_type channel_type)
|
enum nl80211_channel_type channel_type)
|
||||||
@ -68,6 +100,28 @@ int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
|
|||||||
if (!chan)
|
if (!chan)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* Both channels should be able to initiate communication */
|
||||||
|
if (wdev && (wdev->iftype == NL80211_IFTYPE_ADHOC ||
|
||||||
|
wdev->iftype == NL80211_IFTYPE_AP ||
|
||||||
|
wdev->iftype == NL80211_IFTYPE_AP_VLAN ||
|
||||||
|
wdev->iftype == NL80211_IFTYPE_MESH_POINT ||
|
||||||
|
wdev->iftype == NL80211_IFTYPE_P2P_GO)) {
|
||||||
|
switch (channel_type) {
|
||||||
|
case NL80211_CHAN_HT40PLUS:
|
||||||
|
case NL80211_CHAN_HT40MINUS:
|
||||||
|
if (!can_beacon_sec_chan(&rdev->wiphy, chan,
|
||||||
|
channel_type)) {
|
||||||
|
printk(KERN_DEBUG
|
||||||
|
"cfg80211: Secondary channel not "
|
||||||
|
"allowed to initiate communication\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result = rdev->ops->set_channel(&rdev->wiphy,
|
result = rdev->ops->set_channel(&rdev->wiphy,
|
||||||
wdev ? wdev->netdev : NULL,
|
wdev ? wdev->netdev : NULL,
|
||||||
chan, channel_type);
|
chan, channel_type);
|
||||||
|
Loading…
Reference in New Issue
Block a user