Date: Tue, 16 Aug 2011 13:34:34 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r224909 - user/adrian/if_ath_tx/sys/dev/ath Message-ID: <201108161334.p7GDYYWs059684@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Tue Aug 16 13:34:34 2011 New Revision: 224909 URL: http://svn.freebsd.org/changeset/base/224909 Log: Break out the descriptor setup code and stuff it into ath_tx_setds(). The reference code also sets up the descriptor chain in this function. I'm not doing this just yet. Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Tue Aug 16 10:52:29 2011 (r224908) +++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Tue Aug 16 13:34:34 2011 (r224909) @@ -603,6 +603,34 @@ ath_tx_calc_ctsduration(struct ath_hal * return ctsduration; } + +/* + * Setup the descriptor chain for a normal or fast-frame + * frame. + */ +static void +ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf) +{ + struct ath_desc *ds = bf->bf_desc; + struct ath_hal *ah = sc->sc_ah; + + ath_hal_setuptxdesc(ah, ds + , bf->bf_state.bfs_pktlen /* packet length */ + , bf->bf_state.bfs_hdrlen /* header length */ + , bf->bf_state.bfs_atype /* Atheros packet type */ + , bf->bf_state.bfs_txpower /* txpower */ + , bf->bf_state.bfs_txrate0 + , bf->bf_state.bfs_try0 /* series 0 rate/tries */ + , bf->bf_state.bfs_keyix /* key cache index */ + , bf->bf_state.bfs_txantenna /* antenna mode */ + , bf->bf_state.bfs_flags /* flags */ + , bf->bf_state.bfs_ctsrate /* rts/cts rate */ + , bf->bf_state.bfs_ctsduration /* rts/cts duration */ + ); + + /* XXX TODO: Setup descriptor chain */ +} + static int ath_tx_normal_setup(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf, struct mbuf *m0) @@ -917,7 +945,6 @@ ath_tx_normal_setup(struct ath_softc *sc /* This point forward is actual TX bits */ - /* * At this point we are committed to sending the frame * and we don't need to look at m_nextpkt; clear it in @@ -945,31 +972,33 @@ ath_tx_normal_setup(struct ath_softc *sc ieee80211_radiotap_tx(vap, m0); } - if (ath_tx_is_11n(sc)) { rate[0] = rix; try[0] = try0; } + /* Store the decided rate index values away */ + bf->bf_state.bfs_pktlen = pktlen; + bf->bf_state.bfs_hdrlen = hdrlen; + bf->bf_state.bfs_atype = atype; + bf->bf_state.bfs_txpower = ni->ni_txpower; + bf->bf_state.bfs_txrate0 = txrate; + bf->bf_state.bfs_try0 = try0; + bf->bf_state.bfs_keyix = keyix; + bf->bf_state.bfs_txantenna = sc->sc_txantenna; + bf->bf_state.bfs_flags = flags; + bf->bf_txflags = flags; + + /* XXX this should be done in ath_tx_setrate() */ + bf->bf_state.bfs_ctsrate = ctsrate; + bf->bf_state.bfs_ctsduration = ctsduration; + bf->bf_state.bfs_ismrr = ismrr; + /* * Formulate first tx descriptor with tx controls. */ - /* XXX check return value? */ - /* XXX is this ok to call for 11n descriptors? */ - /* XXX or should it go through the first, next, last 11n calls? */ - ath_hal_setuptxdesc(ah, ds - , pktlen /* packet length */ - , hdrlen /* header length */ - , atype /* Atheros packet type */ - , ni->ni_txpower /* txpower */ - , txrate, try0 /* series 0 rate/tries */ - , keyix /* key cache index */ - , sc->sc_txantenna /* antenna mode */ - , flags /* flags */ - , ctsrate /* rts/cts rate */ - , ctsduration /* rts/cts duration */ - ); - bf->bf_txflags = flags; + ath_tx_setds(sc, bf); + /* * Setup the multi-rate retry state only when we're * going to use it. This assumes ath_hal_setuptxdesc @@ -986,6 +1015,7 @@ ath_tx_normal_setup(struct ath_softc *sc ATH_NODE_UNLOCK(an); } + /* Setup 11n rate scenario for 11n NICs only */ if (ath_tx_is_11n(sc)) { ath_buf_set_rate(sc, ni, bf, pktlen, flags, ctsrate, (atype == HAL_PKT_TYPE_PSPOLL), rate, try); @@ -1277,20 +1307,26 @@ ath_tx_raw_start(struct ath_softc *sc, s */ ds = bf->bf_desc; /* XXX check return value? */ - ath_hal_setuptxdesc(ah, ds - , pktlen /* packet length */ - , hdrlen /* header length */ - , atype /* Atheros packet type */ - , params->ibp_power /* txpower */ - , txrate, try0 /* series 0 rate/tries */ - , keyix /* key cache index */ - , txantenna /* antenna mode */ - , flags /* flags */ - , ctsrate /* rts/cts rate */ - , ctsduration /* rts/cts duration */ - ); + + /* Store the decided rate index values away */ + bf->bf_state.bfs_pktlen = pktlen; + bf->bf_state.bfs_hdrlen = hdrlen; + bf->bf_state.bfs_atype = atype; + bf->bf_state.bfs_txpower = params->ibp_power; + bf->bf_state.bfs_txrate0 = txrate; + bf->bf_state.bfs_try0 = try0; + bf->bf_state.bfs_keyix = keyix; + bf->bf_state.bfs_txantenna = txantenna; + bf->bf_state.bfs_flags = flags; bf->bf_txflags = flags; + /* XXX this should be done in ath_tx_setrate() */ + bf->bf_state.bfs_ctsrate = ctsrate; + bf->bf_state.bfs_ctsduration = ctsduration; + bf->bf_state.bfs_ismrr = ismrr; + + ath_tx_setds(sc, bf); + if (ath_tx_is_11n(sc)) { rate[0] = ath_tx_findrix(sc, params->ibp_rate0); try[0] = params->ibp_try0; Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Tue Aug 16 10:52:29 2011 (r224908) +++ user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Tue Aug 16 13:34:34 2011 (r224909) @@ -209,6 +209,7 @@ struct ath_buf { int bfs_dobaw:1; /* actually check against BAW? */ int bfs_shpream:1; /* use short preamble */ int bfs_istxfrag:1; /* is fragmented */ + int bfs_ismrr:1; /* do multi-rate TX retry */ int bfs_nfl; /* next fragment length */ /* @@ -220,10 +221,15 @@ struct ath_buf { int bfs_hdrlen; /* length of this packet header */ uint16_t bfs_al; /* length of aggregate */ int bfs_flags; /* HAL descriptor flags */ + int bfs_txrate0; /* first TX rate */ + int bfs_try0; /* first try count */ int bfs_keyix; /* crypto key index */ - int bfs_keytype; /* crypto key type */ + int bfs_txpower; /* tx power */ + int bfs_txantenna; /* TX antenna config */ enum ieee80211_protmode bfs_protmode; HAL_11N_RATE_SERIES bfs_rc11n[4]; /* 11n TX series */ + int bfs_ctsrate; /* CTS rate */ + int bfs_ctsduration; /* CTS duration (pre-11n NICs) */ struct ath_rc_series bfs_rc[4]; /* non-11n TX series */ } bf_state; };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108161334.p7GDYYWs059684>