* Re: [git patches] net driver updates for 2.6.25
From: David Miller @ 2008-01-18 23:59 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-kernel
In-Reply-To: <20080118201721.GA22699@havoc.gtf.org>
From: Jeff Garzik <jeff@garzik.org>
Date: Fri, 18 Jan 2008 15:17:21 -0500
>
> Please pull from the 'upstream' branch of
> git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git upstream
>
> to receive my 2.6.25 net driver queue into davem/net-2.6.25.git:
Pulled and pushed back out, thanks Jeff.
^ permalink raw reply
* Re: sctp use-uninitialized warning in net-2.6.25
From: David Miller @ 2008-01-18 23:37 UTC (permalink / raw)
To: vladislav.yasevich; +Cc: akpm, netdev
In-Reply-To: <4790CDC8.6060000@hp.com>
From: Vlad Yasevich <vladislav.yasevich@hp.com>
Date: Fri, 18 Jan 2008 11:03:20 -0500
> We can do that, or move the declaration to the only block that uses it.
> Like this:
...
> @@ -466,6 +465,7 @@ sctp_disposition_t sctp_sf_do_5_1C_ack(const struct sctp_endpoint *ep,
> if (!sctp_verify_init(asoc, chunk->chunk_hdr->type,
> (sctp_init_chunk_t *)chunk->chunk_hdr, chunk,
> &err_chunk)) {
> + sctp_error_t error;
>
> SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
>
It's still potentially used uninitialized.
It will only get set if err_chunk is non-zero.
But even if err_chunk is zero, we try to use this
variable.
That's the whole problem, simply moving the variable to
a different scope is not going to fix anything.
^ permalink raw reply
* Memory leak in security_netlbl_sid_to_secattr(), kernel 2.6.23.12
From: Chuck Ebbert @ 2008-01-18 23:19 UTC (permalink / raw)
To: paul.moore; +Cc: Netdev
We have two reports of this now.
https://bugzilla.redhat.com/show_bug.cgi?id=352281
The user enabled SLUB user tracing and reports that the entries
created by security_netlbl_sid_to_secattr() were increasing the
most. Disabling selinux makes the problem go away completely.
^ permalink raw reply
* Re: [PATCH] IPv6 support for NFS server
From: J. Bruce Fields @ 2008-01-18 22:55 UTC (permalink / raw)
To: Aurélien Charbon; +Cc: netdev ML, Brian Haley, Mailing list NFSv4
In-Reply-To: <4790BCD0.30905@ext.bull.net>
On Fri, Jan 18, 2008 at 03:50:56PM +0100, Aurélien Charbon wrote:
> OK Bruce I have added this comment before the patch.
> I have also done the changes pointed by Brian.
> Please let me know if there is still something to change.
Thanks. For the future, if you could just make the comment part of the
actual git commit, that'll help produce a patch that can be fed to my
scripts with less hassle....
Anyway, looks fine to me, applied. (But I may wait till 2.6.26 to
submit.)
--b.
^ permalink raw reply
* Re: [PATCH 3/4] bonding: Fix work rearming
From: Jarek Poplawski @ 2008-01-18 22:43 UTC (permalink / raw)
To: Jarek Poplawski; +Cc: Makito SHIOKAWA, netdev
In-Reply-To: <479127C6.1080701@gmail.com>
Jarek Poplawski wrote, On 01/18/2008 11:27 PM:
> Makito SHIOKAWA wrote, On 01/18/2008 02:43 PM:
...
> @@ -1026,7 +1028,7 @@ static ssize_t bonding_store_miimon(stru
>> cancel_delayed_work_sync(&bond->lb_arp_work);
>> }
>>
>> - if (bond->dev->flags & IFF_UP) {
>> + if (bond->params.miimon && (bond->dev->flags & IFF_UP)) {
...similar change in bonding_store_arp_interval(), I guess?
Jarek P.
^ permalink raw reply
* Re: [PATCH 3/4] bonding: Fix work rearming
From: Jarek Poplawski @ 2008-01-18 22:27 UTC (permalink / raw)
To: Makito SHIOKAWA; +Cc: netdev
In-Reply-To: <4790ACF2.1090207@miraclelinux.com>
Makito SHIOKAWA wrote, On 01/18/2008 02:43 PM:
>> Hmm... I'm not sure I understand your point, but it seems both
>> bonding_store_arp_interval() and bonding_store_miimon() where this
>> field could be changed, currently use cancel_delayed_work() with
>> flush_workqueue(), so I presume, there is no rtnl_lock() nor
>> write_lock(&bond->lock) held, so cancel_delayed_work_sync() could
>> be used, which doesn't require this additional check.
> I see. I rewrited the patch as below. How about this?
> (But, it may be just a matter to change 'if (new_value < 0)' to 'if (new_value
> <= 0)' in bonding_store_miimon() and bonding_store_arp_interval()...)
Yes, looks fine to me.
(But new_value = 0 seems needed - just like from module_param()?)
Maybe only a few slight doubts, yet:
- maybe before this cancel IFF_UP test would be useful as well,
- maybe to test if the value has changed at all,
- maybe it's OK, I don't know, but it seems both monitors could be
turned off now.
Thanks,
Jarek P.
>
> ---
> drivers/net/bonding/bond_sysfs.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> --- a/drivers/net/bonding/bond_sysfs.c
> +++ b/drivers/net/bonding/bond_sysfs.c
> @@ -997,6 +997,8 @@ static ssize_t bonding_store_miimon(stru
> ": %s: Setting MII monitoring interval to %d.\n",
> bond->dev->name, new_value);
> bond->params.miimon = new_value;
> + if (bond->params.miimon == 0)
> + cancel_delayed_work_sync(&bond->mii_work);
> if(bond->params.updelay)
> printk(KERN_INFO DRV_NAME
> ": %s: Note: Updating updelay (to %d) "
> @@ -1026,7 +1028,7 @@ static ssize_t bonding_store_miimon(stru
> cancel_delayed_work_sync(&bond->lb_arp_work);
> }
>
> - if (bond->dev->flags & IFF_UP) {
> + if (bond->params.miimon && (bond->dev->flags & IFF_UP)) {
> /* If the interface is up, we may need to fire off
> * the MII timer. If the interface is down, the
> * timer will get fired off when the open function
>
>
^ permalink raw reply
* Re: [patch] add net_device_stats support to ethtool
From: Dan Nicolaescu @ 2008-01-18 22:01 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
In-Reply-To: <479108B4.6030709@garzik.org>
Jeff Garzik <jeff@garzik.org> writes:
> Dan Nicolaescu wrote:
> > Hi,
> >
> > I have posted this patch in the past with absolutely no reply.
> > I would appreciate some sort of feedback of the form interested/not
> > interested. Should I just drop it?
> >
> > "ethtool -S" only supports devices that have custom code written to
> > print the stats.
>
> No -- more specifically, ethtool is for NIC-specific statistics that
> do not appear elsewhere.
>
> net_device_stats already appear elsewhere, so it's redundant to add it
> to ethtool. Just duplicates the same functionality elsewhere.
Then please add to -S entry of the ethtool man page something like:
"Only statistics for devices that do not use the generic stat
infrastructure are printed".
It is rather confusing for users that "ethtool -S" prints stats for some
devices, and nothing for others, and the documentations says nothing
about this.
^ permalink raw reply
* [git patches] net driver fixes
From: Jeff Garzik @ 2008-01-18 20:17 UTC (permalink / raw)
To: Andrew Morton, Linus Torvalds; +Cc: netdev, LKML
Please pull from 'upstream-linus' branch of
master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git upstream-linus
to receive the following updates:
Documentation/networking/driver.txt | 5 +-
drivers/net/3c515.c | 60 +++++----
drivers/net/Kconfig | 3 -
drivers/net/atl1/atl1_main.c | 8 +-
drivers/net/bonding/bond_alb.c | 23 ++--
drivers/net/bonding/bond_main.c | 64 +++++++---
drivers/net/bonding/bond_sysfs.c | 66 ++++-----
drivers/net/bonding/bonding.h | 4 +-
drivers/net/cpmac.c | 2 +-
drivers/net/dl2k.c | 215 +++++++++++++++---------------
drivers/net/dl2k.h | 157 +---------------------
drivers/net/ipg.c | 36 ++----
drivers/net/pcmcia/3c574_cs.c | 31 +++--
drivers/net/s2io.c | 17 ++-
drivers/net/sky2.c | 24 +++-
drivers/net/wan/dscc4.c | 94 +++++++------
drivers/net/wan/lmc/lmc_media.c | 12 +--
drivers/net/wan/sbni.h | 12 ++-
drivers/net/wireless/b43/rfkill.c | 11 +-
drivers/net/wireless/hostap/hostap_plx.c | 6 +-
drivers/net/wireless/ipw2200.c | 2 +-
drivers/net/wireless/libertas/if_sdio.c | 4 +
drivers/net/wireless/rt2x00/rt2x00pci.c | 2 +-
drivers/net/wireless/rt2x00/rt2x00usb.c | 11 ++-
24 files changed, 387 insertions(+), 482 deletions(-)
Al Viro (9):
dscc4 endian fixes
wan/lmc bitfields fixes
sbni endian fixes
3c574, 3c515 bitfields abuse
dl2k: BMCR_t fixes
dl2k: ANAR, ANLPAR fixes
dl2k: BMSR fixes
dl2k: MSCR, MSSR, ESR, PHY_SCR fixes
dl2k: the rest
Francois Romieu (4):
ipg: balance locking in irq handler
ipg: plug Tx completion leak
ipg: fix queue stop condition in the xmit handler
ipg: fix Tx completion irq request
Ivo van Doorn (1):
rt2x00: Fix ieee80211 payload alignment
Jason Uhlenkott (1):
e1000e Kconfig: remove ref to nonexistant docs
Jay Cliburn (1):
atl1: fix frame length bug
Jay Vosburgh (7):
bonding: fix locking in sysfs primary/active selection
bonding: fix ASSERT_RTNL that produces spurious warnings
bonding: fix locking during alb failover and slave removal
bonding: release slaves when master removed via sysfs
bonding: Fix up parameter parsing
bonding: fix lock ordering for rtnl and bonding_rwsem
bonding: Don't hold lock when calling rtnl_unlock
Marc Pignat (1):
wireless/libertas support for 88w8385 sdio older revision
Matteo Croce (1):
Replace cpmac fix
Matti Linnanvuori (1):
Documentation: add a guideline for hard_start_xmit method
Randy Dunlap (1):
hostap: section mismatch warning
Sreenivasa Honnur (1):
S2io: Fixed synchronization between scheduling of napi with card reset and close
Stefano Brivio (2):
ipw2200: fix typo in kerneldoc
b43: fix use-after-free rfkill bug
Stephen Hemminger (1):
Revert "sky2: remove check for PCI wakeup setting from BIOS"
diff --git a/Documentation/networking/driver.txt b/Documentation/networking/driver.txt
index 4f7da5a..ea72d2e 100644
--- a/Documentation/networking/driver.txt
+++ b/Documentation/networking/driver.txt
@@ -61,7 +61,10 @@ Transmit path guidelines:
2) Do not forget to update netdev->trans_start to jiffies after
each new tx packet is given to the hardware.
-3) Do not forget that once you return 0 from your hard_start_xmit
+3) A hard_start_xmit method must not modify the shared parts of a
+ cloned SKB.
+
+4) Do not forget that once you return 0 from your hard_start_xmit
method, it is your driver's responsibility to free up the SKB
and in some finite amount of time.
diff --git a/drivers/net/3c515.c b/drivers/net/3c515.c
index 275e751..684bab7 100644
--- a/drivers/net/3c515.c
+++ b/drivers/net/3c515.c
@@ -243,14 +243,16 @@ enum eeprom_offset {
enum Window3 { /* Window 3: MAC/config bits. */
Wn3_Config = 0, Wn3_MAC_Ctrl = 6, Wn3_Options = 8,
};
-union wn3_config {
- int i;
- struct w3_config_fields {
- unsigned int ram_size:3, ram_width:1, ram_speed:2, rom_size:2;
- int pad8:8;
- unsigned int ram_split:2, pad18:2, xcvr:3, pad21:1, autoselect:1;
- int pad24:7;
- } u;
+enum wn3_config {
+ Ram_size = 7,
+ Ram_width = 8,
+ Ram_speed = 0x30,
+ Rom_size = 0xc0,
+ Ram_split_shift = 16,
+ Ram_split = 3 << Ram_split_shift,
+ Xcvr_shift = 20,
+ Xcvr = 7 << Xcvr_shift,
+ Autoselect = 0x1000000,
};
enum Window4 {
@@ -614,7 +616,7 @@ static int corkscrew_setup(struct net_device *dev, int ioaddr,
/* Read the station address from the EEPROM. */
EL3WINDOW(0);
for (i = 0; i < 0x18; i++) {
- short *phys_addr = (short *) dev->dev_addr;
+ __be16 *phys_addr = (__be16 *) dev->dev_addr;
int timer;
outw(EEPROM_Read + i, ioaddr + Wn0EepromCmd);
/* Pause for at least 162 us. for the read to take place. */
@@ -646,22 +648,22 @@ static int corkscrew_setup(struct net_device *dev, int ioaddr,
{
char *ram_split[] = { "5:3", "3:1", "1:1", "3:5" };
- union wn3_config config;
+ __u32 config;
EL3WINDOW(3);
vp->available_media = inw(ioaddr + Wn3_Options);
- config.i = inl(ioaddr + Wn3_Config);
+ config = inl(ioaddr + Wn3_Config);
if (corkscrew_debug > 1)
printk(KERN_INFO " Internal config register is %4.4x, transceivers %#x.\n",
- config.i, inw(ioaddr + Wn3_Options));
+ config, inw(ioaddr + Wn3_Options));
printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n",
- 8 << config.u.ram_size,
- config.u.ram_width ? "word" : "byte",
- ram_split[config.u.ram_split],
- config.u.autoselect ? "autoselect/" : "",
- media_tbl[config.u.xcvr].name);
- dev->if_port = config.u.xcvr;
- vp->default_media = config.u.xcvr;
- vp->autoselect = config.u.autoselect;
+ 8 << config & Ram_size,
+ config & Ram_width ? "word" : "byte",
+ ram_split[(config & Ram_split) >> Ram_split_shift],
+ config & Autoselect ? "autoselect/" : "",
+ media_tbl[(config & Xcvr) >> Xcvr_shift].name);
+ vp->default_media = (config & Xcvr) >> Xcvr_shift;
+ vp->autoselect = config & Autoselect ? 1 : 0;
+ dev->if_port = vp->default_media;
}
if (vp->media_override != 7) {
printk(KERN_INFO " Media override to transceiver type %d (%s).\n",
@@ -694,14 +696,14 @@ static int corkscrew_open(struct net_device *dev)
{
int ioaddr = dev->base_addr;
struct corkscrew_private *vp = netdev_priv(dev);
- union wn3_config config;
+ __u32 config;
int i;
/* Before initializing select the active media port. */
EL3WINDOW(3);
if (vp->full_duplex)
outb(0x20, ioaddr + Wn3_MAC_Ctrl); /* Set the full-duplex bit. */
- config.i = inl(ioaddr + Wn3_Config);
+ config = inl(ioaddr + Wn3_Config);
if (vp->media_override != 7) {
if (corkscrew_debug > 1)
@@ -727,12 +729,12 @@ static int corkscrew_open(struct net_device *dev)
} else
dev->if_port = vp->default_media;
- config.u.xcvr = dev->if_port;
- outl(config.i, ioaddr + Wn3_Config);
+ config = (config & ~Xcvr) | (dev->if_port << Xcvr_shift);
+ outl(config, ioaddr + Wn3_Config);
if (corkscrew_debug > 1) {
printk("%s: corkscrew_open() InternalConfig %8.8x.\n",
- dev->name, config.i);
+ dev->name, config);
}
outw(TxReset, ioaddr + EL3_CMD);
@@ -901,7 +903,7 @@ static void corkscrew_timer(unsigned long data)
ok = 1;
}
if (!ok) {
- union wn3_config config;
+ __u32 config;
do {
dev->if_port =
@@ -928,9 +930,9 @@ static void corkscrew_timer(unsigned long data)
ioaddr + Wn4_Media);
EL3WINDOW(3);
- config.i = inl(ioaddr + Wn3_Config);
- config.u.xcvr = dev->if_port;
- outl(config.i, ioaddr + Wn3_Config);
+ config = inl(ioaddr + Wn3_Config);
+ config = (config & ~Xcvr) | (dev->if_port << Xcvr_shift);
+ outl(config, ioaddr + Wn3_Config);
outw(dev->if_port == 3 ? StartCoax : StopCoax,
ioaddr + EL3_CMD);
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 114771a..9ae3166 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1976,9 +1976,6 @@ config E1000E
<http://support.intel.com>
- More specific information on configuring the driver is in
- <file:Documentation/networking/e1000e.txt>.
-
To compile this driver as a module, choose M here. The module
will be called e1000e.
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c
index 35b0a7d..9200ee5 100644
--- a/drivers/net/atl1/atl1_main.c
+++ b/drivers/net/atl1/atl1_main.c
@@ -120,7 +120,7 @@ static int __devinit atl1_sw_init(struct atl1_adapter *adapter)
struct atl1_hw *hw = &adapter->hw;
struct net_device *netdev = adapter->netdev;
- hw->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
+ hw->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
hw->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
adapter->wol = 0;
@@ -688,7 +688,7 @@ static int atl1_change_mtu(struct net_device *netdev, int new_mtu)
{
struct atl1_adapter *adapter = netdev_priv(netdev);
int old_mtu = netdev->mtu;
- int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
+ int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) ||
(max_frame > MAX_JUMBO_FRAME_SIZE)) {
@@ -853,8 +853,8 @@ static u32 atl1_configure(struct atl1_adapter *adapter)
/* set Interrupt Clear Timer */
iowrite16(adapter->ict, hw->hw_addr + REG_CMBDISDMA_TIMER);
- /* set MTU, 4 : VLAN */
- iowrite32(hw->max_frame_size + 4, hw->hw_addr + REG_MTU);
+ /* set max frame size hw will accept */
+ iowrite32(hw->max_frame_size, hw->hw_addr + REG_MTU);
/* jumbo size & rrd retirement timer */
value = (((u32) hw->rx_jumbo_th & RXQ_JMBOSZ_TH_MASK)
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 25b8dbf..b57bc94 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -979,7 +979,7 @@ static void alb_swap_mac_addr(struct bonding *bond, struct slave *slave1, struct
/*
* Send learning packets after MAC address swap.
*
- * Called with RTNL and bond->lock held for read.
+ * Called with RTNL and no other locks
*/
static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
struct slave *slave2)
@@ -987,6 +987,8 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
int slaves_state_differ = (SLAVE_IS_OK(slave1) != SLAVE_IS_OK(slave2));
struct slave *disabled_slave = NULL;
+ ASSERT_RTNL();
+
/* fasten the change in the switch */
if (SLAVE_IS_OK(slave1)) {
alb_send_learning_packets(slave1, slave1->dev->dev_addr);
@@ -1031,7 +1033,7 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
* a slave that has @slave's permanet address as its current address.
* We'll make sure that that slave no longer uses @slave's permanent address.
*
- * Caller must hold bond lock
+ * Caller must hold RTNL and no other locks
*/
static void alb_change_hw_addr_on_detach(struct bonding *bond, struct slave *slave)
{
@@ -1542,7 +1544,12 @@ int bond_alb_init_slave(struct bonding *bond, struct slave *slave)
return 0;
}
-/* Caller must hold bond lock for write */
+/*
+ * Remove slave from tlb and rlb hash tables, and fix up MAC addresses
+ * if necessary.
+ *
+ * Caller must hold RTNL and no other locks
+ */
void bond_alb_deinit_slave(struct bonding *bond, struct slave *slave)
{
if (bond->slave_cnt > 1) {
@@ -1601,9 +1608,6 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
struct slave *swap_slave;
int i;
- if (new_slave)
- ASSERT_RTNL();
-
if (bond->curr_active_slave == new_slave) {
return;
}
@@ -1649,6 +1653,8 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
write_unlock_bh(&bond->curr_slave_lock);
read_unlock(&bond->lock);
+ ASSERT_RTNL();
+
/* curr_active_slave must be set before calling alb_swap_mac_addr */
if (swap_slave) {
/* swap mac address */
@@ -1659,12 +1665,11 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
bond->alb_info.rlb_enabled);
}
- read_lock(&bond->lock);
-
if (swap_slave) {
alb_fasten_mac_swap(bond, swap_slave, new_slave);
+ read_lock(&bond->lock);
} else {
- /* fasten bond mac on new current slave */
+ read_lock(&bond->lock);
alb_send_learning_packets(new_slave, bond->dev->dev_addr);
}
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index b0b2603..49a1982 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1746,7 +1746,9 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
* has been cleared (if our_slave == old_current),
* but before a new active slave is selected.
*/
+ write_unlock_bh(&bond->lock);
bond_alb_deinit_slave(bond, slave);
+ write_lock_bh(&bond->lock);
}
if (oldcurrent == slave) {
@@ -1905,6 +1907,12 @@ static int bond_release_all(struct net_device *bond_dev)
slave_dev = slave->dev;
bond_detach_slave(bond, slave);
+ /* now that the slave is detached, unlock and perform
+ * all the undo steps that should not be called from
+ * within a lock.
+ */
+ write_unlock_bh(&bond->lock);
+
if ((bond->params.mode == BOND_MODE_TLB) ||
(bond->params.mode == BOND_MODE_ALB)) {
/* must be called only after the slave
@@ -1915,12 +1923,6 @@ static int bond_release_all(struct net_device *bond_dev)
bond_compute_features(bond);
- /* now that the slave is detached, unlock and perform
- * all the undo steps that should not be called from
- * within a lock.
- */
- write_unlock_bh(&bond->lock);
-
bond_destroy_slave_symlinks(bond_dev, slave_dev);
bond_del_vlans_from_slave(bond, slave_dev);
@@ -2384,7 +2386,9 @@ void bond_mii_monitor(struct work_struct *work)
rtnl_lock();
read_lock(&bond->lock);
__bond_mii_monitor(bond, 1);
- rtnl_unlock();
+ read_unlock(&bond->lock);
+ rtnl_unlock(); /* might sleep, hold no other locks */
+ read_lock(&bond->lock);
}
delay = ((bond->params.miimon * HZ) / 1000) ? : 1;
@@ -3399,9 +3403,7 @@ static int bond_master_netdev_event(unsigned long event, struct net_device *bond
case NETDEV_CHANGENAME:
return bond_event_changename(event_bond);
case NETDEV_UNREGISTER:
- /*
- * TODO: remove a bond from the list?
- */
+ bond_release_all(event_bond->dev);
break;
default:
break;
@@ -4540,18 +4542,27 @@ static void bond_free_all(void)
/*
* Convert string input module parms. Accept either the
- * number of the mode or its string name.
+ * number of the mode or its string name. A bit complicated because
+ * some mode names are substrings of other names, and calls from sysfs
+ * may have whitespace in the name (trailing newlines, for example).
*/
-int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl)
+int bond_parse_parm(const char *buf, struct bond_parm_tbl *tbl)
{
- int i;
+ int mode = -1, i, rv;
+ char modestr[BOND_MAX_MODENAME_LEN + 1] = { 0, };
+
+ rv = sscanf(buf, "%d", &mode);
+ if (!rv) {
+ rv = sscanf(buf, "%20s", modestr);
+ if (!rv)
+ return -1;
+ }
for (i = 0; tbl[i].modename; i++) {
- if ((isdigit(*mode_arg) &&
- tbl[i].mode == simple_strtol(mode_arg, NULL, 0)) ||
- (strcmp(mode_arg, tbl[i].modename) == 0)) {
+ if (mode == tbl[i].mode)
+ return tbl[i].mode;
+ if (strcmp(modestr, tbl[i].modename) == 0)
return tbl[i].mode;
- }
}
return -1;
@@ -4865,9 +4876,22 @@ static struct lock_class_key bonding_netdev_xmit_lock_key;
int bond_create(char *name, struct bond_params *params, struct bonding **newbond)
{
struct net_device *bond_dev;
+ struct bonding *bond, *nxt;
int res;
rtnl_lock();
+ down_write(&bonding_rwsem);
+
+ /* Check to see if the bond already exists. */
+ list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
+ if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
+ printk(KERN_ERR DRV_NAME
+ ": cannot add bond %s; it already exists\n",
+ name);
+ res = -EPERM;
+ goto out_rtnl;
+ }
+
bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "",
ether_setup);
if (!bond_dev) {
@@ -4906,10 +4930,12 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond
netif_carrier_off(bond_dev);
+ up_write(&bonding_rwsem);
rtnl_unlock(); /* allows sysfs registration of net device */
res = bond_create_sysfs_entry(bond_dev->priv);
if (res < 0) {
rtnl_lock();
+ down_write(&bonding_rwsem);
goto out_bond;
}
@@ -4920,6 +4946,7 @@ out_bond:
out_netdev:
free_netdev(bond_dev);
out_rtnl:
+ up_write(&bonding_rwsem);
rtnl_unlock();
return res;
}
@@ -4940,6 +4967,9 @@ static int __init bonding_init(void)
#ifdef CONFIG_PROC_FS
bond_create_proc_dir();
#endif
+
+ init_rwsem(&bonding_rwsem);
+
for (i = 0; i < max_bonds; i++) {
res = bond_create(NULL, &bonding_defaults, NULL);
if (res)
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 11b76b3..90a1f31 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -109,11 +109,10 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
{
char command[IFNAMSIZ + 1] = {0, };
char *ifname;
- int res = count;
+ int rv, res = count;
struct bonding *bond;
struct bonding *nxt;
- down_write(&(bonding_rwsem));
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
ifname = command + 1;
if ((strlen(command) <= 1) ||
@@ -121,39 +120,28 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
goto err_no_cmd;
if (command[0] == '+') {
-
- /* Check to see if the bond already exists. */
- list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
- if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
- printk(KERN_ERR DRV_NAME
- ": cannot add bond %s; it already exists\n",
- ifname);
- res = -EPERM;
- goto out;
- }
-
printk(KERN_INFO DRV_NAME
": %s is being created...\n", ifname);
- if (bond_create(ifname, &bonding_defaults, &bond)) {
- printk(KERN_INFO DRV_NAME
- ": %s interface already exists. Bond creation failed.\n",
- ifname);
- res = -EPERM;
+ rv = bond_create(ifname, &bonding_defaults, &bond);
+ if (rv) {
+ printk(KERN_INFO DRV_NAME ": Bond creation failed.\n");
+ res = rv;
}
goto out;
}
if (command[0] == '-') {
+ rtnl_lock();
+ down_write(&bonding_rwsem);
+
list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
- rtnl_lock();
/* check the ref count on the bond's kobject.
* If it's > expected, then there's a file open,
* and we have to fail.
*/
if (atomic_read(&bond->dev->dev.kobj.kref.refcount)
> expected_refcount){
- rtnl_unlock();
printk(KERN_INFO DRV_NAME
": Unable remove bond %s due to open references.\n",
ifname);
@@ -164,6 +152,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
": %s is being deleted...\n",
bond->dev->name);
bond_destroy(bond);
+ up_write(&bonding_rwsem);
rtnl_unlock();
goto out;
}
@@ -171,6 +160,8 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
printk(KERN_ERR DRV_NAME
": unable to delete non-existent bond %s\n", ifname);
res = -ENODEV;
+ up_write(&bonding_rwsem);
+ rtnl_unlock();
goto out;
}
@@ -183,7 +174,6 @@ err_no_cmd:
* get called forever, which is bad.
*/
out:
- up_write(&(bonding_rwsem));
return res;
}
/* class attribute for bond_masters file. This ends up in /sys/class/net */
@@ -271,6 +261,9 @@ static ssize_t bonding_store_slaves(struct device *d,
/* Note: We can't hold bond->lock here, as bond_create grabs it. */
+ rtnl_lock();
+ down_write(&(bonding_rwsem));
+
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
ifname = command + 1;
if ((strlen(command) <= 1) ||
@@ -336,12 +329,10 @@ static ssize_t bonding_store_slaves(struct device *d,
dev->mtu = bond->dev->mtu;
}
}
- rtnl_lock();
res = bond_enslave(bond->dev, dev);
bond_for_each_slave(bond, slave, i)
if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0)
slave->original_mtu = original_mtu;
- rtnl_unlock();
if (res) {
ret = res;
}
@@ -359,12 +350,10 @@ static ssize_t bonding_store_slaves(struct device *d,
if (dev) {
printk(KERN_INFO DRV_NAME ": %s: Removing slave %s\n",
bond->dev->name, dev->name);
- rtnl_lock();
if (bond->setup_by_slave)
res = bond_release_and_destroy(bond->dev, dev);
else
res = bond_release(bond->dev, dev);
- rtnl_unlock();
if (res) {
ret = res;
goto out;
@@ -389,6 +378,8 @@ err_no_cmd:
ret = -EPERM;
out:
+ up_write(&(bonding_rwsem));
+ rtnl_unlock();
return ret;
}
@@ -423,7 +414,7 @@ static ssize_t bonding_store_mode(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, bond_mode_tbl);
+ new_value = bond_parse_parm(buf, bond_mode_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid mode value %.*s.\n",
@@ -478,7 +469,7 @@ static ssize_t bonding_store_xmit_hash(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, xmit_hashtype_tbl);
+ new_value = bond_parse_parm(buf, xmit_hashtype_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid xmit hash policy value %.*s.\n",
@@ -518,7 +509,7 @@ static ssize_t bonding_store_arp_validate(struct device *d,
int new_value;
struct bonding *bond = to_bond(d);
- new_value = bond_parse_parm((char *)buf, arp_validate_tbl);
+ new_value = bond_parse_parm(buf, arp_validate_tbl);
if (new_value < 0) {
printk(KERN_ERR DRV_NAME
": %s: Ignoring invalid arp_validate value %s\n",
@@ -941,7 +932,7 @@ static ssize_t bonding_store_lacp(struct device *d,
goto out;
}
- new_value = bond_parse_parm((char *)buf, bond_lacp_tbl);
+ new_value = bond_parse_parm(buf, bond_lacp_tbl);
if ((new_value == 1) || (new_value == 0)) {
bond->params.lacp_fast = new_value;
@@ -1075,7 +1066,10 @@ static ssize_t bonding_store_primary(struct device *d,
struct slave *slave;
struct bonding *bond = to_bond(d);
- write_lock_bh(&bond->lock);
+ rtnl_lock();
+ read_lock(&bond->lock);
+ write_lock_bh(&bond->curr_slave_lock);
+
if (!USES_PRIMARY(bond->params.mode)) {
printk(KERN_INFO DRV_NAME
": %s: Unable to set primary slave; %s is in mode %d\n",
@@ -1109,8 +1103,8 @@ static ssize_t bonding_store_primary(struct device *d,
}
}
out:
- write_unlock_bh(&bond->lock);
-
+ write_unlock_bh(&bond->curr_slave_lock);
+ read_unlock(&bond->lock);
rtnl_unlock();
return count;
@@ -1190,7 +1184,8 @@ static ssize_t bonding_store_active_slave(struct device *d,
struct bonding *bond = to_bond(d);
rtnl_lock();
- write_lock_bh(&bond->lock);
+ read_lock(&bond->lock);
+ write_lock_bh(&bond->curr_slave_lock);
if (!USES_PRIMARY(bond->params.mode)) {
printk(KERN_INFO DRV_NAME
@@ -1247,7 +1242,8 @@ static ssize_t bonding_store_active_slave(struct device *d,
}
}
out:
- write_unlock_bh(&bond->lock);
+ write_unlock_bh(&bond->curr_slave_lock);
+ read_unlock(&bond->lock);
rtnl_unlock();
return count;
@@ -1418,8 +1414,6 @@ int bond_create_sysfs(void)
int ret = 0;
struct bonding *firstbond;
- init_rwsem(&bonding_rwsem);
-
/* get the netdev class pointer */
firstbond = container_of(bond_dev_list.next, struct bonding, bond_list);
if (!firstbond)
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
index e1e4734..6d83be4 100644
--- a/drivers/net/bonding/bonding.h
+++ b/drivers/net/bonding/bonding.h
@@ -141,6 +141,8 @@ struct bond_parm_tbl {
int mode;
};
+#define BOND_MAX_MODENAME_LEN 20
+
struct vlan_entry {
struct list_head vlan_list;
__be32 vlan_ip;
@@ -314,7 +316,7 @@ void bond_mii_monitor(struct work_struct *);
void bond_loadbalance_arp_mon(struct work_struct *);
void bond_activebackup_arp_mon(struct work_struct *);
void bond_set_mode_ops(struct bonding *bond, int mode);
-int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl);
+int bond_parse_parm(const char *mode_arg, struct bond_parm_tbl *tbl);
void bond_select_active_slave(struct bonding *bond);
void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
void bond_register_arp(struct bonding *);
diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c
index 6fd95a2..6e12d48 100644
--- a/drivers/net/cpmac.c
+++ b/drivers/net/cpmac.c
@@ -459,7 +459,7 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK;
len = max(skb->len, ETH_ZLEN);
- queue = skb->queue_mapping;
+ queue = skb_get_queue_mapping(skb);
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
netif_stop_subqueue(dev, queue);
#else
diff --git a/drivers/net/dl2k.c b/drivers/net/dl2k.c
index 47cce9c..e233d04 100644
--- a/drivers/net/dl2k.c
+++ b/drivers/net/dl2k.c
@@ -1316,9 +1316,10 @@ rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
("%02x:cur:%08x next:%08x status:%08x frag1:%08x frag0:%08x",
i,
(u32) (np->tx_ring_dma + i * sizeof (*desc)),
- (u32) desc->next_desc,
- (u32) desc->status, (u32) (desc->fraginfo >> 32),
- (u32) desc->fraginfo);
+ (u32)le64_to_cpu(desc->next_desc),
+ (u32)le64_to_cpu(desc->status),
+ (u32)(le64_to_cpu(desc->fraginfo) >> 32),
+ (u32)le64_to_cpu(desc->fraginfo));
printk ("\n");
}
printk ("\n");
@@ -1435,7 +1436,7 @@ mii_write (struct net_device *dev, int phy_addr, int reg_num, u16 data)
static int
mii_wait_link (struct net_device *dev, int wait)
{
- BMSR_t bmsr;
+ __u16 bmsr;
int phy_addr;
struct netdev_private *np;
@@ -1443,8 +1444,8 @@ mii_wait_link (struct net_device *dev, int wait)
phy_addr = np->phy_addr;
do {
- bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
- if (bmsr.bits.link_status)
+ bmsr = mii_read (dev, phy_addr, MII_BMSR);
+ if (bmsr & MII_BMSR_LINK_STATUS)
return 0;
mdelay (1);
} while (--wait > 0);
@@ -1453,70 +1454,72 @@ mii_wait_link (struct net_device *dev, int wait)
static int
mii_get_media (struct net_device *dev)
{
- ANAR_t negotiate;
- BMSR_t bmsr;
- BMCR_t bmcr;
- MSCR_t mscr;
- MSSR_t mssr;
+ __u16 negotiate;
+ __u16 bmsr;
+ __u16 mscr;
+ __u16 mssr;
int phy_addr;
struct netdev_private *np;
np = netdev_priv(dev);
phy_addr = np->phy_addr;
- bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
+ bmsr = mii_read (dev, phy_addr, MII_BMSR);
if (np->an_enable) {
- if (!bmsr.bits.an_complete) {
+ if (!(bmsr & MII_BMSR_AN_COMPLETE)) {
/* Auto-Negotiation not completed */
return -1;
}
- negotiate.image = mii_read (dev, phy_addr, MII_ANAR) &
+ negotiate = mii_read (dev, phy_addr, MII_ANAR) &
mii_read (dev, phy_addr, MII_ANLPAR);
- mscr.image = mii_read (dev, phy_addr, MII_MSCR);
- mssr.image = mii_read (dev, phy_addr, MII_MSSR);
- if (mscr.bits.media_1000BT_FD & mssr.bits.lp_1000BT_FD) {
+ mscr = mii_read (dev, phy_addr, MII_MSCR);
+ mssr = mii_read (dev, phy_addr, MII_MSSR);
+ if (mscr & MII_MSCR_1000BT_FD && mssr & MII_MSSR_LP_1000BT_FD) {
np->speed = 1000;
np->full_duplex = 1;
printk (KERN_INFO "Auto 1000 Mbps, Full duplex\n");
- } else if (mscr.bits.media_1000BT_HD & mssr.bits.lp_1000BT_HD) {
+ } else if (mscr & MII_MSCR_1000BT_HD && mssr & MII_MSSR_LP_1000BT_HD) {
np->speed = 1000;
np->full_duplex = 0;
printk (KERN_INFO "Auto 1000 Mbps, Half duplex\n");
- } else if (negotiate.bits.media_100BX_FD) {
+ } else if (negotiate & MII_ANAR_100BX_FD) {
np->speed = 100;
np->full_duplex = 1;
printk (KERN_INFO "Auto 100 Mbps, Full duplex\n");
- } else if (negotiate.bits.media_100BX_HD) {
+ } else if (negotiate & MII_ANAR_100BX_HD) {
np->speed = 100;
np->full_duplex = 0;
printk (KERN_INFO "Auto 100 Mbps, Half duplex\n");
- } else if (negotiate.bits.media_10BT_FD) {
+ } else if (negotiate & MII_ANAR_10BT_FD) {
np->speed = 10;
np->full_duplex = 1;
printk (KERN_INFO "Auto 10 Mbps, Full duplex\n");
- } else if (negotiate.bits.media_10BT_HD) {
+ } else if (negotiate & MII_ANAR_10BT_HD) {
np->speed = 10;
np->full_duplex = 0;
printk (KERN_INFO "Auto 10 Mbps, Half duplex\n");
}
- if (negotiate.bits.pause) {
+ if (negotiate & MII_ANAR_PAUSE) {
np->tx_flow &= 1;
np->rx_flow &= 1;
- } else if (negotiate.bits.asymmetric) {
+ } else if (negotiate & MII_ANAR_ASYMMETRIC) {
np->tx_flow = 0;
np->rx_flow &= 1;
}
/* else tx_flow, rx_flow = user select */
} else {
- bmcr.image = mii_read (dev, phy_addr, MII_BMCR);
- if (bmcr.bits.speed100 == 1 && bmcr.bits.speed1000 == 0) {
+ __u16 bmcr = mii_read (dev, phy_addr, MII_BMCR);
+ switch (bmcr & (MII_BMCR_SPEED_100 | MII_BMCR_SPEED_1000)) {
+ case MII_BMCR_SPEED_1000:
+ printk (KERN_INFO "Operating at 1000 Mbps, ");
+ break;
+ case MII_BMCR_SPEED_100:
printk (KERN_INFO "Operating at 100 Mbps, ");
- } else if (bmcr.bits.speed100 == 0 && bmcr.bits.speed1000 == 0) {
+ break;
+ case 0:
printk (KERN_INFO "Operating at 10 Mbps, ");
- } else if (bmcr.bits.speed100 == 0 && bmcr.bits.speed1000 == 1) {
- printk (KERN_INFO "Operating at 1000 Mbps, ");
}
- if (bmcr.bits.duplex_mode) {
+ if (bmcr & MII_BMCR_DUPLEX_MODE) {
printk ("Full duplex\n");
} else {
printk ("Half duplex\n");
@@ -1537,10 +1540,10 @@ mii_get_media (struct net_device *dev)
static int
mii_set_media (struct net_device *dev)
{
- PHY_SCR_t pscr;
- BMCR_t bmcr;
- BMSR_t bmsr;
- ANAR_t anar;
+ __u16 pscr;
+ __u16 bmcr;
+ __u16 bmsr;
+ __u16 anar;
int phy_addr;
struct netdev_private *np;
np = netdev_priv(dev);
@@ -1549,76 +1552,77 @@ mii_set_media (struct net_device *dev)
/* Does user set speed? */
if (np->an_enable) {
/* Advertise capabilities */
- bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
- anar.image = mii_read (dev, phy_addr, MII_ANAR);
- anar.bits.media_100BX_FD = bmsr.bits.media_100BX_FD;
- anar.bits.media_100BX_HD = bmsr.bits.media_100BX_HD;
- anar.bits.media_100BT4 = bmsr.bits.media_100BT4;
- anar.bits.media_10BT_FD = bmsr.bits.media_10BT_FD;
- anar.bits.media_10BT_HD = bmsr.bits.media_10BT_HD;
- anar.bits.pause = 1;
- anar.bits.asymmetric = 1;
- mii_write (dev, phy_addr, MII_ANAR, anar.image);
+ bmsr = mii_read (dev, phy_addr, MII_BMSR);
+ anar = mii_read (dev, phy_addr, MII_ANAR) &
+ ~MII_ANAR_100BX_FD &
+ ~MII_ANAR_100BX_HD &
+ ~MII_ANAR_100BT4 &
+ ~MII_ANAR_10BT_FD &
+ ~MII_ANAR_10BT_HD;
+ if (bmsr & MII_BMSR_100BX_FD)
+ anar |= MII_ANAR_100BX_FD;
+ if (bmsr & MII_BMSR_100BX_HD)
+ anar |= MII_ANAR_100BX_HD;
+ if (bmsr & MII_BMSR_100BT4)
+ anar |= MII_ANAR_100BT4;
+ if (bmsr & MII_BMSR_10BT_FD)
+ anar |= MII_ANAR_10BT_FD;
+ if (bmsr & MII_BMSR_10BT_HD)
+ anar |= MII_ANAR_10BT_HD;
+ anar |= MII_ANAR_PAUSE | MII_ANAR_ASYMMETRIC;
+ mii_write (dev, phy_addr, MII_ANAR, anar);
/* Enable Auto crossover */
- pscr.image = mii_read (dev, phy_addr, MII_PHY_SCR);
- pscr.bits.mdi_crossover_mode = 3; /* 11'b */
- mii_write (dev, phy_addr, MII_PHY_SCR, pscr.image);
+ pscr = mii_read (dev, phy_addr, MII_PHY_SCR);
+ pscr |= 3 << 5; /* 11'b */
+ mii_write (dev, phy_addr, MII_PHY_SCR, pscr);
/* Soft reset PHY */
mii_write (dev, phy_addr, MII_BMCR, MII_BMCR_RESET);
- bmcr.image = 0;
- bmcr.bits.an_enable = 1;
- bmcr.bits.restart_an = 1;
- bmcr.bits.reset = 1;
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ bmcr = MII_BMCR_AN_ENABLE | MII_BMCR_RESTART_AN | MII_BMCR_RESET;
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay(1);
} else {
/* Force speed setting */
/* 1) Disable Auto crossover */
- pscr.image = mii_read (dev, phy_addr, MII_PHY_SCR);
- pscr.bits.mdi_crossover_mode = 0;
- mii_write (dev, phy_addr, MII_PHY_SCR, pscr.image);
+ pscr = mii_read (dev, phy_addr, MII_PHY_SCR);
+ pscr &= ~(3 << 5);
+ mii_write (dev, phy_addr, MII_PHY_SCR, pscr);
/* 2) PHY Reset */
- bmcr.image = mii_read (dev, phy_addr, MII_BMCR);
- bmcr.bits.reset = 1;
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ bmcr = mii_read (dev, phy_addr, MII_BMCR);
+ bmcr |= MII_BMCR_RESET;
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
/* 3) Power Down */
- bmcr.image = 0x1940; /* must be 0x1940 */
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ bmcr = 0x1940; /* must be 0x1940 */
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay (100); /* wait a certain time */
/* 4) Advertise nothing */
mii_write (dev, phy_addr, MII_ANAR, 0);
/* 5) Set media and Power Up */
- bmcr.image = 0;
- bmcr.bits.power_down = 1;
+ bmcr = MII_BMCR_POWER_DOWN;
if (np->speed == 100) {
- bmcr.bits.speed100 = 1;
- bmcr.bits.speed1000 = 0;
+ bmcr |= MII_BMCR_SPEED_100;
printk (KERN_INFO "Manual 100 Mbps, ");
} else if (np->speed == 10) {
- bmcr.bits.speed100 = 0;
- bmcr.bits.speed1000 = 0;
printk (KERN_INFO "Manual 10 Mbps, ");
}
if (np->full_duplex) {
- bmcr.bits.duplex_mode = 1;
+ bmcr |= MII_BMCR_DUPLEX_MODE;
printk ("Full duplex\n");
} else {
- bmcr.bits.duplex_mode = 0;
printk ("Half duplex\n");
}
#if 0
/* Set 1000BaseT Master/Slave setting */
- mscr.image = mii_read (dev, phy_addr, MII_MSCR);
- mscr.bits.cfg_enable = 1;
- mscr.bits.cfg_value = 0;
+ mscr = mii_read (dev, phy_addr, MII_MSCR);
+ mscr |= MII_MSCR_CFG_ENABLE;
+ mscr &= ~MII_MSCR_CFG_VALUE = 0;
#endif
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay(10);
}
return 0;
@@ -1627,43 +1631,42 @@ mii_set_media (struct net_device *dev)
static int
mii_get_media_pcs (struct net_device *dev)
{
- ANAR_PCS_t negotiate;
- BMSR_t bmsr;
- BMCR_t bmcr;
+ __u16 negotiate;
+ __u16 bmsr;
int phy_addr;
struct netdev_private *np;
np = netdev_priv(dev);
phy_addr = np->phy_addr;
- bmsr.image = mii_read (dev, phy_addr, PCS_BMSR);
+ bmsr = mii_read (dev, phy_addr, PCS_BMSR);
if (np->an_enable) {
- if (!bmsr.bits.an_complete) {
+ if (!(bmsr & MII_BMSR_AN_COMPLETE)) {
/* Auto-Negotiation not completed */
return -1;
}
- negotiate.image = mii_read (dev, phy_addr, PCS_ANAR) &
+ negotiate = mii_read (dev, phy_addr, PCS_ANAR) &
mii_read (dev, phy_addr, PCS_ANLPAR);
np->speed = 1000;
- if (negotiate.bits.full_duplex) {
+ if (negotiate & PCS_ANAR_FULL_DUPLEX) {
printk (KERN_INFO "Auto 1000 Mbps, Full duplex\n");
np->full_duplex = 1;
} else {
printk (KERN_INFO "Auto 1000 Mbps, half duplex\n");
np->full_duplex = 0;
}
- if (negotiate.bits.pause) {
+ if (negotiate & PCS_ANAR_PAUSE) {
np->tx_flow &= 1;
np->rx_flow &= 1;
- } else if (negotiate.bits.asymmetric) {
+ } else if (negotiate & PCS_ANAR_ASYMMETRIC) {
np->tx_flow = 0;
np->rx_flow &= 1;
}
/* else tx_flow, rx_flow = user select */
} else {
- bmcr.image = mii_read (dev, phy_addr, PCS_BMCR);
+ __u16 bmcr = mii_read (dev, phy_addr, PCS_BMCR);
printk (KERN_INFO "Operating at 1000 Mbps, ");
- if (bmcr.bits.duplex_mode) {
+ if (bmcr & MII_BMCR_DUPLEX_MODE) {
printk ("Full duplex\n");
} else {
printk ("Half duplex\n");
@@ -1684,9 +1687,9 @@ mii_get_media_pcs (struct net_device *dev)
static int
mii_set_media_pcs (struct net_device *dev)
{
- BMCR_t bmcr;
- ESR_t esr;
- ANAR_PCS_t anar;
+ __u16 bmcr;
+ __u16 esr;
+ __u16 anar;
int phy_addr;
struct netdev_private *np;
np = netdev_priv(dev);
@@ -1695,41 +1698,37 @@ mii_set_media_pcs (struct net_device *dev)
/* Auto-Negotiation? */
if (np->an_enable) {
/* Advertise capabilities */
- esr.image = mii_read (dev, phy_addr, PCS_ESR);
- anar.image = mii_read (dev, phy_addr, MII_ANAR);
- anar.bits.half_duplex =
- esr.bits.media_1000BT_HD | esr.bits.media_1000BX_HD;
- anar.bits.full_duplex =
- esr.bits.media_1000BT_FD | esr.bits.media_1000BX_FD;
- anar.bits.pause = 1;
- anar.bits.asymmetric = 1;
- mii_write (dev, phy_addr, MII_ANAR, anar.image);
+ esr = mii_read (dev, phy_addr, PCS_ESR);
+ anar = mii_read (dev, phy_addr, MII_ANAR) &
+ ~PCS_ANAR_HALF_DUPLEX &
+ ~PCS_ANAR_FULL_DUPLEX;
+ if (esr & (MII_ESR_1000BT_HD | MII_ESR_1000BX_HD))
+ anar |= PCS_ANAR_HALF_DUPLEX;
+ if (esr & (MII_ESR_1000BT_FD | MII_ESR_1000BX_FD))
+ anar |= PCS_ANAR_FULL_DUPLEX;
+ anar |= PCS_ANAR_PAUSE | PCS_ANAR_ASYMMETRIC;
+ mii_write (dev, phy_addr, MII_ANAR, anar);
/* Soft reset PHY */
mii_write (dev, phy_addr, MII_BMCR, MII_BMCR_RESET);
- bmcr.image = 0;
- bmcr.bits.an_enable = 1;
- bmcr.bits.restart_an = 1;
- bmcr.bits.reset = 1;
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ bmcr = MII_BMCR_AN_ENABLE | MII_BMCR_RESTART_AN |
+ MII_BMCR_RESET;
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay(1);
} else {
/* Force speed setting */
/* PHY Reset */
- bmcr.image = 0;
- bmcr.bits.reset = 1;
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ bmcr = MII_BMCR_RESET;
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay(10);
- bmcr.image = 0;
- bmcr.bits.an_enable = 0;
if (np->full_duplex) {
- bmcr.bits.duplex_mode = 1;
+ bmcr = MII_BMCR_DUPLEX_MODE;
printk (KERN_INFO "Manual full duplex\n");
} else {
- bmcr.bits.duplex_mode = 0;
+ bmcr = 0;
printk (KERN_INFO "Manual half duplex\n");
}
- mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
+ mii_write (dev, phy_addr, MII_BMCR, bmcr);
mdelay(10);
/* Advertise nothing */
diff --git a/drivers/net/dl2k.h b/drivers/net/dl2k.h
index 014b77c..d66c605 100644
--- a/drivers/net/dl2k.h
+++ b/drivers/net/dl2k.h
@@ -298,23 +298,6 @@ enum _pcs_reg {
};
/* Basic Mode Control Register */
-typedef union t_MII_BMCR {
- u16 image;
- struct {
- u16 _bit_5_0:6; // bit 5:0
- u16 speed1000:1; // bit 6
- u16 col_test_enable:1; // bit 7
- u16 duplex_mode:1; // bit 8
- u16 restart_an:1; // bit 9
- u16 isolate:1; // bit 10
- u16 power_down:1; // bit 11
- u16 an_enable:1; // bit 12
- u16 speed100:1; // bit 13
- u16 loopback:1; // bit 14
- u16 reset:1; // bit 15
- } bits;
-} BMCR_t, *PBMCR_t;
-
enum _mii_bmcr {
MII_BMCR_RESET = 0x8000,
MII_BMCR_LOOP_BACK = 0x4000,
@@ -333,28 +316,6 @@ enum _mii_bmcr {
};
/* Basic Mode Status Register */
-typedef union t_MII_BMSR {
- u16 image;
- struct {
- u16 ext_capability:1; // bit 0
- u16 japper_detect:1; // bit 1
- u16 link_status:1; // bit 2
- u16 an_ability:1; // bit 3
- u16 remote_fault:1; // bit 4
- u16 an_complete:1; // bit 5
- u16 preamble_supp:1; // bit 6
- u16 _bit_7:1; // bit 7
- u16 ext_status:1; // bit 8
- u16 media_100BT2_HD:1; // bit 9
- u16 media_100BT2_FD:1; // bit 10
- u16 media_10BT_HD:1; // bit 11
- u16 media_10BT_FD:1; // bit 12
- u16 media_100BX_HD:1; // bit 13
- u16 media_100BX_FD:1; // bit 14
- u16 media_100BT4:1; // bit 15
- } bits;
-} BMSR_t, *PBMSR_t;
-
enum _mii_bmsr {
MII_BMSR_100BT4 = 0x8000,
MII_BMSR_100BX_FD = 0x4000,
@@ -374,24 +335,6 @@ enum _mii_bmsr {
};
/* ANAR */
-typedef union t_MII_ANAR {
- u16 image;
- struct {
- u16 selector:5; // bit 4:0
- u16 media_10BT_HD:1; // bit 5
- u16 media_10BT_FD:1; // bit 6
- u16 media_100BX_HD:1; // bit 7
- u16 media_100BX_FD:1; // bit 8
- u16 media_100BT4:1; // bit 9
- u16 pause:1; // bit 10
- u16 asymmetric:1; // bit 11
- u16 _bit12:1; // bit 12
- u16 remote_fault:1; // bit 13
- u16 _bit14:1; // bit 14
- u16 next_page:1; // bit 15
- } bits;
-} ANAR_t, *PANAR_t;
-
enum _mii_anar {
MII_ANAR_NEXT_PAGE = 0x8000,
MII_ANAR_REMOTE_FAULT = 0x4000,
@@ -407,24 +350,6 @@ enum _mii_anar {
};
/* ANLPAR */
-typedef union t_MII_ANLPAR {
- u16 image;
- struct {
- u16 selector:5; // bit 4:0
- u16 media_10BT_HD:1; // bit 5
- u16 media_10BT_FD:1; // bit 6
- u16 media_100BX_HD:1; // bit 7
- u16 media_100BX_FD:1; // bit 8
- u16 media_100BT4:1; // bit 9
- u16 pause:1; // bit 10
- u16 asymmetric:1; // bit 11
- u16 _bit12:1; // bit 12
- u16 remote_fault:1; // bit 13
- u16 _bit14:1; // bit 14
- u16 next_page:1; // bit 15
- } bits;
-} ANLPAR_t, *PANLPAR_t;
-
enum _mii_anlpar {
MII_ANLPAR_NEXT_PAGE = MII_ANAR_NEXT_PAGE,
MII_ANLPAR_REMOTE_FAULT = MII_ANAR_REMOTE_FAULT,
@@ -439,18 +364,6 @@ enum _mii_anlpar {
};
/* Auto-Negotiation Expansion Register */
-typedef union t_MII_ANER {
- u16 image;
- struct {
- u16 lp_negotiable:1; // bit 0
- u16 page_received:1; // bit 1
- u16 nextpagable:1; // bit 2
- u16 lp_nextpagable:1; // bit 3
- u16 pdetect_fault:1; // bit 4
- u16 _bit15_5:11; // bit 15:5
- } bits;
-} ANER_t, *PANER_t;
-
enum _mii_aner {
MII_ANER_PAR_DETECT_FAULT = 0x0010,
MII_ANER_LP_NEXTPAGABLE = 0x0008,
@@ -460,19 +373,6 @@ enum _mii_aner {
};
/* MASTER-SLAVE Control Register */
-typedef union t_MII_MSCR {
- u16 image;
- struct {
- u16 _bit_7_0:8; // bit 7:0
- u16 media_1000BT_HD:1; // bit 8
- u16 media_1000BT_FD:1; // bit 9
- u16 port_type:1; // bit 10
- u16 cfg_value:1; // bit 11
- u16 cfg_enable:1; // bit 12
- u16 test_mode:3; // bit 15:13
- } bits;
-} MSCR_t, *PMSCR_t;
-
enum _mii_mscr {
MII_MSCR_TEST_MODE = 0xe000,
MII_MSCR_CFG_ENABLE = 0x1000,
@@ -483,20 +383,6 @@ enum _mii_mscr {
};
/* MASTER-SLAVE Status Register */
-typedef union t_MII_MSSR {
- u16 image;
- struct {
- u16 idle_err_count:8; // bit 7:0
- u16 _bit_9_8:2; // bit 9:8
- u16 lp_1000BT_HD:1; // bit 10
- u16 lp_1000BT_FD:1; // bit 11
- u16 remote_rcv_status:1; // bit 12
- u16 local_rcv_status:1; // bit 13
- u16 cfg_resolution:1; // bit 14
- u16 cfg_fault:1; // bit 15
- } bits;
-} MSSR_t, *PMSSR_t;
-
enum _mii_mssr {
MII_MSSR_CFG_FAULT = 0x8000,
MII_MSSR_CFG_RES = 0x4000,
@@ -508,17 +394,6 @@ enum _mii_mssr {
};
/* IEEE Extened Status Register */
-typedef union t_MII_ESR {
- u16 image;
- struct {
- u16 _bit_11_0:12; // bit 11:0
- u16 media_1000BT_HD:2; // bit 12
- u16 media_1000BT_FD:1; // bit 13
- u16 media_1000BX_HD:1; // bit 14
- u16 media_1000BX_FD:1; // bit 15
- } bits;
-} ESR_t, *PESR_t;
-
enum _mii_esr {
MII_ESR_1000BX_FD = 0x8000,
MII_ESR_1000BX_HD = 0x4000,
@@ -526,6 +401,7 @@ enum _mii_esr {
MII_ESR_1000BT_HD = 0x1000,
};
/* PHY Specific Control Register */
+#if 0
typedef union t_MII_PHY_SCR {
u16 image;
struct {
@@ -543,6 +419,7 @@ typedef union t_MII_PHY_SCR {
u16 xmit_fifo_depth:2; // bit 15:14
} bits;
} PHY_SCR_t, *PPHY_SCR_t;
+#endif
typedef enum t_MII_ADMIN_STATUS {
adm_reset,
@@ -556,21 +433,6 @@ typedef enum t_MII_ADMIN_STATUS {
/* PCS control and status registers bitmap as the same as MII */
/* PCS Extended Status register bitmap as the same as MII */
/* PCS ANAR */
-typedef union t_PCS_ANAR {
- u16 image;
- struct {
- u16 _bit_4_0:5; // bit 4:0
- u16 full_duplex:1; // bit 5
- u16 half_duplex:1; // bit 6
- u16 asymmetric:1; // bit 7
- u16 pause:1; // bit 8
- u16 _bit_11_9:3; // bit 11:9
- u16 remote_fault:2; // bit 13:12
- u16 _bit_14:1; // bit 14
- u16 next_page:1; // bit 15
- } bits;
-} ANAR_PCS_t, *PANAR_PCS_t;
-
enum _pcs_anar {
PCS_ANAR_NEXT_PAGE = 0x8000,
PCS_ANAR_REMOTE_FAULT = 0x3000,
@@ -580,21 +442,6 @@ enum _pcs_anar {
PCS_ANAR_FULL_DUPLEX = 0x0020,
};
/* PCS ANLPAR */
-typedef union t_PCS_ANLPAR {
- u16 image;
- struct {
- u16 _bit_4_0:5; // bit 4:0
- u16 full_duplex:1; // bit 5
- u16 half_duplex:1; // bit 6
- u16 asymmetric:1; // bit 7
- u16 pause:1; // bit 8
- u16 _bit_11_9:3; // bit 11:9
- u16 remote_fault:2; // bit 13:12
- u16 _bit_14:1; // bit 14
- u16 next_page:1; // bit 15
- } bits;
-} ANLPAR_PCS_t, *PANLPAR_PCS_t;
-
enum _pcs_anlpar {
PCS_ANLPAR_NEXT_PAGE = PCS_ANAR_NEXT_PAGE,
PCS_ANLPAR_REMOTE_FAULT = PCS_ANAR_REMOTE_FAULT,
diff --git a/drivers/net/ipg.c b/drivers/net/ipg.c
index dbd23bb..50f0c17 100644
--- a/drivers/net/ipg.c
+++ b/drivers/net/ipg.c
@@ -857,21 +857,14 @@ static void init_tfdlist(struct net_device *dev)
static void ipg_nic_txfree(struct net_device *dev)
{
struct ipg_nic_private *sp = netdev_priv(dev);
- void __iomem *ioaddr = sp->ioaddr;
- unsigned int curr;
- u64 txd_map;
- unsigned int released, pending;
-
- txd_map = (u64)sp->txd_map;
- curr = ipg_r32(TFD_LIST_PTR_0) -
- do_div(txd_map, sizeof(struct ipg_tx)) - 1;
+ unsigned int released, pending, dirty;
IPG_DEBUG_MSG("_nic_txfree\n");
pending = sp->tx_current - sp->tx_dirty;
+ dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH;
for (released = 0; released < pending; released++) {
- unsigned int dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH;
struct sk_buff *skb = sp->TxBuff[dirty];
struct ipg_tx *txfd = sp->txd + dirty;
@@ -882,11 +875,8 @@ static void ipg_nic_txfree(struct net_device *dev)
* If the TFDDone bit is set, free the associated
* buffer.
*/
- if (dirty == curr)
- break;
-
- /* Setup TFDDONE for compatible issue. */
- txfd->tfc |= cpu_to_le64(IPG_TFC_TFDDONE);
+ if (!(txfd->tfc & cpu_to_le64(IPG_TFC_TFDDONE)))
+ break;
/* Free the transmit buffer. */
if (skb) {
@@ -898,6 +888,7 @@ static void ipg_nic_txfree(struct net_device *dev)
sp->TxBuff[dirty] = NULL;
}
+ dirty = (dirty + 1) % IPG_TFDLIST_LENGTH;
}
sp->tx_dirty += released;
@@ -1630,6 +1621,8 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst)
#ifdef JUMBO_FRAME
ipg_nic_rxrestore(dev);
#endif
+ spin_lock(&sp->lock);
+
/* Get interrupt source information, and acknowledge
* some (i.e. TxDMAComplete, RxDMAComplete, RxEarly,
* IntRequested, MacControlFrame, LinkEvent) interrupts
@@ -1647,9 +1640,7 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst)
handled = 1;
if (unlikely(!netif_running(dev)))
- goto out;
-
- spin_lock(&sp->lock);
+ goto out_unlock;
/* If RFDListEnd interrupt, restore all used RFDs. */
if (status & IPG_IS_RFD_LIST_END) {
@@ -1733,9 +1724,9 @@ out_enable:
ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE |
IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE |
IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE);
-
+out_unlock:
spin_unlock(&sp->lock);
-out:
+
return IRQ_RETVAL(handled);
}
@@ -1943,10 +1934,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
*/
if (sp->tenmbpsmode)
txfd->tfc |= cpu_to_le64(IPG_TFC_TXINDICATE);
- else if (!((sp->tx_current - sp->tx_dirty + 1) >
- IPG_FRAMESBETWEENTXDMACOMPLETES)) {
- txfd->tfc |= cpu_to_le64(IPG_TFC_TXDMAINDICATE);
- }
+ txfd->tfc |= cpu_to_le64(IPG_TFC_TXDMAINDICATE);
/* Based on compilation option, determine if FCS is to be
* appended to transmit frame by IPG.
*/
@@ -2003,7 +1991,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
ipg_w32(IPG_DC_TX_DMA_POLL_NOW, DMA_CTRL);
if (sp->tx_current == (sp->tx_dirty + IPG_TFDLIST_LENGTH))
- netif_wake_queue(dev);
+ netif_stop_queue(dev);
spin_unlock_irqrestore(&sp->lock, flags);
diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c
index 2881777..36a7ba3 100644
--- a/drivers/net/pcmcia/3c574_cs.c
+++ b/drivers/net/pcmcia/3c574_cs.c
@@ -187,14 +187,16 @@ enum Window1 {
enum Window3 { /* Window 3: MAC/config bits. */
Wn3_Config=0, Wn3_MAC_Ctrl=6, Wn3_Options=8,
};
-union wn3_config {
- int i;
- struct w3_config_fields {
- unsigned int ram_size:3, ram_width:1, ram_speed:2, rom_size:2;
- int pad8:8;
- unsigned int ram_split:2, pad18:2, xcvr:3, pad21:1, autoselect:1;
- int pad24:7;
- } u;
+enum wn3_config {
+ Ram_size = 7,
+ Ram_width = 8,
+ Ram_speed = 0x30,
+ Rom_size = 0xc0,
+ Ram_split_shift = 16,
+ Ram_split = 3 << Ram_split_shift,
+ Xcvr_shift = 20,
+ Xcvr = 7 << Xcvr_shift,
+ Autoselect = 0x1000000,
};
enum Window4 { /* Window 4: Xcvr/media bits. */
@@ -342,7 +344,7 @@ static int tc574_config(struct pcmcia_device *link)
kio_addr_t ioaddr;
__be16 *phys_addr;
char *cardname;
- union wn3_config config;
+ __u32 config;
DECLARE_MAC_BUF(mac);
phys_addr = (__be16 *)dev->dev_addr;
@@ -401,9 +403,9 @@ static int tc574_config(struct pcmcia_device *link)
outw(0<<11, ioaddr + RunnerRdCtrl);
printk(KERN_INFO " ASIC rev %d,", mcr>>3);
EL3WINDOW(3);
- config.i = inl(ioaddr + Wn3_Config);
- lp->default_media = config.u.xcvr;
- lp->autoselect = config.u.autoselect;
+ config = inl(ioaddr + Wn3_Config);
+ lp->default_media = (config & Xcvr) >> Xcvr_shift;
+ lp->autoselect = config & Autoselect ? 1 : 0;
}
init_timer(&lp->media);
@@ -464,8 +466,9 @@ static int tc574_config(struct pcmcia_device *link)
dev->name, cardname, dev->base_addr, dev->irq,
print_mac(mac, dev->dev_addr));
printk(" %dK FIFO split %s Rx:Tx, %sMII interface.\n",
- 8 << config.u.ram_size, ram_split[config.u.ram_split],
- config.u.autoselect ? "autoselect " : "");
+ 8 << config & Ram_size,
+ ram_split[(config & Ram_split) >> Ram_split_shift],
+ config & Autoselect ? "autoselect " : "");
return 0;
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index fa57c49..f2ba944 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -84,7 +84,7 @@
#include "s2io.h"
#include "s2io-regs.h"
-#define DRV_VERSION "2.0.26.10"
+#define DRV_VERSION "2.0.26.17"
/* S2io Driver name & version. */
static char s2io_driver_name[] = "Neterion";
@@ -3848,8 +3848,6 @@ static int s2io_open(struct net_device *dev)
netif_carrier_off(dev);
sp->last_link_state = 0;
- napi_enable(&sp->napi);
-
if (sp->config.intr_type == MSI_X) {
int ret = s2io_enable_msi_x(sp);
@@ -3892,7 +3890,6 @@ static int s2io_open(struct net_device *dev)
return 0;
hw_init_failed:
- napi_disable(&sp->napi);
if (sp->config.intr_type == MSI_X) {
if (sp->entries) {
kfree(sp->entries);
@@ -3932,7 +3929,6 @@ static int s2io_close(struct net_device *dev)
return 0;
netif_stop_queue(dev);
- napi_disable(&sp->napi);
/* Reset card, kill tasklet and free Tx and Rx buffers. */
s2io_card_down(sp);
@@ -6796,6 +6792,8 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io)
struct XENA_dev_config __iomem *bar0 = sp->bar0;
unsigned long flags;
register u64 val64 = 0;
+ struct config_param *config;
+ config = &sp->config;
if (!is_s2io_card_up(sp))
return;
@@ -6807,6 +6805,10 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io)
}
clear_bit(__S2IO_STATE_CARD_UP, &sp->state);
+ /* Disable napi */
+ if (config->napi)
+ napi_disable(&sp->napi);
+
/* disable Tx and Rx traffic on the NIC */
if (do_io)
stop_nic(sp);
@@ -6900,6 +6902,11 @@ static int s2io_card_up(struct s2io_nic * sp)
DBG_PRINT(INFO_DBG, "Buf in ring:%d is %d:\n", i,
atomic_read(&sp->rx_bufs_left[i]));
}
+
+ /* Initialise napi */
+ if (config->napi)
+ napi_enable(&sp->napi);
+
/* Maintain the state prior to the open */
if (sp->promisc_flg)
sp->promisc_flg = 0;
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 7023bbe..bc15940 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -3949,7 +3949,7 @@ static __exit void sky2_debug_cleanup(void)
/* Initialize network device */
static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
unsigned port,
- int highmem)
+ int highmem, int wol)
{
struct sky2_port *sky2;
struct net_device *dev = alloc_etherdev(sizeof(*sky2));
@@ -3989,7 +3989,7 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
sky2->speed = -1;
sky2->advertising = sky2_supported_modes(hw);
sky2->rx_csum = (hw->chip_id != CHIP_ID_YUKON_XL);
- sky2->wol = sky2_wol_supported(hw) & WAKE_MAGIC;
+ sky2->wol = wol;
spin_lock_init(&sky2->phy_lock);
sky2->tx_pending = TX_DEF_PENDING;
@@ -4086,12 +4086,24 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw)
return err;
}
+static int __devinit pci_wake_enabled(struct pci_dev *dev)
+{
+ int pm = pci_find_capability(dev, PCI_CAP_ID_PM);
+ u16 value;
+
+ if (!pm)
+ return 0;
+ if (pci_read_config_word(dev, pm + PCI_PM_CTRL, &value))
+ return 0;
+ return value & PCI_PM_CTRL_PME_ENABLE;
+}
+
static int __devinit sky2_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
struct net_device *dev;
struct sky2_hw *hw;
- int err, using_dac = 0;
+ int err, using_dac = 0, wol_default;
err = pci_enable_device(pdev);
if (err) {
@@ -4124,6 +4136,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
}
}
+ wol_default = pci_wake_enabled(pdev) ? WAKE_MAGIC : 0;
+
err = -ENOMEM;
hw = kzalloc(sizeof(*hw), GFP_KERNEL);
if (!hw) {
@@ -4167,7 +4181,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
sky2_reset(hw);
- dev = sky2_init_netdev(hw, 0, using_dac);
+ dev = sky2_init_netdev(hw, 0, using_dac, wol_default);
if (!dev) {
err = -ENOMEM;
goto err_out_free_pci;
@@ -4204,7 +4218,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
if (hw->ports > 1) {
struct net_device *dev1;
- dev1 = sky2_init_netdev(hw, 1, using_dac);
+ dev1 = sky2_init_netdev(hw, 1, using_dac, wol_default);
if (!dev1)
dev_warn(&pdev->dev, "allocation for second device failed\n");
else if ((err = register_netdev(dev1))) {
diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c
index 33dc713..c6f26e2 100644
--- a/drivers/net/wan/dscc4.c
+++ b/drivers/net/wan/dscc4.c
@@ -139,19 +139,21 @@ struct thingie {
};
struct TxFD {
- u32 state;
- u32 next;
- u32 data;
- u32 complete;
+ __le32 state;
+ __le32 next;
+ __le32 data;
+ __le32 complete;
u32 jiffies; /* Allows sizeof(TxFD) == sizeof(RxFD) + extra hack */
+ /* FWIW, datasheet calls that "dummy" and says that card
+ * never looks at it; neither does the driver */
};
struct RxFD {
- u32 state1;
- u32 next;
- u32 data;
- u32 state2;
- u32 end;
+ __le32 state1;
+ __le32 next;
+ __le32 data;
+ __le32 state2;
+ __le32 end;
};
#define DUMMY_SKB_SIZE 64
@@ -181,7 +183,7 @@ struct RxFD {
#define SCC_REG_START(dpriv) (SCC_START+(dpriv->dev_id)*SCC_OFFSET)
struct dscc4_pci_priv {
- u32 *iqcfg;
+ __le32 *iqcfg;
int cfg_cur;
spinlock_t lock;
struct pci_dev *pdev;
@@ -197,8 +199,8 @@ struct dscc4_dev_priv {
struct RxFD *rx_fd;
struct TxFD *tx_fd;
- u32 *iqrx;
- u32 *iqtx;
+ __le32 *iqrx;
+ __le32 *iqtx;
/* FIXME: check all the volatile are required */
volatile u32 tx_current;
@@ -298,7 +300,7 @@ struct dscc4_dev_priv {
#define BrrExpMask 0x00000f00
#define BrrMultMask 0x0000003f
#define EncodingMask 0x00700000
-#define Hold 0x40000000
+#define Hold cpu_to_le32(0x40000000)
#define SccBusy 0x10000000
#define PowerUp 0x80000000
#define Vis 0x00001000
@@ -307,14 +309,14 @@ struct dscc4_dev_priv {
#define FrameRdo 0x40
#define FrameCrc 0x20
#define FrameRab 0x10
-#define FrameAborted 0x00000200
-#define FrameEnd 0x80000000
-#define DataComplete 0x40000000
+#define FrameAborted cpu_to_le32(0x00000200)
+#define FrameEnd cpu_to_le32(0x80000000)
+#define DataComplete cpu_to_le32(0x40000000)
#define LengthCheck 0x00008000
#define SccEvt 0x02000000
#define NoAck 0x00000200
#define Action 0x00000001
-#define HiDesc 0x20000000
+#define HiDesc cpu_to_le32(0x20000000)
/* SCC events */
#define RxEvt 0xf0000000
@@ -489,8 +491,8 @@ static void dscc4_release_ring(struct dscc4_dev_priv *dpriv)
skbuff = dpriv->tx_skbuff;
for (i = 0; i < TX_RING_SIZE; i++) {
if (*skbuff) {
- pci_unmap_single(pdev, tx_fd->data, (*skbuff)->len,
- PCI_DMA_TODEVICE);
+ pci_unmap_single(pdev, le32_to_cpu(tx_fd->data),
+ (*skbuff)->len, PCI_DMA_TODEVICE);
dev_kfree_skb(*skbuff);
}
skbuff++;
@@ -500,7 +502,7 @@ static void dscc4_release_ring(struct dscc4_dev_priv *dpriv)
skbuff = dpriv->rx_skbuff;
for (i = 0; i < RX_RING_SIZE; i++) {
if (*skbuff) {
- pci_unmap_single(pdev, rx_fd->data,
+ pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
dev_kfree_skb(*skbuff);
}
@@ -522,10 +524,10 @@ static inline int try_get_rx_skb(struct dscc4_dev_priv *dpriv,
dpriv->rx_skbuff[dirty] = skb;
if (skb) {
skb->protocol = hdlc_type_trans(skb, dev);
- rx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data,
- len, PCI_DMA_FROMDEVICE);
+ rx_fd->data = cpu_to_le32(pci_map_single(dpriv->pci_priv->pdev,
+ skb->data, len, PCI_DMA_FROMDEVICE));
} else {
- rx_fd->data = (u32) NULL;
+ rx_fd->data = 0;
ret = -1;
}
return ret;
@@ -587,7 +589,7 @@ static inline int dscc4_xpr_ack(struct dscc4_dev_priv *dpriv)
do {
if (!(dpriv->flags & (NeedIDR | NeedIDT)) ||
- (dpriv->iqtx[cur] & Xpr))
+ (dpriv->iqtx[cur] & cpu_to_le32(Xpr)))
break;
smp_rmb();
schedule_timeout_uninterruptible(10);
@@ -650,8 +652,9 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv *dpriv,
printk(KERN_DEBUG "%s: skb=0 (%s)\n", dev->name, __FUNCTION__);
goto refill;
}
- pkt_len = TO_SIZE(rx_fd->state2);
- pci_unmap_single(pdev, rx_fd->data, RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
+ pkt_len = TO_SIZE(le32_to_cpu(rx_fd->state2));
+ pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
+ RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
if ((skb->data[--pkt_len] & FrameOk) == FrameOk) {
stats->rx_packets++;
stats->rx_bytes += pkt_len;
@@ -679,7 +682,7 @@ refill:
}
dscc4_rx_update(dpriv, dev);
rx_fd->state2 = 0x00000000;
- rx_fd->end = 0xbabeface;
+ rx_fd->end = cpu_to_le32(0xbabeface);
}
static void dscc4_free1(struct pci_dev *pdev)
@@ -772,8 +775,8 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
}
/* Global interrupt queue */
writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1);
- priv->iqcfg = (u32 *) pci_alloc_consistent(pdev,
- IRQ_RING_SIZE*sizeof(u32), &priv->iqcfg_dma);
+ priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev,
+ IRQ_RING_SIZE*sizeof(__le32), &priv->iqcfg_dma);
if (!priv->iqcfg)
goto err_free_irq_5;
writel(priv->iqcfg_dma, ioaddr + IQCFG);
@@ -786,7 +789,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
*/
for (i = 0; i < dev_per_card; i++) {
dpriv = priv->root + i;
- dpriv->iqtx = (u32 *) pci_alloc_consistent(pdev,
+ dpriv->iqtx = (__le32 *) pci_alloc_consistent(pdev,
IRQ_RING_SIZE*sizeof(u32), &dpriv->iqtx_dma);
if (!dpriv->iqtx)
goto err_free_iqtx_6;
@@ -794,7 +797,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
}
for (i = 0; i < dev_per_card; i++) {
dpriv = priv->root + i;
- dpriv->iqrx = (u32 *) pci_alloc_consistent(pdev,
+ dpriv->iqrx = (__le32 *) pci_alloc_consistent(pdev,
IRQ_RING_SIZE*sizeof(u32), &dpriv->iqrx_dma);
if (!dpriv->iqrx)
goto err_free_iqrx_7;
@@ -1156,8 +1159,8 @@ static int dscc4_start_xmit(struct sk_buff *skb, struct net_device *dev)
dpriv->tx_skbuff[next] = skb;
tx_fd = dpriv->tx_fd + next;
tx_fd->state = FrameEnd | TO_STATE_TX(skb->len);
- tx_fd->data = pci_map_single(ppriv->pdev, skb->data, skb->len,
- PCI_DMA_TODEVICE);
+ tx_fd->data = cpu_to_le32(pci_map_single(ppriv->pdev, skb->data, skb->len,
+ PCI_DMA_TODEVICE));
tx_fd->complete = 0x00000000;
tx_fd->jiffies = jiffies;
mb();
@@ -1508,7 +1511,7 @@ static irqreturn_t dscc4_irq(int irq, void *token)
if (state & Cfg) {
if (debug > 0)
printk(KERN_DEBUG "%s: CfgIV\n", DRV_NAME);
- if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & Arf)
+ if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & cpu_to_le32(Arf))
printk(KERN_ERR "%s: %s failed\n", dev->name, "CFG");
if (!(state &= ~Cfg))
goto out;
@@ -1541,7 +1544,7 @@ static void dscc4_tx_irq(struct dscc4_pci_priv *ppriv,
try:
cur = dpriv->iqtx_current%IRQ_RING_SIZE;
- state = dpriv->iqtx[cur];
+ state = le32_to_cpu(dpriv->iqtx[cur]);
if (!state) {
if (debug > 4)
printk(KERN_DEBUG "%s: Tx ISR = 0x%08x\n", dev->name,
@@ -1580,7 +1583,7 @@ try:
tx_fd = dpriv->tx_fd + cur;
skb = dpriv->tx_skbuff[cur];
if (skb) {
- pci_unmap_single(ppriv->pdev, tx_fd->data,
+ pci_unmap_single(ppriv->pdev, le32_to_cpu(tx_fd->data),
skb->len, PCI_DMA_TODEVICE);
if (tx_fd->state & FrameEnd) {
stats->tx_packets++;
@@ -1711,7 +1714,7 @@ static void dscc4_rx_irq(struct dscc4_pci_priv *priv,
try:
cur = dpriv->iqrx_current%IRQ_RING_SIZE;
- state = dpriv->iqrx[cur];
+ state = le32_to_cpu(dpriv->iqrx[cur]);
if (!state)
return;
dpriv->iqrx[cur] = 0;
@@ -1755,7 +1758,7 @@ try:
goto try;
rx_fd->state1 &= ~Hold;
rx_fd->state2 = 0x00000000;
- rx_fd->end = 0xbabeface;
+ rx_fd->end = cpu_to_le32(0xbabeface);
//}
goto try;
}
@@ -1834,7 +1837,7 @@ try:
hdlc_stats(dev)->rx_over_errors++;
rx_fd->state1 |= Hold;
rx_fd->state2 = 0x00000000;
- rx_fd->end = 0xbabeface;
+ rx_fd->end = cpu_to_le32(0xbabeface);
} else
dscc4_rx_skb(dpriv, dev);
} while (1);
@@ -1904,8 +1907,9 @@ static struct sk_buff *dscc4_init_dummy_skb(struct dscc4_dev_priv *dpriv)
skb_copy_to_linear_data(skb, version,
strlen(version) % DUMMY_SKB_SIZE);
tx_fd->state = FrameEnd | TO_STATE_TX(DUMMY_SKB_SIZE);
- tx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data,
- DUMMY_SKB_SIZE, PCI_DMA_TODEVICE);
+ tx_fd->data = cpu_to_le32(pci_map_single(dpriv->pci_priv->pdev,
+ skb->data, DUMMY_SKB_SIZE,
+ PCI_DMA_TODEVICE));
dpriv->tx_skbuff[last] = skb;
}
return skb;
@@ -1937,8 +1941,8 @@ static int dscc4_init_ring(struct net_device *dev)
tx_fd->state = FrameEnd | TO_STATE_TX(2*DUMMY_SKB_SIZE);
tx_fd->complete = 0x00000000;
/* FIXME: NULL should be ok - to be tried */
- tx_fd->data = dpriv->tx_fd_dma;
- (tx_fd++)->next = (u32)(dpriv->tx_fd_dma +
+ tx_fd->data = cpu_to_le32(dpriv->tx_fd_dma);
+ (tx_fd++)->next = cpu_to_le32(dpriv->tx_fd_dma +
(++i%TX_RING_SIZE)*sizeof(*tx_fd));
} while (i < TX_RING_SIZE);
@@ -1951,12 +1955,12 @@ static int dscc4_init_ring(struct net_device *dev)
/* size set by the host. Multiple of 4 bytes please */
rx_fd->state1 = HiDesc;
rx_fd->state2 = 0x00000000;
- rx_fd->end = 0xbabeface;
+ rx_fd->end = cpu_to_le32(0xbabeface);
rx_fd->state1 |= TO_STATE_RX(HDLC_MAX_MRU);
// FIXME: return value verifiee mais traitement suspect
if (try_get_rx_skb(dpriv, dev) >= 0)
dpriv->rx_dirty++;
- (rx_fd++)->next = (u32)(dpriv->rx_fd_dma +
+ (rx_fd++)->next = cpu_to_le32(dpriv->rx_fd_dma +
(++i%RX_RING_SIZE)*sizeof(*rx_fd));
} while (i < RX_RING_SIZE);
diff --git a/drivers/net/wan/lmc/lmc_media.c b/drivers/net/wan/lmc/lmc_media.c
index 574737b..c9c878c 100644
--- a/drivers/net/wan/lmc/lmc_media.c
+++ b/drivers/net/wan/lmc/lmc_media.c
@@ -890,16 +890,8 @@ write_av9110 (lmc_softc_t * sc, u_int32_t n, u_int32_t m, u_int32_t v,
static void
lmc_ssi_watchdog (lmc_softc_t * const sc)
{
- u_int16_t mii17;
- struct ssicsr2
- {
- unsigned short dtr:1, dsr:1, rts:1, cable:3, crc:1, led0:1, led1:1,
- led2:1, led3:1, fifo:1, ll:1, rl:1, tm:1, loop:1;
- };
- struct ssicsr2 *ssicsr;
- mii17 = lmc_mii_readreg (sc, 0, 17);
- ssicsr = (struct ssicsr2 *) &mii17;
- if (ssicsr->cable == 7)
+ u_int16_t mii17 = lmc_mii_readreg (sc, 0, 17);
+ if (((mii17 >> 3) & 7) == 7)
{
lmc_led_off (sc, LMC_MII16_LED2);
}
diff --git a/drivers/net/wan/sbni.h b/drivers/net/wan/sbni.h
index 27715e7..8426451 100644
--- a/drivers/net/wan/sbni.h
+++ b/drivers/net/wan/sbni.h
@@ -44,9 +44,15 @@ enum {
#define PR_RES 0x80
struct sbni_csr1 {
- unsigned rxl : 5;
- unsigned rate : 2;
- unsigned : 1;
+#ifdef __LITTLE_ENDIAN_BITFIELD
+ u8 rxl : 5;
+ u8 rate : 2;
+ u8 : 1;
+#else
+ u8 : 1;
+ u8 rate : 2;
+ u8 rxl : 5;
+#endif
};
/* fields in frame header */
diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
index 98cf70c..11f53cb 100644
--- a/drivers/net/wireless/b43/rfkill.c
+++ b/drivers/net/wireless/b43/rfkill.c
@@ -138,8 +138,11 @@ void b43_rfkill_init(struct b43_wldev *dev)
rfk->rfkill->user_claim_unsupported = 1;
rfk->poll_dev = input_allocate_polled_device();
- if (!rfk->poll_dev)
- goto err_free_rfk;
+ if (!rfk->poll_dev) {
+ rfkill_free(rfk->rfkill);
+ goto err_freed_rfk;
+ }
+
rfk->poll_dev->private = dev;
rfk->poll_dev->poll = b43_rfkill_poll;
rfk->poll_dev->poll_interval = 1000; /* msecs */
@@ -175,8 +178,7 @@ err_unreg_rfk:
err_free_polldev:
input_free_polled_device(rfk->poll_dev);
rfk->poll_dev = NULL;
-err_free_rfk:
- rfkill_free(rfk->rfkill);
+err_freed_rfk:
rfk->rfkill = NULL;
out_error:
rfk->registered = 0;
@@ -195,6 +197,5 @@ void b43_rfkill_exit(struct b43_wldev *dev)
rfkill_unregister(rfk->rfkill);
input_free_polled_device(rfk->poll_dev);
rfk->poll_dev = NULL;
- rfkill_free(rfk->rfkill);
rfk->rfkill = NULL;
}
diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c
index 040dc3e..cbf15d7 100644
--- a/drivers/net/wireless/hostap/hostap_plx.c
+++ b/drivers/net/wireless/hostap/hostap_plx.c
@@ -608,7 +608,7 @@ static void prism2_plx_remove(struct pci_dev *pdev)
MODULE_DEVICE_TABLE(pci, prism2_plx_id_table);
-static struct pci_driver prism2_plx_drv_id = {
+static struct pci_driver prism2_plx_driver = {
.name = "hostap_plx",
.id_table = prism2_plx_id_table,
.probe = prism2_plx_probe,
@@ -618,13 +618,13 @@ static struct pci_driver prism2_plx_drv_id = {
static int __init init_prism2_plx(void)
{
- return pci_register_driver(&prism2_plx_drv_id);
+ return pci_register_driver(&prism2_plx_driver);
}
static void __exit exit_prism2_plx(void)
{
- pci_unregister_driver(&prism2_plx_drv_id);
+ pci_unregister_driver(&prism2_plx_driver);
}
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index 88062c1..003f73f 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -4935,7 +4935,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
/**
* Reclaim Tx queue entries no more used by NIC.
*
- * When FW adwances 'R' index, all entries between old and
+ * When FW advances 'R' index, all entries between old and
* new 'R' index need to be reclaimed. As result, some free space
* forms. If there is enough free space (> low mark), wake Tx queue.
*
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index b24425f..4f1efb1 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -871,6 +871,10 @@ static int if_sdio_probe(struct sdio_func *func,
if (sscanf(func->card->info[i],
"ID: %x", &model) == 1)
break;
+ if (!strcmp(func->card->info[i], "IBIS Wireless SDIO Card")) {
+ model = 4;
+ break;
+ }
}
if (i == func->card->num_info) {
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
index 6d5d9ab..04663eb 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
@@ -149,7 +149,7 @@ void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev)
* The data behind the ieee80211 header must be
* aligned on a 4 byte boundary.
*/
- align = NET_IP_ALIGN + (2 * (header_size % 4 == 0));
+ align = header_size % 4;
/*
* Allocate the sk_buffer, initialize it and copy
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index ab4797e..568d738 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -245,13 +245,20 @@ static void rt2x00usb_interrupt_rxdone(struct urb *urb)
* Allocate a new sk buffer to replace the current one.
* If allocation fails, we should drop the current frame
* so we can recycle the existing sk buffer for the new frame.
+ * As alignment we use 2 and not NET_IP_ALIGN because we need
+ * to be sure we have 2 bytes room in the head. (NET_IP_ALIGN
+ * can be 0 on some hardware). We use these 2 bytes for frame
+ * alignment later, we assume that the chance that
+ * header_size % 4 == 2 is bigger then header_size % 2 == 0
+ * and thus optimize alignment by reserving the 2 bytes in
+ * advance.
*/
frame_size = entry->ring->data_size + entry->ring->desc_size;
- skb = dev_alloc_skb(frame_size + NET_IP_ALIGN);
+ skb = dev_alloc_skb(frame_size + 2);
if (!skb)
goto skip_entry;
- skb_reserve(skb, NET_IP_ALIGN);
+ skb_reserve(skb, 2);
skb_put(skb, frame_size);
/*
^ permalink raw reply related
* [git patches] net driver updates for 2.6.25
From: Jeff Garzik @ 2008-01-18 20:17 UTC (permalink / raw)
To: David Miller; +Cc: netdev, LKML
Please pull from the 'upstream' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git upstream
to receive my 2.6.25 net driver queue into davem/net-2.6.25.git:
Adam Baker (2):
rt2x00: Unconstify rt2x00dev
rt2x00: Place mutex around USB register access
Adrian Bunk (4):
drivers/net/netxen/: cleanups
drivers/net/chelsio/: #if 0 unused functions
ipg: add __devexit annotation
e1000: remove no longer used code for pci read/write cfg
Al Viro (15):
endianness annotations and fixes for olympic
sunhme endianness annotations
sungem endianness annotations^[
e1000e endianness annotations
e1000 endianness annotations
NULL noise in drivers/net
forcedeth endianness bugs
e100 endianness annotations
ixgbe endianness annotations
ixgb endianness annotations
annotate tun
annotate the rest of drivers/net/wan
eepro100 annotations
slhc annotations
qla3xxx annotations
Alan Cox (2):
3c501: Bring into compliance with the coding style
slip: Drag kicking and screaming into coding style compliance
Alejandro Martinez Ruiz (3):
netdev: use ARRAY_SIZE() instead of sizeof(array) / ETH_GSTRING_LEN
netdev: ARRAY_SIZE() cleanups
sk98lin: kill bogus check and convert to use ARRAY_SIZE()
Andrea Merello (1):
rtl8187: fix tx power reading
Andres Salomon (4):
libertas: drop useless default_fw_name variable
libertas: mark module_init/exit functions as __init/__exit
libertas: reset devices upon disconnect rather than module unloading
libertas: nuke useless variable usbdriver_name and useless comments
Auke Kok (6):
e1000e: Disable L1 ASPM power savings for 82573 mobile variants
e1000/e1000e: Move PCI-Express device IDs over to e1000e
ixgbe: Fix copper PHY initialization code
[E1000E]: update netstats traffic counters realtime
[E1000]: update netstats traffic counters realtime
e1000: Dump the eeprom when a user encounters a bad checksum
Ben M Cahill (29):
iwl3945: re-align 3945 event log data
iwl4965: add comments to rate scaling code
iwlwifi: add comments to EEPROM stuff
iwl-4965-hw.h: clean up unused eeprom structures and definitions
iwlwifi: clean up and clarify some comments after 3945/4965 split
iwlwifi: Move is_legacy() macro family from iwl-4965-hw.h to iwl-4965-rs.h
iwlwifi: Add comments to some driver data structures
iwlwifi: Document 4965 rate_n_flags bits
iwlwifi: Document Rx calibration
iwlwifi: Partially clean-up, add comments to iwl-*-hw.h
iwlwifi: clean up some unused definitions in iwl-4965.h and iwl-3945.h
iwlwifi: add comments, mostly on Tx queues
iwlwifi: add comments to iwl*-base.c
iwlwifi: Clean up unused definitions in iwl-3945-hw.h
iwlwifi: clean up unused definitions in iwl-4965-hw.h
iwlwifi: move uCode API definitions to iwl-4965-commands.h
iwlwifi: move HT_IE_EXT_CHANNEL_* driver definitions to iwl-4965.h
iwlwifi: document temperature calculation
iwlwifi: document txpower calculations
iwlwifi: document keep-warm buffer
iwlwifi: document Rx registers
iwlwifi: document Tx registers
iwlwifi: document shared Tx structures
iwlwifi: document 4965 Tx scheduler
iwlwifi: document command header and "alive" responses
iwlwifi: add comments to RXON command and txpower formats
iwlwifi: add comments to QOS and ADD_STA commands
iwlwifi: add comments to Tx commands
iwlwifi: document 4965 rate scaling
Bill Hayes (1):
e1000e: alternate MAC address support
Brajesh Dave (2):
libertas: separate mesh connectivity from that of the main interface
libertas: configurable beacon interval
Christoph Hellwig (4):
iwlwifi: mark more functions/variables static
iwlwifi: keep 3945 and 4965 headers separate
iwlwifi: cleanup Kconfig and ifdefs to split 3945 and 4965
iwlwifi: cleanup namespace
Claudio Lanconelli (1):
add driver for enc28j60 ethernet chip
Dan Williams (12):
orinoco: more reliable scan handling
orinoco: always use latest BSS info when caching scan results
libertas: make lbs_cmd() usage nicer
libertas: clean up is_command_allowed_in_ps()
libertas: clean up direct command handling
libertas: add simple copyback command callback
libertas: convert GET_HW_SPEC to a direct command
libertas: rename and re-type bufvirtualaddr to cmdbuf
libertas: fix case of FWT_ACCESS_LIST_ROUTE and FWT_ACCESS_LIST_NEIGHBOR commands
libertas: convert DATA_RATE to a direct command
libertas: convert RF_CHANNEL to a direct command
libertas: endianness fixes for get_channel/set_channel
Daniel Drake (3):
zd1211rw: port to mac80211
zd1211rw: Add ID for Trendnet TEW-429UB A
zd1211rw: add copyright notices
David Acker (1):
Fix e100 on systems that have cache incoherent DMA
David Miller (1):
NET: ns83820.c remove fastcall macro
David Woodhouse (114):
libertas: Fix memory leak of RX skbs
libertas: Remove cmd_oid from struct cmd_ctrl_node
libertas: Consolidate lbs_host_to_card_done() function.
libertas: Don't claim to have checksummed incoming packets.
libertas: Move SET_BOOT2_VER command to if_usb where it belongs
libertas: Zero 'pdata_size' field in cmd_ctrl_node reliably.
libertas: Byteswap cmdptr->size in lbs_cmd()
libertas: Use lbs_cmd() for setting Boot2 version
libertas: Remove SET_BOOT2_VER support from the Big Switch Statement.
libertas: Fix endianness in boot2_version handling.
libertas: when usb_submit_usb fails, include the error code in the printk
libertas: Switch to using a callback function pointer for commands
libertas: Don't set IW_ENCODE_NOKEY when returning WEP keys.
libertas: Fix up error handling in lbs_setuserscan()
libertas: kill adapter->nr_cmd_pending
libertas: switch lbs_cmd() to take a callback function pointer
libertas: clean up lbs_thread() to make it slightly more readable
libertas: fix lbs_rtap attribute in sysfs
libertas: kill TxLockFlag
libertas: kill struct lbs_adapter
libertas: use lbs_host_to_card_done() in lbs_tx_timeout()
libertas: cope with device which already has firmware loaded
libertas: stop debugfs code looking at cmdpendingq
libertas: kill internal tx queue for PS mode
libertas: kill SendSinglePacket() function.
libertas: move lbs_hard_start_xmit() into tx.c
libertas: kill lbs_process_tx() by merging it into lbs_hard_start_xmit()
libertas: clean up lbs_hard_start_xmit()
libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit()
libertas: stop using ieee80211 for radiotap device
libertas: set dev_addr on rtap device
libertas: TX packet is radiotap iff it comes from rtap_dev
libertas: free successfully transmitted skbs again
libertas: refactor the 'should I sleep?' decision in lbs_thread()
libertas: Move actual transmission to main thread
libertas: remove unreachable code from process_rxed_802_11_packet()
libertas: fix error cases in lbs_process_rxed_802_11_packet()
libertas: kill lbs_upload_tx_packet()
libertas: kill (IS,SET,UNSET)_MESH_FRAME.
libertas: add opaque extra argument to cmd callback function
libertas: clean up lbs_interrupt()
libertas: remove pre_open_check()
libertas: make rtap and normal modes mutually exclusive, clean up open/stop
libertas: improve reliability of firmware reloading on USB
libertas: switch to a waitqueue and timer for handling USB firmware load
libertas: don't run thread while firmware not yet ready
libertas: switch USB cardp->priv to 'struct lbs_private *' and resulting fix
libertas: move removal of lbs_rtap file to lbs_stop_card()
libertas: wait for 'firmware ready' event from firmware after loading
libertas: fix debug output in lbs_cmd_copyback() function.
libertas: convert CMD_MESH_ACCESS to a direct command
libertas: remove casts from lbs_cmd() and lbs_cmd_with_response() macros
libertas: make some more functions static
libertas: fix sparse endianness warnings in scan.c
libertas: add lbs_mesh sysfs attribute for enabling mesh
libertas: kill references to mesh autostart
libertas: kill rx_urb_recall and eth_dev members of struct usb_card_rec
libertas: whitespace cleanup in host.h
libertas: allow get/set SSID on mshX device
libertas: allow setting channel on mshX device
libertas: add missing newline on debug message
libertas: disable mesh temporarily while setting eth channel/assoc
libertas: add debugging output to lbs_mesh_config()
libertas: be more careful about command responses matching cur_cmd
libertas: add missing newlines in debugging statements
libertas: slight cleanup of netif queue stop/wake
libertas: add lbs_host_sleep_cfg() command function
libertas: switch lbs_cmd() to take a _pointer_ to the command structure
libertas: make worker thread not freezable
libertas: implement suspend and resume core methods
libertas: implement suspend/resume for USB devices
libertas: add ethtool support for wake-on-lan configuration
libertas: make lbs_update_channel() function non-static
libertas: cope with both old and new mesh TLV values
libertas: pass channel argument directly to lbs_mesh_config()
libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt()
libertas: don't exit worker thread until kthread_stop() is called
libertas: stop attempting to reset devices on unload
libertas: clean up if_usb driver
libertas: kill whitespace at end of lines
libertas: kill unused wait_option field in struct cmd_ctrl_node
libertas: rename and clean up DownloadcommandToStation
libertas: don't use __lbs_cmd() with empty callback in if_usb.c
libertas: remove some pointless checks for cmdnode buffer being present
libertas: introduce and use lbs_complete_command() for command completion
libertas: don't re-initialise cmdnode when taking it off the free queue
libertas: kill cleanup_cmdnode()
libertas: let __lbs_cmd() free its own cmdnode
libertas: kill pdata_buf member of struct cmd_ctrl_node
libertas: store command result in cmdnode instead of priv->cur_cmd_retcode
libertas: add __lbs_cmd_async() for asynchronous command submission
libertas: ensure response buffer size is always set for lbs_cmd_with_response
libertas: handle command timeout in main thread instead of directly in timer
libertas: kill 'addtail' argument to lbs_queue_cmd() and make it static
libertas: fix return from lbs_update_channel()
libertas: add SLEEP_PERIOD and FW_WAKE_METHOD command definitions
libertas: fix buffer handling of PS_MODE commands and responses
libertas: don't clear priv->dnld_sent after sending sleep confirm
libertas: handle HOST_AWAKE event by sending WAKEUP_CONFIRM command
libertas: allow for PS mode to be disabled when firmware doesn't support it
libertas: Check for PS mode support on USB devices
libertas: reduce explicit references to priv->cur_cmd->cmdbuf
libertas: use priv->upld_buf for command responses
libertas: discard DEFER responses to commands; let the timeout trigger
libertas: make lbs_submit_command always 'succeed' and set command timer
libertas: submit RSSI command on tx timeout, to check whether module is dead
libertas: convert RADIO_CONTROL to a direct command
libertas: convert INACTIVITY_TIMEOUT to a direct command
libertas: convert SLEEP_PARAMS to a direct command
libertas: convert SET_WEP to a direct command
libertas: convert ENABLE_RSN to a direct command
libertas: change inference about buffer size in lbs_cmd()
libertas: convert SUBSCRIBE_EVENT to a direct command
libertas: remove check for driver_lock in lbs_interrupt()
Divy Le Ray (11):
cxgb3 - fix MSI-X failure path
cxgb3 - Use wild card for PCI subdevice ID match
cxgb3 - Fix resources release.
cxgb3 - Add EEH support
cxgb3 - FW upgrade
cxgb3 - fix interaction with pktgen
cxgb3 - sysfs methods clean up
cxgb3 - HW set up updates
cxgb3 - Fix I/O synchronization
cxgb3 - parity initialization for T3C adapters.
cxgb3 - Fix EEH, missing softirq blocking
Dmitry Torokhov (1):
P54: use temporary variables to reduce size of generated code
Eliezer Tamir (1):
add bnx2x driver for BCM57710
Emmanuel Grumbach (3):
iwlwifi-ht: move 4965 SCD registers to iwl-prph.h
iwlwifi: move 3945 SCD registers to iwl-prph.h
iwlwifi: add 5965 SCD registers to iwl-prph.h
Florian Fainelli (1):
Add me as maintainer of the RDC r6040 driver
Francois Romieu (9):
sundance: SIOCDEVPRIVATE pollution
r6040: compile error
r6040: remove virt_to_bus
r6040: erroneous dev->priv
r6040: cleanups
sis190: add cmos ram access code for the SiS19x/968 chipset pair
sis190: remove duplicate INIT_WORK
sis190: mdio operation failure is not correctly detected
sis190: scheduling while atomic error
Frank Lichtenheld (2):
b43: silence a bogus gcc warning
b43legacy: properly fix a bogus gcc warning
Grant Likely (1):
gianfar driver: eliminate compiler warnings and unnecessary macros
Holger Schurig (18):
libertas: move wlan_*_association_work from header to c file
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
libertas: remove arbitrary typedefs
libertas: rework event subscription
libertas: tweak association debug output
libertas: tweak tx path debugging
libertas: remove numprobes
libertas: remove user-specified channel list
libertas: less eventcause shifts
libertas: remove cmd_ctrl_node->cmdflags
libertas: remove cmd_ctrl_node->status
libertas: make more functions static
libertas: handy function to call firmware commands
libertas: fix data packet size errors
libertas: implement new scanning logic
libertas: endianness fixes
libertas: fix use-after-free error
Ian Schram (5):
iwlwifi: fix various spelling and typos
iwlwifi: rename iwl_eeprom_aqcuire_semaphore to _acquire_
iwlwifi: Two comments in iwl-3945.c were longer than 80 columns
iwlwifi: Beautify by removing superfluous newlines and code
iwlwifi: remove late null-check and duplicate bug_on
Ivo van Doorn (25):
rt2x00: Move quality statistics into seperate structure
rt2x00: Use enum defines
rt2x00: Correctly translate mac80211 antenna setup to rt2x00
rt2x00: SW diversity should default to antenna B
rt2x00: Remove rt2x00_clear_link
rt2x00: Implement SW diversity
rt2x00: Cleanup if-statements
rt2x00: Release rt2x00 2.0.11
rt2x00: Disable RX when switching antenna
rt2x00: Split rt61/rt73 antenna selection into RX and TX antenna
rt2x00: Input-polldev requires input device
rt2x00: Detect initial rfkill state on register
rt2x00: Remove unused variables
rt2x00: Remove data_desc structure
rt2x00: Release rt2x00 2.0.12
rt2x00: Move duplicate code into rt2x00pci_txdone()
rt2x00: Replace DRV_NAME with KBUILD_MODNAME
rt2x00: Extend PLCP descriptor definition for rt2400pci
rt2x00: Move register value/offset files into new folder
rt2x00: Add chipset version to chipset debugfs entry
rt2x00: Add skb descriptor
rt2x00: Add TX/RX frame dumping facility
rt2x00: Use IEEE80211_IF_TYPE_INVALID directly
rt2x00: Cleanup rfkill
rt2x00: Release rt2x00 2.0.13
Jay Vosburgh (1):
[BONDING]: Documentation update
Jeff Garzik (10):
hamradio/scc: kill unnecessary use of 'irq' function arg
[netdrvr] irq handler minor cleanups in several drivers
[netdrvr] ibmlana: modularization cleanup
[netdrvr] ibmlana: move away from legacy MCA API
[netdrvr] netxen: checkpatch fixes (98% trim trailing whitespace)
drivers/net/r6040: fix obvious problems (but more remain)
wireless: checkpatch cleanups
[netdrvr] checkpatch cleanups
drivers/net/cxgb3: trim trailing whitespace
wireless/iwl: fix namespace breakage
Jes Sorensen (1):
iwlwifi: disable interrupts before calling request_irq
Joe Perches (9):
[E1000]: Convert regtest macro's to functions
[E1000E]: convert register test macros to functions
drivers/net/chelsio: Add missing "space"
drivers/net/cxgb3: Add missing "space"
drivers/net/ixgb: Add missing "space"
drivers/net/netxen: Add missing "space"
drivers/net/wan: Add missing "space"
drivers/net/sk98lin: Add missing "space"
drivers/net: Add missing "space"
Johannes Berg (3):
b43: include full 64-bit timestamp in monitor mode
b43: include FCS in frames handed to mac80211
b43legacy: include full 64-bit timestamp in monitor mode
John W. Linville (3):
iwlwifi: remove redundant initialization of final_mode
rt2x00: correct "skb_buff" typo
iwlwifi: fix-up merge fall-out after namespace separation
Komuro (1):
axnet_cs: use spin_lock_irqsave instead of spin_lock + disable_irq
Larry Finger (13):
b43legacy: LED triggers support
b43legacy: RF-kill support
b43legacy: Use input-polldev for the rfkill switch
b43legacy: Rewrite pwork locking
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
b43: Changes to enable BCM4311 rev 02 with wireless core revision 13
rt2x00: Remove redundant code in rfkill setup
b43legacy: Fix rfkill radio LED
Lee Schermerhorn (1):
bnx2x depends on ZLIB_INFLATE
Li Zefan (1):
libertas: don't cast a pointer to pointer of
Matheos Worku (1):
ixgb: enable sun hardware support for broadcom phy
Matthias Kaehlcke (2):
Prism54: Convert mgmt_sem to the mutex API
PLIP driver: convert the semaphore killed_timer_sem to completion
Mattias Nissler (6):
rt2x00: Fix antenna selection.
rt2x00: Rework rt61 antenna selection.
rt2x00: Rework rt73 antenna selection
rt2x00: Correctly set ACK bit in tx descriptors
rt2x00: Allow rt61 to catch up after a missing tx report
rt2x00: Only update rssi average approximation on receiving beacon frames.
Michael Buesch (6):
b43legacy: Remove set_key callback
b43: Dereference of wl->current_dev must be protected by wl->mutex
b43: Use the retry limit parameters from mac80211
b43: consistent naming for ieee80211_ops
b43: Fix ofdmtab write regression
b43: Fix for broken transmission
Miguel Botón (1):
iwlwifi: remove redundant declaration of 'iwl3945_priv' and 'iwl4965_priv' structs
Mohamed Abbas (4):
iwl4965: fix cannot find a suitable rate issue
iwlwifi: enhance WPA authenication stability
iwlwifi: fix ucode assertion for RX queue overrun
iwlwifi: avoid firmware command sending if rfkill is enabled
Olof Johansson (13):
pasemi_mac: RX/TX ring management cleanup
pasemi_mac: Move register definitions to include/asm-powerpc
pasemi: DMA engine management library
pasemi_mac: Convert to new dma library
pasemi_mac: performance tweaks
pasemi_mac: Fix TX cleaning
pasemi_mac: Improve RX interrupt mitigation
pasemi_mac: Software-based LRO support
pasemi_mac: SKB unmap optimization
pasemi_mac: Remove SKB copy/recycle logic
pasemi_mac: Print warning when not attaching to a PHY
pasemi_mac: Don't enable RX/TX without a link (if possible)
pasemi: export pasemi_dma_init()
Patrick McHardy (1):
[E1000]: Secondary unicast address support
Pekka Enberg (8):
ipg: remove old contact information
ipg: remove boolean macros
ipg: remove IPG_DEV_KFREE_SKB macro
ipg: remove driver version
ipg: remove commented out code
ipg: remove some internal comments
ipg: naming convention fixes
ipg: fix checkpatch reported errors
Peter Korsgaard (1):
dm9601: Consolidate common parts of dm_write_*_async
Ramkrishna Vepa (2):
S2io: Fixes to enable multiple transmit fifo support
S2io: Fixes to enable multiple transmit fifos
Reinette Chatre (3):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
iwlwifi: continue namespace changes - fix CONFIG variables
iwlwifi: remove HT code from iwl-3945.h
Robert P. J. Day (1):
pcmcia net: use roundup_pow_of_two() macro instead of grotesque loop
Roel Kluin (1):
wireless: fix '!x & y' typo's
Ron Rindjunsky (8):
iwlwifi: 802.11n remove unnecessary config dependency
iwlwifi: 802.11n new framework structures preperation
iwlwifi: 802.11n configuring hw_mode parameters to support HT in A/G
iwlwifi: 802.11n handling probe request HT IE
iwlwifi: 802.11n comply HT self configuration flow with mac80211 framework
iwlwifi: 802.11n comply HT add station flow with mac80211 framework
iwlwifi: 802.11n comply HT rate scaling flows with mac80211 framework
iwlwifi: 802.11n add support to 8K A-MSDU Rx frames
Sreenivasa Honnur (1):
[S2IO]: Support for add/delete/store/restore ethernet addresses
Stefan Roese (1):
net: NEWEMAC: Fix problem with mtu > 4080 on non TAH equipped 4xx PPC's
Stefano Brivio (8):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
b43: reinit on too many PHY TX errors
b43legacy: reinit on too many PHY TX errors
Sten Wang (1):
[NET]: Add support for the RDC R6040 Fast Ethernet controller
Stephen Hemminger (4):
sky2: align IP header on Rx if possible
sky2: rx allocation threshold change
sky2: support for Yukon Supreme
sky2: version 1.21
Thomas Bogendoerfer (3):
SGISEEQ: use cached memory access to make driver work on IP28
SGISEEQ: use cached memory access to make driver work on IP28
SGISEEQ: fix oops when doing ifconfig down; ifconfig up
Tomas Winkler (14):
iwlwifi: Add erp_ie_changed hanlder
iwlwifi: renaming last_used and first_empty
iwlwifi: rs-4965 fix return values
iwlwifi: add TGN flag to qos parameters
iwlwifi: remove cck_flag from iwl_driver_hw_info
iwlwifi: remove cck_power_index_compensation
iwlwifi: using PCI_DEVICE macro
iwlwifi: replace restricted_reg with prph
iwlwifi: rename restricted_mem to targ_mem
iwlwifi: replacing wording restricted to nic access in iwl-io
iwlwifi: Renames struct fw_image_desc to struct fw_desc
iwlwifi: Support for uCode without init and bsm section
iwlwifi: fix compliation warnings
iwlwifi: add missing comments
Zhu Yi (9):
iwlwifi: Update iwlwifi version stamp to 1.1.18
iwlwifi: Update iwlwifi version stamp to 1.1.19
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_changed
iwlwifi: update version number to 1.2.22
iwlwifi: cache mac80211 conf setting during a hardware scan
iwlwifi: proper monitor support
iwlwifi: skip mac80211 conf during a hardware scan and replay it afterwards
mabbas (2):
iwlwifi: accept up to 4K frame size on Rx side to fit A-MSDU frame
iwl4965: exclude 60M rate from probe request
Documentation/networking/bonding.txt | 204
MAINTAINERS | 16
arch/ia64/hp/sim/simeth.c | 5
arch/powerpc/platforms/pasemi/Makefile | 2
arch/powerpc/platforms/pasemi/dma_lib.c | 488 +
arch/powerpc/platforms/pasemi/pasemi.h | 1
arch/ppc/8260_io/enet.c | 4
arch/ppc/8260_io/fcc_enet.c | 4
drivers/net/3c501.c | 232
drivers/net/3c507.c | 15
drivers/net/3c515.c | 2
drivers/net/7990.c | 8
drivers/net/Kconfig | 43
drivers/net/Makefile | 3
drivers/net/a2065.c | 10
drivers/net/amd8111e.c | 4
drivers/net/at1700.c | 5
drivers/net/b44.c | 8
drivers/net/bnx2.c | 4
drivers/net/bnx2x.c | 9064 +++++++++++++++++++++++
drivers/net/bnx2x.h | 1071 ++
drivers/net/bnx2x_fw_defs.h | 198
drivers/net/bnx2x_hsi.h | 2176 +++++
drivers/net/bnx2x_init.h | 564 +
drivers/net/bnx2x_init_values.h | 6368 ++++++++++++++++
drivers/net/bnx2x_reg.h | 4394 +++++++++++
drivers/net/cassini.c | 4
drivers/net/chelsio/cxgb2.c | 2
drivers/net/chelsio/espi.c | 2
drivers/net/chelsio/espi.h | 1
drivers/net/chelsio/sge.c | 4
drivers/net/chelsio/sge.h | 2
drivers/net/cpmac.c | 3
drivers/net/cxgb3/adapter.h | 1
drivers/net/cxgb3/cxgb3_main.c | 253
drivers/net/cxgb3/cxgb3_offload.c | 19
drivers/net/cxgb3/firmware_exports.h | 20
drivers/net/cxgb3/regs.h | 270
drivers/net/cxgb3/sge.c | 120
drivers/net/cxgb3/t3_hw.c | 167
drivers/net/cxgb3/version.h | 4
drivers/net/cxgb3/xgmac.c | 10
drivers/net/declance.c | 6
drivers/net/e100.c | 204
drivers/net/e1000/e1000_ethtool.c | 86
drivers/net/e1000/e1000_hw.h | 88
drivers/net/e1000/e1000_main.c | 195
drivers/net/e1000e/82571.c | 11
drivers/net/e1000e/defines.h | 1
drivers/net/e1000e/e1000.h | 1
drivers/net/e1000e/ethtool.c | 89
drivers/net/e1000e/hw.h | 86
drivers/net/e1000e/lib.c | 39
drivers/net/e1000e/netdev.c | 61
drivers/net/e1000e/param.c | 7
drivers/net/e1000e/phy.c | 3
drivers/net/eepro100.c | 92
drivers/net/eexpress.c | 12
drivers/net/enc28j60.c | 1600 ++++
drivers/net/enc28j60_hw.h | 309
drivers/net/forcedeth.c | 46
drivers/net/gianfar_sysfs.c | 50
drivers/net/hamradio/6pack.c | 2
drivers/net/hamradio/mkiss.c | 2
drivers/net/hamradio/scc.c | 8
drivers/net/hp100.c | 2
drivers/net/ibm_newemac/core.c | 14
drivers/net/ibmlana.c | 192
drivers/net/ipg.c | 286
drivers/net/ipg.h | 99
drivers/net/irda/irport.h | 2
drivers/net/irda/smsc-ircc2.c | 17
drivers/net/irda/via-ircc.c | 12
drivers/net/ixgb/ixgb_hw.c | 82
drivers/net/ixgb/ixgb_hw.h | 25
drivers/net/ixgb/ixgb_ids.h | 4
drivers/net/ixgb/ixgb_main.c | 10
drivers/net/ixgbe/ixgbe.h | 8
drivers/net/ixgbe/ixgbe_82598.c | 156
drivers/net/ixgbe/ixgbe_common.c | 12
drivers/net/ixgbe/ixgbe_ethtool.c | 3
drivers/net/ixgbe/ixgbe_main.c | 29
drivers/net/ixgbe/ixgbe_phy.h | 1
drivers/net/ixgbe/ixgbe_type.h | 65
drivers/net/lp486e.c | 9
drivers/net/mac89x0.c | 2
drivers/net/mace.c | 10
drivers/net/myri10ge/myri10ge.c | 2
drivers/net/netxen/netxen_nic.h | 30
drivers/net/netxen/netxen_nic_ethtool.c | 28
drivers/net/netxen/netxen_nic_hw.c | 31
drivers/net/netxen/netxen_nic_hw.h | 18
drivers/net/netxen/netxen_nic_init.c | 98
drivers/net/netxen/netxen_nic_isr.c | 15
drivers/net/netxen/netxen_nic_main.c | 41
drivers/net/netxen/netxen_nic_niu.c | 64
drivers/net/netxen/netxen_nic_phan_reg.h | 15
drivers/net/ns83820.c | 9
drivers/net/pasemi_mac.c | 934 +-
drivers/net/pasemi_mac.h | 365
drivers/net/pcmcia/axnet_cs.c | 16
drivers/net/pcmcia/fmvj18x_cs.c | 7
drivers/net/pcmcia/pcnet_cs.c | 4
drivers/net/pcnet32.c | 2
drivers/net/plip.c | 10
drivers/net/pppol2tp.c | 2
drivers/net/qla3xxx.c | 46
drivers/net/qla3xxx.h | 55
drivers/net/r6040.c | 1096 ++
drivers/net/rrunner.c | 2
drivers/net/s2io-regs.h | 16
drivers/net/s2io.c | 536 -
drivers/net/s2io.h | 26
drivers/net/sgiseeq.c | 245
drivers/net/sis190.c | 21
drivers/net/sis900.c | 6
drivers/net/sk98lin/skgemib.c | 2
drivers/net/sk98lin/skgepnmi.c | 14
drivers/net/sk98lin/skgesirq.c | 2
drivers/net/skfp/hwmtm.c | 4
drivers/net/skfp/smt.c | 2
drivers/net/sky2.c | 117
drivers/net/sky2.h | 13
drivers/net/slhc.c | 12
drivers/net/slip.c | 367
drivers/net/smc9194.c | 2
drivers/net/sundance.c | 26
drivers/net/sungem.c | 10
drivers/net/sungem.h | 8
drivers/net/sunhme.c | 51
drivers/net/sunhme.h | 12
drivers/net/tehuti.c | 10
drivers/net/tg3.c | 2
drivers/net/tokenring/olympic.c | 10
drivers/net/tokenring/olympic.h | 18
drivers/net/tokenring/smctr.c | 4
drivers/net/tulip/de4x5.c | 4
drivers/net/tun.c | 2
drivers/net/ucc_geth.c | 3
drivers/net/usb/dm9601.c | 53
drivers/net/via-rhine.c | 2
drivers/net/wan/farsync.c | 11
drivers/net/wan/hdlc_ppp.c | 2
drivers/net/wan/hdlc_raw_eth.c | 2
drivers/net/wan/lmc/lmc_main.c | 6
drivers/net/wan/lmc/lmc_media.c | 8
drivers/net/wan/lmc/lmc_proto.c | 2
drivers/net/wan/lmc/lmc_proto.h | 2
drivers/net/wan/pc300_drv.c | 8
drivers/net/wan/pc300_tty.c | 12
drivers/net/wan/sbni.c | 4
drivers/net/wan/sdla.c | 5
drivers/net/wan/wanxl.c | 4
drivers/net/wireless/Makefile | 3
drivers/net/wireless/airo.c | 10
drivers/net/wireless/atmel.c | 3
drivers/net/wireless/b43/Makefile | 1
drivers/net/wireless/b43/b43.h | 17
drivers/net/wireless/b43/debugfs.c | 2
drivers/net/wireless/b43/dma.c | 32
drivers/net/wireless/b43/leds.c | 10
drivers/net/wireless/b43/lo.c | 8
drivers/net/wireless/b43/main.c | 219
drivers/net/wireless/b43/main.h | 2
drivers/net/wireless/b43/phy.c | 672 -
drivers/net/wireless/b43/phy.h | 24
drivers/net/wireless/b43/tables.c | 112
drivers/net/wireless/b43/tables.h | 12
drivers/net/wireless/b43/wa.c | 674 +
drivers/net/wireless/b43/wa.h | 7
drivers/net/wireless/b43/xmit.c | 8
drivers/net/wireless/b43legacy/Kconfig | 16
drivers/net/wireless/b43legacy/Makefile | 29
drivers/net/wireless/b43legacy/b43legacy.h | 18
drivers/net/wireless/b43legacy/debugfs.c | 2
drivers/net/wireless/b43legacy/ilt.c | 2
drivers/net/wireless/b43legacy/leds.c | 417 -
drivers/net/wireless/b43legacy/leds.h | 61
drivers/net/wireless/b43legacy/main.c | 380
drivers/net/wireless/b43legacy/main.h | 2
drivers/net/wireless/b43legacy/phy.c | 40
drivers/net/wireless/b43legacy/phy.h | 2
drivers/net/wireless/b43legacy/radio.c | 29
drivers/net/wireless/b43legacy/radio.h | 4
drivers/net/wireless/b43legacy/rfkill.c | 204
drivers/net/wireless/b43legacy/rfkill.h | 59
drivers/net/wireless/b43legacy/xmit.c | 7
drivers/net/wireless/hostap/hostap_hw.c | 2
drivers/net/wireless/ipw2100.c | 3
drivers/net/wireless/iwlwifi/Kconfig | 164
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 1639 ++++
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 152
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 616 +
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 431 +
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 41
drivers/net/wireless/iwlwifi/iwl-3945.c | 715 +
drivers/net/wireless/iwlwifi/iwl-3945.h | 950 ++
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 2562 ++++++
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 152
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 2062 ++++-
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 431 +
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 984 +-
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 91
drivers/net/wireless/iwlwifi/iwl-4965.c | 1387 ++-
drivers/net/wireless/iwlwifi/iwl-4965.h | 1192 ++-
drivers/net/wireless/iwlwifi/iwl-channel.h | 161
drivers/net/wireless/iwlwifi/iwl-commands.h | 1734 ----
drivers/net/wireless/iwlwifi/iwl-debug.h | 152
drivers/net/wireless/iwlwifi/iwl-eeprom.h | 336
drivers/net/wireless/iwlwifi/iwl-hw.h | 537 -
drivers/net/wireless/iwlwifi/iwl-io.h | 470 -
drivers/net/wireless/iwlwifi/iwl-priv.h | 308
drivers/net/wireless/iwlwifi/iwl-prph.h | 61
drivers/net/wireless/iwlwifi/iwl3945-base.c | 3016 +++----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 3566 ++++-----
drivers/net/wireless/iwlwifi/iwlwifi.h | 708 -
drivers/net/wireless/libertas/11d.c | 154
drivers/net/wireless/libertas/11d.h | 26
drivers/net/wireless/libertas/README | 40
drivers/net/wireless/libertas/assoc.c | 458 -
drivers/net/wireless/libertas/assoc.h | 32
drivers/net/wireless/libertas/cmd.c | 1396 ++-
drivers/net/wireless/libertas/cmd.h | 61
drivers/net/wireless/libertas/cmdresp.c | 662 -
drivers/net/wireless/libertas/debugfs.c | 1492 ---
drivers/net/wireless/libertas/debugfs.h | 12
drivers/net/wireless/libertas/decl.h | 102
drivers/net/wireless/libertas/defs.h | 67
drivers/net/wireless/libertas/dev.h | 176
drivers/net/wireless/libertas/ethtool.c | 114
drivers/net/wireless/libertas/host.h | 392
drivers/net/wireless/libertas/hostcmd.h | 143
drivers/net/wireless/libertas/if_cs.c | 88
drivers/net/wireless/libertas/if_sdio.c | 88
drivers/net/wireless/libertas/if_sdio.h | 4
drivers/net/wireless/libertas/if_usb.c | 726 -
drivers/net/wireless/libertas/if_usb.h | 108
drivers/net/wireless/libertas/join.c | 313
drivers/net/wireless/libertas/join.h | 38
drivers/net/wireless/libertas/main.c | 1330 +--
drivers/net/wireless/libertas/rx.c | 223
drivers/net/wireless/libertas/scan.c | 1192 +--
drivers/net/wireless/libertas/scan.h | 94
drivers/net/wireless/libertas/tx.c | 253
drivers/net/wireless/libertas/types.h | 25
drivers/net/wireless/libertas/wext.c | 867 +-
drivers/net/wireless/libertas/wext.h | 14
drivers/net/wireless/orinoco.c | 544 -
drivers/net/wireless/orinoco.h | 12
drivers/net/wireless/p54common.c | 2
drivers/net/wireless/p54pci.c | 77
drivers/net/wireless/prism54/isl_ioctl.c | 4
drivers/net/wireless/prism54/islpci_dev.c | 2
drivers/net/wireless/prism54/islpci_dev.h | 3
drivers/net/wireless/prism54/islpci_mgt.c | 4
drivers/net/wireless/rt2x00/rt2400pci.c | 173
drivers/net/wireless/rt2x00/rt2400pci.h | 24
drivers/net/wireless/rt2x00/rt2500pci.c | 141
drivers/net/wireless/rt2x00/rt2500pci.h | 4
drivers/net/wireless/rt2x00/rt2500usb.c | 206
drivers/net/wireless/rt2x00/rt2500usb.h | 17
drivers/net/wireless/rt2x00/rt2x00.h | 214
drivers/net/wireless/rt2x00/rt2x00config.c | 100
drivers/net/wireless/rt2x00/rt2x00debug.c | 240
drivers/net/wireless/rt2x00/rt2x00debug.h | 4
drivers/net/wireless/rt2x00/rt2x00dev.c | 301
drivers/net/wireless/rt2x00/rt2x00dump.h | 121
drivers/net/wireless/rt2x00/rt2x00firmware.c | 5
drivers/net/wireless/rt2x00/rt2x00lib.h | 8
drivers/net/wireless/rt2x00/rt2x00mac.c | 7
drivers/net/wireless/rt2x00/rt2x00pci.c | 96
drivers/net/wireless/rt2x00/rt2x00pci.h | 12
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 39
drivers/net/wireless/rt2x00/rt2x00ring.h | 37
drivers/net/wireless/rt2x00/rt2x00usb.c | 77
drivers/net/wireless/rt2x00/rt2x00usb.h | 19
drivers/net/wireless/rt2x00/rt61pci.c | 398 -
drivers/net/wireless/rt2x00/rt61pci.h | 14
drivers/net/wireless/rt2x00/rt73usb.c | 232
drivers/net/wireless/rt2x00/rt73usb.h | 14
drivers/net/wireless/rtl8187_rtl8225.c | 8
drivers/net/wireless/wavelan.c | 2
drivers/net/wireless/wavelan_cs.c | 10
drivers/net/wireless/zd1211rw/Kconfig | 7
drivers/net/wireless/zd1211rw/Makefile | 3
drivers/net/wireless/zd1211rw/zd_chip.c | 126
drivers/net/wireless/zd1211rw/zd_chip.h | 60
drivers/net/wireless/zd1211rw/zd_def.h | 5
drivers/net/wireless/zd1211rw/zd_ieee80211.c | 196
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 49
drivers/net/wireless/zd1211rw/zd_mac.c | 1541 +--
drivers/net/wireless/zd1211rw/zd_mac.h | 117
drivers/net/wireless/zd1211rw/zd_netdev.c | 264
drivers/net/wireless/zd1211rw/zd_netdev.h | 45
drivers/net/wireless/zd1211rw/zd_rf.c | 5
drivers/net/wireless/zd1211rw/zd_rf.h | 5
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 5
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 5
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 5
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 7
drivers/net/wireless/zd1211rw/zd_usb.c | 289
drivers/net/wireless/zd1211rw/zd_usb.h | 36
drivers/net/xen-netfront.c | 2
drivers/ssb/b43_pci_bridge.c | 1
drivers/ssb/main.c | 10
drivers/ssb/pci.c | 221
include/asm-powerpc/pasemi_dma.h | 467 +
include/linux/if_frad.h | 2
include/linux/if_tun.h | 4
include/linux/pci_ids.h | 3
include/linux/ssb/ssb.h | 71
include/linux/ssb/ssb_regs.h | 59
net/ieee80211/ieee80211_wx.c | 2
314 files changed, 57148 insertions(+), 22551 deletions(-)
^ permalink raw reply
* Re: [patch] add net_device_stats support to ethtool
From: Jeff Garzik @ 2008-01-18 20:14 UTC (permalink / raw)
To: Dan Nicolaescu; +Cc: netdev
In-Reply-To: <200801161529.m0GFTfYR005096@sallyv1.ics.uci.edu>
Dan Nicolaescu wrote:
> Hi,
>
> I have posted this patch in the past with absolutely no reply.
> I would appreciate some sort of feedback of the form
> interested/not interested. Should I just drop it?
>
> "ethtool -S" only supports devices that have custom code written to
> print the stats.
No -- more specifically, ethtool is for NIC-specific statistics that do
not appear elsewhere.
net_device_stats already appear elsewhere, so it's redundant to add it
to ethtool. Just duplicates the same functionality elsewhere.
Jeff
^ permalink raw reply
* Re: [PATCH] ne2k: add minimal ethtool setting support
From: Jeff Garzik @ 2008-01-18 20:04 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Paul Gortmaker, netdev
In-Reply-To: <20080115154805.69150f76@deepthought>
Stephen Hemminger wrote:
> Add minimal ethtool settings support for ne2k driver. This is needed
> for KVM/QEMU environment where ne2k seems to be the simplest stupid
> hardware used.
>
> Signed-off-by: Stephen Hemminger <stephen.hemminger@vyatta.com>
>
> --- a/drivers/net/ne2k-pci.c 2008-01-15 11:21:02.000000000 -0800
> +++ b/drivers/net/ne2k-pci.c 2008-01-15 15:43:17.000000000 -0800
> @@ -634,8 +634,21 @@ static void ne2k_pci_get_drvinfo(struct
> strcpy(info->bus_info, pci_name(pci_dev));
> }
>
> +static int ne2k_pci_get_settings(struct net_device *dev,
> + struct ethtool_cmd *cmd)
> +{
> + cmd->speed = SPEED_10;
> + cmd->duplex = (ei_status.ne2k_flags & FORCE_FDX)
> + ? DUPLEX_FULL : DUPLEX_HALF;
> + cmd->port = PORT_TP;
> + cmd->transceiver = XCVR_INTERNAL;
> + cmd->autoneg = AUTONEG_DISABLE;
> + return 0;
> +}
It's a little bit /too/ minimal... the speed is wrong for a large swath
of 10/100 ne2k chips...
Jeff
^ permalink raw reply
* Re: [PATCH net-2.6.25] New driver "sfc" for Solarstorm SFC4000 controller - 5th attempt
From: Jeff Garzik @ 2008-01-18 20:03 UTC (permalink / raw)
To: Robert Stonehouse; +Cc: netdev, linux-net-drivers, spope
In-Reply-To: <4790D1CD.80500@solarflare.com>
Robert Stonehouse wrote:
> This is a resubmission of a new driver for Solarflare network controllers.
>
> The driver supports several types of PHY (10Gbase-T, XFP, CX4) on six
> different 10G and 1G boards. There is a driver for the network controller
> and an MTD driver that allows access to the flash/EEPROM.
>
> NICs based on this controller are now available from SMC as part numbers
> SMC10GPCIe-XFP and SMC10GPCIe-10BT.
>
> FYI the previous thread was:
> http://marc.info/?l=linux-netdev&m=119999015817920&w=2
>
> In previous postings we were asked to have the MTD part of this patch
> reviewed and we have responded to the comments received so far:
> http://lists.infradead.org/pipermail/linux-mtd/2008-January/020355.html
>
> Things that have changed since the last patch:
> - Removed residual support for more than one port per controller.
> - Moved LED control from PHY operations to board operations.
> - Added support for controlling LRO through ethtool {get,set}_flags().
> - Removed obsolete workaround for reservation of MSI-X tables by PCI core.
> - Improved reliability of PHY loopback setting.
> - Improved reliability of I2C operations.
> - Fixed on-load self-test when using RSS.
> - Simplified MTD driver following review on linux-mtd list.
> - Removed some redundant information from struct efx_nic.
> - hardware monitoring (for PHY link polling) is now a workqueue item
> rather than using a timer
> - mac_lock becomes a mutex to support the previous item.
>
> We would welcome more review of this code and would like to know if there
> are any objections to this being merged for 2.6.25.
>
>
> The patch (against net-2.6.25) is at:
> https://support.solarflare.com/netdev/5/net-2.6.25-sfc-2.2.0045.patch
>
> The new files may also be downloaded as a tarball:
> https://support.solarflare.com/netdev/5/net-2.6.25-sfc-2.2.0045.tgz
>
> And for verification there is:
> https://support.solarflare.com/netdev/5/MD5SUMS
Please email to me in patch format...
^ permalink raw reply
* Re: [PATCH 3/4] sky2: support for Yukon Supreme
From: Jeff Garzik @ 2008-01-18 20:02 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Jeff Garzik, netdev
In-Reply-To: <20080111001550.913815702@linux-foundation.org>
applied 3-4
^ permalink raw reply
* Re: [PATCH] SGISEEQ: fix oops when doing ifconfig down; ifconfig up
From: Jeff Garzik @ 2008-01-18 20:01 UTC (permalink / raw)
To: Thomas Bogendoerfer; +Cc: netdev, linux-mips, ralf, jgarzik
In-Reply-To: <20080112230847.1EB3EC2F35@solo.franken.de>
Thomas Bogendoerfer wrote:
> When doing init_ring checking whether a new skb needs to be allocated
> was wrong.
>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
>
> This is a bug fix for the 2.6.25 driver.
>
> drivers/net/sgiseeq.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/sgiseeq.c b/drivers/net/sgiseeq.c
> index c69bb8b..78994ed 100644
> --- a/drivers/net/sgiseeq.c
> +++ b/drivers/net/sgiseeq.c
> @@ -193,7 +193,7 @@ static int seeq_init_ring(struct net_device *dev)
>
> /* And now the rx ring. */
> for (i = 0; i < SEEQ_RX_BUFFERS; i++) {
> - if (!sp->rx_desc[i].rdma.pbuf) {
> + if (!sp->rx_desc[i].skb) {
> dma_addr_t dma_addr;
> struct sk_buff *skb = netdev_alloc_skb(dev, PKT_BUF_SZ);
applied
^ permalink raw reply
* Re: [PATCH][resend] add driver for enc28j60 ethernet chip
From: Jeff Garzik @ 2008-01-18 20:01 UTC (permalink / raw)
To: Claudio Lanconelli; +Cc: netdev, Jeff Garzik, Stephen Hemminger
In-Reply-To: <478B32BC.6070206@eptar.com>
Claudio Lanconelli wrote:
> This patch add support for Microchip enc28j60 10Mbps Ethernet chip used
> in embedded systems
> due to its cheap SPI interface.
> This 2nd version include changes from previous comments by Jeff and
> Stephen,
> all but NAPI, see comments below at this regard.
>
> I resend the patch because I didn't receive any feedback.
>
> Changes to 1st version:
> - use mutex instead of semaphore
> - add carrier detect handling
> - add ethtool support
> - set_multicast_list when the interface is up using a workqueue
> - add restart_work to reset the chip in case of tx_timeout
> - removed kmalloc() for spi_transfer_buf (array defined in the priv struct)
>
> Jeff Garzik wrote:
>>
>> comments:
>>
>> * Why do interrupt work in a kernel thread? Your comment says you
>> cannot, but does not explain.
> The enc28j60 is a SPI to Ethernet adapter, so we cannot access register
> with simple in() out() instructions, but we need to use the SPI
> subsystem. The spi_sync() basic operation to read/write a register is a
> blocking operation, so can't be done in interrupt context.
> Since every basic operation like read interrupt flag register call
> spi_sync() we need the work queue for almost everything.
>
>>
>> * should use NAPI
>>
> For the reason I just explained I don't think NAPI is a viable way for
> enc28j60.
> Furthermore enc28j60 is a 10Mb only device and probably don't suffer to
> interrupt overload.
>
> I'm waiting for any comments, please.
applied
^ permalink raw reply
* Re: [BUG] 2.6.24-rc8 broke warm reboots on ASUS P5B-E Plus
From: Mikael Pettersson @ 2008-01-18 20:00 UTC (permalink / raw)
To: shemminger; +Cc: jeff, netdev, linux-kernel
In-Reply-To: <18319.54046.912597.487844@harpo.it.uu.se>
On Thu, 17 Jan 2008 23:13:50 +0100, Mikael Pettersson wrote:
> The problematic machine has an Intel P965/ICH8R based ASUS P5B-E Plus
> mainboard with a Core2Duo 6600 processor. Kernels up to and including
> 2.6.24-rc7 work fine on it.
>
> Kernel 2.6.24-rc8 boots Ok, but if I try to do a warm reboot after
> having run 2.6.24-rc8, the BIOS hangs. The initial BIOS screen shows:
>
> <BIOS version>
> <CPU identification>
> <lists hotkeys>
> <identifies RAM>
> <initialises USB controllers>
> [here it always hangs after having run 2.6.24-rc8]
> <RAM test>
> <identifies ATA disks>
>
> Pressing reset will not fix the hang, nor will powering the machine
> down using the mainboard's power button. The only thing that works is
> to switch the PSU off, wait a few seconds, switch the PSU on again,
> and then press the mainboard's power button.
>
> Both the 32-bit and 64-bit 2.6.24-rc8 x86 kernels cause this problem,
> and it's 100% repeatable.
>
> I'll try to do some rc7->rc8 bisecting tomorrow.
I've now narrowed it down to the following change in 2.6.24-rc7-git5:
84cd2dfb04d23a961c5f537baa243fa54d0987ac
>sky2: remove check for PCI wakeup setting from BIOS
>
>The driver checks status of PCI power management to mark
>default setting of Wake On Lan. On some systems this works, but often
>it reports a that WOL is disabled when it isn't.
>
>This patch gets rid of that check and just reports the wake on
>lan status based on the hardware capablity.
>
>Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
>Signed-off-by: Jeff Garzik <jeff@garzik.org>
Reverting this eliminates the abovementioned BIOS hang.
I added a debug printk to sky2_init_netdev(), and it showed:
sky2_init_netdev: wol == 0x0, (sky2_wol_supported(hw) & WAKE_MAGIC) == 0x20
That is, 2.6.24-rc7-git4 and earlier drivers would set sky2->wol to 0,
while 2.6.24-rc7-git5 and newer will set it to 0x20. A quick look through
sky2.c shows that this will affect HW programming in several places.
Please revert or fix before 2.6.24 final.
lspci -vvxxx included below.
/Mikael
02:00.0 Ethernet controller: Marvell Technology Group Ltd. Unknown device 4364 (rev 12)
Subsystem: ASUSTeK Computer Inc. Unknown device 81f8
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 0, Cache Line Size 08
Interrupt: pin A routed to IRQ 17
Region 0: Memory at ff9fc000 (64-bit, non-prefetchable) [size=16K]
Region 2: I/O ports at c800 [size=256]
Expansion ROM at ff9c0000 [disabled] [size=128K]
Capabilities: [48] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [50] Vital Product Data
Capabilities: [5c] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [e0] Express Legacy Endpoint IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag-
Device: Latency L0s unlimited, L1 unlimited
Device: AtnBtn- AtnInd- PwrInd-
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
Link: Supported Speed 2.5Gb/s, Width x1, ASPM L0s L1, Port 0
Link: Latency L0s <256ns, L1 unlimited
Link: ASPM Disabled RCB 128 bytes CommClk+ ExtSynch-
Link: Speed 2.5Gb/s, Width x1
00: ab 11 64 43 07 00 10 00 12 00 00 02 08 00 00 00
10: 04 c0 9f ff 00 00 00 00 01 c8 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 43 10 f8 81
30: 00 00 9c ff 48 00 00 00 00 00 00 00 0a 01 00 00
40: 00 00 f0 01 00 80 a0 01 01 50 03 fe 00 20 00 13
50: 03 5c 00 80 00 00 00 01 00 00 00 01 05 e0 80 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 70 00 00 00 00 00 00 82 a8 e8 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 10 00 11 00 c0 8f 00 00 00 20 19 00 11 ac 07 00
f0: 48 00 11 10 00 00 00 00 00 00 00 00 00 00 00 00
^ permalink raw reply
* Re: [patch v3] Documentation: add a guideline for hard_start_xmit method
From: Jeff Garzik @ 2008-01-18 19:42 UTC (permalink / raw)
To: Matti Linnanvuori; +Cc: netdev
In-Reply-To: <492102.15643.qm@web52012.mail.re2.yahoo.com>
Matti Linnanvuori wrote:
> From: Matti Linnanvuori <mattilinnanvuori@yahoo.com>
>
> Add a guideline not to modify SKBs.
>
> Signed-off-by: Matti Linnanvuori <mattilinnanvuori@yahoo.com>
>
> ---
>
> --- a/Documentation/networking/driver.txt 2008-01-13 07:14:01.608291500 +0200
> +++ b/Documentation/networking/driver.txt 2008-01-15 16:16:14.636054000 +0200
> @@ -61,7 +61,10 @@ Transmit path guidelines:
> 2) Do not forget to update netdev->trans_start to jiffies after
> each new tx packet is given to the hardware.
>
> -3) Do not forget that once you return 0 from your hard_start_xmit
> +3) A hard_start_xmit method must not modify the shared parts of a
> + cloned SKB.
> +
> +4) Do not forget that once you return 0 from your hard_start_xmit
> method, it is your driver's responsibility to free up the SKB
> and in some finite amount of time.
applied
^ permalink raw reply
* Re: [PATCH] atl1: fix frame length bug
From: Jeff Garzik @ 2008-01-18 19:42 UTC (permalink / raw)
To: Jay Cliburn; +Cc: davem, csnook, david.harris, netdev
In-Reply-To: <1200362201-30987-1-git-send-email-jacliburn@bellsouth.net>
Jay Cliburn wrote:
> The driver sets up the hardware to accept a frame with max length
> equal to MTU + Ethernet header + FCS + VLAN tag, but we neglect to
> add the VLAN tag size to the ingress buffer. When a VLAN-tagged
> frame arrives, the hardware passes it, but bad things happen
> because the buffer is too small. This patch fixes that.
>
> Thanks to David Harris for reporting the bug and testing the fix.
>
> Tested-by: David Harris <david.harris@cpni-inc.com>
> Signed-off-by: Jay Cliburn <jacliburn@bellsouth.net>
applied
^ permalink raw reply
* Re: [Patch 2.6.24 1/1]S2io: Fixed synchronization between scheduling of napi with card reset and close
From: Jeff Garzik @ 2008-01-18 19:42 UTC (permalink / raw)
To: Sreenivasa Honnur; +Cc: netdev, support
In-Reply-To: <Pine.GSO.4.10.10801142021110.20238-100000@guinness>
Sreenivasa Honnur wrote:
> - Fixed synchronization between scheduling of napi with card reset and close
> by moving the enabling and disabling of napi to card up and card down
> functions respectively instead of open and close.
>
> Signed-off-by: Surjit Reang <surjit.reang@neterion.com>
> Signed-off-by: Ramkrishna Vepa <ram.vepa@neterion.com>
applied
^ permalink raw reply
* Re: Please pull 'fixes-jgarzik' branch of wireless-2.6
From: Jeff Garzik @ 2008-01-18 19:40 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, linux-wireless
In-Reply-To: <20080116212752.GE3164@tuxdriver.com>
John W. Linville wrote:
> Jeff,
>
> A few more fixes for 2.6.24...note that this branch is based
> on 2.6.24-rc8.
>
> Thanks,
>
> John
>
> ---
>
> Individual patches available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/fixes-jgarzik/
>
> ---
>
> The following changes since commit cbd9c883696da72b2b1f03f909dbacc04bbf8b58:
> Linus Torvalds (1):
> Linux 2.6.24-rc8
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-jgarzik
>
> Ivo van Doorn (1):
> rt2x00: Fix ieee80211 payload alignment
>
> Marc Pignat (1):
> wireless/libertas support for 88w8385 sdio older revision
>
> Randy Dunlap (1):
> hostap: section mismatch warning
>
> Stefano Brivio (2):
> ipw2200: fix typo in kerneldoc
> b43: fix use-after-free rfkill bug
>
> drivers/net/wireless/b43/rfkill.c | 11 ++++++-----
> drivers/net/wireless/hostap/hostap_plx.c | 6 +++---
> drivers/net/wireless/ipw2200.c | 2 +-
> drivers/net/wireless/libertas/if_sdio.c | 4 ++++
> drivers/net/wireless/rt2x00/rt2x00pci.c | 2 +-
> drivers/net/wireless/rt2x00/rt2x00usb.c | 11 +++++++++--
> 6 files changed, 24 insertions(+), 12 deletions(-)
pulled
^ permalink raw reply
* Re: [PATCH] e1000e Kconfig: remove ref to nonexistant docs
From: Jeff Garzik @ 2008-01-18 19:40 UTC (permalink / raw)
To: Jason Uhlenkott; +Cc: netdev, Auke Kok
In-Reply-To: <20080117070317.GA7922@aurum.uhlenkott.net>
Jason Uhlenkott wrote:
> There is no Documentation/networking/e1000e.txt.
>
> Signed-off-by: Jason Uhlenkott <jasonuhl@jasonuhl.org>
> Cc: Auke Kok <auke-jan.h.kok@intel.com>
> ---
>
> Index: linux/drivers/net/Kconfig
> ===================================================================
> --- linux.orig/drivers/net/Kconfig 2008-01-16 17:48:03.041103083 -0800
> +++ linux/drivers/net/Kconfig 2008-01-16 23:00:23.647430487 -0800
> @@ -1976,9 +1976,6 @@
>
> <http://support.intel.com>
>
> - More specific information on configuring the driver is in
> - <file:Documentation/networking/e1000e.txt>.
> -
> To compile this driver as a module, choose M here. The module
> will be called e1000e.
applied
^ permalink raw reply
* Re: Pull request for 'ipg-fixes' branch (try #2)
From: Jeff Garzik @ 2008-01-18 19:39 UTC (permalink / raw)
To: Francois Romieu
Cc: David Miller, linux, Andrew Morton, netdev, Sorbica, Jesse,
craig_rich
In-Reply-To: <20080117223651.GA7782@electric-eye.fr.zoreil.com>
Francois Romieu wrote:
> Please pull from branch 'ipg-fixes' in repository
>
> git://git.kernel.org/pub/scm/linux/kernel/git/romieu/netdev-2.6.git ipg-fixes
>
> to get the changes below.
>
> Distance from 'master' (d8c89eb3a12f0da96d049bd515c7fa3702e511c5)
> -----------------------------------------------------------------
>
> 47cccd7d7cc1f2b6f34aadc9041fb991c6293cdd
> dafdec746f8c468bebf6b99f32a392ee6c8d0212
> 0da1b995aee447656c0eb77e4e32468e37f868a3
> 227bc24d675d80de1cfb3ab72891cc932dadbc3b
>
> Diffstat
> --------
>
> drivers/net/ipg.c | 36 ++++++++++++------------------------
> 1 files changed, 12 insertions(+), 24 deletions(-)
>
> Shortlog
> --------
>
> Francois Romieu (4):
> ipg: balance locking in irq handler
> ipg: plug Tx completion leak
> ipg: fix queue stop condition in the xmit handler
> ipg: fix Tx completion irq request
pulled
^ permalink raw reply
* Re: [PATCH 1/7] bonding: fix locking in sysfs primary/active selection
From: Jeff Garzik @ 2008-01-18 19:39 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: netdev, David Miller, Andy Gospodarek, Andrew Morton
In-Reply-To: <12006159063217-git-send-email-fubar@us.ibm.com>
Jay Vosburgh wrote:
> Fix the functions that store the primary and active slave
> options via sysfs to hold the correct locks in the correct order.
>
> The bond_change_active_slave and bond_select_active_slave
> functions both require rtnl, bond->lock for read and curr_slave_lock for
> write_bh, and no other locks. This is so that the lower level
> mode-specific functions (notably for balance-alb mode) can release locks
> down to just rtnl in order to call, e.g., dev_set_mac_address with the
> locks it expects (rtnl only).
>
> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
> Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
> ---
> drivers/net/bonding/bond_sysfs.c | 15 ++++++++++-----
> 1 files changed, 10 insertions(+), 5 deletions(-)
applied 1-7
^ permalink raw reply
* sky2: call sky2_set_multicast from sky2_restart?
From: Tom Burns @ 2008-01-18 19:30 UTC (permalink / raw)
To: netdev
In-Reply-To: <671c20540801181120i55bd8ff0r8385636d1ce5b2e@mail.gmail.com>
Hi List,
Throughout the sky2.c file any call to sky2_up(dev) is followed (soon
enough) by a call to sky2_set_multicast(dev). Should this not also be
the case when it is called in sky2_restart()?
Cheers,
Tom Burns
^ permalink raw reply
* Re: [patch for 2.6.24? 1/1] bonding: locking fix
From: Jay Vosburgh @ 2008-01-18 17:32 UTC (permalink / raw)
To: Krzysztof Oledzki
Cc: Andrew Morton, davem, jeff, shemminger, netdev, Andy Gospodarek
In-Reply-To: <Pine.LNX.4.64.0801180932440.4570@bizon.gios.gov.pl>
Krzysztof Oledzki <olel@ans.pl> wrote:
[...]
>> which makes the warning go away, but Herbert Xu pointed out that
>> there is a potential problem with bond_enslave accessing the mc_lists
>> without sufficient locking. It's not the only offender, either, and the
>> bond->mc_list references really need to be protected by the bond_lock,
>> and the whole thing probably ought to use dev_mc_sync/unsync instead of
>> what it does now.
>>
>> Since the bond_enslave, et al, business isn't a new problem, and
>> I've never heard of it being hit, I'm thinking now to just leave the
>> bond_enslave part for 2.6.25, and fix the lockdep warning for 2.6.24.
>
>It is a new problem, as it never happened with <=2.6.23.
The lockdep warning is new, but I was referring to the lack of
mutexing between bond_enslave, bond_release, etc and the
set_multicast_list's use of the mc_lists. There has never been mutexing
of the mc_lists in bond_enslave & friends, so that is not a new problem.
-J
---
-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox