From: Denis V. <vd...@il...> - 2006-01-22 11:45:47
|
On Saturday 21 January 2006 22:00, Bas Vermeulen wrote: > The attached patch makes firmware 2.3.1.31 work for my card. > acx_get_wlan_hdr() tried to take care of the PHY header that it sends > along, but seeing how it dropped out before, that never actually > happened. The attached patch makes it work for me, but will probably > break all kinds of stuff for the older firmwares. This means that 2.x.x.x firmware prepends 8-byte "phy header" to each packet unconditionally. 1.x.x.x firmware can be asked to do it too, but since we do not understand what is in that "phy header" we were not asking for it. grep for RX_CFG1_INCLUDE_PHY_HDR to see. > At the moment I've stopped seeing the 0x20 TX errors, and although I see > *lots* of unknown EID's, it's working like a charm. > The firmware does seem to do some stuff we're not expecting, I'm seeing > many 'bogus ESSID' messages. I'm thinking of just cutting that message, > as it doesn't actually add anything new to the debugging. I suggest adding an "adev->phy_header_len" field and setting it to 8 if fw Rev is >= 2.0.0.0, then acx_get_wlan_hdr will be just: static inline wlan_hdr_t* acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf) { return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len); } Setting it must be doable with: /*| RX_CFG2_RCV_ACK_FRAMES */ | RX_CFG2_RCV_OTHER ); break; } adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR; + + if (adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR || firmware_is_2xxx) + adev->phy_header_len = IS_ACX111(adev) ? 8 : 4; + else + adev->phy_header_len = 0; Ought to work even with fw 1.x.x.x and/or acx100 if someone will recompile driver with WANT_PHY_HDR #defined to 1 and with acx_s_initialize_rx_config modified to actually set RX_CFG1_INCLUDE_PHY_HDR (it doesn't do it now). Care to redo and retest the patch? -- vda |