net driver fixes
Subsystems (5)
PATCH 1/1 net driver fixes
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:
MAINTAINERS | 10 ++- drivers/net/Kconfig | 2 +- drivers/net/bonding/bond_main.c | 1 + drivers/net/bonding/bond_sysfs.c | 4 +- drivers/net/pasemi_mac.c | 18 ++++- drivers/net/qla3xxx.c | 42 +++++------ drivers/net/qla3xxx.h | 1 + drivers/net/r8169.c | 26 ++----- drivers/net/sky2.c | 116 ++++++++++++++++++------------ drivers/net/sky2.h | 3 +- drivers/net/smc91x.h | 15 ++++ drivers/net/wireless/Kconfig | 2 +- drivers/net/wireless/b43/Kconfig | 10 ++- drivers/net/wireless/b43/debugfs.c | 2 +- drivers/net/wireless/b43/main.c | 19 +++--- drivers/net/wireless/b43/pcmcia.c | 52 +++++++++----- drivers/net/wireless/b43/rfkill.c | 115 +++++++++++++---------------- drivers/net/wireless/b43/rfkill.h | 14 +--- drivers/net/wireless/b43legacy/debugfs.c | 2 +- drivers/net/wireless/b43legacy/main.c | 21 +++--- drivers/net/wireless/hostap/hostap_pci.c | 6 +- drivers/net/wireless/ipw2100.c | 4 +- drivers/net/wireless/libertas/cmd.c | 10 ++- drivers/net/wireless/libertas/if_cs.c | 7 ++- drivers/net/wireless/libertas/if_sdio.c | 4 +- drivers/net/wireless/rt2x00/rt2x00mac.c | 8 ++ 26 files changed, 285 insertions(+), 229 deletions(-)
Ciaran McCreesh (1):
r8169: add PCI ID for the 8168 in the Abit Fatal1ty F-190HD motherboard
Francois Romieu (2):
r8169: do not enable the TBI for the 8168 and the 81x0
r8169: prevent bit sign expansion error in mdio_write
Holger Schurig (1):
libertas: fixes for slow hardware
Ivo van Doorn (1):
rt2x00: Block adhoc & master mode
Jay Vosburgh (2):
bonding: fix rtnl locking merge error
bonding: don't validate address at device open
John W. Linville (1):
hermes: clarify Intel reference in Kconfig help
Magnus Damm (1):
ax88796: add superh to kconfig dependencies
Marcelo Tosatti (1):
libertas: properly account for queue commands
Mark Lord (2):
r8169: revert 7da97ec96a0934319c7fbedd3d38baf533e20640 (partly)
r8169: revert 7da97ec96a0934319c7fbedd3d38baf533e20640 (bis repetita)Michael Buesch (7):
b43: pcmcia-host initialization bugfixes
b43: Fix rfkill callback deadlock
b43: debugfs SHM read buffer overrun fix
b43: Rewrite and fix rfkill init
b43: properly request pcmcia IRQ
b43legacy: Fix sparse warning
b43: Fix kconfig dependencies for rfkill and leds
Olof Johansson (2):
pasemi_mac: Don't set replace-source-address descriptor bits
pasemi_mac: Fix CRC checks
Pierre Ossman (1):
libertas: make if_sdio align packets
Randy Dunlap (1):
hostap: fix section mismatch warning
Roel Kluin (1):
ipw2100: fix postfix decrement errors
Ron Mercer (2):
qla3xxx: bugfix: Move link state machine into a worker thread
qla3xxx: bugfix: Fix bad logical operation in link state machine.
Stefano Brivio (4):
b43legacy: fix possible buffer overrun in debugfs
b43legacy: add me as maintainer and fix URLs
b43: fix shared IRQ race condition
b43legacy: fix shared IRQ race condition
Stephen Hemminger (9):
sky2: enable PCI config writes
sky2: status ring race fix
sky2: longer PHY delay
sky2: dont change LED after autoneg
sky2: remove unneeded mask update
sky2: handle advanced error recovery config issues
sky2: version 1.20
sky2: netpoll on port 0 only
sky2: new pci id's
eric miao (1):
add support for smc91x ethernet interface on zylonite
MAINTAINERS +6 -4
@@ -787,23 +787,25 @@ B43 WIRELESS DRIVER P: Michael Buesch M: [email protected] P: Stefano Brivio -M: [email protected] +M: [email protected] L: [email protected] -W: http://bcm43xx.berlios.de/ +W: http://linuxwireless.org/en/users/Drivers/b43 S: Maintained B43LEGACY WIRELESS DRIVER P: Larry Finger M: [email protected] +P: Stefano Brivio +M: [email protected] L: [email protected] -W: http://bcm43xx.berlios.de/ +W: http://linuxwireless.org/en/users/Drivers/b43 S: Maintained BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION) P: Larry Finger M: [email protected] P: Stefano Brivio -M: [email protected] +M: [email protected] L: [email protected] W: http://bcm43xx.berlios.de/ S: Maintained
drivers/net/Kconfig +1 -1
@@ -235,7 +235,7 @@ source "drivers/net/arm/Kconfig" config AX88796 tristate "ASIX AX88796 NE2000 clone support" - depends on ARM || MIPS + depends on ARM || MIPS || SUPERH select CRC32 select MII help
drivers/net/bonding/bond_main.c +1 -0
@@ -4405,6 +4405,7 @@ static int bond_init(struct net_device *bond_dev, struct bond_params *params) bond_dev->set_multicast_list = bond_set_multicast_list; bond_dev->change_mtu = bond_change_mtu; bond_dev->set_mac_address = bond_set_mac_address; + bond_dev->validate_addr =NULL ;bond_set_mode_ops (bond, bond->params.mode);
drivers/net/bonding/bond_sysfs.c +2 -2
@@ -1193,8 +1193,6 @@ static ssize_t bonding_show_active_slave(struct device *d,struct bonding *bond =to_bond (d);int count; -rtnl_lock (); -read_lock (&bond->curr_slave_lock); curr = bond->curr_active_slave;read_unlock (&bond->curr_slave_lock);
@@ -1216,7 +1214,9 @@ static ssize_t bonding_store_active_slave(struct device *d,struct slave *new_active =NULL ;struct bonding *bond =to_bond (d); +rtnl_lock ();write_lock_bh (&bond->lock); +if (!USES_PRIMARY (bond->params.mode)) { printk(KERN_INFO DRV_NAME ": %s: Unable to change active slave; %s is in mode %d\n",
drivers/net/pasemi_mac.c +14 -4
@@ -580,6 +580,16 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit) len = (macrx &XCT_MACRX_LLEN_M ) >>XCT_MACRX_LLEN_S ; +pci_unmap_single (mac->dma_pdev, dma, len,PCI_DMA_FROMDEVICE ); + +if (macrx &XCT_MACRX_CRC ) { +/* CRC error flagged */ + mac->netdev->stats.rx_errors++; + mac->netdev->stats.rx_crc_errors++; +dev_kfree_skb_irq (skb); + goto next; + } +if (len <256 ) {struct sk_buff *new_skb;
@@ -595,11 +605,10 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit) }else info->skb =NULL ; -pci_unmap_single (mac->dma_pdev, dma, len,PCI_DMA_FROMDEVICE ); - info->dma =0 ; -skb_put (skb, len); +/* Don't include CRC */ +skb_put (skb, len-4 );if (likely ((macrx &XCT_MACRX_HTY_M ) ==XCT_MACRX_HTY_IPV4_OK )) { skb->ip_summed =CHECKSUM_UNNECESSARY ;
@@ -614,6 +623,7 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit) skb->protocol =eth_type_trans (skb, mac->netdev);netif_receive_skb (skb); +next:RX_RING (mac, n) =0 ;RX_RING (mac, n+1 ) =0 ;
@@ -1126,7 +1136,7 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)unsigned long flags;int i, nfrags; - dflags =XCT_MACTX_O |XCT_MACTX_ST |XCT_MACTX_SS |XCT_MACTX_CRC_PAD ; + dflags =XCT_MACTX_O |XCT_MACTX_ST |XCT_MACTX_CRC_PAD ;if (skb->ip_summed ==CHECKSUM_PARTIAL ) {const unsigned char *nh =skb_network_header (skb);
drivers/net/qla3xxx.c +18 -24
79 lines not on this page · raw message
drivers/net/qla3xxx.h +1 -0
@@ -1286,6 +1286,7 @@ struct ql3_adapter {struct workqueue_struct *workqueue;struct delayed_work reset_work;struct delayed_work tx_timeout_work; +struct delayed_work link_state_work;u32 max_frame_size;u32 device_id;u16 phyType;
drivers/net/r8169.c +7 -19
@@ -171,6 +171,8 @@ static struct pci_device_id rtl8169_pci_tbl[] = { { PCI_DEVICE(0x16ec, 0x0116), 0, 0, RTL_CFG_0 }, { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 }, + { 0x0001, 0x8168, + PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 }, {0,}, };
@@ -468,7 +470,7 @@ static void mdio_write(void __iomem *ioaddr, int reg_addr, int value) {int i; -RTL_W32 (PHYAR ,0x80000000 | (reg_addr &0xFF ) <<16 | value); +RTL_W32 (PHYAR ,0x80000000 | (reg_addr &0x1f ) <<16 | (value &0xffff ));for (i =20 ; i >0 ; i--) {/*
@@ -485,7 +487,7 @@ static int mdio_read(void __iomem *ioaddr, int reg_addr) {int i, value =-1 ; -RTL_W32 (PHYAR ,0x0 | (reg_addr &0xFF ) <<16 ); +RTL_W32 (PHYAR ,0x0 | (reg_addr &0x1f ) <<16 );for (i =20 ; i >0 ; i--) {/*
@@ -493,7 +495,7 @@ static int mdio_read(void __iomem *ioaddr, int reg_addr)* the specified MII register. */ if (RTL_R32 (PHYAR ) &0x80000000 ) { - value = (int ) (RTL_R32 (PHYAR ) &0xFFFF ); + value =RTL_R32 (PHYAR ) &0xffff ;break ; }udelay (25 );
@@ -1245,16 +1247,6 @@ static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)rtl_phy_write (ioaddr, phy_reg_init,ARRAY_SIZE (phy_reg_init)); } -static void rtl8168b_hw_phy_config (void __iomem *ioaddr) -{ -struct phy_reg phy_reg_init[] = { - {0x1f ,0x0000 }, - {0x10 ,0xf41b }, - {0x1f ,0x0000 } - }; - -rtl_phy_write (ioaddr, phy_reg_init,ARRAY_SIZE (phy_reg_init)); -}static void rtl8168cp_hw_phy_config (void __iomem *ioaddr) {
@@ -1324,11 +1316,6 @@ static void rtl_hw_phy_config(struct net_device *dev)case RTL_GIGA_MAC_VER_04 :rtl8169sb_hw_phy_config (ioaddr);break ; -case RTL_GIGA_MAC_VER_11 : -case RTL_GIGA_MAC_VER_12 : -case RTL_GIGA_MAC_VER_17 : -rtl8168b_hw_phy_config (ioaddr); -break ;case RTL_GIGA_MAC_VER_18 :rtl8168cp_hw_phy_config (ioaddr);break ;
@@ -1739,7 +1726,8 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) tp->features |=rtl_try_msi (pdev, ioaddr, cfg);RTL_W8 (Cfg9346, Cfg9346_Lock); -if (RTL_R8 (PHYstatus) & TBI_Enable) { +if ((tp->mac_version <=RTL_GIGA_MAC_VER_06 ) && + (RTL_R8 (PHYstatus) & TBI_Enable)) { tp->set_speed = rtl8169_set_speed_tbi; tp->get_settings = rtl8169_gset_tbi; tp->phy_reset_enable = rtl8169_tbi_reset_enable;
drivers/net/sky2.c +70 -46
231 lines not on this page · raw message
drivers/net/sky2.h +2 -1
@@ -247,7 +247,8 @@ enum csr_regs {B3_PA_CTRL =0x01f0 ,B3_PA_TEST =0x01f2 , - Y2_CFG_SPC = 0x1c00, +Y2_CFG_SPC =0x1c00 ,/* PCI config space region */ + Y2_CFG_AER = 0x1d00, /* PCI Advanced Error Report region */ };/* B0_CTST 16 bit Control/Status register */
drivers/net/smc91x.h +15 -0
@@ -224,6 +224,21 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg) } } +#elif defined(CONFIG_MACH_ZYLONITE) + +#define SMC_CAN_USE_8BIT 1 +#define SMC_CAN_USE_16BIT 1 +#define SMC_CAN_USE_32BIT 0 +#define SMC_IO_SHIFT 0 +#define SMC_NOWAIT 1 +#define SMC_USE_PXA_DMA 1 +#define SMC_inb (a, r) readb((a) + (r)) +#define SMC_inw (a, r) readw((a) + (r)) +#define SMC_insw (a, r, p, l) insw((a) + (r), p, l) +#define SMC_outsw (a, r, p, l) outsw((a) + (r), p, l) +#define SMC_outb (v, a, r) writeb(v, (a) + (r)) +#define SMC_outw (v, a, r) writew(v, (a) + (r)) +#elif defined(CONFIG_ARCH_OMAP)/* We can only do 16-bit reads and writes in the static memory space. */
drivers/net/wireless/Kconfig +1 -1
@@ -325,7 +325,7 @@ config HERMES Cabletron/EnteraSys Roamabout, ELSA AirLancer, MELCO Buffalo, Avaya, IBM High Rate Wireless, Farralon Syyline, Samsung MagicLAN, Netgear MA401, LinkSys WPC-11, D-Link DWL-650, 3Com AirConnect, Intel - PRO/Wireless, and Symbol Spectrum24 High Rate amongst others. + IPW2011, and Symbol Spectrum24 High Rate amongst others. This option includes the guts of the driver, but in order to actually use a card you will also need to enable support for PCMCIA
drivers/net/wireless/b43/Kconfig +6 -4
@@ -61,16 +61,18 @@ config B43_PCMCIA If unsure, say N. -# LED support +# This config option automatically enables b43 LEDS support, +# if it's possible. config B43_LEDS bool - depends on B43 && MAC80211_LEDS + depends on B43 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = B43) default y -# RFKILL support +# This config option automatically enables b43 RFKILL support, +# if it's possible. config B43_RFKILL bool - depends on B43 && RFKILL && RFKILL_INPUT && INPUT_POLLDEV + depends on B43 && (RFKILL = y || RFKILL = B43) && RFKILL_INPUT && (INPUT_POLLDEV = y || INPUT_POLLDEV = B43) default y config B43_DEBUG
drivers/net/wireless/b43/debugfs.c +1 -1
@@ -128,7 +128,7 @@ static ssize_t shm_read_file(struct b43_wldev *dev,__le16 *le16buf = (__le16 *)buf;for (i =0 ; i <0x1000 ; i++) { -if (bufsize <=0 ) +if (bufsize <sizeof (tmp))break ; tmp =b43_shm_read16 (dev,B43_SHM_SHARED ,2 * i); le16buf[i] =cpu_to_le16 (tmp);
drivers/net/wireless/b43/main.c +10 -9
@@ -2985,6 +2985,16 @@ static void b43_wireless_core_stop(struct b43_wldev *dev)if (b43_status (dev) <B43_STAT_STARTED )return ; + +/* Disable and sync interrupts. We must do this before than +* setting the status to INITIALIZED, as the interrupt handler +* won't care about IRQs then. */ +spin_lock_irqsave (&wl->irq_lock, flags); + dev->irq_savedstate =b43_interrupt_disable (dev,B43_IRQ_ALL ); +b43_read32 (dev,B43_MMIO_GEN_IRQ_MASK );/* flush */ +spin_unlock_irqrestore (&wl->irq_lock, flags); +b43_synchronize_irq (dev); +b43_set_status (dev,B43_STAT_INITIALIZED );mutex_unlock (&wl->mutex);
@@ -2995,13 +3005,6 @@ static void b43_wireless_core_stop(struct b43_wldev *dev)ieee80211_stop_queues (wl->hw);//FIXME this could cause a deadlock, as mac80211 seems buggy. -/* Disable and sync interrupts. */ -spin_lock_irqsave (&wl->irq_lock, flags); - dev->irq_savedstate =b43_interrupt_disable (dev,B43_IRQ_ALL ); -b43_read32 (dev,B43_MMIO_GEN_IRQ_MASK );/* flush */ -spin_unlock_irqrestore (&wl->irq_lock, flags); -b43_synchronize_irq (dev); -b43_mac_suspend (dev);free_irq (dev->dev->irq, dev);b43dbg (wl,"Wireless interface stopped\n" );
@@ -3661,7 +3664,6 @@ static int b43_setup_modes(struct b43_wldev *dev,static void b43_wireless_core_detach (struct b43_wldev *dev) { -b43_rfkill_free (dev);/* We release firmware that late to not be required to re-request * is all the time when we reinit the core. */ b43_release_firmware (dev);
@@ -3747,7 +3749,6 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)if (!wl->current_dev) wl->current_dev = dev;INIT_WORK (&dev->restart_work, b43_chip_reset); -b43_rfkill_alloc (dev);b43_radio_turn_off (dev,1 );b43_switch_analog (dev,0 );
drivers/net/wireless/b43/pcmcia.c +33 -19
98 lines not on this page · raw message
drivers/net/wireless/b43/rfkill.c +52 -63
173 lines not on this page · raw message
drivers/net/wireless/b43/rfkill.h +4 -10
@@ -15,14 +15,14 @@ struct b43_rfkill {struct rfkill *rfkill;/* The poll device for the RFKILL input button */ struct input_polled_dev *poll_dev; +/* Did initialization succeed? Used for freeing. */ +bool registered;/* The unique name of this rfkill switch */ -char name[32 ]; +char name[sizeof ("b43-phy4294967295" )]; }; -/* All the init functions return void, because we are not interested +/* The init function returns void, because we are not interested * in failing the b43 init process when rfkill init failed. */ -void b43_rfkill_alloc (struct b43_wldev *dev); -void b43_rfkill_free (struct b43_wldev *dev);void b43_rfkill_init (struct b43_wldev *dev);void b43_rfkill_exit (struct b43_wldev *dev);
@@ -36,12 +36,6 @@ struct b43_rfkill {/* empty */ }; -static inline void b43_rfkill_alloc (struct b43_wldev *dev) -{ -} -static inline void b43_rfkill_free (struct b43_wldev *dev) -{ -}static inline void b43_rfkill_init (struct b43_wldev *dev) { }
drivers/net/wireless/b43legacy/debugfs.c +1 -1
@@ -124,7 +124,7 @@ static ssize_t shm_read_file(struct b43legacy_wldev *dev, char *buf, size_t bufs__le16 *le16buf = (__le16 *)buf;for (i =0 ; i <0x1000 ; i++) { -if (bufsize <=0 ) +if (bufsize <sizeof (tmp))break ; tmp =b43legacy_shm_read16 (dev, B43legacy_SHM_SHARED,2 * i); le16buf[i] =cpu_to_le16 (tmp);
drivers/net/wireless/b43legacy/main.c +12 -9
@@ -2781,6 +2781,17 @@ static void b43legacy_wireless_core_stop(struct b43legacy_wldev *dev)if (b43legacy_status (dev) < B43legacy_STAT_STARTED)return ; + +/* Disable and sync interrupts. We must do this before than +* setting the status to INITIALIZED, as the interrupt handler +* won't care about IRQs then. */ +spin_lock_irqsave (&wl->irq_lock, flags); + dev->irq_savedstate =b43legacy_interrupt_disable (dev, + B43legacy_IRQ_ALL); +b43legacy_read32 (dev, B43legacy_MMIO_GEN_IRQ_MASK);/* flush */ +spin_unlock_irqrestore (&wl->irq_lock, flags); +b43legacy_synchronize_irq (dev); +b43legacy_set_status (dev, B43legacy_STAT_INITIALIZED);mutex_unlock (&wl->mutex);
@@ -2791,14 +2802,6 @@ static void b43legacy_wireless_core_stop(struct b43legacy_wldev *dev)ieee80211_stop_queues (wl->hw);/* FIXME this could cause a deadlock */ -/* Disable and sync interrupts. */ -spin_lock_irqsave (&wl->irq_lock, flags); - dev->irq_savedstate =b43legacy_interrupt_disable (dev, - B43legacy_IRQ_ALL); -b43legacy_read32 (dev, B43legacy_MMIO_GEN_IRQ_MASK);/* flush */ -spin_unlock_irqrestore (&wl->irq_lock, flags); -b43legacy_synchronize_irq (dev); -b43legacy_mac_suspend (dev);free_irq (dev->dev->irq, dev);b43legacydbg (wl,"Wireless interface stopped\n" );
@@ -3332,7 +3335,7 @@ out_mutex_unlock:return err; } -void b43legacy_stop (struct ieee80211_hw *hw) +static void b43legacy_stop (struct ieee80211_hw *hw) {struct b43legacy_wl *wl =hw_to_b43legacy_wl (hw);struct b43legacy_wldev *dev = wl->current_dev;
drivers/net/wireless/hostap/hostap_pci.c +3 -3
@@ -444,7 +444,7 @@ static int prism2_pci_resume(struct pci_dev *pdev)MODULE_DEVICE_TABLE (pci, prism2_pci_id_table); -static struct pci_driver prism2_pci_drv_id = { +static struct pci_driver prism2_pci_driver = { .name ="hostap_pci" , .id_table = prism2_pci_id_table, .probe = prism2_pci_probe,
@@ -458,13 +458,13 @@ static struct pci_driver prism2_pci_drv_id = {static int __init init_prism2_pci (void ) { -return pci_register_driver (&prism2_pci_drv_id); +return pci_register_driver (&prism2_pci_driver); } static void __exit exit_prism2_pci(void) { -pci_unregister_driver (&prism2_pci_drv_id); +pci_unregister_driver (&prism2_pci_driver); }
drivers/net/wireless/ipw2100.c +2 -2
@@ -1267,7 +1267,7 @@ static int ipw2100_start_adapter(struct ipw2100_priv *priv)IPW2100_INTA_FATAL_ERROR | IPW2100_INTA_PARITY_ERROR); } - }while (i--); + }while (--i);/* Clear out any pending INTAs since we aren't supposed to have * interrupts enabled at this point... */
@@ -1339,7 +1339,7 @@ static int ipw2100_power_cycle_adapter(struct ipw2100_priv *priv)if (reg &IPW_AUX_HOST_RESET_REG_MASTER_DISABLED )break ; - }while (i--); + }while (--i); priv->status &= ~STATUS_RESET_PENDING ;
drivers/net/wireless/libertas/cmd.c +7 -3
@@ -912,6 +912,10 @@ static int wlan_cmd_set_boot2_ver(wlan_private * priv,return 0 ; } +/* +* Note: NEVER use libertas_queue_cmd() with addtail==0 other than for +* the command timer, because it does not account for queued commands. +*/ void libertas_queue_cmd (wlan_adapter * adapter,struct cmd_ctrl_node *cmdnode,u8 addtail) {unsigned long flags;
@@ -941,10 +945,11 @@ void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, uspin_lock_irqsave (&adapter->driver_lock, flags); -if (addtail) +if (addtail) {list_add_tail ((struct list_head *)cmdnode, &adapter->cmdpendingq); -else + adapter->nr_cmd_pending++; + }else list_add ((struct list_head *)cmdnode, &adapter->cmdpendingq);spin_unlock_irqrestore (&adapter->driver_lock, flags);
@@ -1412,7 +1417,6 @@ int libertas_prepare_and_send_command(wlan_private * priv, cmdnode->cmdwaitqwoken =0 ;libertas_queue_cmd (adapter, cmdnode,1 ); - adapter->nr_cmd_pending++;wake_up_interruptible (&priv->waitq);if (wait_option &CMD_OPTION_WAITFORRSP ) {
drivers/net/wireless/libertas/if_cs.c +5 -2
@@ -148,11 +148,11 @@ static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 r {int i; -for (i =0 ; i <500 ; i++) { +for (i =0 ; i <1000 ; i++) {u8 val =if_cs_read8 (card, addr);if (val == reg)return i; -udelay (100 ); +udelay (500 ); }return -ETIME ; }
@@ -878,6 +878,9 @@ static int if_cs_probe(struct pcmcia_device *p_dev) goto out3; } +/* Clear any interrupt cause that happend while sending +* firmware/initializing card */ +if_cs_write16 (card,IF_CS_C_INT_CAUSE ,IF_CS_C_IC_MASK );if_cs_enable_ints (card);/* And finally bring the card up */
drivers/net/wireless/libertas/if_sdio.c +3 -1
@@ -182,12 +182,14 @@ static int if_sdio_handle_data(struct if_sdio_card *card, goto out; } - skb =dev_alloc_skb (MRVDRV_ETH_RX_PACKET_BUFFER_SIZE ); + skb =dev_alloc_skb (MRVDRV_ETH_RX_PACKET_BUFFER_SIZE +NET_IP_ALIGN );if (!skb) { ret = -ENOMEM ; goto out; } +skb_reserve (skb,NET_IP_ALIGN ); + data =skb_put (skb, size);memcpy (data, buffer, size);
drivers/net/wireless/rt2x00/rt2x00mac.c +8 -0
@@ -196,6 +196,14 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,struct rt2x00_dev *rt2x00dev = hw->priv;struct interface *intf = &rt2x00dev->interface; +/* FIXME: Beaconing is broken in rt2x00. */ +if (conf->type ==IEEE80211_IF_TYPE_IBSS || + conf->type ==IEEE80211_IF_TYPE_AP ) { +ERROR (rt2x00dev, +"rt2x00 does not support Adhoc or Master mode" ); +return -EOPNOTSUPP ; + } +/* * Don't allow interfaces to be added while * either the device has disappeared or when