Gmane
From: Lrj <renjian.lv <at> gmail.com>
Subject: Re: Fw: Re: How to disable sending of MAC level ACKs?
Newsgroups: gmane.linux.drivers.madwifi.devel
Date: 2008-07-23 14:49:17 GMT (24 weeks, 2 days, 13 hours and 37 minutes ago)

Hi David ,
      The problem is that you do the OS_REG_WRITE too early, exactly as Steve said.

This does the opposite - it causes *sent* frames not to wait for an ACK. You
may also need to set the tx count (try0) to "1".
      While it's not necessary to set the try0, because that value will not work with the ACK disabled.

On Wed, Jul 23, 2008 at 10:49 PM, <lrj <at> sse.buaa.edu.cn> wrote:
Hi,

I apologize about bringing up an old thread again but I am still having problems disabling Layer 2 acknowledgments in ad hoc mode. Using Lrj's instructions:

In if_ath.c
First, in the ath_attach(), add the codes "OS_REG_WRITE(ah, 0x8048, 0x00000002);", which writes register to disable the hardware auto ACK;
And in the ath_reset(), do the same thing.

Then, in the ath_tx_start(), before the call of ath_hal_setuptxdesc(), add the codes "flags |= HAL_TXDESC_NOACK;", which sets the flags to stop the hw ACK waiting.
    Done.

Note: I have used a * before the sections of code to make it easier to read this email. The first reg write went here (starting line 452):

*       if (ah->ah_abi != HAL_ABI_VERSION) {
*               printk(KERN_ERR "%s: HAL ABI mismatch; "
*                       "driver expects 0x%x, HAL reports 0x%x\n",
*                       dev->name, HAL_ABI_VERSION, ah->ah_abi);
*               error = ENXIO;          /* XXX */
*               goto bad;
*       }
*       sc->sc_ah = ah;
*       OS_REG_WRITE(ah, 0x8048, 0x00000002);
*
*       /*
*        * Check if the MAC has multi-rate retry support.

The second reg write (approx line 2180):

*static int
*ath_reset(struct net_device *dev)
*{
*       struct ath_softc *sc = dev->priv;
*       struct ieee80211com *ic = &sc->sc_ic;
*       struct ath_hal *ah = sc->sc_ah;
*       struct ieee80211_channel *c;
*       HAL_STATUS status;
*       OS_REG_WRITE(ah, 0x8048, 0x00000002);
*
*       /*
*        * Convert to a HAL channel description with the flags

The final flags to prevent nodes waiting for an ack (approx line 7135):

*flags |= HAL_TXDESC_NOACK;
*
*       /*
*        * Formulate first tx descriptor with tx controls.
*        */
*       /* XXX check return value? */
*       ath_hal_setuptxdesc(ah, ds
*                           , pktlen            /* packet length */
*                           , hdrlen            /* header length */


If anyone who has been successful in disabling L2 ACKs could take a look at where I may have gone wrong I would be very grateful.

Thanks
Dave




--------------------------------------
Welcome to Beijing~ ^_^
--------------------------------------
Best wishes,
Lrj, NCI, China
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Madwifi-devel mailing list
Madwifi-devel <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/madwifi-devel