mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (21 commits) Fix build break in tsi108.c qeth: remove header_ops bug ir-functions.c:(.text+0xbce18): undefined reference to `input_event' NAPI: kconfig prompt and deleted doc file phy/bitbang: missing MODULE_LICENSE DM9000 initialization fix [PATCH] rt2x00: Add new rt73usb USB ID [PATCH] rt2x00: Fix residual check in PLCP calculations. [PATCH] iwlwifi: Fix rate setting in probe request for HW sacn [PATCH] b43: Make b43_stop() static [PATCH] drivers/net/wireless/b43/main.c: fix an uninitialized variable [PATCH] iwlwifi: set correct base rate for A band in rs_dbgfs_set_mcs [PATCH] zd1211rw, fix oops when ejecting install media [PATCH] b43legacy: Fix potential return of uninitialized variable [PATCH] iwl4965-base.c: fix off-by-one errors [PATCH] p54: Make filter configuration atomic [PATCH] rtl8187: remove NICMAC setting in configure_filters callback [PATCH] janitorial: fix all double includes in drivers/net/wireless [PATCH] rtl8187: Fix more frag bit checking, rts duration calc [PATCH] ipw2100: send WEXT scan events ...
This commit is contained in:
commit
9abbf7d028
23 changed files with 158 additions and 133 deletions
|
@ -1293,9 +1293,6 @@ config PCNET32_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config AMD8111_ETH
|
config AMD8111_ETH
|
||||||
|
@ -1313,7 +1310,7 @@ config AMD8111_ETH
|
||||||
will be called amd8111e.
|
will be called amd8111e.
|
||||||
|
|
||||||
config AMD8111E_NAPI
|
config AMD8111E_NAPI
|
||||||
bool "Enable NAPI support"
|
bool "Use RX polling (NAPI)"
|
||||||
depends on AMD8111_ETH
|
depends on AMD8111_ETH
|
||||||
help
|
help
|
||||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||||
|
@ -1324,9 +1321,6 @@ config AMD8111E_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config ADAPTEC_STARFIRE
|
config ADAPTEC_STARFIRE
|
||||||
|
@ -1355,9 +1349,6 @@ config ADAPTEC_STARFIRE_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config AC3200
|
config AC3200
|
||||||
|
@ -1431,7 +1422,7 @@ config FORCEDETH
|
||||||
called forcedeth.
|
called forcedeth.
|
||||||
|
|
||||||
config FORCEDETH_NAPI
|
config FORCEDETH_NAPI
|
||||||
bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)"
|
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||||
depends on FORCEDETH && EXPERIMENTAL
|
depends on FORCEDETH && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||||
|
@ -1442,9 +1433,6 @@ config FORCEDETH_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config CS89x0
|
config CS89x0
|
||||||
|
@ -1756,9 +1744,6 @@ config VIA_RHINE_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
config LAN_SAA9730
|
config LAN_SAA9730
|
||||||
bool "Philips SAA9730 Ethernet support"
|
bool "Philips SAA9730 Ethernet support"
|
||||||
depends on NET_PCI && PCI && MIPS_ATLAS
|
depends on NET_PCI && PCI && MIPS_ATLAS
|
||||||
|
@ -2003,9 +1988,6 @@ config E1000_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config E1000_DISABLE_PACKET_SPLIT
|
config E1000_DISABLE_PACKET_SPLIT
|
||||||
|
@ -2099,7 +2081,7 @@ config R8169
|
||||||
will be called r8169. This is recommended.
|
will be called r8169. This is recommended.
|
||||||
|
|
||||||
config R8169_NAPI
|
config R8169_NAPI
|
||||||
bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)"
|
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||||
depends on R8169 && EXPERIMENTAL
|
depends on R8169 && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||||
|
@ -2110,9 +2092,6 @@ config R8169_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config R8169_VLAN
|
config R8169_VLAN
|
||||||
|
@ -2364,7 +2343,7 @@ config GIANFAR
|
||||||
and MPC86xx family of chips, and the FEC on the 8540.
|
and MPC86xx family of chips, and the FEC on the 8540.
|
||||||
|
|
||||||
config GFAR_NAPI
|
config GFAR_NAPI
|
||||||
bool "NAPI Support"
|
bool "Use Rx Polling (NAPI)"
|
||||||
depends on GIANFAR
|
depends on GIANFAR
|
||||||
|
|
||||||
config UCC_GETH
|
config UCC_GETH
|
||||||
|
@ -2376,7 +2355,7 @@ config UCC_GETH
|
||||||
which is available on some Freescale SOCs.
|
which is available on some Freescale SOCs.
|
||||||
|
|
||||||
config UGETH_NAPI
|
config UGETH_NAPI
|
||||||
bool "NAPI Support"
|
bool "Use Rx Polling (NAPI)"
|
||||||
depends on UCC_GETH
|
depends on UCC_GETH
|
||||||
|
|
||||||
config UGETH_MAGIC_PACKET
|
config UGETH_MAGIC_PACKET
|
||||||
|
@ -2494,7 +2473,7 @@ config CHELSIO_T3
|
||||||
|
|
||||||
config EHEA
|
config EHEA
|
||||||
tristate "eHEA Ethernet support"
|
tristate "eHEA Ethernet support"
|
||||||
depends on IBMEBUS
|
depends on IBMEBUS && INET
|
||||||
select INET_LRO
|
select INET_LRO
|
||||||
---help---
|
---help---
|
||||||
This driver supports the IBM pSeries eHEA ethernet adapter.
|
This driver supports the IBM pSeries eHEA ethernet adapter.
|
||||||
|
@ -2559,9 +2538,6 @@ config IXGB_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config S2IO
|
config S2IO
|
||||||
|
@ -2584,14 +2560,11 @@ config S2IO_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config MYRI10GE
|
config MYRI10GE
|
||||||
tristate "Myricom Myri-10G Ethernet support"
|
tristate "Myricom Myri-10G Ethernet support"
|
||||||
depends on PCI
|
depends on PCI && INET
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
select CRC32
|
select CRC32
|
||||||
select INET_LRO
|
select INET_LRO
|
||||||
|
|
|
@ -542,7 +542,8 @@ dm9000_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
if (id_val != DM9000_ID) {
|
if (id_val != DM9000_ID) {
|
||||||
printk("%s: wrong id: 0x%08x\n", CARDNAME, id_val);
|
printk("%s: wrong id: 0x%08x\n", CARDNAME, id_val);
|
||||||
goto release;
|
ret = -ENODEV;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* from this point we assume that we have found a DM9000 */
|
/* from this point we assume that we have found a DM9000 */
|
||||||
|
@ -602,8 +603,7 @@ dm9000_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
release:
|
out:
|
||||||
out:
|
|
||||||
printk("%s: not found (%d).\n", CARDNAME, ret);
|
printk("%s: not found (%d).\n", CARDNAME, ret);
|
||||||
|
|
||||||
dm9000_release_board(pdev, db);
|
dm9000_release_board(pdev, db);
|
||||||
|
|
|
@ -185,3 +185,5 @@ void free_mdio_bitbang(struct mii_bus *bus)
|
||||||
module_put(ctrl->ops->owner);
|
module_put(ctrl->ops->owner);
|
||||||
kfree(bus);
|
kfree(bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -1629,7 +1629,7 @@ tsi108_init_one(struct platform_device *pdev)
|
||||||
goto register_fail;
|
goto register_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n"
|
printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n",
|
||||||
dev->name, print_mac(mac, dev->dev_addr));
|
dev->name, print_mac(mac, dev->dev_addr));
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
data->msg_enable = DEBUG;
|
data->msg_enable = DEBUG;
|
||||||
|
|
|
@ -67,7 +67,7 @@ config TULIP_MMIO
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config TULIP_NAPI
|
config TULIP_NAPI
|
||||||
bool "Use NAPI RX polling "
|
bool "Use RX polling (NAPI)"
|
||||||
depends on TULIP
|
depends on TULIP
|
||||||
help
|
help
|
||||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||||
|
@ -78,18 +78,16 @@ config TULIP_NAPI
|
||||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||||
then say Y here.
|
then say Y here.
|
||||||
|
|
||||||
See <file:Documentation/networking/NAPI_HOWTO.txt> for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config TULIP_NAPI_HW_MITIGATION
|
config TULIP_NAPI_HW_MITIGATION
|
||||||
bool "Use Interrupt Mitigation "
|
bool "Use Interrupt Mitigation"
|
||||||
depends on TULIP_NAPI
|
depends on TULIP_NAPI
|
||||||
---help---
|
---help---
|
||||||
Use HW to reduce RX interrupts. Not strict necessary since NAPI reduces
|
Use HW to reduce RX interrupts. Not strictly necessary since NAPI
|
||||||
RX interrupts but itself. Although this reduces RX interrupts even at
|
reduces RX interrupts by itself. Interrupt mitigation reduces RX
|
||||||
low levels traffic at the cost of a small latency.
|
interrupts even at low levels of traffic at the cost of a small
|
||||||
|
latency.
|
||||||
|
|
||||||
If in doubt, say Y.
|
If in doubt, say Y.
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#include "pio.h"
|
#include "pio.h"
|
||||||
#include "sysfs.h"
|
#include "sysfs.h"
|
||||||
#include "xmit.h"
|
#include "xmit.h"
|
||||||
#include "sysfs.h"
|
|
||||||
#include "lo.h"
|
#include "lo.h"
|
||||||
#include "pcmcia.h"
|
#include "pcmcia.h"
|
||||||
|
|
||||||
|
@ -3495,7 +3494,7 @@ static int b43_start(struct ieee80211_hw *hw)
|
||||||
struct b43_wl *wl = hw_to_b43_wl(hw);
|
struct b43_wl *wl = hw_to_b43_wl(hw);
|
||||||
struct b43_wldev *dev = wl->current_dev;
|
struct b43_wldev *dev = wl->current_dev;
|
||||||
int did_init = 0;
|
int did_init = 0;
|
||||||
int err;
|
int err = 0;
|
||||||
|
|
||||||
mutex_lock(&wl->mutex);
|
mutex_lock(&wl->mutex);
|
||||||
|
|
||||||
|
@ -3521,7 +3520,7 @@ static int b43_start(struct ieee80211_hw *hw)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void b43_stop(struct ieee80211_hw *hw)
|
static void b43_stop(struct ieee80211_hw *hw)
|
||||||
{
|
{
|
||||||
struct b43_wl *wl = hw_to_b43_wl(hw);
|
struct b43_wl *wl = hw_to_b43_wl(hw);
|
||||||
struct b43_wldev *dev = wl->current_dev;
|
struct b43_wldev *dev = wl->current_dev;
|
||||||
|
|
|
@ -3306,7 +3306,7 @@ static int b43legacy_start(struct ieee80211_hw *hw)
|
||||||
struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw);
|
struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw);
|
||||||
struct b43legacy_wldev *dev = wl->current_dev;
|
struct b43legacy_wldev *dev = wl->current_dev;
|
||||||
int did_init = 0;
|
int did_init = 0;
|
||||||
int err;
|
int err = 0;
|
||||||
|
|
||||||
mutex_lock(&wl->mutex);
|
mutex_lock(&wl->mutex);
|
||||||
|
|
||||||
|
|
|
@ -2089,12 +2089,46 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
|
||||||
queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
|
queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void send_scan_event(void *data)
|
||||||
|
{
|
||||||
|
struct ipw2100_priv *priv = data;
|
||||||
|
union iwreq_data wrqu;
|
||||||
|
|
||||||
|
wrqu.data.length = 0;
|
||||||
|
wrqu.data.flags = 0;
|
||||||
|
wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ipw2100_scan_event_later(struct work_struct *work)
|
||||||
|
{
|
||||||
|
send_scan_event(container_of(work, struct ipw2100_priv,
|
||||||
|
scan_event_later.work));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ipw2100_scan_event_now(struct work_struct *work)
|
||||||
|
{
|
||||||
|
send_scan_event(container_of(work, struct ipw2100_priv,
|
||||||
|
scan_event_now));
|
||||||
|
}
|
||||||
|
|
||||||
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
|
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
|
||||||
{
|
{
|
||||||
IPW_DEBUG_SCAN("scan complete\n");
|
IPW_DEBUG_SCAN("scan complete\n");
|
||||||
/* Age the scan results... */
|
/* Age the scan results... */
|
||||||
priv->ieee->scans++;
|
priv->ieee->scans++;
|
||||||
priv->status &= ~STATUS_SCANNING;
|
priv->status &= ~STATUS_SCANNING;
|
||||||
|
|
||||||
|
/* Only userspace-requested scan completion events go out immediately */
|
||||||
|
if (!priv->user_requested_scan) {
|
||||||
|
if (!delayed_work_pending(&priv->scan_event_later))
|
||||||
|
queue_delayed_work(priv->workqueue,
|
||||||
|
&priv->scan_event_later,
|
||||||
|
round_jiffies(msecs_to_jiffies(4000)));
|
||||||
|
} else {
|
||||||
|
priv->user_requested_scan = 0;
|
||||||
|
cancel_delayed_work(&priv->scan_event_later);
|
||||||
|
queue_work(priv->workqueue, &priv->scan_event_now);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IPW2100_DEBUG
|
#ifdef CONFIG_IPW2100_DEBUG
|
||||||
|
@ -4349,6 +4383,7 @@ static void ipw2100_kill_workqueue(struct ipw2100_priv *priv)
|
||||||
cancel_delayed_work(&priv->wx_event_work);
|
cancel_delayed_work(&priv->wx_event_work);
|
||||||
cancel_delayed_work(&priv->hang_check);
|
cancel_delayed_work(&priv->hang_check);
|
||||||
cancel_delayed_work(&priv->rf_kill);
|
cancel_delayed_work(&priv->rf_kill);
|
||||||
|
cancel_delayed_work(&priv->scan_event_later);
|
||||||
destroy_workqueue(priv->workqueue);
|
destroy_workqueue(priv->workqueue);
|
||||||
priv->workqueue = NULL;
|
priv->workqueue = NULL;
|
||||||
}
|
}
|
||||||
|
@ -6092,6 +6127,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
||||||
INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
|
INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
|
||||||
INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
|
INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
|
||||||
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
||||||
|
INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
|
||||||
|
INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
|
||||||
|
|
||||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||||
ipw2100_irq_tasklet, (unsigned long)priv);
|
ipw2100_irq_tasklet, (unsigned long)priv);
|
||||||
|
@ -7396,6 +7433,8 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
IPW_DEBUG_WX("Initiating scan...\n");
|
IPW_DEBUG_WX("Initiating scan...\n");
|
||||||
|
|
||||||
|
priv->user_requested_scan = 1;
|
||||||
if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
|
if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
|
||||||
IPW_DEBUG_WX("Start scan failed.\n");
|
IPW_DEBUG_WX("Start scan failed.\n");
|
||||||
|
|
||||||
|
|
|
@ -586,6 +586,10 @@ struct ipw2100_priv {
|
||||||
struct delayed_work wx_event_work;
|
struct delayed_work wx_event_work;
|
||||||
struct delayed_work hang_check;
|
struct delayed_work hang_check;
|
||||||
struct delayed_work rf_kill;
|
struct delayed_work rf_kill;
|
||||||
|
struct work_struct scan_event_now;
|
||||||
|
struct delayed_work scan_event_later;
|
||||||
|
|
||||||
|
int user_requested_scan;
|
||||||
|
|
||||||
u32 interrupts;
|
u32 interrupts;
|
||||||
int tx_interrupts;
|
int tx_interrupts;
|
||||||
|
|
|
@ -37,9 +37,6 @@
|
||||||
|
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
|
||||||
#include <net/mac80211.h>
|
|
||||||
#include <linux/wireless.h>
|
|
||||||
|
|
||||||
#define IWL 3945
|
#define IWL 3945
|
||||||
|
|
||||||
#include "../net/mac80211/ieee80211_rate.h"
|
#include "../net/mac80211/ieee80211_rate.h"
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include <net/mac80211.h>
|
#include <net/mac80211.h>
|
||||||
|
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/delay.h>
|
|
||||||
|
|
||||||
#define IWL 3945
|
#define IWL 3945
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,6 @@
|
||||||
|
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
|
||||||
#include <net/mac80211.h>
|
|
||||||
#include <linux/wireless.h>
|
|
||||||
|
|
||||||
#define IWL 4965
|
#define IWL 4965
|
||||||
|
|
||||||
#include "../net/mac80211/ieee80211_rate.h"
|
#include "../net/mac80211/ieee80211_rate.h"
|
||||||
|
@ -2024,12 +2021,18 @@ static int open_file_generic(struct inode *inode, struct file *file)
|
||||||
static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv,
|
static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv,
|
||||||
struct iwl_rate *mcs, int index)
|
struct iwl_rate *mcs, int index)
|
||||||
{
|
{
|
||||||
const u32 cck_rate = 0x820A;
|
u32 base_rate;
|
||||||
|
|
||||||
|
if (rs_priv->phymode == (u8) MODE_IEEE80211A)
|
||||||
|
base_rate = 0x800D;
|
||||||
|
else
|
||||||
|
base_rate = 0x820A;
|
||||||
|
|
||||||
if (rs_priv->dbg_fixed.rate_n_flags) {
|
if (rs_priv->dbg_fixed.rate_n_flags) {
|
||||||
if (index < 12)
|
if (index < 12)
|
||||||
mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags;
|
mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags;
|
||||||
else
|
else
|
||||||
mcs->rate_n_flags = cck_rate;
|
mcs->rate_n_flags = base_rate;
|
||||||
IWL_DEBUG_RATE("Fixed rate ON\n");
|
IWL_DEBUG_RATE("Fixed rate ON\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,7 @@
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
#include <net/mac80211.h>
|
#include <net/mac80211.h>
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/delay.h>
|
|
||||||
|
|
||||||
#define IWL 4965
|
#define IWL 4965
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,6 @@
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/skbuff.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
|
|
||||||
|
@ -1749,21 +1747,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv)
|
||||||
* return : set the bit for each supported rate insert in ie
|
* return : set the bit for each supported rate insert in ie
|
||||||
*/
|
*/
|
||||||
static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
|
static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
|
||||||
u16 basic_rate, int max_count)
|
u16 basic_rate, int *left)
|
||||||
{
|
{
|
||||||
u16 ret_rates = 0, bit;
|
u16 ret_rates = 0, bit;
|
||||||
int i;
|
int i;
|
||||||
u8 *rates;
|
u8 *cnt = ie;
|
||||||
|
u8 *rates = ie + 1;
|
||||||
rates = &(ie[1]);
|
|
||||||
|
|
||||||
for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
|
for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
|
||||||
if (bit & supported_rate) {
|
if (bit & supported_rate) {
|
||||||
ret_rates |= bit;
|
ret_rates |= bit;
|
||||||
rates[*ie] = iwl_rates[i].ieee |
|
rates[*cnt] = iwl_rates[i].ieee |
|
||||||
((bit & basic_rate) ? 0x80 : 0x00);
|
((bit & basic_rate) ? 0x80 : 0x00);
|
||||||
*ie = *ie + 1;
|
(*cnt)++;
|
||||||
if (*ie >= max_count)
|
(*left)--;
|
||||||
|
if ((*left <= 0) ||
|
||||||
|
(*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1780,7 +1779,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
u8 *pos = NULL;
|
u8 *pos = NULL;
|
||||||
u16 ret_rates;
|
u16 active_rates, ret_rates, cck_rates;
|
||||||
|
|
||||||
/* Make sure there is enough space for the probe request,
|
/* Make sure there is enough space for the probe request,
|
||||||
* two mandatory IEs and the data */
|
* two mandatory IEs and the data */
|
||||||
|
@ -1825,19 +1824,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
left -= 2;
|
left -= 2;
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* ... fill it in... */
|
/* ... fill it in... */
|
||||||
*pos++ = WLAN_EID_SUPP_RATES;
|
*pos++ = WLAN_EID_SUPP_RATES;
|
||||||
*pos = 0;
|
*pos = 0;
|
||||||
ret_rates = priv->active_rate = priv->rates_mask;
|
|
||||||
|
priv->active_rate = priv->rates_mask;
|
||||||
|
active_rates = priv->active_rate;
|
||||||
priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
|
priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
|
||||||
|
|
||||||
iwl_supported_rate_to_ie(pos, priv->active_rate,
|
cck_rates = IWL_CCK_RATES_MASK & active_rates;
|
||||||
priv->active_rate_basic, left);
|
ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
|
active_rates &= ~ret_rates;
|
||||||
|
|
||||||
|
ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
|
active_rates &= ~ret_rates;
|
||||||
|
|
||||||
len += 2 + *pos;
|
len += 2 + *pos;
|
||||||
pos += (*pos) + 1;
|
pos += (*pos) + 1;
|
||||||
ret_rates = ~ret_rates & priv->active_rate;
|
if (active_rates == 0)
|
||||||
|
|
||||||
if (ret_rates == 0)
|
|
||||||
goto fill_end;
|
goto fill_end;
|
||||||
|
|
||||||
/* fill in supported extended rate */
|
/* fill in supported extended rate */
|
||||||
|
@ -1848,7 +1855,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
/* ... fill it in... */
|
/* ... fill it in... */
|
||||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||||
*pos = 0;
|
*pos = 0;
|
||||||
iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
|
iwl_supported_rate_to_ie(pos, active_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
if (*pos > 0)
|
if (*pos > 0)
|
||||||
len += 2 + *pos;
|
len += 2 + *pos;
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,6 @@
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/skbuff.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
|
|
||||||
|
@ -1802,21 +1800,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv)
|
||||||
* return : set the bit for each supported rate insert in ie
|
* return : set the bit for each supported rate insert in ie
|
||||||
*/
|
*/
|
||||||
static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
|
static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
|
||||||
u16 basic_rate, int max_count)
|
u16 basic_rate, int *left)
|
||||||
{
|
{
|
||||||
u16 ret_rates = 0, bit;
|
u16 ret_rates = 0, bit;
|
||||||
int i;
|
int i;
|
||||||
u8 *rates;
|
u8 *cnt = ie;
|
||||||
|
u8 *rates = ie + 1;
|
||||||
rates = &(ie[1]);
|
|
||||||
|
|
||||||
for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
|
for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
|
||||||
if (bit & supported_rate) {
|
if (bit & supported_rate) {
|
||||||
ret_rates |= bit;
|
ret_rates |= bit;
|
||||||
rates[*ie] = iwl_rates[i].ieee |
|
rates[*cnt] = iwl_rates[i].ieee |
|
||||||
((bit & basic_rate) ? 0x80 : 0x00);
|
((bit & basic_rate) ? 0x80 : 0x00);
|
||||||
*ie = *ie + 1;
|
(*cnt)++;
|
||||||
if (*ie >= max_count)
|
(*left)--;
|
||||||
|
if ((*left <= 0) ||
|
||||||
|
(*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1839,7 +1838,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
u8 *pos = NULL;
|
u8 *pos = NULL;
|
||||||
u16 ret_rates;
|
u16 active_rates, ret_rates, cck_rates;
|
||||||
|
|
||||||
/* Make sure there is enough space for the probe request,
|
/* Make sure there is enough space for the probe request,
|
||||||
* two mandatory IEs and the data */
|
* two mandatory IEs and the data */
|
||||||
|
@ -1884,19 +1883,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
left -= 2;
|
left -= 2;
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* ... fill it in... */
|
/* ... fill it in... */
|
||||||
*pos++ = WLAN_EID_SUPP_RATES;
|
*pos++ = WLAN_EID_SUPP_RATES;
|
||||||
*pos = 0;
|
*pos = 0;
|
||||||
ret_rates = priv->active_rate = priv->rates_mask;
|
|
||||||
|
priv->active_rate = priv->rates_mask;
|
||||||
|
active_rates = priv->active_rate;
|
||||||
priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
|
priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
|
||||||
|
|
||||||
iwl_supported_rate_to_ie(pos, priv->active_rate,
|
cck_rates = IWL_CCK_RATES_MASK & active_rates;
|
||||||
priv->active_rate_basic, left);
|
ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
|
active_rates &= ~ret_rates;
|
||||||
|
|
||||||
|
ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
|
active_rates &= ~ret_rates;
|
||||||
|
|
||||||
len += 2 + *pos;
|
len += 2 + *pos;
|
||||||
pos += (*pos) + 1;
|
pos += (*pos) + 1;
|
||||||
ret_rates = ~ret_rates & priv->active_rate;
|
if (active_rates == 0)
|
||||||
|
|
||||||
if (ret_rates == 0)
|
|
||||||
goto fill_end;
|
goto fill_end;
|
||||||
|
|
||||||
/* fill in supported extended rate */
|
/* fill in supported extended rate */
|
||||||
|
@ -1907,7 +1914,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
|
||||||
/* ... fill it in... */
|
/* ... fill it in... */
|
||||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||||
*pos = 0;
|
*pos = 0;
|
||||||
iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
|
iwl_supported_rate_to_ie(pos, active_rates,
|
||||||
|
priv->active_rate_basic, &left);
|
||||||
if (*pos > 0)
|
if (*pos > 0)
|
||||||
len += 2 + *pos;
|
len += 2 + *pos;
|
||||||
|
|
||||||
|
@ -4494,13 +4502,13 @@ static u8 ratio2dB[100] = {
|
||||||
* Conversion assumes that levels are voltages (20*log), not powers (10*log). */
|
* Conversion assumes that levels are voltages (20*log), not powers (10*log). */
|
||||||
int iwl_calc_db_from_ratio(int sig_ratio)
|
int iwl_calc_db_from_ratio(int sig_ratio)
|
||||||
{
|
{
|
||||||
/* Anything above 1000:1 just report as 60 dB */
|
/* 1000:1 or higher just report as 60 dB */
|
||||||
if (sig_ratio > 1000)
|
if (sig_ratio >= 1000)
|
||||||
return 60;
|
return 60;
|
||||||
|
|
||||||
/* Above 100:1, divide by 10 and use table,
|
/* 100:1 or higher, divide by 10 and use table,
|
||||||
* add 20 dB to make up for divide by 10 */
|
* add 20 dB to make up for divide by 10 */
|
||||||
if (sig_ratio > 100)
|
if (sig_ratio >= 100)
|
||||||
return (20 + (int)ratio2dB[sig_ratio/10]);
|
return (20 + (int)ratio2dB[sig_ratio/10]);
|
||||||
|
|
||||||
/* We shouldn't see this */
|
/* We shouldn't see this */
|
||||||
|
|
|
@ -39,18 +39,13 @@ struct iwl_priv;
|
||||||
/* Hardware specific file defines the PCI IDs table for that hardware module */
|
/* Hardware specific file defines the PCI IDs table for that hardware module */
|
||||||
extern struct pci_device_id iwl_hw_card_ids[];
|
extern struct pci_device_id iwl_hw_card_ids[];
|
||||||
|
|
||||||
|
#include "iwl-hw.h"
|
||||||
#if IWL == 3945
|
#if IWL == 3945
|
||||||
|
|
||||||
#define DRV_NAME "iwl3945"
|
#define DRV_NAME "iwl3945"
|
||||||
#include "iwl-hw.h"
|
|
||||||
#include "iwl-3945-hw.h"
|
#include "iwl-3945-hw.h"
|
||||||
|
|
||||||
#elif IWL == 4965
|
#elif IWL == 4965
|
||||||
|
|
||||||
#define DRV_NAME "iwl4965"
|
#define DRV_NAME "iwl4965"
|
||||||
#include "iwl-hw.h"
|
|
||||||
#include "iwl-4965-hw.h"
|
#include "iwl-4965-hw.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "iwl-prph.h"
|
#include "iwl-prph.h"
|
||||||
|
|
|
@ -577,7 +577,7 @@ static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type,
|
||||||
struct p54_tx_control_filter *filter;
|
struct p54_tx_control_filter *filter;
|
||||||
|
|
||||||
hdr = kzalloc(sizeof(*hdr) + sizeof(*filter) +
|
hdr = kzalloc(sizeof(*hdr) + sizeof(*filter) +
|
||||||
priv->tx_hdr_len, GFP_KERNEL);
|
priv->tx_hdr_len, GFP_ATOMIC);
|
||||||
if (!hdr)
|
if (!hdr)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
@ -550,7 +550,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||||
/*
|
/*
|
||||||
* Check if we need to set the Length Extension
|
* Check if we need to set the Length Extension
|
||||||
*/
|
*/
|
||||||
if (bitrate == 110 && residual <= 3)
|
if (bitrate == 110 && residual <= 30)
|
||||||
desc.service |= 0x80;
|
desc.service |= 0x80;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2029,6 +2029,7 @@ static struct usb_device_id rt73usb_device_table[] = {
|
||||||
{ USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
{ USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
{ USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
|
{ USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
/* Billionton */
|
/* Billionton */
|
||||||
{ USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) },
|
{ USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) },
|
||||||
/* Buffalo */
|
/* Buffalo */
|
||||||
|
|
|
@ -131,7 +131,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
|
||||||
struct rtl8187_tx_hdr *hdr;
|
struct rtl8187_tx_hdr *hdr;
|
||||||
struct rtl8187_tx_info *info;
|
struct rtl8187_tx_info *info;
|
||||||
struct urb *urb;
|
struct urb *urb;
|
||||||
u32 tmp;
|
__le16 rts_dur = 0;
|
||||||
|
u32 flags;
|
||||||
|
|
||||||
urb = usb_alloc_urb(0, GFP_ATOMIC);
|
urb = usb_alloc_urb(0, GFP_ATOMIC);
|
||||||
if (!urb) {
|
if (!urb) {
|
||||||
|
@ -139,24 +140,24 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
|
flags = skb->len;
|
||||||
tmp = skb->len - sizeof(*hdr);
|
flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
|
||||||
tmp |= RTL8187_TX_FLAG_NO_ENCRYPT;
|
flags |= control->rts_cts_rate << 19;
|
||||||
tmp |= control->rts_cts_rate << 19;
|
flags |= control->tx_rate << 24;
|
||||||
tmp |= control->tx_rate << 24;
|
if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
|
||||||
if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb))
|
flags |= RTL8187_TX_FLAG_MORE_FRAG;
|
||||||
tmp |= RTL8187_TX_FLAG_MORE_FRAG;
|
|
||||||
if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
|
if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
|
||||||
tmp |= RTL8187_TX_FLAG_RTS;
|
flags |= RTL8187_TX_FLAG_RTS;
|
||||||
hdr->rts_duration =
|
rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
|
||||||
ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
|
|
||||||
}
|
}
|
||||||
if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
|
if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
|
||||||
tmp |= RTL8187_TX_FLAG_CTS;
|
flags |= RTL8187_TX_FLAG_CTS;
|
||||||
hdr->flags = cpu_to_le32(tmp);
|
|
||||||
|
hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
|
||||||
|
hdr->flags = cpu_to_le32(flags);
|
||||||
hdr->len = 0;
|
hdr->len = 0;
|
||||||
tmp = control->retry_limit << 8;
|
hdr->rts_duration = rts_dur;
|
||||||
hdr->retry = cpu_to_le32(tmp);
|
hdr->retry = cpu_to_le32(control->retry_limit << 8);
|
||||||
|
|
||||||
info = (struct rtl8187_tx_info *)skb->cb;
|
info = (struct rtl8187_tx_info *)skb->cb;
|
||||||
info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
|
info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
|
||||||
|
@ -587,8 +588,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
|
||||||
|
|
||||||
*total_flags = 0;
|
*total_flags = 0;
|
||||||
|
|
||||||
if (changed_flags & FIF_PROMISC_IN_BSS)
|
|
||||||
priv->rx_conf ^= RTL818X_RX_CONF_NICMAC;
|
|
||||||
if (changed_flags & FIF_ALLMULTI)
|
if (changed_flags & FIF_ALLMULTI)
|
||||||
priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST;
|
priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST;
|
||||||
if (changed_flags & FIF_FCSFAIL)
|
if (changed_flags & FIF_FCSFAIL)
|
||||||
|
@ -601,8 +600,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
|
||||||
if (mc_count > 0)
|
if (mc_count > 0)
|
||||||
priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
|
priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
|
||||||
|
|
||||||
if (priv->rx_conf & RTL818X_RX_CONF_NICMAC)
|
|
||||||
*total_flags |= FIF_PROMISC_IN_BSS;
|
|
||||||
if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST)
|
if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST)
|
||||||
*total_flags |= FIF_ALLMULTI;
|
*total_flags |= FIF_ALLMULTI;
|
||||||
if (priv->rx_conf & RTL818X_RX_CONF_FCS)
|
if (priv->rx_conf & RTL818X_RX_CONF_FCS)
|
||||||
|
|
|
@ -327,8 +327,8 @@ static void zd1201_usbrx(struct urb *urb)
|
||||||
memcpy(skb_put(skb, 6), &data[datalen-8], 6);
|
memcpy(skb_put(skb, 6), &data[datalen-8], 6);
|
||||||
memcpy(skb_put(skb, 2), &data[datalen-24], 2);
|
memcpy(skb_put(skb, 2), &data[datalen-24], 2);
|
||||||
memcpy(skb_put(skb, len), data, len);
|
memcpy(skb_put(skb, len), data, len);
|
||||||
skb->dev->last_rx = jiffies;
|
|
||||||
skb->protocol = eth_type_trans(skb, zd->dev);
|
skb->protocol = eth_type_trans(skb, zd->dev);
|
||||||
|
skb->dev->last_rx = jiffies;
|
||||||
zd->stats.rx_packets++;
|
zd->stats.rx_packets++;
|
||||||
zd->stats.rx_bytes += skb->len;
|
zd->stats.rx_bytes += skb->len;
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
|
@ -384,8 +384,8 @@ static void zd1201_usbrx(struct urb *urb)
|
||||||
memcpy(skb_put(skb, 2), &data[6], 2);
|
memcpy(skb_put(skb, 2), &data[6], 2);
|
||||||
memcpy(skb_put(skb, len), data+8, len);
|
memcpy(skb_put(skb, len), data+8, len);
|
||||||
}
|
}
|
||||||
skb->dev->last_rx = jiffies;
|
|
||||||
skb->protocol = eth_type_trans(skb, zd->dev);
|
skb->protocol = eth_type_trans(skb, zd->dev);
|
||||||
|
skb->dev->last_rx = jiffies;
|
||||||
zd->stats.rx_packets++;
|
zd->stats.rx_packets++;
|
||||||
zd->stats.rx_bytes += skb->len;
|
zd->stats.rx_bytes += skb->len;
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
|
|
|
@ -1044,14 +1044,17 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||||
static void disconnect(struct usb_interface *intf)
|
static void disconnect(struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct net_device *netdev = zd_intf_to_netdev(intf);
|
struct net_device *netdev = zd_intf_to_netdev(intf);
|
||||||
struct zd_mac *mac = zd_netdev_mac(netdev);
|
struct zd_mac *mac;
|
||||||
struct zd_usb *usb = &mac->chip.usb;
|
struct zd_usb *usb;
|
||||||
|
|
||||||
/* Either something really bad happened, or we're just dealing with
|
/* Either something really bad happened, or we're just dealing with
|
||||||
* a DEVICE_INSTALLER. */
|
* a DEVICE_INSTALLER. */
|
||||||
if (netdev == NULL)
|
if (netdev == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mac = zd_netdev_mac(netdev);
|
||||||
|
usb = &mac->chip.usb;
|
||||||
|
|
||||||
dev_dbg_f(zd_usb_dev(usb), "\n");
|
dev_dbg_f(zd_usb_dev(usb), "\n");
|
||||||
|
|
||||||
zd_netdev_disconnect(netdev);
|
zd_netdev_disconnect(netdev);
|
||||||
|
|
|
@ -6643,7 +6643,8 @@ qeth_netdev_init(struct net_device *dev)
|
||||||
dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid;
|
dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid;
|
||||||
dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid;
|
dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid;
|
||||||
#endif
|
#endif
|
||||||
dev->header_ops = &qeth_null_ops;
|
if (qeth_get_netdev_flags(card) & IFF_NOARP)
|
||||||
|
dev->header_ops = &qeth_null_ops;
|
||||||
|
|
||||||
#ifdef CONFIG_QETH_IPV6
|
#ifdef CONFIG_QETH_IPV6
|
||||||
/*IPv6 address autoconfiguration stuff*/
|
/*IPv6 address autoconfiguration stuff*/
|
||||||
|
|
Loading…
Reference in a new issue