Changeset 1430

Show
Ignore:
Timestamp:
02/03/06 07:41:42 (6 years ago)
Author:
mrenzmann
Message:

Multicast/broadcast frames use a simple round-robin antenna-port
selection process. In networks which only have one of the antenna
ports connected, this means half the multicast/broadcast packets are
dropped, despite having set the "txantenna" variable properly. When
txantenna is set to use a single antenna, multicast/broadcast frames
should use that antenna too.

While I was at it, I gave /proc/sys/dev/wifi0/txantenna some input
checking.

Signed-off-by: Mark Glines <mark@glines.org>

Extended original patch from #326:

  • validation of rx antenna value (similar to tx antenna)
  • validation of diversity value
  • mark missing validation

Signed-off-by: Michael Renzmann <mrenzmann@otaku42.de>

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ath/if_ath.c

    r1426 r1430  
    67756775#endif 
    67766776 
    6777         if (ismcast) { 
     6777        /* 
     6778         * sc_txantenna == 0 means transmit diversity mode. 
     6779         * sc_txantenna == 1 or sc_txantenna == 2 means the user has selected 
     6780         * the first or second antenna port. 
     6781         * If the user has set the txantenna, use it for multicast frames too. 
     6782         */ 
     6783        if (ismcast && !sc->sc_txantenna) { 
    67786784                antenna = sc->sc_mcastantenna + 1; 
    67796785                sc->sc_mcastantenna = (sc->sc_mcastantenna + 1) & 0x1; 
     
    89738979                                break; 
    89748980                        case ATH_LEDPIN: 
     8981                                /* XXX validate? */ 
    89758982                                sc->sc_ledpin = val; 
    89768983                                break; 
     
    89798986                                break; 
    89808987                        case ATH_TXANTENNA: 
    8981                                 /* XXX validate? */ 
    8982                                 sc->sc_txantenna = val; 
     8988                                /* 
     8989                                 * antenna can be: 
     8990                                 * 0 = transmit diversity 
     8991                                 * 1 = antenna port 1 
     8992                                 * 2 = antenna port 2 
     8993                                 */ 
     8994                                if (val < 0 || val > 2) 
     8995                                        return -EINVAL; 
     8996                                else 
     8997                                        sc->sc_txantenna = val; 
    89838998                                break; 
    89848999                        case ATH_RXANTENNA: 
    8985                                 /* XXX validate? */ 
    8986                                 if (val <= 2) 
     9000                                /* 
     9001                                 * antenna can be: 
     9002                                 * 0 = receive diversity 
     9003                                 * 1 = antenna port 1 
     9004                                 * 2 = antenna port 2 
     9005                                 */ 
     9006                                if (val < 0 || val > 2) 
     9007                                        return -EINVAL; 
     9008                                else 
    89879009                                        ath_setdefantenna(sc, val); 
    8988                                 else 
    8989                                         ret = -EINVAL; 
    89909010                                break; 
    89919011                        case ATH_DIVERSITY: 
    8992                                 /* XXX validate? */ 
     9012                                /* 
     9013                                 * 0 = disallow use of diversity 
     9014                                 * 1 = allow use of diversity 
     9015                                 */ 
     9016                                if (val < 0 || val > 1) 
     9017                                        return -EINVAL; 
    89939018                                /* Don't enable diversity if XR is enabled */ 
    89949019                                if (((!sc->sc_hasdiversity) || (sc->sc_xrtxq != NULL)) && val) 
     
    89989023                                break; 
    89999024                        case ATH_TXINTRPERIOD: 
     9025                                /* XXX: validate? */ 
    90009026                                sc->sc_txintrperiod = val; 
    90019027                                break; 
    90029028                        case ATH_FFTXQMIN: 
     9029                                /* XXX valiate? */ 
    90039030                                sc->sc_fftxqmin = val; 
    90049031                                break;