--- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx.h.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx.h 2008-08-06 16:58:08.000000000 -0400 @@ -481,9 +481,9 @@ struct bcm43xx_pioqueue; struct bcm43xx_initval { - u16 offset; - u16 size; - u32 value; + __be16 offset; + __be16 size; + __be32 value; } __attribute__((__packed__)); /* Values for bcm430x_sprominfo.locale */ @@ -994,10 +994,4 @@ __value; \ }) -/** Helpers to print MAC addresses. */ -#define BCM43xx_MACFMT "%02x:%02x:%02x:%02x:%02x:%02x" -#define BCM43xx_MACARG(x) ((u8*)(x))[0], ((u8*)(x))[1], \ - ((u8*)(x))[2], ((u8*)(x))[3], \ - ((u8*)(x))[4], ((u8*)(x))[5] - #endif /* BCM43xx_H_ */ --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_radio.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_radio.c 2008-08-06 16:58:08.000000000 -0400 @@ -2146,7 +2146,7 @@ } else bcm43xx_phy_write(bcm, 0x0015, 0xAA00); radio->enabled = 0; - dprintk(KERN_INFO PFX "Radio turned off\n"); + dprintk(KERN_INFO PFX "Radio initialized\n"); bcm43xx_leds_update(bcm, 0); } --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_wx.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_wx.c 2008-08-06 16:58:08.000000000 -0400 @@ -336,7 +336,7 @@ size_t len; mutex_lock(&bcm->mutex); - len = strlen(bcm->nick); + len = strlen(bcm->nick) + 1; memcpy(extra, bcm->nick, len); data->data.length = (__u16)len; data->data.flags = 1; @@ -444,7 +444,7 @@ u16 maxpower; if ((data->txpower.flags & IW_TXPOW_TYPE) != IW_TXPOW_DBM) { - printk(PFX KERN_ERR "TX power not in dBm.\n"); + printk(KERN_ERR PFX "TX power not in dBm.\n"); return -EOPNOTSUPP; } @@ -695,6 +695,7 @@ bcm->ieee->host_encrypt = !!on; bcm->ieee->host_decrypt = !!on; bcm->ieee->host_build_iv = !on; + bcm->ieee->host_strip_iv_icv = !on; spin_unlock_irqrestore(&bcm->irq_lock, flags); mutex_unlock(&bcm->mutex); @@ -849,7 +850,7 @@ unsigned long flags; wstats = &bcm->stats.wstats; - if (!mac->associated) { + if (!mac->associnfo.associated) { wstats->miss.beacon = 0; // bcm->ieee->ieee_stats.tx_retry_limit_exceeded = 0; // FIXME: should this be cleared here? wstats->discard.retries = 0; --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_dma.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_dma.c 2008-08-06 16:58:08.000000000 -0400 @@ -994,7 +994,8 @@ assert(0); return; } - memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len); + skb_copy_from_linear_data(skb, skb_put(bounce_skb, skb->len), + skb->len); dev_kfree_skb_any(skb); skb = bounce_skb; } --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c 2008-08-06 16:58:08.000000000 -0400 @@ -219,7 +219,7 @@ ssize_t buf_size; ssize_t res; unsigned long flags; - u64 tsf; + unsigned long long tsf; buf_size = min(count, sizeof (really_big_buffer) - 1); down(&big_buffer_sem); --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c 2008-08-06 16:58:13.000000000 -0400 @@ -793,27 +793,27 @@ /* il0macaddr */ value = sprom[BCM43xx_SPROM_IL0MACADDR + 0]; - *(((u16 *)bcm->sprom.il0macaddr) + 0) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.il0macaddr) + 0) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_IL0MACADDR + 1]; - *(((u16 *)bcm->sprom.il0macaddr) + 1) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.il0macaddr) + 1) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_IL0MACADDR + 2]; - *(((u16 *)bcm->sprom.il0macaddr) + 2) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.il0macaddr) + 2) = cpu_to_be16(value); /* et0macaddr */ value = sprom[BCM43xx_SPROM_ET0MACADDR + 0]; - *(((u16 *)bcm->sprom.et0macaddr) + 0) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et0macaddr) + 0) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_ET0MACADDR + 1]; - *(((u16 *)bcm->sprom.et0macaddr) + 1) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et0macaddr) + 1) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_ET0MACADDR + 2]; - *(((u16 *)bcm->sprom.et0macaddr) + 2) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et0macaddr) + 2) = cpu_to_be16(value); /* et1macaddr */ value = sprom[BCM43xx_SPROM_ET1MACADDR + 0]; - *(((u16 *)bcm->sprom.et1macaddr) + 0) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et1macaddr) + 0) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_ET1MACADDR + 1]; - *(((u16 *)bcm->sprom.et1macaddr) + 1) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et1macaddr) + 1) = cpu_to_be16(value); value = sprom[BCM43xx_SPROM_ET1MACADDR + 2]; - *(((u16 *)bcm->sprom.et1macaddr) + 2) = cpu_to_be16(value); + *(((__be16 *)bcm->sprom.et1macaddr) + 2) = cpu_to_be16(value); /* ethernet phy settings */ value = sprom[BCM43xx_SPROM_ETHPHY]; @@ -1059,7 +1059,7 @@ } static void key_write(struct bcm43xx_private *bcm, - u8 index, u8 algorithm, const u16 *key) + u8 index, u8 algorithm, const __le16 *key) { unsigned int i, basic_wep = 0; u32 offset; @@ -1077,7 +1077,7 @@ /* Write key payload, 8 little endian words */ offset = bcm->security_offset + (index * BCM43xx_SEC_KEYSIZE); for (i = 0; i < (BCM43xx_SEC_KEYSIZE / sizeof(u16)); i++) { - value = cpu_to_le16(key[i]); + value = le16_to_cpu(key[i]); bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, offset + (i * 2), value); @@ -1091,7 +1091,7 @@ } static void keymac_write(struct bcm43xx_private *bcm, - u8 index, const u32 *addr) + u8 index, const __be32 *addr) { /* for keys 0-3 there is no associated mac address */ if (index < 4) @@ -1102,11 +1102,11 @@ bcm43xx_shm_write32(bcm, BCM43xx_SHM_HWMAC, index * 2, - cpu_to_be32(*addr)); + be32_to_cpu(*addr)); bcm43xx_shm_write16(bcm, BCM43xx_SHM_HWMAC, (index * 2) + 1, - cpu_to_be16(*((u16 *)(addr + 1)))); + be16_to_cpu(*((__be16 *)(addr + 1)))); } else { if (index < 8) { TODO(); /* Put them in the macaddress filter */ @@ -1133,8 +1133,8 @@ return -EINVAL; memcpy(key, _key, key_len); - key_write(bcm, index, algorithm, (const u16 *)key); - keymac_write(bcm, index, (const u32 *)mac_addr); + key_write(bcm, index, algorithm, (const __le16 *)key); + keymac_write(bcm, index, (const __be32 *)mac_addr); bcm->key[index].algorithm = algorithm; @@ -1143,7 +1143,7 @@ static void bcm43xx_clear_keys(struct bcm43xx_private *bcm) { - static const u32 zero_mac[2] = { 0 }; + static const __be32 zero_mac[2] = { 0 }; unsigned int i,j, nr_keys = 54; u16 offset; @@ -1815,7 +1815,7 @@ /* Interrupt handler top-half */ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id, - struct pt_regs *regs) + struct pt_regs *regs) { irqreturn_t ret = IRQ_HANDLED; struct bcm43xx_private *bcm = dev_id; @@ -2012,11 +2012,11 @@ static void bcm43xx_upload_microcode(struct bcm43xx_private *bcm) { struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm); - const u32 *data; + const __be32 *data; unsigned int i, len; /* Upload Microcode. */ - data = (u32 *)(phy->ucode->data); + data = (__be32 *)(phy->ucode->data); len = phy->ucode->size / sizeof(u32); bcm43xx_shm_control_word(bcm, BCM43xx_SHM_UCODE, 0x0000); for (i = 0; i < len; i++) { @@ -2026,7 +2026,7 @@ } /* Upload PCM data. */ - data = (u32 *)(phy->pcm->data); + data = (__be32 *)(phy->pcm->data); len = phy->pcm->size / sizeof(u32); bcm43xx_shm_control_word(bcm, BCM43xx_SHM_PCM, 0x01ea); bcm43xx_write32(bcm, BCM43xx_MMIO_SHM_DATA, 0x00004000); @@ -2381,7 +2381,7 @@ goto err_gpio_cleanup; bcm43xx_radio_turn_on(bcm); bcm->radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm); - dprintk(KERN_INFO PFX "Radio %s by hardware\n", + printk(KERN_INFO PFX "Radio %s by hardware\n", (bcm->radio_hw_enable == 0) ? "disabled" : "enabled"); bcm43xx_write16(bcm, 0x03E6, 0x0000); @@ -3130,7 +3130,7 @@ radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm); if (unlikely(bcm->radio_hw_enable != radio_hw_enable)) { bcm->radio_hw_enable = radio_hw_enable; - dprintk(KERN_INFO PFX "Radio hardware status changed to %s\n", + printk(KERN_INFO PFX "Radio hardware status changed to %s\n", (radio_hw_enable == 0) ? "disabled" : "enabled"); bcm43xx_leds_update(bcm, 0); } @@ -3174,9 +3174,8 @@ schedule_delayed_work(&bcm->periodic_work, HZ); } -static void bcm43xx_periodic_work_handler(void *d) +static void bcm43xx_periodic_work_handler(struct bcm43xx_private *bcm) { - struct bcm43xx_private *bcm = d; struct net_device *net_dev = bcm->net_dev; unsigned long flags; u32 savedirqs = 0; @@ -3241,7 +3240,7 @@ struct work_struct *work = &bcm->periodic_work; assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED); - INIT_WORK(work, bcm43xx_periodic_work_handler, bcm); + INIT_WORK(work, (void (*)(void *))bcm43xx_periodic_work_handler, bcm); schedule_delayed_work(work, 0); } @@ -4082,7 +4081,6 @@ goto out; } /* initialize the net_device struct */ - SET_MODULE_OWNER(net_dev); SET_NETDEV_DEV(net_dev, &pdev->dev); net_dev->open = bcm43xx_net_open; @@ -4143,9 +4141,8 @@ /* Hard-reset the chip. Do not call this directly. * Use bcm43xx_controller_restart() */ -static void bcm43xx_chip_reset(void *d) +static void bcm43xx_chip_reset(struct bcm43xx_private *bcm) { - struct bcm43xx_private *bcm = d; struct bcm43xx_phyinfo *phy; int err = -ENODEV; @@ -4172,7 +4169,8 @@ if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) return; printk(KERN_ERR PFX "Controller RESET (%s) ...\n", reason); - INIT_WORK(&bcm->restart_work, bcm43xx_chip_reset, bcm); + INIT_WORK(&bcm->restart_work, + (void (*)(void *))bcm43xx_chip_reset, bcm); schedule_work(&bcm->restart_work); } --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/Kconfig.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/Kconfig 2008-08-06 16:58:08.000000000 -0400 @@ -1,12 +1,15 @@ config BCM43XX - tristate "Broadcom BCM43xx wireless support" - depends on PCI && IEEE80211 && IEEE80211_SOFTMAC && NET_RADIO && EXPERIMENTAL + tristate "Broadcom BCM43xx wireless support (DEPRECATED)" + depends on PCI && IEEE80211 && IEEE80211_SOFTMAC && NET_RADIO && (!SSB_B43_PCI_BRIDGE || SSB != y) && EXPERIMENTAL select WIRELESS_EXT select FW_LOADER select HW_RANDOM ---help--- - This is an experimental driver for the Broadcom 43xx wireless chip, - found in the Apple Airport Extreme and various other devices. + This is an experimental driver for the Broadcom 43xx wireless + chip, found in the Apple Airport Extreme and various other + devices. This driver is deprecated and will be removed + from the kernel in the near future. It has been replaced + by the b43 and b43legacy drivers. config BCM43XX_DEBUG bool "Broadcom BCM43xx debugging (RECOMMENDED)" --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_pio.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_pio.c 2008-08-06 16:58:08.000000000 -0400 @@ -68,7 +68,7 @@ source = packet; i -= sizeof(*txhdr); } - ret = le16_to_cpu( *((u16 *)(source + i)) ); + ret = le16_to_cpu( *((__le16 *)(source + i)) ); *pos += 2; return ret; @@ -526,7 +526,7 @@ void bcm43xx_pio_rx(struct bcm43xx_pioqueue *queue) { - u16 preamble[21] = { 0 }; + __le16 preamble[21] = { 0 }; struct bcm43xx_rxhdr *rxhdr; u16 tmp, len, rxflags2; int i, preamble_readwords; @@ -601,7 +601,7 @@ skb_put(skb, len); for (i = 0; i < len - 1; i += 2) { tmp = bcm43xx_pio_read(queue, BCM43xx_PIO_RXDATA); - *((u16 *)(skb->data + i)) = cpu_to_le16(tmp); + *((__le16 *)(skb->data + i)) = cpu_to_le16(tmp); } if (len % 2) { tmp = bcm43xx_pio_read(queue, BCM43xx_PIO_RXDATA); --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h 2008-08-06 16:58:08.000000000 -0400 @@ -87,7 +87,7 @@ /* RX header as received from the hardware. */ struct bcm43xx_rxhdr { - /* Frame Length. Must be generated explicitely in PIO mode. */ + /* Frame Length. Must be generated explicitly in PIO mode. */ __le16 frame_length; PAD_BYTES(2); /* Flags field 1 */ --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_leds.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_leds.c 2008-08-06 16:58:08.000000000 -0400 @@ -29,7 +29,7 @@ #include "bcm43xx_radio.h" #include "bcm43xx.h" -#include +#include static void bcm43xx_led_changestate(struct bcm43xx_led *led) @@ -249,7 +249,7 @@ //TODO break; case BCM43xx_LED_ASSOC: - if (bcm->softmac->associated) + if (bcm->softmac->associnfo.associated) turn_on = 1; break; #ifdef CONFIG_BCM43XX_DEBUG --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c 2008-08-06 16:58:08.000000000 -0400 @@ -2149,7 +2149,7 @@ } dyn_tssi2dbm = kmalloc(64, GFP_KERNEL); if (dyn_tssi2dbm == NULL) { - printk(KERN_ERR PFX "Could not allocate memory" + printk(KERN_ERR PFX "Could not allocate memory " "for tssi2dbm table\n"); return -ENOMEM; } --- linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_xmit.c.orig 2008-08-06 16:57:35.000000000 -0400 +++ linux-2.6.18.noarch/drivers/net/wireless/bcm43xx/bcm43xx_xmit.c 2008-08-06 16:58:08.000000000 -0400 @@ -122,10 +122,10 @@ __u8 *raw = plcp->raw; if (ofdm_modulation) { - *data = bcm43xx_plcp_get_ratecode_ofdm(bitrate); + u32 val = bcm43xx_plcp_get_ratecode_ofdm(bitrate); assert(!(octets & 0xF000)); - *data |= (octets << 5); - *data = cpu_to_le32(*data); + val |= (octets << 5); + *data = cpu_to_le32(val); } else { u32 plen; @@ -544,23 +544,6 @@ } frame_ctl = le16_to_cpu(wlhdr->frame_ctl); - if ((frame_ctl & IEEE80211_FCTL_PROTECTED) && !bcm->ieee->host_decrypt) { - frame_ctl &= ~IEEE80211_FCTL_PROTECTED; - wlhdr->frame_ctl = cpu_to_le16(frame_ctl); - /* trim IV and ICV */ - /* FIXME: this must be done only for WEP encrypted packets */ - if (skb->len < 32) { - dprintkl(KERN_ERR PFX "RX packet dropped (PROTECTED flag " - "set and length < 32)\n"); - return -EINVAL; - } else { - memmove(skb->data + 4, skb->data, 24); - skb_pull(skb, 4); - skb_trim(skb, skb->len - 4); - stats.len -= 8; - } - wlhdr = (struct ieee80211_hdr_4addr *)(skb->data); - } switch (WLAN_FC_GET_TYPE(frame_ctl)) { case IEEE80211_FTYPE_MGMT: ieee80211_rx_mgt(bcm->ieee, wlhdr, &stats);