Updates bcm43xx. Signed-off-by: Johannes Berg <[EMAIL PROTECTED]>
--- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/Makefile 2006-11-19 20:12:47.459275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/Makefile 2006-11-19 20:14:01.189275208 +0100 @@ -7,6 +7,6 @@ bcm43xx-d80211-obj-$(CONFIG_BCM43XX_D802 bcm43xx-d80211-objs := bcm43xx_main.o bcm43xx_ilt.o \ bcm43xx_radio.o bcm43xx_phy.o \ bcm43xx_power.o bcm43xx_sysfs.o \ - bcm43xx_leds.o bcm43xx_ethtool.o \ + bcm43xx_leds.o \ bcm43xx_xmit.o \ $(bcm43xx-d80211-obj-y) --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx.h 2006-11-19 20:12:47.539275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx.h 2006-11-19 20:14:01.189275208 +0100 @@ -682,7 +682,6 @@ struct bcm43xx_private { struct ieee80211_hw *ieee; struct ieee80211_low_level_stats ieee_stats; - struct net_device *net_dev; unsigned int irq; spinlock_t irq_lock; @@ -770,9 +769,9 @@ struct bcm43xx_private { static inline -struct bcm43xx_private * bcm43xx_priv(struct net_device *dev) +struct bcm43xx_private * bcm43xx_priv(struct ieee80211_hw *hw) { - return ieee80211_dev_hw_data(dev); + return hw->priv; } static inline @@ -854,13 +853,7 @@ struct device; static inline struct bcm43xx_private * dev_to_bcm(struct device *dev) { - struct net_device *net_dev; - struct bcm43xx_private *bcm; - - net_dev = dev_get_drvdata(dev); - bcm = bcm43xx_priv(net_dev); - - return bcm; + return dev_get_drvdata(dev); } /* Is the device operating in a specified mode (IEEE80211_IF_TYPE_XXX). */ --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_debugfs.c 2006-11-19 20:12:47.629275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_debugfs.c 2006-11-19 20:14:01.189275208 +0100 @@ -285,7 +285,7 @@ void bcm43xx_debugfs_add_device(struct b { struct bcm43xx_dfsentry *e; struct bcm43xx_txstatus_log *log; - char devdir[IFNAMSIZ]; + char devdir[16]; assert(bcm); e = kzalloc(sizeof(*e), GFP_KERNEL); @@ -308,7 +308,7 @@ void bcm43xx_debugfs_add_device(struct b bcm->dfsentry = e; - strncpy(devdir, bcm->net_dev->name, ARRAY_SIZE(devdir)); + snprintf(devdir, sizeof(devdir), "wiphy%d", bcm->ieee->index); e->subdir = debugfs_create_dir(devdir, fs.root); e->dentry_tsf = debugfs_create_file("tsf", 0666, e->subdir, bcm, &tsf_fops); --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_dma.c 2006-11-19 20:12:47.709275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_dma.c 2006-11-19 20:14:01.199275208 +0100 @@ -525,7 +525,6 @@ static int setup_rx_descbuffer(struct bc ring->rx_buffersize, 0); meta->skb = skb; meta->dmaaddr = dmaaddr; - skb->dev = ring->bcm->net_dev; ring->ops->fill_descriptor(ring, desc, dmaaddr, ring->rx_buffersize, 0, 0, 0); @@ -1091,7 +1090,7 @@ int bcm43xx_dma_tx(struct bcm43xx_privat ring->nr_tx_packets++; if (free_slots(ring) < SLOTS_PER_PACKET) { /* FIXME: we currently only have one queue */ - ieee80211_stop_queue(bcm->net_dev, 0); + ieee80211_stop_queue(bcm->ieee, 0); ring->stopped = 1; } @@ -1130,7 +1129,7 @@ void bcm43xx_dma_handle_txstatus(struct if (status->acked) meta->txstat.flags |= IEEE80211_TX_STATUS_ACK; meta->txstat.retry_count = status->frame_count - 1; - ieee80211_tx_status_irqsafe(bcm->net_dev, meta->skb, &(meta->txstat)); + ieee80211_tx_status_irqsafe(bcm->ieee, meta->skb, &(meta->txstat)); /* skb is freed by ieee80211_tx_status_irqsafe() */ } else { /* No need to call free_descriptor_buffer here, as @@ -1151,7 +1150,7 @@ void bcm43xx_dma_handle_txstatus(struct if (ring->stopped) { assert(free_slots(ring) >= SLOTS_PER_PACKET); /* FIXME: we currently only have one queue */ - ieee80211_wake_queue(bcm->net_dev, 0); + ieee80211_wake_queue(bcm->ieee, 0); ring->stopped = 0; } } --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_ethtool.c 2006-11-19 20:12:47.849275208 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* - - Broadcom BCM43xx wireless driver - - ethtool support - - Copyright (c) 2006 Jason Lunz <[EMAIL PROTECTED]> - - Some code in this file is derived from the 8139too.c driver - Copyright (C) 2002 Jeff Garzik - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, - Boston, MA 02110-1301, USA. - -*/ - -#include "bcm43xx.h" -#include "bcm43xx_ethtool.h" - -#include <linux/netdevice.h> -#include <linux/pci.h> -#include <linux/string.h> -#include <linux/version.h> -#include <linux/utsrelease.h> - - -static void bcm43xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) -{ - struct bcm43xx_private *bcm = bcm43xx_priv(dev); - - strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver)); - strncpy(info->version, UTS_RELEASE, sizeof(info->version)); - strncpy(info->bus_info, pci_name(bcm->ssb.pci_dev), ETHTOOL_BUSINFO_LEN); -} - -struct ethtool_ops bcm43xx_ethtool_ops = { - .get_drvinfo = bcm43xx_get_drvinfo, - .get_link = ethtool_op_get_link, -}; --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_ethtool.h 2006-11-19 20:12:47.869275208 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -#ifndef BCM43xx_ETHTOOL_H_ -#define BCM43xx_ETHTOOL_H_ - -#include <linux/ethtool.h> - -extern struct ethtool_ops bcm43xx_ethtool_ops; - -#endif /* BCM43xx_ETHTOOL_H_ */ --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c 2006-11-19 20:12:48.009275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c 2006-11-19 20:14:01.199275208 +0100 @@ -50,7 +50,6 @@ #include "bcm43xx_pio.h" #include "bcm43xx_power.h" #include "bcm43xx_sysfs.h" -#include "bcm43xx_ethtool.h" #include "bcm43xx_xmit.h" #include "bcm43xx_sysfs.h" @@ -114,8 +113,8 @@ MODULE_PARM_DESC(fwpostfix, "Postfix for //#define DEBUG_ENABLE_PCILOG -static int bcm43xx_net_stop(struct net_device *net_dev); -static int bcm43xx_net_open(struct net_device *net_dev); +static int bcm43xx_net_stop(struct ieee80211_hw *hw); +static int bcm43xx_net_open(struct ieee80211_hw *hw); /* Detailed list maintained at: * http://openfacts.berlios.de/index-en.phtml?title=Bcm43xxDevices @@ -2573,7 +2572,7 @@ static void bcm43xx_periodic_work_handle /* Periodic work will take a long time, so we want it to * be preemtible. */ - ieee80211_stop_queues(bcm->net_dev); + ieee80211_stop_queues(bcm->ieee); spin_lock_irqsave(&bcm->irq_lock, flags); bcm43xx_mac_suspend(bcm); if (bcm43xx_using_pio(bcm)) @@ -2597,7 +2596,7 @@ static void bcm43xx_periodic_work_handle if (bcm43xx_using_pio(bcm)) bcm43xx_pio_thaw_txqueues(bcm); bcm43xx_mac_enable(bcm); - ieee80211_start_queues(bcm->net_dev); + ieee80211_start_queues(bcm->ieee); } mmiowb(); spin_unlock_irqrestore(&bcm->irq_lock, flags); @@ -2848,19 +2847,19 @@ static void bcm43xx_chipset_detach(struc static void bcm43xx_free_modes(struct bcm43xx_private *bcm) { - struct ieee80211_hw *ieee = bcm->ieee; + struct ieee80211_hw *hw = bcm->ieee; int i; - for (i = 0; i < ieee->num_modes; i++) { - kfree(ieee->modes[i].channels); - kfree(ieee->modes[i].rates); + for (i = 0; i < hw->num_modes; i++) { + kfree(hw->modes[i].channels); + kfree(hw->modes[i].rates); } - kfree(ieee->modes); - ieee->modes = NULL; - ieee->num_modes = 0; + kfree(hw->modes); + hw->modes = NULL; + hw->num_modes = 0; } -static int bcm43xx_append_mode(struct ieee80211_hw *ieee, +static int bcm43xx_append_mode(struct ieee80211_hw *hw, int mode_id, int nr_channels, const struct ieee80211_channel *channels, @@ -2872,7 +2871,7 @@ static int bcm43xx_append_mode(struct ie struct ieee80211_hw_modes *mode; int err = -ENOMEM; - mode = &(ieee->modes[ieee->num_modes]); + mode = &(hw->modes[hw->num_modes]); mode->mode = mode_id; mode->num_channels = nr_channels; @@ -2893,7 +2892,7 @@ static int bcm43xx_append_mode(struct ie sizeof(*rates2) * nr_rates2); } - ieee->num_modes++; + hw->num_modes++; err = 0; out: return err; @@ -2906,17 +2905,17 @@ err_free_channels: static int bcm43xx_setup_modes(struct bcm43xx_private *bcm) { int err = -ENOMEM; - struct ieee80211_hw *ieee = bcm->ieee; + struct ieee80211_hw *hw = bcm->ieee; struct ssb_core *core; struct bcm43xx_corepriv_80211 *wlpriv; int i, nr_modes; nr_modes = bcm->nr_80211_available; - ieee->modes = kzalloc(sizeof(*(ieee->modes)) * nr_modes, + hw->modes = kzalloc(sizeof(*(hw->modes)) * nr_modes, GFP_KERNEL); - if (!ieee->modes) + if (!hw->modes) goto out; - ieee->num_modes = 0; + hw->num_modes = 0; for (i = 0; i < bcm->nr_80211_available; i++) { core = bcm->wlcores[i]; @@ -3117,7 +3116,7 @@ int bcm43xx_select_wireless_core(struct return -ESRCH; /* No such PHYTYPE on this board. */ /* Disable all network traffic. */ - ieee80211_stop_queues(bcm->net_dev); + ieee80211_stop_queues(bcm->ieee); if (bcm->wlcore) { /* We already selected a wl core in the past. @@ -3180,11 +3179,11 @@ bcm->wlcore = active_core; goto error; bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC); - bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr)); + bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->ieee->perm_addr)); bcm43xx_security_init(bcm); bcm43xx_measure_channel_change_time(bcm); - ieee80211_update_hw(bcm->net_dev, bcm->ieee); - ieee80211_start_queues(bcm->net_dev); + ieee80211_update_hw(bcm->ieee); + ieee80211_start_queues(bcm->ieee); /* Let's go! Be careful after enabling the IRQs. * Don't switch cores, for example. @@ -3329,9 +3328,9 @@ static int bcm43xx_ssb_suspend(struct ss int err; struct bcm43xx_private *bcm = ssb_to_bcm43xx(ssb); - ieee80211_stop_queues(bcm->net_dev); + ieee80211_stop_queues(bcm->ieee); - err = bcm43xx_net_stop(bcm->net_dev); + err = bcm43xx_net_stop(bcm->ieee); if (!err) mutex_lock(&bcm->mutex); @@ -3344,7 +3343,7 @@ static int bcm43xx_ssb_resume(struct ssb struct bcm43xx_private *bcm = ssb_to_bcm43xx(ssb); mutex_unlock(&bcm->mutex); - err = bcm43xx_net_open(bcm->net_dev); + err = bcm43xx_net_open(bcm->ieee); return err; } @@ -3352,7 +3351,6 @@ static int bcm43xx_ssb_resume(struct ssb static int bcm43xx_attach_board(struct bcm43xx_private *bcm, struct pci_dev *pci_dev) { - struct net_device *net_dev = bcm->net_dev; int err; int i; u32 coremask; @@ -3376,7 +3374,6 @@ static int bcm43xx_attach_board(struct b err = -EIO; goto err_pci_release; } - net_dev->base_addr = (unsigned long)mmio; err = ssb_init(&bcm->ssb, pci_dev, mmio, bcm43xx_ssb_suspend, @@ -3449,9 +3446,9 @@ bcm->wlcore = bcm->wlcores[i]; /* Set the MAC address in the networking subsystem */ if (is_valid_ether_addr(bcm->sprom.r1.et1mac)) - memcpy(bcm->net_dev->dev_addr, bcm->sprom.r1.et1mac, 6); + memcpy(bcm->ieee->perm_addr, bcm->sprom.r1.et1mac, 6); else - memcpy(bcm->net_dev->dev_addr, bcm->sprom.r1.il0mac, 6); + memcpy(bcm->ieee->perm_addr, bcm->sprom.r1.il0mac, 6); bcm43xx_setup_modes(bcm); assert(err == 0); @@ -3478,12 +3475,12 @@ err_pci_disable: goto out; } -/* hard_start_xmit() callback in struct ieee80211_device */ -static int bcm43xx_net_hard_start_xmit(struct net_device *net_dev, +/* hard_start_xmit() callback in struct ieee80211_ops */ +static int bcm43xx_net_hard_start_xmit(struct ieee80211_hw *hw, struct sk_buff *skb, struct ieee80211_tx_control *ctl) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); int err = -ENODEV; unsigned long flags; @@ -3501,9 +3498,9 @@ static int bcm43xx_net_hard_start_xmit(s return NETDEV_TX_OK; } -static int bcm43xx_net_reset(struct net_device *net_dev) +static int bcm43xx_net_reset(struct ieee80211_hw *hw) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; spin_lock_irqsave(&bcm->irq_lock, flags); @@ -3513,10 +3510,10 @@ static int bcm43xx_net_reset(struct net_ return 0; } -static int bcm43xx_net_config(struct net_device *net_dev, +static int bcm43xx_net_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); struct bcm43xx_radioinfo *radio; struct bcm43xx_phyinfo *phy; unsigned long flags; @@ -3619,13 +3616,13 @@ out_unlock_mutex: return err; } -static int bcm43xx_net_set_key(struct net_device *net_dev, +static int bcm43xx_net_set_key(struct ieee80211_hw *hw, set_key_cmd cmd, u8 *addr, struct ieee80211_key_conf *key, int aid) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; u8 algorithm; u8 index; @@ -3742,17 +3739,17 @@ out: return err; } -static int bcm43xx_net_conf_tx(struct net_device *net_dev, +static int bcm43xx_net_conf_tx(struct ieee80211_hw *hw, int queue, const struct ieee80211_tx_queue_params *params) { return 0; } -static int bcm43xx_net_get_tx_stats(struct net_device *net_dev, +static int bcm43xx_net_get_tx_stats(struct ieee80211_hw *hw, struct ieee80211_tx_queue_stats *stats) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; int err = -ENODEV; @@ -3769,10 +3766,10 @@ static int bcm43xx_net_get_tx_stats(stru return err; } -static int bcm43xx_net_get_stats(struct net_device *net_dev, +static int bcm43xx_net_get_stats(struct ieee80211_hw *hw, struct ieee80211_low_level_stats *stats) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; spin_lock_irqsave(&bcm->irq_lock, flags); @@ -3782,29 +3779,16 @@ static int bcm43xx_net_get_stats(struct return 0; } -#ifdef CONFIG_NET_POLL_CONTROLLER -static void bcm43xx_net_poll_controller(struct net_device *net_dev) +static int bcm43xx_net_open(struct ieee80211_hw *hw) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); - unsigned long flags; - - local_irq_save(flags); - if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) - bcm43xx_interrupt_handler(bcm->irq, bcm); - local_irq_restore(flags); -} -#endif /* CONFIG_NET_POLL_CONTROLLER */ - -static int bcm43xx_net_open(struct net_device *net_dev) -{ - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); return bcm43xx_init_board(bcm); } -static int bcm43xx_net_stop(struct net_device *net_dev) +static int bcm43xx_net_stop(struct ieee80211_hw *hw) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); int err; if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { @@ -3817,10 +3801,10 @@ static int bcm43xx_net_stop(struct net_d return 0; } -static int bcm43xx_add_interface(struct net_device *net_dev, +static int bcm43xx_add_interface(struct ieee80211_hw *hw, struct ieee80211_if_init_conf *conf) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; int err = -EOPNOTSUPP; @@ -3857,10 +3841,10 @@ out_unlock: return err; } -static void bcm43xx_remove_interface(struct net_device *net_dev, +static void bcm43xx_remove_interface(struct ieee80211_hw *hw, struct ieee80211_if_init_conf *conf) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; mutex_lock(&bcm->mutex); @@ -3882,11 +3866,11 @@ static void bcm43xx_remove_interface(str MAC_ARG(conf->mac_addr)); } -static int bcm43xx_config_interface(struct net_device *net_dev, +static int bcm43xx_config_interface(struct ieee80211_hw *hw, int if_id, struct ieee80211_if_conf *conf) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; mutex_lock(&bcm->mutex); @@ -3907,11 +3891,11 @@ static int bcm43xx_config_interface(stru return 0; } -static void bcm43xx_set_multicast_list(struct net_device *net_dev, +static void bcm43xx_set_multicast_list(struct ieee80211_hw *hw, unsigned short netflags, int mc_count) { - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = bcm43xx_priv(hw); unsigned long flags; spin_lock_irqsave(&bcm->irq_lock, flags); @@ -3923,22 +3907,11 @@ static void bcm43xx_set_multicast_list(s spin_unlock_irqrestore(&bcm->irq_lock, flags); } -/* Initialization of struct net_device, just after allocation. */ -static void bcm43xx_netdev_setup(struct net_device *net_dev) -{ -#ifdef CONFIG_NET_POLL_CONTROLLER - net_dev->poll_controller = bcm43xx_net_poll_controller; -#endif - SET_ETHTOOL_OPS(net_dev, &bcm43xx_ethtool_ops); -} - static int bcm43xx_init_private(struct bcm43xx_private *bcm, - struct net_device *net_dev, - struct pci_dev *pci_dev, - struct ieee80211_hw *ieee) + struct ieee80211_hw *hw, + struct pci_dev *pci_dev) { - bcm->ieee = ieee; - bcm->net_dev = net_dev; + bcm->ieee = hw; bcm->bad_frames_preempt = modparam_bad_frames_preempt; spin_lock_init(&bcm->irq_lock); spin_lock_init(&bcm->leds_lock); @@ -3953,12 +3926,27 @@ static int bcm43xx_init_private(struct b return 0; } +static struct ieee80211_ops bcm43xx_hw_ops = { + .tx = bcm43xx_net_hard_start_xmit, + .open = bcm43xx_net_open, + .stop = bcm43xx_net_stop, + .add_interface = bcm43xx_add_interface, + .remove_interface = bcm43xx_remove_interface, + .reset = bcm43xx_net_reset, + .config = bcm43xx_net_config, + .config_interface = bcm43xx_config_interface, + .set_multicast_list = bcm43xx_set_multicast_list, + .set_key = bcm43xx_net_set_key, + .get_stats = bcm43xx_net_get_stats, + .get_tx_stats = bcm43xx_net_get_tx_stats, + .conf_tx = bcm43xx_net_conf_tx, +}; + static int __devinit bcm43xx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { - struct net_device *net_dev; + struct ieee80211_hw *hw; struct bcm43xx_private *bcm; - struct ieee80211_hw *ieee; int err = -ENOMEM; #ifdef DEBUG_SINGLE_DEVICE_ONLY @@ -3966,52 +3954,36 @@ static int __devinit bcm43xx_init_one(st return -ENODEV; #endif - ieee = kzalloc(sizeof(*ieee), GFP_KERNEL); - if (!ieee) - goto out; - ieee->version = IEEE80211_VERSION; - ieee->name = KBUILD_MODNAME; - ieee->flags = IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE | - IEEE80211_HW_MONITOR_DURING_OPER | - IEEE80211_HW_DEVICE_HIDES_WEP | - IEEE80211_HW_WEP_INCLUDE_IV; - ieee->maxssi = BCM43xx_RX_MAX_SSI; - ieee->tx = bcm43xx_net_hard_start_xmit; - ieee->open = bcm43xx_net_open; - ieee->stop = bcm43xx_net_stop; - ieee->add_interface = bcm43xx_add_interface; - ieee->remove_interface = bcm43xx_remove_interface; - ieee->reset = bcm43xx_net_reset; - ieee->config = bcm43xx_net_config; - ieee->config_interface = bcm43xx_config_interface; - ieee->set_multicast_list = bcm43xx_set_multicast_list; - ieee->set_key = bcm43xx_net_set_key; - ieee->get_stats = bcm43xx_net_get_stats; - ieee->queues = 1; - ieee->get_tx_stats = bcm43xx_net_get_tx_stats; - ieee->conf_tx = bcm43xx_net_conf_tx; - - net_dev = ieee80211_alloc_hw(sizeof(*bcm), bcm43xx_netdev_setup); - if (!net_dev) { + hw = ieee80211_alloc_hw(sizeof(*bcm), &bcm43xx_hw_ops); + if (!hw) { printk(KERN_ERR PFX "could not allocate ieee80211 device %s\n", pci_name(pdev)); - goto err_free_ieee; + return -ENOMEM; } + + /* fill hw info */ + hw->flags = IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE | + IEEE80211_HW_MONITOR_DURING_OPER | + IEEE80211_HW_DEVICE_HIDES_WEP | + IEEE80211_HW_WEP_INCLUDE_IV; + hw->maxssi = BCM43xx_RX_MAX_SSI; + hw->queues = 1; + hw->dev = &pdev->dev; + /* initialize the bcm43xx_private struct */ - bcm = bcm43xx_priv(net_dev); + bcm = bcm43xx_priv(hw); memset(bcm, 0, sizeof(*bcm)); - err = bcm43xx_init_private(bcm, net_dev, pdev, ieee); + err = bcm43xx_init_private(bcm, hw, pdev); if (err) - goto err_free_netdev; + goto err_free_hw; - pci_set_drvdata(pdev, net_dev); - SET_NETDEV_DEV(net_dev, &pdev->dev); + pci_set_drvdata(pdev, bcm); err = bcm43xx_attach_board(bcm, pdev); if (err) - goto err_free_netdev; - err = ieee80211_register_hw(net_dev, ieee); + goto err_free_hw; + err = ieee80211_register_hw(hw); if (err) goto err_detach_board; @@ -4023,28 +3995,24 @@ out: err_detach_board: bcm43xx_detach_board(bcm); -err_free_netdev: - ieee80211_free_hw(net_dev); -err_free_ieee: - kfree(ieee); +err_free_hw: + ieee80211_free_hw(hw); goto out; } static void __devexit bcm43xx_remove_one(struct pci_dev *pdev) { - struct net_device *net_dev = pci_get_drvdata(pdev); - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); - struct ieee80211_hw *ieee = bcm->ieee; + struct bcm43xx_private *bcm = pci_get_drvdata(pdev); + struct ieee80211_hw *hw = bcm->ieee; bcm43xx_debugfs_remove_device(bcm); - ieee80211_unregister_hw(net_dev); + ieee80211_unregister_hw(hw); bcm43xx_detach_board(bcm); if (bcm->cached_beacon) kfree_skb(bcm->cached_beacon); bcm->cached_beacon = NULL; - ieee80211_free_hw(net_dev); - kfree(ieee); + ieee80211_free_hw(hw); } /* Hard-reset the chip. Do not call this directly. @@ -4088,13 +4056,12 @@ void bcm43xx_controller_restart(struct b static int bcm43xx_suspend(struct pci_dev *pdev, pm_message_t state) { - struct net_device *net_dev = pci_get_drvdata(pdev); - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = pci_get_drvdata(pdev); int err; dprintk(KERN_INFO PFX "Suspending...\n"); - ieee80211_stop_queues(bcm->net_dev); + ieee80211_stop_queues(bcm->ieee); bcm->was_initialized = 0; if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) { bcm->was_initialized = 1; @@ -4120,8 +4087,7 @@ static int bcm43xx_suspend(struct pci_de static int bcm43xx_resume(struct pci_dev *pdev) { - struct net_device *net_dev = pci_get_drvdata(pdev); - struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); + struct bcm43xx_private *bcm = pci_get_drvdata(pdev); int err; dprintk(KERN_INFO PFX "Resuming...\n"); @@ -4139,7 +4105,7 @@ static int bcm43xx_resume(struct pci_dev printk(KERN_ERR PFX "Resume failed!\n"); return err; } - ieee80211_start_queues(bcm->net_dev); + ieee80211_start_queues(bcm->ieee); dprintk(KERN_INFO PFX "Device resumed.\n"); --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_pio.c 2006-11-19 20:12:48.039275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_pio.c 2006-11-19 20:14:01.209275208 +0100 @@ -503,7 +503,7 @@ void bcm43xx_pio_handle_txstatus(struct if (status->acked) packet->txstat.flags |= IEEE80211_TX_STATUS_ACK; packet->txstat.retry_count = status->frame_count - 1; - ieee80211_tx_status_irqsafe(bcm->net_dev, packet->skb, + ieee80211_tx_status_irqsafe(bcm->ieee, packet->skb, &(packet->txstat)); packet->skb = NULL; --- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c 2006-11-19 20:12:48.199275208 +0100 +++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c 2006-11-19 20:14:01.209275208 +0100 @@ -714,7 +714,7 @@ void bcm43xx_rx(struct bcm43xx_private * } bcm->stats.last_rx = jiffies; - ieee80211_rx_irqsafe(bcm->net_dev, skb, &status); + ieee80211_rx_irqsafe(bcm->ieee, skb, &status); } void bcm43xx_handle_txstatus(struct bcm43xx_private *bcm, - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html