Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits) cxgb3: fix premature page unmap ibm_newemac: Fix EMACx_TRTR[TRT] bit shifts vlan: Fix register_vlan_dev() error path gro: Fix illegal merging of trailer trash sungem: Fix Serdes detection. net: fix mdio section mismatch warning ppp: fix BUG on non-linear SKB (multilink receive) ixgbe: Fixing EEH handler to handle more than one error net: Fix the rollback test in dev_change_name() Revert "isdn: isdn_ppp: Use SKB list facilities instead of home-grown implementation." TI Davinci EMAC : Fix Console Hang when bringing the interface down smsc911x: Fix Console Hang when bringing the interface down. mISDN: fix error return in HFCmulti_init() forcedeth: mac address fix r6040: fix version printing Bluetooth: Fix regression with L2CAP configuration in Basic Mode Bluetooth: Select Basic Mode as default for SOCK_SEQPACKET Bluetooth: Set general bonding security for ACL by default r8169: Fix receive buffer length when MTU is between 1515 and 1536 can: add the missing netlink get_xstats_size callback ...
This commit is contained in:
@@ -1125,7 +1125,6 @@ ath5k_mode_setup(struct ath5k_softc *sc)
|
||||
/* configure operational mode */
|
||||
ath5k_hw_set_opmode(ah);
|
||||
|
||||
ath5k_hw_set_mcast_filter(ah, 0, 0);
|
||||
ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "RX filter 0x%x\n", rfilt);
|
||||
}
|
||||
|
||||
|
@@ -63,12 +63,16 @@ static const struct pci_device_id ath5k_led_devices[] = {
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0422), ATH_LED(1, 1) },
|
||||
/* E-machines E510 (tuliom@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0428), ATH_LED(3, 0) },
|
||||
/* BenQ Joybook R55v (nowymarluk@wp.pl) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0100), ATH_LED(1, 0) },
|
||||
/* Acer Extensa 5620z (nekoreeve@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0105), ATH_LED(3, 0) },
|
||||
/* Fukato Datacask Jupiter 1014a (mrb74@gmx.at) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_AZWAVE, 0x1026), ATH_LED(3, 0) },
|
||||
/* IBM ThinkPad AR5BXB6 (legovini@spiro.fisica.unipd.it) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_IBM, 0x058a), ATH_LED(1, 0) },
|
||||
/* HP Compaq CQ60-206US (ddreggors@jumptv.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137a), ATH_LED(3, 1) },
|
||||
/* HP Compaq C700 (nitrousnrg@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) },
|
||||
/* IBM-specific AR5212 (all others) */
|
||||
|
@@ -4521,9 +4521,8 @@ static int b43_op_beacon_set_tim(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct b43_wl *wl = hw_to_b43_wl(hw);
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
/* FIXME: add locking */
|
||||
b43_update_templates(wl);
|
||||
mutex_unlock(&wl->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -6029,7 +6029,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
||||
struct ipw2100_priv *priv;
|
||||
struct net_device *dev;
|
||||
|
||||
dev = alloc_ieee80211(sizeof(struct ipw2100_priv), 0);
|
||||
dev = alloc_ieee80211(sizeof(struct ipw2100_priv));
|
||||
if (!dev)
|
||||
return NULL;
|
||||
priv = libipw_priv(dev);
|
||||
@@ -6342,7 +6342,7 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
|
||||
sysfs_remove_group(&pci_dev->dev.kobj,
|
||||
&ipw2100_attribute_group);
|
||||
|
||||
free_ieee80211(dev, 0);
|
||||
free_ieee80211(dev);
|
||||
pci_set_drvdata(pci_dev, NULL);
|
||||
}
|
||||
|
||||
@@ -6400,7 +6400,7 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
|
||||
if (dev->base_addr)
|
||||
iounmap((void __iomem *)dev->base_addr);
|
||||
|
||||
free_ieee80211(dev, 0);
|
||||
free_ieee80211(dev);
|
||||
}
|
||||
|
||||
pci_release_regions(pci_dev);
|
||||
|
@@ -104,25 +104,6 @@ static int antenna = CFG_SYS_ANTENNA_BOTH;
|
||||
static int rtap_iface = 0; /* def: 0 -- do not create rtap interface */
|
||||
#endif
|
||||
|
||||
static struct ieee80211_rate ipw2200_rates[] = {
|
||||
{ .bitrate = 10 },
|
||||
{ .bitrate = 20, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
{ .bitrate = 55, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
{ .bitrate = 110, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
{ .bitrate = 60 },
|
||||
{ .bitrate = 90 },
|
||||
{ .bitrate = 120 },
|
||||
{ .bitrate = 180 },
|
||||
{ .bitrate = 240 },
|
||||
{ .bitrate = 360 },
|
||||
{ .bitrate = 480 },
|
||||
{ .bitrate = 540 }
|
||||
};
|
||||
|
||||
#define ipw2200_a_rates (ipw2200_rates + 4)
|
||||
#define ipw2200_num_a_rates 8
|
||||
#define ipw2200_bg_rates (ipw2200_rates + 0)
|
||||
#define ipw2200_num_bg_rates 12
|
||||
|
||||
#ifdef CONFIG_IPW2200_QOS
|
||||
static int qos_enable = 0;
|
||||
@@ -8674,6 +8655,24 @@ static int ipw_sw_reset(struct ipw_priv *priv, int option)
|
||||
*
|
||||
*/
|
||||
|
||||
static int ipw_wx_get_name(struct net_device *dev,
|
||||
struct iw_request_info *info,
|
||||
union iwreq_data *wrqu, char *extra)
|
||||
{
|
||||
struct ipw_priv *priv = libipw_priv(dev);
|
||||
mutex_lock(&priv->mutex);
|
||||
if (priv->status & STATUS_RF_KILL_MASK)
|
||||
strcpy(wrqu->name, "radio off");
|
||||
else if (!(priv->status & STATUS_ASSOCIATED))
|
||||
strcpy(wrqu->name, "unassociated");
|
||||
else
|
||||
snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11%c",
|
||||
ipw_modes[priv->assoc_request.ieee_mode]);
|
||||
IPW_DEBUG_WX("Name: %s\n", wrqu->name);
|
||||
mutex_unlock(&priv->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ipw_set_channel(struct ipw_priv *priv, u8 channel)
|
||||
{
|
||||
if (channel == 0) {
|
||||
@@ -9973,7 +9972,7 @@ static int ipw_wx_sw_reset(struct net_device *dev,
|
||||
/* Rebase the WE IOCTLs to zero for the handler array */
|
||||
#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT]
|
||||
static iw_handler ipw_wx_handlers[] = {
|
||||
IW_IOCTL(SIOCGIWNAME) = (iw_handler) cfg80211_wext_giwname,
|
||||
IW_IOCTL(SIOCGIWNAME) = ipw_wx_get_name,
|
||||
IW_IOCTL(SIOCSIWFREQ) = ipw_wx_set_freq,
|
||||
IW_IOCTL(SIOCGIWFREQ) = ipw_wx_get_freq,
|
||||
IW_IOCTL(SIOCSIWMODE) = ipw_wx_set_mode,
|
||||
@@ -11417,100 +11416,16 @@ static void ipw_bg_down(struct work_struct *work)
|
||||
/* Called by register_netdev() */
|
||||
static int ipw_net_init(struct net_device *dev)
|
||||
{
|
||||
int i, rc = 0;
|
||||
struct ipw_priv *priv = libipw_priv(dev);
|
||||
const struct libipw_geo *geo = libipw_get_geo(priv->ieee);
|
||||
struct wireless_dev *wdev = &priv->ieee->wdev;
|
||||
mutex_lock(&priv->mutex);
|
||||
|
||||
if (ipw_up(priv)) {
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
mutex_unlock(&priv->mutex);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN);
|
||||
|
||||
/* fill-out priv->ieee->bg_band */
|
||||
if (geo->bg_channels) {
|
||||
struct ieee80211_supported_band *bg_band = &priv->ieee->bg_band;
|
||||
|
||||
bg_band->band = IEEE80211_BAND_2GHZ;
|
||||
bg_band->n_channels = geo->bg_channels;
|
||||
bg_band->channels =
|
||||
kzalloc(geo->bg_channels *
|
||||
sizeof(struct ieee80211_channel), GFP_KERNEL);
|
||||
/* translate geo->bg to bg_band.channels */
|
||||
for (i = 0; i < geo->bg_channels; i++) {
|
||||
bg_band->channels[i].band = IEEE80211_BAND_2GHZ;
|
||||
bg_band->channels[i].center_freq = geo->bg[i].freq;
|
||||
bg_band->channels[i].hw_value = geo->bg[i].channel;
|
||||
bg_band->channels[i].max_power = geo->bg[i].max_power;
|
||||
if (geo->bg[i].flags & LIBIPW_CH_PASSIVE_ONLY)
|
||||
bg_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_PASSIVE_SCAN;
|
||||
if (geo->bg[i].flags & LIBIPW_CH_NO_IBSS)
|
||||
bg_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_NO_IBSS;
|
||||
if (geo->bg[i].flags & LIBIPW_CH_RADAR_DETECT)
|
||||
bg_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_RADAR;
|
||||
/* No equivalent for LIBIPW_CH_80211H_RULES,
|
||||
LIBIPW_CH_UNIFORM_SPREADING, or
|
||||
LIBIPW_CH_B_ONLY... */
|
||||
}
|
||||
/* point at bitrate info */
|
||||
bg_band->bitrates = ipw2200_bg_rates;
|
||||
bg_band->n_bitrates = ipw2200_num_bg_rates;
|
||||
|
||||
wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = bg_band;
|
||||
}
|
||||
|
||||
/* fill-out priv->ieee->a_band */
|
||||
if (geo->a_channels) {
|
||||
struct ieee80211_supported_band *a_band = &priv->ieee->a_band;
|
||||
|
||||
a_band->band = IEEE80211_BAND_5GHZ;
|
||||
a_band->n_channels = geo->a_channels;
|
||||
a_band->channels =
|
||||
kzalloc(geo->a_channels *
|
||||
sizeof(struct ieee80211_channel), GFP_KERNEL);
|
||||
/* translate geo->bg to a_band.channels */
|
||||
for (i = 0; i < geo->a_channels; i++) {
|
||||
a_band->channels[i].band = IEEE80211_BAND_2GHZ;
|
||||
a_band->channels[i].center_freq = geo->a[i].freq;
|
||||
a_band->channels[i].hw_value = geo->a[i].channel;
|
||||
a_band->channels[i].max_power = geo->a[i].max_power;
|
||||
if (geo->a[i].flags & LIBIPW_CH_PASSIVE_ONLY)
|
||||
a_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_PASSIVE_SCAN;
|
||||
if (geo->a[i].flags & LIBIPW_CH_NO_IBSS)
|
||||
a_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_NO_IBSS;
|
||||
if (geo->a[i].flags & LIBIPW_CH_RADAR_DETECT)
|
||||
a_band->channels[i].flags |=
|
||||
IEEE80211_CHAN_RADAR;
|
||||
/* No equivalent for LIBIPW_CH_80211H_RULES,
|
||||
LIBIPW_CH_UNIFORM_SPREADING, or
|
||||
LIBIPW_CH_B_ONLY... */
|
||||
}
|
||||
/* point at bitrate info */
|
||||
a_band->bitrates = ipw2200_a_rates;
|
||||
a_band->n_bitrates = ipw2200_num_a_rates;
|
||||
|
||||
wdev->wiphy->bands[IEEE80211_BAND_5GHZ] = a_band;
|
||||
}
|
||||
|
||||
set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev);
|
||||
|
||||
/* With that information in place, we can now register the wiphy... */
|
||||
if (wiphy_register(wdev->wiphy)) {
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&priv->mutex);
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* PCI driver stuff */
|
||||
@@ -11641,7 +11556,7 @@ static int ipw_prom_alloc(struct ipw_priv *priv)
|
||||
if (priv->prom_net_dev)
|
||||
return -EPERM;
|
||||
|
||||
priv->prom_net_dev = alloc_ieee80211(sizeof(struct ipw_prom_priv), 1);
|
||||
priv->prom_net_dev = alloc_ieee80211(sizeof(struct ipw_prom_priv));
|
||||
if (priv->prom_net_dev == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -11660,7 +11575,7 @@ static int ipw_prom_alloc(struct ipw_priv *priv)
|
||||
|
||||
rc = register_netdev(priv->prom_net_dev);
|
||||
if (rc) {
|
||||
free_ieee80211(priv->prom_net_dev, 1);
|
||||
free_ieee80211(priv->prom_net_dev);
|
||||
priv->prom_net_dev = NULL;
|
||||
return rc;
|
||||
}
|
||||
@@ -11674,7 +11589,7 @@ static void ipw_prom_free(struct ipw_priv *priv)
|
||||
return;
|
||||
|
||||
unregister_netdev(priv->prom_net_dev);
|
||||
free_ieee80211(priv->prom_net_dev, 1);
|
||||
free_ieee80211(priv->prom_net_dev);
|
||||
|
||||
priv->prom_net_dev = NULL;
|
||||
}
|
||||
@@ -11702,7 +11617,7 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
|
||||
struct ipw_priv *priv;
|
||||
int i;
|
||||
|
||||
net_dev = alloc_ieee80211(sizeof(struct ipw_priv), 0);
|
||||
net_dev = alloc_ieee80211(sizeof(struct ipw_priv));
|
||||
if (net_dev == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto out;
|
||||
@@ -11850,7 +11765,7 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
|
||||
pci_disable_device(pdev);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
out_free_ieee80211:
|
||||
free_ieee80211(priv->net_dev, 0);
|
||||
free_ieee80211(priv->net_dev);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
@@ -11917,7 +11832,7 @@ static void __devexit ipw_pci_remove(struct pci_dev *pdev)
|
||||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
free_ieee80211(priv->net_dev, 0);
|
||||
free_ieee80211(priv->net_dev);
|
||||
free_firmware();
|
||||
}
|
||||
|
||||
|
@@ -31,7 +31,6 @@
|
||||
#include <linux/ieee80211.h>
|
||||
|
||||
#include <net/lib80211.h>
|
||||
#include <net/cfg80211.h>
|
||||
|
||||
#define LIBIPW_VERSION "git-1.1.13"
|
||||
|
||||
@@ -784,15 +783,12 @@ struct libipw_geo {
|
||||
|
||||
struct libipw_device {
|
||||
struct net_device *dev;
|
||||
struct wireless_dev wdev;
|
||||
struct libipw_security sec;
|
||||
|
||||
/* Bookkeeping structures */
|
||||
struct libipw_stats ieee_stats;
|
||||
|
||||
struct libipw_geo geo;
|
||||
struct ieee80211_supported_band bg_band;
|
||||
struct ieee80211_supported_band a_band;
|
||||
|
||||
/* Probe / Beacon management */
|
||||
struct list_head network_free_list;
|
||||
@@ -1018,8 +1014,8 @@ static inline int libipw_is_cck_rate(u8 rate)
|
||||
}
|
||||
|
||||
/* ieee80211.c */
|
||||
extern void free_ieee80211(struct net_device *dev, int monitor);
|
||||
extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor);
|
||||
extern void free_ieee80211(struct net_device *dev);
|
||||
extern struct net_device *alloc_ieee80211(int sizeof_priv);
|
||||
extern int libipw_change_mtu(struct net_device *dev, int new_mtu);
|
||||
|
||||
extern void libipw_networks_age(struct libipw_device *ieee,
|
||||
|
@@ -62,9 +62,6 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION);
|
||||
MODULE_AUTHOR(DRV_COPYRIGHT);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
struct cfg80211_ops libipw_config_ops = { };
|
||||
void *libipw_wiphy_privid = &libipw_wiphy_privid;
|
||||
|
||||
static int libipw_networks_allocate(struct libipw_device *ieee)
|
||||
{
|
||||
if (ieee->networks)
|
||||
@@ -143,7 +140,7 @@ int libipw_change_mtu(struct net_device *dev, int new_mtu)
|
||||
}
|
||||
EXPORT_SYMBOL(libipw_change_mtu);
|
||||
|
||||
struct net_device *alloc_ieee80211(int sizeof_priv, int monitor)
|
||||
struct net_device *alloc_ieee80211(int sizeof_priv)
|
||||
{
|
||||
struct libipw_device *ieee;
|
||||
struct net_device *dev;
|
||||
@@ -160,31 +157,10 @@ struct net_device *alloc_ieee80211(int sizeof_priv, int monitor)
|
||||
|
||||
ieee->dev = dev;
|
||||
|
||||
if (!monitor) {
|
||||
ieee->wdev.wiphy = wiphy_new(&libipw_config_ops, 0);
|
||||
if (!ieee->wdev.wiphy) {
|
||||
LIBIPW_ERROR("Unable to allocate wiphy.\n");
|
||||
goto failed_free_netdev;
|
||||
}
|
||||
|
||||
ieee->dev->ieee80211_ptr = &ieee->wdev;
|
||||
ieee->wdev.iftype = NL80211_IFTYPE_STATION;
|
||||
|
||||
/* Fill-out wiphy structure bits we know... Not enough info
|
||||
here to call set_wiphy_dev or set MAC address or channel info
|
||||
-- have to do that in ->ndo_init... */
|
||||
ieee->wdev.wiphy->privid = libipw_wiphy_privid;
|
||||
|
||||
ieee->wdev.wiphy->max_scan_ssids = 1;
|
||||
ieee->wdev.wiphy->max_scan_ie_len = 0;
|
||||
ieee->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
|
||||
| BIT(NL80211_IFTYPE_ADHOC);
|
||||
}
|
||||
|
||||
err = libipw_networks_allocate(ieee);
|
||||
if (err) {
|
||||
LIBIPW_ERROR("Unable to allocate beacon storage: %d\n", err);
|
||||
goto failed_free_wiphy;
|
||||
goto failed_free_netdev;
|
||||
}
|
||||
libipw_networks_initialize(ieee);
|
||||
|
||||
@@ -217,31 +193,19 @@ struct net_device *alloc_ieee80211(int sizeof_priv, int monitor)
|
||||
|
||||
return dev;
|
||||
|
||||
failed_free_wiphy:
|
||||
if (!monitor)
|
||||
wiphy_free(ieee->wdev.wiphy);
|
||||
failed_free_netdev:
|
||||
free_netdev(dev);
|
||||
failed:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void free_ieee80211(struct net_device *dev, int monitor)
|
||||
void free_ieee80211(struct net_device *dev)
|
||||
{
|
||||
struct libipw_device *ieee = netdev_priv(dev);
|
||||
|
||||
lib80211_crypt_info_free(&ieee->crypt_info);
|
||||
|
||||
libipw_networks_free(ieee);
|
||||
|
||||
/* free cfg80211 resources */
|
||||
if (!monitor) {
|
||||
wiphy_unregister(ieee->wdev.wiphy);
|
||||
kfree(ieee->a_band.channels);
|
||||
kfree(ieee->bg_band.channels);
|
||||
wiphy_free(ieee->wdev.wiphy);
|
||||
}
|
||||
|
||||
free_netdev(dev);
|
||||
}
|
||||
|
||||
|
@@ -161,5 +161,6 @@ struct iwl_cfg iwl1000_bgn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_1000,
|
||||
.shadow_ram_support = false,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
|
@@ -175,6 +175,7 @@ struct iwl_cfg iwl6000h_2agn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||
.shadow_ram_support = true,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -198,6 +199,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||
.shadow_ram_support = true,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
struct iwl_cfg iwl6050_2agn_cfg = {
|
||||
@@ -218,6 +220,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||
.shadow_ram_support = true,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
struct iwl_cfg iwl6000_3agn_cfg = {
|
||||
@@ -238,6 +241,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||
.shadow_ram_support = true,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
struct iwl_cfg iwl6050_3agn_cfg = {
|
||||
@@ -258,6 +262,7 @@ struct iwl_cfg iwl6050_3agn_cfg = {
|
||||
.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
|
||||
.shadow_ram_support = true,
|
||||
.ht_greenfield_support = true,
|
||||
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||
};
|
||||
|
||||
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
|
||||
|
@@ -418,6 +418,15 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid,
|
||||
else if (tid == IWL_AGG_ALL_TID)
|
||||
for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
|
||||
rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
|
||||
if (priv->cfg->use_rts_for_ht) {
|
||||
/*
|
||||
* switch to RTS/CTS if it is the prefer protection method
|
||||
* for HT traffic
|
||||
*/
|
||||
IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
|
||||
priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
|
||||
iwlcore_commit_rxon(priv);
|
||||
}
|
||||
}
|
||||
|
||||
static inline int get_num_of_ant_from_rate(u32 rate_n_flags)
|
||||
|
@@ -116,9 +116,6 @@ int iwl_commit_rxon(struct iwl_priv *priv)
|
||||
|
||||
/* always get timestamp with Rx frame */
|
||||
priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
|
||||
/* allow CTS-to-self if possible. this is relevant only for
|
||||
* 5000, but will not damage 4965 */
|
||||
priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
|
||||
|
||||
ret = iwl_check_rxon_cmd(priv);
|
||||
if (ret) {
|
||||
@@ -218,6 +215,13 @@ int iwl_commit_rxon(struct iwl_priv *priv)
|
||||
"Could not send WEP static key.\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* allow CTS-to-self if possible for new association.
|
||||
* this is relevant only for 5000 series and up,
|
||||
* but will not damage 4965
|
||||
*/
|
||||
priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
|
||||
|
||||
/* Apply the new configuration
|
||||
* RXON assoc doesn't clear the station table in uCode,
|
||||
*/
|
||||
|
@@ -213,6 +213,7 @@ struct iwl_mod_params {
|
||||
* @pa_type: used by 6000 series only to identify the type of Power Amplifier
|
||||
* @max_ll_items: max number of OTP blocks
|
||||
* @shadow_ram_support: shadow support for OTP memory
|
||||
* @use_rts_for_ht: use rts/cts protection for HT traffic
|
||||
*
|
||||
* We enable the driver to be backward compatible wrt API version. The
|
||||
* driver specifies which APIs it supports (with @ucode_api_max being the
|
||||
@@ -255,6 +256,7 @@ struct iwl_cfg {
|
||||
const bool shadow_ram_support;
|
||||
const bool ht_greenfield_support;
|
||||
const bool broken_powersave;
|
||||
bool use_rts_for_ht;
|
||||
};
|
||||
|
||||
/***************************
|
||||
|
@@ -169,16 +169,19 @@ static int lbs_ethtool_set_wol(struct net_device *dev,
|
||||
struct lbs_private *priv = dev->ml_priv;
|
||||
uint32_t criteria = 0;
|
||||
|
||||
if (priv->wol_criteria == 0xffffffff && wol->wolopts)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (wol->wolopts & ~(WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (wol->wolopts & WAKE_UCAST) criteria |= EHS_WAKE_ON_UNICAST_DATA;
|
||||
if (wol->wolopts & WAKE_MCAST) criteria |= EHS_WAKE_ON_MULTICAST_DATA;
|
||||
if (wol->wolopts & WAKE_BCAST) criteria |= EHS_WAKE_ON_BROADCAST_DATA;
|
||||
if (wol->wolopts & WAKE_PHY) criteria |= EHS_WAKE_ON_MAC_EVENT;
|
||||
if (wol->wolopts & WAKE_UCAST)
|
||||
criteria |= EHS_WAKE_ON_UNICAST_DATA;
|
||||
if (wol->wolopts & WAKE_MCAST)
|
||||
criteria |= EHS_WAKE_ON_MULTICAST_DATA;
|
||||
if (wol->wolopts & WAKE_BCAST)
|
||||
criteria |= EHS_WAKE_ON_BROADCAST_DATA;
|
||||
if (wol->wolopts & WAKE_PHY)
|
||||
criteria |= EHS_WAKE_ON_MAC_EVENT;
|
||||
if (wol->wolopts == 0)
|
||||
criteria |= EHS_REMOVE_WAKEUP;
|
||||
|
||||
return lbs_host_sleep_cfg(priv, criteria, (struct wol_config *)NULL);
|
||||
}
|
||||
|
@@ -426,12 +426,16 @@ static const char p54u_romboot_3887[] = "~~~~";
|
||||
static int p54u_firmware_reset_3887(struct ieee80211_hw *dev)
|
||||
{
|
||||
struct p54u_priv *priv = dev->priv;
|
||||
u8 buf[4];
|
||||
u8 *buf;
|
||||
int ret;
|
||||
|
||||
memcpy(&buf, p54u_romboot_3887, sizeof(buf));
|
||||
buf = kmalloc(4, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
memcpy(buf, p54u_romboot_3887, 4);
|
||||
ret = p54u_bulk_msg(priv, P54U_PIPE_DATA,
|
||||
buf, sizeof(buf));
|
||||
buf, 4);
|
||||
kfree(buf);
|
||||
if (ret)
|
||||
dev_err(&priv->udev->dev, "(p54usb) unable to jump to "
|
||||
"boot ROM (%d)!\n", ret);
|
||||
|
@@ -18,6 +18,7 @@
|
||||
#include <net/mac80211.h>
|
||||
|
||||
#include "rtl8187.h"
|
||||
#include "rtl8187_rfkill.h"
|
||||
|
||||
static bool rtl8187_is_radio_enabled(struct rtl8187_priv *priv)
|
||||
{
|
||||
|
Reference in New Issue
Block a user