svn commit: r224902 - user/adrian/if_ath_tx/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Tue Aug 16 06:26:52 UTC 2011
Author: adrian
Date: Tue Aug 16 06:26:51 2011
New Revision: 224902
URL: http://svn.freebsd.org/changeset/base/224902
Log:
Begin to flesh out the 11n aggregation fields needed in ath_buf.
The reference driver splits out the descriptor setup and rate series
setup into functions separate from the initial TX path from net80211.
The descriptor decisions are made during the ath_tx_start() / ath_tx_raw_xmit()
calls, but the rate control selection is done at packet scheduling time.
(I'll have to handle raw frames differently, preserving the rate control
being requested by the caller.)
I may not end up using all of these fields, but the basic premise still
holds - ie, in order to do aggregation, I need to delay the descriptor
setup until the aggregates are formed, and then only set the rate
control flags on the first packet of the series. (Then I have to set
the 11n aggregation fields in the first descriptor of each subframe.)
Since I'm going for a unified TX path between legacy and non-legacy
NICs, I'll have to squirrel away 11n and non-11n copies of the
rate control decisions; and then use the correct set when setting
up the multi-rate retry fields (either ath_hal_setupxtxdesc(),
or ath_hal_set11nratescenario()).
Modified:
user/adrian/if_ath_tx/sys/dev/ath/if_athrate.h
user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athrate.h
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_athrate.h Tue Aug 16 04:35:42 2011 (r224901)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_athrate.h Tue Aug 16 06:26:51 2011 (r224902)
@@ -77,6 +77,12 @@ struct ath_ratectrl {
struct ath_ratectrl *ath_rate_attach(struct ath_softc *);
void ath_rate_detach(struct ath_ratectrl *);
+struct ath_rc_series {
+ uint8_t rix;
+ uint8_t tries;
+ uint8_t flags;
+ uint32_t max4msframelen;
+};
/*
* State storage handling.
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 04:35:42 2011 (r224901)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Tue Aug 16 06:26:51 2011 (r224902)
@@ -194,14 +194,11 @@ struct ath_buf {
/* This state is kept to support software retries and aggregation */
struct {
- int bfs_pktlen; /* length of this packet */
- int bfs_hdrlen; /* length of this packet header */
int bfs_seqno; /* sequence number of this packet */
int bfs_retries; /* retry count */
uint16_t bfs_tid; /* packet TID (or TID_MAX for no QoS) */
uint16_t bfs_pri; /* packet AC priority */
struct ath_txq *bfs_txq; /* eventual dest hardware TXQ */
- uint16_t bfs_al; /* length of aggregate */
uint16_t bfs_pktdur; /* packet duration (at current rate?) */
uint16_t bfs_nframes; /* number of frames in aggregate */
uint16_t bfs_ndelim; /* number of delims for padding */
@@ -210,6 +207,24 @@ struct ath_buf {
int bfs_aggrburst:1; /* part of aggregate burst? */
int bfs_isretried:1; /* retried frame? */
int bfs_dobaw:1; /* actually check against BAW? */
+ int bfs_shpream:1; /* use short preamble */
+ int bfs_istxfrag:1; /* is fragmented */
+ int bfs_nfl; /* next fragment length */
+
+ /*
+ * These fields are passed into the
+ * descriptor setup functions.
+ */
+ HAL_PKT_TYPE bfs_atype; /* packet type */
+ int bfs_pktlen; /* length of this packet */
+ int bfs_hdrlen; /* length of this packet header */
+ uint16_t bfs_al; /* length of aggregate */
+ int bfs_flags; /* HAL descriptor flags */
+ int bfs_keyix; /* crypto key index */
+ int bfs_keytype; /* crypto key type */
+ enum ieee80211_protmode bfs_protmode;
+ HAL_11N_RATE_SERIES bfs_rc11n[4]; /* 11n TX series */
+ struct ath_rc_series bfs_rc[4]; /* non-11n TX series */
} bf_state;
};
typedef STAILQ_HEAD(, ath_buf) ath_bufhead;
More information about the svn-src-user
mailing list