|
@@ -1463,6 +1463,23 @@ static void handle_irq_transmit_status(struct bcm43xx_private *bcm)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void drain_txstatus_queue(struct bcm43xx_private *bcm)
|
|
|
+{
|
|
|
+ u32 dummy;
|
|
|
+
|
|
|
+ if (bcm->current_core->rev < 5)
|
|
|
+ return;
|
|
|
+ /* Read all entries from the microcode TXstatus FIFO
|
|
|
+ * and throw them away.
|
|
|
+ */
|
|
|
+ while (1) {
|
|
|
+ dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_0);
|
|
|
+ if (!dummy)
|
|
|
+ break;
|
|
|
+ dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_1);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm)
|
|
|
{
|
|
|
bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F);
|
|
@@ -3532,6 +3549,7 @@ int bcm43xx_select_wireless_core(struct bcm43xx_private *bcm,
|
|
|
bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC);
|
|
|
bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr));
|
|
|
bcm43xx_security_init(bcm);
|
|
|
+ drain_txstatus_queue(bcm);
|
|
|
ieee80211softmac_start(bcm->net_dev);
|
|
|
|
|
|
/* Let's go! Be careful after enabling the IRQs.
|