summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2013-02-09 02:42:01 +0000
committeradrian <adrian@FreeBSD.org>2013-02-09 02:42:01 +0000
commit611862e52c19177f17d8ffa3f1f86c6cf9c501cf (patch)
tree9f75fc2288121158cd60f76e6a6b1a057f625db9
parentca3fe89a4ed7b770242e535be6d5c557a8c1a5fd (diff)
downloadFreeBSD-src-611862e52c19177f17d8ffa3f1f86c6cf9c501cf.zip
FreeBSD-src-611862e52c19177f17d8ffa3f1f86c6cf9c501cf.tar.gz
The encryption type field needs to be preserved for each descriptor
making up a frame, in both a sub-frame and for all frames in an aggregate. Tested: * AR5416, STA mode
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
index 0a226ff..36f968f 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
@@ -306,10 +306,14 @@ ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
& AR_TxIntrReq;
ads->ds_ctl2 = __bswap32(AR5416DESC_CONST(ds0)->ds_ctl2);
ads->ds_ctl3 = __bswap32(AR5416DESC_CONST(ds0)->ds_ctl3);
+ /* ctl6 - we only need encrtype; the rest are blank */
+ ads->ds_ctl6 = __bswap32(AR5416DESC_CONST(ds0)->ds_ctl6 & AR_EncrType);
#else
ads->ds_ctl0 = AR5416DESC_CONST(ds0)->ds_ctl0 & AR_TxIntrReq;
ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
+ /* ctl6 - we only need encrtype; the rest are blank */
+ ads->ds_ctl6 = AR5416DESC_CONST(ds0)->ds_ctl6 & AR_EncrType;
#endif
} else { /* !firstSeg && !lastSeg */
/*
@@ -318,8 +322,10 @@ ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
#ifdef AH_NEED_DESC_SWAP
ads->ds_ctl0 = __bswap32(AR5416DESC_CONST(ds0)->ds_ctl0)
& AR_TxIntrReq;
+ ads->ds_ctl6 = __bswap32(AR5416DESC_CONST(ds0)->ds_ctl6 & AR_EncrType);
#else
ads->ds_ctl0 = AR5416DESC_CONST(ds0)->ds_ctl0 & AR_TxIntrReq;
+ ads->ds_ctl6 = AR5416DESC_CONST(ds0)->ds_ctl6 & AR_EncrType;
#endif
ads->ds_ctl1 = segLen | AR_TxMore;
ads->ds_ctl2 = 0;
OpenPOWER on IntegriCloud