diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h b/drivers/net/wireless/bcm43xx/bcm43xx.h
index 99b2e72..8487175 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx.h
+++ b/drivers/net/wireless/bcm43xx/bcm43xx.h
@@ -19,16 +19,17 @@
 
 #define PFX				KBUILD_MODNAME ": "
 
-#define BCM43xx_SWITCH_CORE_MAX_RETRIES	10
+#define BCM43xx_SWITCH_CORE_MAX_RETRIES	50
 #define BCM43xx_IRQWAIT_MAX_RETRIES	50
 
 #define BCM43xx_IO_SIZE			8192
-#define BCM43xx_REG_ACTIVE_CORE		0x80
 
-/* Interrupt Control PCI Configuration Register. (Only on PCI cores with rev >= 6) */
-#define BCM43xx_PCICFG_ICR		0x94
+/* Active Core PCI Configuration Register. */
+#define BCM43xx_PCICFG_ACTIVE_CORE	0x80
 /* SPROM control register. */
 #define BCM43xx_PCICFG_SPROMCTL		0x88
+/* Interrupt Control PCI Configuration Register. (Only on PCI cores with rev >= 6) */
+#define BCM43xx_PCICFG_ICR		0x94
 
 /* MMIO offsets */
 #define BCM43xx_MMIO_DMA1_REASON	0x20
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 18152b0..3443bd3 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -119,40 +119,29 @@
 //#define DEBUG_ENABLE_PCILOG
 
 
-static struct pci_device_id bcm43xx_pci_tbl[] = {
-
-	/* Detailed list maintained at:
-	 * http://openfacts.berlios.de/index-en.phtml?title=Bcm43xxDevices
-	 */
-	
+/* Detailed list maintained at:
+ * http://openfacts.berlios.de/index-en.phtml?title=Bcm43xxDevices
+ */
+	static struct pci_device_id bcm43xx_pci_tbl[] = {
+	/* Broadcom 4303 802.11b */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+		/* Broadcom 4307 802.11b */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4307, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+		/* Broadcom 4318 802.11b/g */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4318, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	/* Broadcom 4306 802.11b/g */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+		/* Broadcom 4306 802.11a */
+//	{ PCI_VENDOR_ID_BROADCOM, 0x4321, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	/* Broadcom 4309 802.11a/b/g */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	/* Broadcom 43XG 802.11b/g */
+	{ PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 #ifdef CONFIG_BCM947XX
 	/* SB bus on BCM947xx */
 	{ PCI_VENDOR_ID_BROADCOM, 0x0800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 #endif
-	
-	/* Broadcom 4303 802.11b */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-	
-	/* Broadcom 4307 802.11b */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4307, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-	
-	/* Broadcom 4318 802.11b/g */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4318, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-
-	/* Broadcom 4306 802.11b/g */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-	
-	/* Broadcom 4306 802.11a */
-//	{ PCI_VENDOR_ID_BROADCOM, 0x4321, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-
-	/* Broadcom 4309 802.11a/b/g */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-
-	/* Broadcom 43XG 802.11b/g */
-	{ PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-
-	/* required last entry */
-	{ 0, },
+	{ 0 },
 };
 MODULE_DEVICE_TABLE(pci, bcm43xx_pci_tbl);
 
@@ -353,9 +342,8 @@
 	bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, status);
 }
 
-static inline
-u8 bcm43xx_plcp_get_bitrate(struct bcm43xx_plcp_hdr4 *plcp,
-			    const int ofdm_modulation)
+static u8 bcm43xx_plcp_get_bitrate(struct bcm43xx_plcp_hdr4 *plcp,
+				   const int ofdm_modulation)
 {
 	u8 rate;
 
@@ -412,8 +400,7 @@
 	return rate;
 }
 
-static inline
-u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate)
+static u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate)
 {
 	switch (bitrate) {
 	case IEEE80211_CCK_RATE_1MB:
@@ -429,8 +416,7 @@
 	return 0;
 }
 
-static inline
-u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate)
+static u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate)
 {
 	switch (bitrate) {
 	case IEEE80211_OFDM_RATE_6MB:
@@ -489,13 +475,12 @@
 //bcm43xx_printk_bitdump(raw, 4, 0, "PLCP");
 }
 
-void fastcall
-bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
-		       struct bcm43xx_txhdr *txhdr,
-		       const unsigned char *fragment_data,
-		       unsigned int fragment_len,
-		       const int is_first_fragment,
-		       const u16 cookie)
+void bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
+			    struct bcm43xx_txhdr *txhdr,
+			    const unsigned char *fragment_data,
+			    unsigned int fragment_len,
+			    const int is_first_fragment,
+			    const u16 cookie)
 {
 	const struct bcm43xx_phyinfo *phy = bcm->current_core->phy;
 	const struct ieee80211_hdr_1addr *wireless_header = (const struct ieee80211_hdr_1addr *)fragment_data;
@@ -606,9 +591,8 @@
 	bcm43xx_write16(bcm, BCM43xx_MMIO_MACFILTER_DATA, data);
 }
 
-static inline
-void bcm43xx_macfilter_clear(struct bcm43xx_private *bcm,
-			     u16 offset)
+static void bcm43xx_macfilter_clear(struct bcm43xx_private *bcm,
+				    u16 offset)
 {
 	const u8 zero_addr[ETH_ALEN] = { 0 };
 
@@ -634,8 +618,7 @@
 		bcm43xx_ram_write(bcm, 0x478 + i, *((u32 *)(mac_bssid + i)));
 }
 
-static inline
-void bcm43xx_set_slot_time(struct bcm43xx_private *bcm, u16 slot_time)
+static void bcm43xx_set_slot_time(struct bcm43xx_private *bcm, u16 slot_time)
 {
 	/* slot_time is in usec. */
 	if (bcm->current_core->phy->type != BCM43xx_PHYTYPE_G)
@@ -644,14 +627,12 @@
 	bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x0010, slot_time);
 }
 
-static inline
-void bcm43xx_short_slot_timing_enable(struct bcm43xx_private *bcm)
+static void bcm43xx_short_slot_timing_enable(struct bcm43xx_private *bcm)
 {
 	bcm43xx_set_slot_time(bcm, 9);
 }
 
-static inline
-void bcm43xx_short_slot_timing_disable(struct bcm43xx_private *bcm)
+static void bcm43xx_short_slot_timing_disable(struct bcm43xx_private *bcm)
 {
 	bcm43xx_set_slot_time(bcm, 20);
 }
@@ -744,6 +725,8 @@
 
 static int bcm43xx_read_radioinfo(struct bcm43xx_private *bcm)
 {
+	struct bcm43xx_radioinfo *radio = bcm->current_core->radio;
+	struct bcm43xx_phyinfo *phy = bcm->current_core->phy;
 	u32 radio_id;
 	u16 manufact;
 	u16 version;
@@ -769,10 +752,10 @@
 	version = (radio_id & 0x0FFFF000) >> 12;
 	revision = (radio_id & 0xF0000000) >> 28;
 
-	dprintk(KERN_INFO PFX "Detected Radio:  ID: %x (Manuf: %x Ver: %x Rev: %x)\n",
+	dprintk(KERN_INFO PFX "Detected Radio: ID: %x (Manuf: %x Ver: %x Rev: %x)\n",
 		radio_id, manufact, version, revision);
 
-	switch (bcm->current_core->phy->type) {
+	switch (phy->type) {
 	case BCM43xx_PHYTYPE_A:
 		if ((version != 0x2060) || (revision != 1) || (manufact != 0x17f))
 			goto err_unsupported_radio;
@@ -787,25 +770,25 @@
 		break;
 	}
 
-	bcm->current_core->radio->manufact = manufact;
-	bcm->current_core->radio->version = version;
-	bcm->current_core->radio->revision = revision;
+	radio->manufact = manufact;
+	radio->version = version;
+	radio->revision = revision;
 
 	/* Set default attenuation values. */
-	bcm->current_core->radio->txpower[0] = 2;
-	bcm->current_core->radio->txpower[1] = 2;
+	radio->txpower[0] = 2;
+	radio->txpower[1] = 2;
 	if (revision == 1)
-		bcm->current_core->radio->txpower[2] = 3;
+		radio->txpower[2] = 3;
 	else
-		bcm->current_core->radio->txpower[2] = 0;
+		radio->txpower[2] = 0;
 	if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A)
-		bcm->current_core->radio->txpower_desired = bcm->sprom.maxpower_aphy;
+		radio->txpower_desired = bcm->sprom.maxpower_aphy;
 	else
 		bcm->current_core->radio->txpower_desired = bcm->sprom.maxpower_bgphy;
 
 	/* Initialize the in-memory nrssi Lookup Table. */
 	for (i = 0; i < 64; i++)
-		bcm->current_core->radio->nrssi_lt[i] = i;
+		radio->nrssi_lt[i] = i;
 
 	return 0;
 
@@ -1155,6 +1138,7 @@
  */
 void bcm43xx_dummy_transmission(struct bcm43xx_private *bcm)
 {
+	struct bcm43xx_phyinfo *phy = bcm->current_core->phy;
 	unsigned int i, max_loop;
 	u16 value = 0;
 	u32 buffer[5] = {
@@ -1165,7 +1149,7 @@
 		0x00000000,
 	};
 
-	switch (bcm->current_core->phy->type) {
+	switch (phy->type) {
 	case BCM43xx_PHYTYPE_A:
 		max_loop = 0x1E;
 		buffer[0] = 0xCC010200;
@@ -1187,7 +1171,7 @@
 
 	bcm43xx_write16(bcm, 0x0568, 0x0000);
 	bcm43xx_write16(bcm, 0x07C0, 0x0000);
-	bcm43xx_write16(bcm, 0x050C, ((bcm->current_core->phy->type == BCM43xx_PHYTYPE_A) ? 1 : 0));
+	bcm43xx_write16(bcm, 0x050C, ((phy->type == BCM43xx_PHYTYPE_A) ? 1 : 0));
 	bcm43xx_write16(bcm, 0x0508, 0x0000);
 	bcm43xx_write16(bcm, 0x050A, 0x0000);
 	bcm43xx_write16(bcm, 0x054C, 0x0000);
@@ -1324,25 +1308,6 @@
 	dprintk(KERN_INFO PFX "Keys cleared\n");
 }
 
-/* Puts the index of the current core into user supplied core variable.
- * This function reads the value from the device.
- * Almost always you don't want to call this, but use bcm->current_core
- */
-static inline
-int _get_current_core(struct bcm43xx_private *bcm, int *core)
-{
-	int err;
-
-	err = bcm43xx_pci_read_config32(bcm, BCM43xx_REG_ACTIVE_CORE, core);
-	if (unlikely(err)) {
-		dprintk(KERN_ERR PFX "BCM43xx_REG_ACTIVE_CORE read failed!\n");
-		return -ENODEV;
-	}
-	*core = (*core - 0x18000000) / 0x1000;
-
-	return 0;
-}
-
 /* Lowlevel core-switch function. This is only to be used in
  * bcm43xx_switch_core() and bcm43xx_probe_cores()
  */
@@ -1350,63 +1315,57 @@
 {
 	int err;
 	int attempts = 0;
-	int current_core = -1;
+	u32 current_core;
 
 	assert(core >= 0);
-
-	err = _get_current_core(bcm, &current_core);
-	if (unlikely(err))
-		goto out;
-
-	/* Write the computed value to the register. This doesn't always
-	   succeed so we retry BCM43xx_SWITCH_CORE_MAX_RETRIES times */
-	while (current_core != core) {
-		if (unlikely(attempts++ > BCM43xx_SWITCH_CORE_MAX_RETRIES)) {
-			err = -ENODEV;
-			printk(KERN_ERR PFX
-			       "unable to switch to core %u, retried %i times\n",
-			       core, attempts);
-			goto out;
-		}
-		err = bcm43xx_pci_write_config32(bcm, BCM43xx_REG_ACTIVE_CORE,
+	while (1) {
+		err = bcm43xx_pci_write_config32(bcm, BCM43xx_PCICFG_ACTIVE_CORE,
 						 (core * 0x1000) + 0x18000000);
-		if (unlikely(err)) {
-			dprintk(KERN_ERR PFX "BCM43xx_REG_ACTIVE_CORE write failed!\n");
-			continue;
-		}
-		_get_current_core(bcm, &current_core);
-#ifdef CONFIG_BCM947XX
-		if (bcm->pci_dev->bus->number == 0)
-			bcm->current_core_offset = 0x1000 * core;
-		else
-			bcm->current_core_offset = 0;
-#endif
-	}
+		if (unlikely(err))
+			goto error;
+		err = bcm43xx_pci_read_config32(bcm, BCM43xx_PCICFG_ACTIVE_CORE,
+						&current_core);
+		if (unlikely(err))
+			goto error;
+		current_core = (current_core - 0x18000000) / 0x1000;
+		if (current_core == core)
+			break;
 
-	assert(err == 0);
-out:
-	return err;
+		if (unlikely(attempts++ > BCM43xx_SWITCH_CORE_MAX_RETRIES))
+			goto error;
+		udelay(10);
+	}
+#ifdef CONFIG_BCM947XX
+	if (bcm->pci_dev->bus->number == 0)
+		bcm->current_core_offset = 0x1000 * core;
+	else
+		bcm->current_core_offset = 0;
+#endif
+
+	return 0;
+error:
+	printk(KERN_ERR PFX "Failed to switch to core %d\n", core);
+	return -ENODEV;
 }
 
 int bcm43xx_switch_core(struct bcm43xx_private *bcm, struct bcm43xx_coreinfo *new_core)
 {
 	int err;
 
-	if (!new_core)
+	if (unlikely(!new_core))
 		return 0;
-
 	if (!(new_core->flags & BCM43xx_COREFLAG_AVAILABLE))
 		return -ENODEV;
 	if (bcm->current_core == new_core)
 		return 0;
 	err = _switch_core(bcm, new_core->index);
-	if (!err)
+	if (likely(!err))
 		bcm->current_core = new_core;
 
 	return err;
 }
 
-static inline int bcm43xx_core_enabled(struct bcm43xx_private *bcm)
+static int bcm43xx_core_enabled(struct bcm43xx_private *bcm)
 {
 	u32 value;
 
@@ -1609,7 +1568,7 @@
 	return err;
 }
 
-static inline void handle_irq_transmit_status(struct bcm43xx_private *bcm)
+static void handle_irq_transmit_status(struct bcm43xx_private *bcm)
 {
 	u32 v0, v1;
 	u16 tmp;
@@ -1648,7 +1607,7 @@
 	}
 }
 
-static inline void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm)
+static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm)
 {
 	bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F);
 	bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x40A, 0x7F7F);
@@ -1672,7 +1631,7 @@
 	bcm43xx_generate_noise_sample(bcm);
 }
 
-static inline void handle_irq_noise(struct bcm43xx_private *bcm)
+static void handle_irq_noise(struct bcm43xx_private *bcm)
 {
 	struct bcm43xx_radioinfo *radio = bcm->current_core->radio;
 	u16 tmp;
@@ -1747,8 +1706,7 @@
 	bcm43xx_generate_noise_sample(bcm);
 }
 
-static inline
-void handle_irq_ps(struct bcm43xx_private *bcm)
+static void handle_irq_ps(struct bcm43xx_private *bcm)
 {
 	if (bcm->ieee->iw_mode == IW_MODE_MASTER) {
 		///TODO: PS TBTT
@@ -1761,8 +1719,7 @@
 	//FIXME else set to false?
 }
 
-static inline
-void handle_irq_reg124(struct bcm43xx_private *bcm)
+static void handle_irq_reg124(struct bcm43xx_private *bcm)
 {
 	if (!bcm->reg124_set_0x4)
 		return;
@@ -1772,8 +1729,7 @@
 	//FIXME: reset reg124_set_0x4 to false?
 }
 
-static inline
-void handle_irq_pmq(struct bcm43xx_private *bcm)
+static void handle_irq_pmq(struct bcm43xx_private *bcm)
 {
 	u32 tmp;
 
@@ -1829,8 +1785,7 @@
 	bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, shm_size_offset, size);
 }
 
-static inline
-void handle_irq_beacon(struct bcm43xx_private *bcm)
+static void handle_irq_beacon(struct bcm43xx_private *bcm)
 {
 	u32 status;
 
@@ -1992,9 +1947,8 @@
 
 #undef bcmirq_print_reasons
 
-static inline
-void bcm43xx_interrupt_ack(struct bcm43xx_private *bcm,
-			   u32 reason, u32 mask)
+static void bcm43xx_interrupt_ack(struct bcm43xx_private *bcm,
+				  u32 reason, u32 mask)
 {
 	bcm->dma_reason[0] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA1_REASON)
 			     & 0x0001dc00;
@@ -2340,7 +2294,7 @@
 			  SA_SHIRQ, KBUILD_MODNAME, bcm);
 	if (res) {
 		printk(KERN_ERR PFX "Cannot register IRQ%d\n", bcm->irq);
-		return -EFAULT;
+		return -ENODEV;
 	}
 	bcm43xx_write32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON, 0xffffffff);
 	bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, 0x00020402);
@@ -2367,7 +2321,7 @@
 /* Switch to the core used to write the GPIO register.
  * This is either the ChipCommon, or the PCI core.
  */
-static inline int switch_to_gpio_core(struct bcm43xx_private *bcm)
+static int switch_to_gpio_core(struct bcm43xx_private *bcm)
 {
 	int err;
 
@@ -2379,13 +2333,13 @@
 	err = bcm43xx_switch_core(bcm, &bcm->core_chipcommon);
 	if (err == -ENODEV) {
 		err = bcm43xx_switch_core(bcm, &bcm->core_pci);
-		if (err == -ENODEV) {
+		if (unlikely(err == -ENODEV)) {
 			printk(KERN_ERR PFX "gpio error: "
 			       "Neither ChipCommon nor PCI core available!\n");
 			return -ENODEV;
-		} else if (err != 0)
+		} else if (unlikely(err != 0))
 			return -ENODEV;
-	} else if (err != 0)
+	} else if (unlikely(err != 0))
 		return -ENODEV;
 
 	return 0;
@@ -2691,40 +2645,30 @@
  * http://bcm-specs.sipsolutions.net/ValidateChipAccess */
 static int bcm43xx_validate_chip(struct bcm43xx_private *bcm)
 {
-	int err = -ENODEV;
 	u32 value;
 	u32 shm_backup;
 
 	shm_backup = bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED, 0x0000);
 	bcm43xx_shm_write32(bcm, BCM43xx_SHM_SHARED, 0x0000, 0xAA5555AA);
-	if (bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED, 0x0000) != 0xAA5555AA) {
-		printk(KERN_ERR PFX "Error: SHM mismatch (1) validating chip\n");
-		goto out;
-	}
-
+	if (bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED, 0x0000) != 0xAA5555AA)
+		goto error;
 	bcm43xx_shm_write32(bcm, BCM43xx_SHM_SHARED, 0x0000, 0x55AAAA55);
-	if (bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED, 0x0000) != 0x55AAAA55) {
-		printk(KERN_ERR PFX "Error: SHM mismatch (2) validating chip\n");
-		goto out;
-	}
-
+	if (bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED, 0x0000) != 0x55AAAA55)
+		goto error;
 	bcm43xx_shm_write32(bcm, BCM43xx_SHM_SHARED, 0x0000, shm_backup);
 
 	value = bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD);
-	if ((value | 0x80000000) != 0x80000400) {
-		printk(KERN_ERR PFX "Error: Bad Status Bitfield while validating chip\n");
-		goto out;
-	}
+	if ((value | 0x80000000) != 0x80000400)
+		goto error;
 
 	value = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
-	if (value != 0x00000000) {
-		printk(KERN_ERR PFX "Error: Bad interrupt reason code while validating chip\n");
-		goto out;
-	}
+	if (value != 0x00000000)
+		goto error;
 
-	err = 0;
-out:
-	return err;
+	return 0;
+error:
+	printk(KERN_ERR PFX "Failed to validate the chipaccess\n");
+	return -ENODEV;
 }
 
 static int bcm43xx_probe_cores(struct bcm43xx_private *bcm)
@@ -3172,9 +3116,9 @@
 	bcm43xx_pctl_set_crystal(bcm, 0);
 }
 
-static inline void bcm43xx_pcicore_broadcast_value(struct bcm43xx_private *bcm,
-						   u32 address,
-						   u32 data)
+static void bcm43xx_pcicore_broadcast_value(struct bcm43xx_private *bcm,
+					    u32 address,
+					    u32 data)
 {
 	bcm43xx_write32(bcm, BCM43xx_PCICORE_BCAST_ADDR, address);
 	bcm43xx_write32(bcm, BCM43xx_PCICORE_BCAST_DATA, data);
@@ -3523,6 +3467,7 @@
 
 static int bcm43xx_read_phyinfo(struct bcm43xx_private *bcm)
 {
+	struct bcm43xx_phyinfo *phy = bcm->current_core->phy;
 	u16 value;
 	u8 phy_version;
 	u8 phy_type;
@@ -3578,15 +3523,15 @@
 		       phy_rev);
 	}
 
-	bcm->current_core->phy->version = phy_version;
-	bcm->current_core->phy->type = phy_type;
-	bcm->current_core->phy->rev = phy_rev;
+	phy->version = phy_version;
+	phy->type = phy_type;
+	phy->rev = phy_rev;
 	if ((phy_type == BCM43xx_PHYTYPE_B) || (phy_type == BCM43xx_PHYTYPE_G)) {
 		p = kzalloc(sizeof(struct bcm43xx_lopair) * BCM43xx_LO_COUNT,
 			    GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
-		bcm->current_core->phy->_lo_pairs = p;
+		phy->_lo_pairs = p;
 	}
 
 	return 0;
@@ -3757,9 +3702,9 @@
 	goto out;
 }
 
-static inline
-s8 bcm43xx_rssi_postprocess(struct bcm43xx_private *bcm, u8 in_rssi,
-			    int ofdm, int adjust_2053, int adjust_2050)
+static s8 bcm43xx_rssi_postprocess(struct bcm43xx_private *bcm,
+				   u8 in_rssi, int ofdm,
+				   int adjust_2053, int adjust_2050)
 {
 	s32 tmp;
 
@@ -3816,8 +3761,8 @@
 	return (s8)tmp;
 }
 
-static inline
-s8 bcm43xx_rssinoise_postprocess(struct bcm43xx_private *bcm, u8 in_rssi)
+static s8 bcm43xx_rssinoise_postprocess(struct bcm43xx_private *bcm,
+					u8 in_rssi)
 {
 	s8 ret;
 
@@ -3843,9 +3788,9 @@
 	return 0;
 }
 
-int fastcall bcm43xx_rx(struct bcm43xx_private *bcm,
-			struct sk_buff *skb,
-			struct bcm43xx_rxhdr *rxhdr)
+int bcm43xx_rx(struct bcm43xx_private *bcm,
+	       struct sk_buff *skb,
+	       struct bcm43xx_rxhdr *rxhdr)
 {
 	struct bcm43xx_plcp_hdr4 *plcp;
 	struct ieee80211_rx_stats stats;
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/bcm43xx/bcm43xx_main.h
index 1d3eddd..298e24b 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.h
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.h
@@ -111,12 +111,12 @@
 
 struct sk_buff;
 
-void FASTCALL(bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
-				     struct bcm43xx_txhdr *txhdr,
-				     const unsigned char *fragment_data,
-				     const unsigned int fragment_len,
-				     const int is_first_fragment,
-				     const u16 cookie));
+void bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
+			    struct bcm43xx_txhdr *txhdr,
+			    const unsigned char *fragment_data,
+			    const unsigned int fragment_len,
+			    const int is_first_fragment,
+			    const u16 cookie);
 
 /* RX header as received from the hardware. */
 struct bcm43xx_rxhdr {
@@ -244,9 +244,9 @@
 void bcm43xx_tsf_read(struct bcm43xx_private *bcm, u64 *tsf);
 void bcm43xx_tsf_write(struct bcm43xx_private *bcm, u64 tsf);
 
-int FASTCALL(bcm43xx_rx(struct bcm43xx_private *bcm,
-			struct sk_buff *skb,
-			struct bcm43xx_rxhdr *rxhdr));
+int bcm43xx_rx(struct bcm43xx_private *bcm,
+	       struct sk_buff *skb,
+	       struct bcm43xx_rxhdr *rxhdr);
 
 void bcm43xx_set_iwmode(struct bcm43xx_private *bcm,
 			int iw_mode);
