···169 index = next_index;170 }171172- _unlock_tx_hashtbl(bond);173-174 tlb_init_slave(slave);00175}176177/* Must be called before starting the monitor timer */
···169 index = next_index;170 }17100172 tlb_init_slave(slave);173+174+ _unlock_tx_hashtbl(bond);175}176177/* Must be called before starting the monitor timer */
···132 * TODO:133 * o several entry points race with dev->close134 * o check for tx-no-resources/stop Q races with tx clean/wake Q0000135 */136137#include <linux/config.h>···582 u16 leds;583 u16 eeprom_wc;584 u16 eeprom[256];0585};586587static inline void e100_write_flush(struct nic *nic)···881{882 u32 data_out = 0;883 unsigned int i;08840000000000000000000885 writel((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl);886887- for(i = 0; i < 100; i++) {888 udelay(20);889- if((data_out = readl(&nic->csr->mdi_ctrl)) & mdi_ready)890 break;891 }892-893 DPRINTK(HW, DEBUG,894 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n",895 dir == mdi_read ? "READ" : "WRITE", addr, reg, data, data_out);···2587 /* locks must be initialized before calling hw_reset */2588 spin_lock_init(&nic->cb_lock);2589 spin_lock_init(&nic->cmd_lock);025902591 /* Reset the device before pci_set_master() in case device is in some2592 * funky state and has an interrupt pending - hint: we don't have the
···132 * TODO:133 * o several entry points race with dev->close134 * o check for tx-no-resources/stop Q races with tx clean/wake Q135+ *136+ * FIXES:137+ * 2005/12/02 - Michael O'Donnell <Michael.ODonnell at stratus dot com>138+ * - Stratus87247: protect MDI control register manipulations139 */140141#include <linux/config.h>···578 u16 leds;579 u16 eeprom_wc;580 u16 eeprom[256];581+ spinlock_t mdio_lock;582};583584static inline void e100_write_flush(struct nic *nic)···876{877 u32 data_out = 0;878 unsigned int i;879+ unsigned long flags;880881+882+ /*883+ * Stratus87247: we shouldn't be writing the MDI control884+ * register until the Ready bit shows True. Also, since885+ * manipulation of the MDI control registers is a multi-step886+ * procedure it should be done under lock.887+ */888+ spin_lock_irqsave(&nic->mdio_lock, flags);889+ for (i = 100; i; --i) {890+ if (readl(&nic->csr->mdi_ctrl) & mdi_ready)891+ break;892+ udelay(20);893+ }894+ if (unlikely(!i)) {895+ printk("e100.mdio_ctrl(%s) won't go Ready\n",896+ nic->netdev->name );897+ spin_unlock_irqrestore(&nic->mdio_lock, flags);898+ return 0; /* No way to indicate timeout error */899+ }900 writel((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl);901902+ for (i = 0; i < 100; i++) {903 udelay(20);904+ if ((data_out = readl(&nic->csr->mdi_ctrl)) & mdi_ready)905 break;906 }907+ spin_unlock_irqrestore(&nic->mdio_lock, flags);908 DPRINTK(HW, DEBUG,909 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n",910 dir == mdi_read ? "READ" : "WRITE", addr, reg, data, data_out);···2562 /* locks must be initialized before calling hw_reset */2563 spin_lock_init(&nic->cb_lock);2564 spin_lock_init(&nic->cmd_lock);2565+ spin_lock_init(&nic->mdio_lock);25662567 /* Reset the device before pci_set_master() in case device is in some2568 * funky state and has an interrupt pending - hint: we don't have the
···42 */43void phy_print_status(struct phy_device *phydev)44{45- pr_info("%s: Link is %s", phydev->dev.bus_id,46 phydev->link ? "Up" : "Down");47 if (phydev->link)48 printk(" - %d/%s", phydev->speed,
···42 */43void phy_print_status(struct phy_device *phydev)44{45+ pr_info("PHY: %s - Link is %s", phydev->dev.bus_id,46 phydev->link ? "Up" : "Down");47 if (phydev->link)48 printk(" - %d/%s", phydev->speed,
+3-3
drivers/net/tulip/uli526x.c
···1689MODULE_DESCRIPTION("ULi M5261/M5263 fast ethernet driver");1690MODULE_LICENSE("GPL");16911692-MODULE_PARM(debug, "i");1693-MODULE_PARM(mode, "i");1694-MODULE_PARM(cr6set, "i");1695MODULE_PARM_DESC(debug, "ULi M5261/M5263 enable debugging (0-1)");1696MODULE_PARM_DESC(mode, "ULi M5261/M5263: Bit 0: 10/100Mbps, bit 2: duplex, bit 8: HomePNA");1697
···1689MODULE_DESCRIPTION("ULi M5261/M5263 fast ethernet driver");1690MODULE_LICENSE("GPL");16911692+module_param(debug, int, 0644);1693+module_param(mode, int, 0);1694+module_param(cr6set, int, 0);1695MODULE_PARM_DESC(debug, "ULi M5261/M5263 enable debugging (0-1)");1696MODULE_PARM_DESC(mode, "ULi M5261/M5263: Bit 0: 10/100Mbps, bit 2: duplex, bit 8: HomePNA");1697
+1-1
drivers/net/via-velocity.c
···791#endif792793 if (vptr->flags & VELOCITY_FLAGS_TX_CSUM) {794- dev->features |= NETIF_F_HW_CSUM;795 }796797 ret = register_netdev(dev);
···791#endif792793 if (vptr->flags & VELOCITY_FLAGS_TX_CSUM) {794+ dev->features |= NETIF_F_IP_CSUM;795 }796797 ret = register_netdev(dev);
+1-1
drivers/net/wireless/Kconfig
···243244config AIRO245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"246- depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)247 ---help---248 This is the standard Linux driver to support Cisco/Aironet ISA and249 PCI 802.11 wireless cards.
···243244config AIRO245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"246+ depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)247 ---help---248 This is the standard Linux driver to support Cisco/Aironet ISA and249 PCI 802.11 wireless cards.
···5051 /* board specific information */52 u32 board_flags;53- const char *bus_id;054 u8 mac_addr[6];55};5657struct gianfar_mdio_data {58- /* device specific information */59- u32 paddr;60-61 /* board specific information */62 int irq[32];63};
···5051 /* board specific information */52 u32 board_flags;53+ u32 bus_id;54+ u32 phy_id;55 u8 mac_addr[6];56};5758struct gianfar_mdio_data {00059 /* board specific information */60 int irq[32];61};
+3
include/linux/phy.h
···5354#define PHY_MAX_ADDR 325500056/* The Bus class for PHYs. Devices which provide access to57 * PHYs should register using this structure */58struct mii_bus {
···5354#define PHY_MAX_ADDR 325556+/* Used when trying to connect to a specific phy (mii bus id:phy device id) */57+#define PHY_ID_FMT "%x:%02x"58+59/* The Bus class for PHYs. Devices which provide access to60 * PHYs should register using this structure */61struct mii_bus {
+4-2
include/net/ieee80211.h
···363#define IEEE80211_OFDM_SHIFT_MASK_A 4364365/* NOTE: This data is for statistical purposes; not all hardware provides this366- * information for frames received. Not setting these will not cause367- * any adverse affects. */0368struct ieee80211_rx_stats {369 u32 mac_time;370 s8 rssi;···1089/* ieee80211_rx.c */1090extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,1091 struct ieee80211_rx_stats *rx_stats);01092extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,1093 struct ieee80211_hdr_4addr *header,1094 struct ieee80211_rx_stats *stats);
···363#define IEEE80211_OFDM_SHIFT_MASK_A 4364365/* NOTE: This data is for statistical purposes; not all hardware provides this366+ * information for frames received.367+ * For ieee80211_rx_mgt, you need to set at least the 'len' parameter.368+ */369struct ieee80211_rx_stats {370 u32 mac_time;371 s8 rssi;···1088/* ieee80211_rx.c */1089extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,1090 struct ieee80211_rx_stats *rx_stats);1091+/* make sure to set stats->len */1092extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,1093 struct ieee80211_hdr_4addr *header,1094 struct ieee80211_rx_stats *stats);