svn commit: r218160 - in head/sys/dev/ath: . ath_rate/amrr
ath_rate/onoe ath_rate/sample
Adrian Chadd
adrian at FreeBSD.org
Tue Feb 1 08:10:19 UTC 2011
Author: adrian
Date: Tue Feb 1 08:10:18 2011
New Revision: 218160
URL: http://svn.freebsd.org/changeset/base/218160
Log:
Add a new method to the rate control modules which extract out the
three other rates and try counts.
The 11n rate scenario path wants to take a list of rate and tries,
rather than calling setupxtxdesc().
Modified:
head/sys/dev/ath/ath_rate/amrr/amrr.c
head/sys/dev/ath/ath_rate/onoe/onoe.c
head/sys/dev/ath/ath_rate/sample/sample.c
head/sys/dev/ath/if_athrate.h
Modified: head/sys/dev/ath/ath_rate/amrr/amrr.c
==============================================================================
--- head/sys/dev/ath/ath_rate/amrr/amrr.c Tue Feb 1 08:03:01 2011 (r218159)
+++ head/sys/dev/ath/ath_rate/amrr/amrr.c Tue Feb 1 08:10:18 2011 (r218160)
@@ -114,6 +114,30 @@ ath_rate_findrate(struct ath_softc *sc,
*txrate = amn->amn_tx_rate0;
}
+/*
+ * Get the TX rates.
+ *
+ * The short preamble bits aren't set here; the caller should augment
+ * the returned rate with the relevant preamble rate flag.
+ */
+void
+ath_rate_getxtxrates(struct ath_softc *sc, struct ath_node *an,
+ uint8_t rix0, uint8_t *rix, uint8_t *try)
+{
+ struct amrr_node *amn = ATH_NODE_AMRR(an);
+
+/* rix[0] = amn->amn_tx_rate0; */
+ rix[1] = amn->amn_tx_rate1;
+ rix[2] = amn->amn_tx_rate2;
+ rix[3] = amn->amn_tx_rate3;
+
+ try[0] = amn->amn_tx_try0;
+ try[1] = amn->amn_tx_try1;
+ try[2] = amn->amn_tx_try2;
+ try[3] = amn->amn_tx_try3;
+}
+
+
void
ath_rate_setupxtxdesc(struct ath_softc *sc, struct ath_node *an,
struct ath_desc *ds, int shortPreamble, u_int8_t rix)
Modified: head/sys/dev/ath/ath_rate/onoe/onoe.c
==============================================================================
--- head/sys/dev/ath/ath_rate/onoe/onoe.c Tue Feb 1 08:03:01 2011 (r218159)
+++ head/sys/dev/ath/ath_rate/onoe/onoe.c Tue Feb 1 08:10:18 2011 (r218160)
@@ -122,6 +122,29 @@ ath_rate_findrate(struct ath_softc *sc,
*txrate = on->on_tx_rate0;
}
+/*
+ * Get the TX rates.
+ *
+ * The short preamble bits aren't set here; the caller should augment
+ * the returned rate with the relevant preamble rate flag.
+ */
+void
+ath_rate_getxtxrates(struct ath_softc *sc, struct ath_node *an,
+ uint8_t rix0, uint8_t *rix, uint8_t *try)
+{
+ struct onoe_node *on = ATH_NODE_ONOE(an);
+
+/* rix[0] = on->on_tx_rate0; */
+ rix[1] = on->on_tx_rate1;
+ rix[2] = on->on_tx_rate2;
+ rix[3] = on->on_tx_rate3;
+
+ try[0] = on->on_tx_try0;
+ try[1] = 2;
+ try[2] = 2;
+ try[3] = 2;
+}
+
void
ath_rate_setupxtxdesc(struct ath_softc *sc, struct ath_node *an,
struct ath_desc *ds, int shortPreamble, u_int8_t rix)
Modified: head/sys/dev/ath/ath_rate/sample/sample.c
==============================================================================
--- head/sys/dev/ath/ath_rate/sample/sample.c Tue Feb 1 08:03:01 2011 (r218159)
+++ head/sys/dev/ath/ath_rate/sample/sample.c Tue Feb 1 08:10:18 2011 (r218160)
@@ -363,6 +363,30 @@ done:
#undef RATE
}
+/*
+ * Get the TX rates. Don't fiddle with short preamble flags for them;
+ * the caller can do that.
+ */
+void
+ath_rate_getxtxrates(struct ath_softc *sc, struct ath_node *an,
+ uint8_t rix0, uint8_t *rix, uint8_t *try)
+{
+ struct sample_node *sn = ATH_NODE_SAMPLE(an);
+ const struct txschedule *sched = &sn->sched[rix0];
+
+ KASSERT(rix0 == sched->r0, ("rix0 (%x) != sched->r0 (%x)!\n", rix0, sched->r0));
+
+/* rix[0] = sched->r0; */
+ rix[1] = sched->r1;
+ rix[2] = sched->r2;
+ rix[3] = sched->r3;
+
+ try[0] = sched->t0;
+ try[1] = sched->t1;
+ try[2] = sched->t2;
+ try[3] = sched->t3;
+}
+
void
ath_rate_setupxtxdesc(struct ath_softc *sc, struct ath_node *an,
struct ath_desc *ds, int shortPreamble, u_int8_t rix)
Modified: head/sys/dev/ath/if_athrate.h
==============================================================================
--- head/sys/dev/ath/if_athrate.h Tue Feb 1 08:03:01 2011 (r218159)
+++ head/sys/dev/ath/if_athrate.h Tue Feb 1 08:10:18 2011 (r218160)
@@ -102,6 +102,12 @@ void ath_rate_newassoc(struct ath_softc
* Transmit handling.
*/
/*
+ * Return the four TX rate index and try counts for the current data packet.
+ */
+void ath_rate_getxtxrates(struct ath_softc *sc, struct ath_node *an,
+ uint8_t rix0, uint8_t *rix, uint8_t *try);
+
+/*
* Return the transmit info for a data packet. If multi-rate state
* is to be setup then try0 should contain a value other than ATH_TXMATRY
* and ath_rate_setupxtxdesc will be called after deciding if the frame
More information about the svn-src-head
mailing list