Michael Buesch wrote: > On Saturday 06 September 2008 20:57:50 Johannes Berg wrote: >> It is, this isn't really a difference between the two but a result of >> you shifting it up/down due to the tx status via dma queue vs. tx status >> via registers thing. > > Yeah, that's the point. larry's patch modified both the register and dmaqueue > mechanism. I think the register mechanism might be correct as-is (Or is it > even > dead code and it's not used by any legacy device?) >
I modified the patch to add printouts in both paths as shown below: Index: linux-2.6/drivers/net/wireless/b43legacy/xmit.c =================================================================== --- linux-2.6.orig/drivers/net/wireless/b43legacy/xmit.c +++ linux-2.6/drivers/net/wireless/b43legacy/xmit.c @@ -631,7 +631,8 @@ void b43legacy_handle_hwtxstatus(struct status.pm_indicated = !!(tmp & 0x80); status.intermediate = !!(tmp & 0x40); status.for_ampdu = !!(tmp & 0x20); - status.acked = !!(tmp & 0x02); + status.acked = tmp & 0x01; + printk(KERN_INFO "b43legacy: In b43legacy_handle_hwtxstatus, hw->flags = 0x%X\n", hw->flags); b43legacy_handle_txstatus(dev, &status); } Index: linux-2.6/drivers/net/wireless/b43legacy/main.c =================================================================== --- linux-2.6.orig/drivers/net/wireless/b43legacy/main.c +++ linux-2.6/drivers/net/wireless/b43legacy/main.c @@ -744,7 +744,7 @@ static void handle_irq_transmit_status(s while (1) { v0 = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_0); - if (!(v0 & 0x00000001)) + if (!v0) break; v1 = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_1); @@ -752,13 +752,14 @@ static void handle_irq_transmit_status(s stat.seq = (v1 & 0x0000FFFF); stat.phy_stat = ((v1 & 0x00FF0000) >> 16); tmp = (v0 & 0x0000FFFF); + printk(KERN_INFO "b43legacy: In handle_irq_transmit_status, tmp 0x%X\n", tmp); stat.frame_count = ((tmp & 0xF000) >> 12); stat.rts_count = ((tmp & 0x0F00) >> 8); stat.supp_reason = ((tmp & 0x001C) >> 2); stat.pm_indicated = !!(tmp & 0x0080); stat.intermediate = !!(tmp & 0x0040); stat.for_ampdu = !!(tmp & 0x0020); - stat.acked = !!(tmp & 0x0002); + stat.acked = tmp & 0x0001; b43legacy_handle_txstatus(dev, &stat); } What I see are lots of b43legacy: In b43legacy_handle_hwtxstatus, hw->flags = 0x1 and this is the only one that ever triggered. ATM, I'm not sure why handle_irq_transmit_status() is not called. Larry _______________________________________________ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev