summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2015-01-17 17:37:08 +0000
committeradrian <adrian@FreeBSD.org>2015-01-17 17:37:08 +0000
commit292bb4543a92a0623949f02db4e1319c8efbbeaa (patch)
treea4587d0d2495bcd36093e55c68416cf0aed266b1 /sys/contrib/dev
parentf4b991f7e23d06e2abe21155158cf8ff025e4667 (diff)
downloadFreeBSD-src-292bb4543a92a0623949f02db4e1319c8efbbeaa.zip
FreeBSD-src-292bb4543a92a0623949f02db4e1319c8efbbeaa.tar.gz
Correct the descriptor length for AR9462/AR9565 and set the final field
to zero - TX drops are otherwise reported. Tested: * AR9462 (WB222), STA mode Obtained from: Linux ath9k
Diffstat (limited to 'sys/contrib/dev')
-rw-r--r--sys/contrib/dev/ath/ath_hal/ar9300/ar9300_xmit_ds.c7
-rw-r--r--sys/contrib/dev/ath/ath_hal/ar9300/ar9300desc.h7
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_xmit_ds.c b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_xmit_ds.c
index 596f6dc..72ed110 100644
--- a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_xmit_ds.c
+++ b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_xmit_ds.c
@@ -68,9 +68,11 @@ ar9300_fill_tx_desc(
const void *ds0)
{
struct ar9300_txc *ads = AR9300TXC(ds);
+ short desclen;
/* Fill TXC info field */
- ads->ds_info = TXC_INFO(qcu);
+ desclen = (AR_SREV_JUPITER(ah) || AR_SREV_APHRODITE(ah)) ? 0x18 : 0x17;
+ ads->ds_info = TXC_INFO(qcu, desclen);
/* Set the buffer addresses */
ads->ds_data0 = buf_addr[0];
@@ -124,6 +126,9 @@ ar9300_fill_tx_desc(
ads->ds_ctl17 = SM(key_type, AR_encr_type);
}
+ /* Only relevant for Jupiter/Aphrodite */
+ ads->ds_ctl23 = 0;
+
return AH_TRUE;
}
diff --git a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300desc.h b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300desc.h
index 5b314eb..5dbf927 100644
--- a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300desc.h
+++ b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300desc.h
@@ -78,7 +78,8 @@ struct ar9300_txc {
u_int32_t ds_ctl20; /* DMA control 20 */
u_int32_t ds_ctl21; /* DMA control 21 */
u_int32_t ds_ctl22; /* DMA control 22 */
- u_int32_t ds_pad[9]; /* pad to cache line (128 bytes/32 dwords) */
+ u_int32_t ds_ctl23; /* DMA control 23 */
+ u_int32_t ds_pad[8]; /* pad to cache line (128 bytes/32 dwords) */
};
@@ -429,11 +430,11 @@ struct ar9300_txc {
#define RXSTATUS_NUMWORDS(ah) 11
-#define TXC_INFO(_qcu) (ATHEROS_VENDOR_ID << AR_desc_id_S) \
+#define TXC_INFO(_qcu, _desclen) (ATHEROS_VENDOR_ID << AR_desc_id_S) \
| (1 << AR_tx_rx_desc_S) \
| (1 << AR_ctrl_stat_S) \
| (_qcu << AR_tx_qcu_num_S) \
- | (0x17)
+ | (_desclen)
#define VALID_KEY_TYPES \
((1 << HAL_KEY_TYPE_CLEAR) | (1 << HAL_KEY_TYPE_WEP)|\
OpenPOWER on IntegriCloud