diff options
author | Michal Kazior <michal.kazior@tieto.com> | 2015-01-24 05:14:48 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2015-01-27 08:59:34 -0500 |
commit | 3ec79e3a75ed062cb0c13ceef0690929b777cf59 (patch) | |
tree | 5254b7813c58e3351ca705b8103e3859789ecee5 | |
parent | 1a7fecb766c83dace747f42b25bbb544b00a0163 (diff) |
ath10k: add support for qca6174 Rx descriptors
The QCA6174 chip has an extra 4 bytes in
rx_ppdu_end structure which is used in htt_rx_desc
and HTT Rx ring offset setup. This is necessary
for correct Rx for QCA6174 (otherwise Rx
descriptors are overwritten and corrupted).
This means QCA988X will have an extra 4 byte
padding in Rx descriptor layout which is harmless.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r-- | drivers/net/wireless/ath/ath10k/htt_rx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/rx_desc.h | 25 |
2 files changed, 25 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index 661785fb9906..c1da44f65a4d 100644 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c | |||
@@ -813,7 +813,7 @@ static void ath10k_htt_rx_h_mactime(struct ath10k *ar, | |||
813 | * | 813 | * |
814 | * FIXME: Can we get/compute 64bit TSF? | 814 | * FIXME: Can we get/compute 64bit TSF? |
815 | */ | 815 | */ |
816 | status->mactime = __le32_to_cpu(rxd->ppdu_end.tsf_timestamp); | 816 | status->mactime = __le32_to_cpu(rxd->ppdu_end.common.tsf_timestamp); |
817 | status->flag |= RX_FLAG_MACTIME_END; | 817 | status->flag |= RX_FLAG_MACTIME_END; |
818 | } | 818 | } |
819 | 819 | ||
diff --git a/drivers/net/wireless/ath/ath10k/rx_desc.h b/drivers/net/wireless/ath/ath10k/rx_desc.h index e1ffdd57a18c..e9cc7787bf5f 100644 --- a/drivers/net/wireless/ath/ath10k/rx_desc.h +++ b/drivers/net/wireless/ath/ath10k/rx_desc.h | |||
@@ -850,7 +850,7 @@ struct rx_ppdu_start { | |||
850 | 850 | ||
851 | #define RX_PPDU_END_INFO1_PPDU_DONE (1 << 15) | 851 | #define RX_PPDU_END_INFO1_PPDU_DONE (1 << 15) |
852 | 852 | ||
853 | struct rx_ppdu_end { | 853 | struct rx_ppdu_end_common { |
854 | __le32 evm_p0; | 854 | __le32 evm_p0; |
855 | __le32 evm_p1; | 855 | __le32 evm_p1; |
856 | __le32 evm_p2; | 856 | __le32 evm_p2; |
@@ -873,10 +873,33 @@ struct rx_ppdu_end { | |||
873 | u8 phy_err_code; | 873 | u8 phy_err_code; |
874 | __le16 flags; /* %RX_PPDU_END_FLAGS_ */ | 874 | __le16 flags; /* %RX_PPDU_END_FLAGS_ */ |
875 | __le32 info0; /* %RX_PPDU_END_INFO0_ */ | 875 | __le32 info0; /* %RX_PPDU_END_INFO0_ */ |
876 | } __packed; | ||
877 | |||
878 | struct rx_ppdu_end_qca988x { | ||
876 | __le16 bb_length; | 879 | __le16 bb_length; |
877 | __le16 info1; /* %RX_PPDU_END_INFO1_ */ | 880 | __le16 info1; /* %RX_PPDU_END_INFO1_ */ |
878 | } __packed; | 881 | } __packed; |
879 | 882 | ||
883 | #define RX_PPDU_END_RTT_CORRELATION_VALUE_MASK 0x00ffffff | ||
884 | #define RX_PPDU_END_RTT_CORRELATION_VALUE_LSB 0 | ||
885 | #define RX_PPDU_END_RTT_UNUSED_MASK 0x7f000000 | ||
886 | #define RX_PPDU_END_RTT_UNUSED_LSB 24 | ||
887 | #define RX_PPDU_END_RTT_NORMAL_MODE BIT(31) | ||
888 | |||
889 | struct rx_ppdu_end_qca6174 { | ||
890 | __le32 rtt; /* %RX_PPDU_END_RTT_ */ | ||
891 | __le16 bb_length; | ||
892 | __le16 info1; /* %RX_PPDU_END_INFO1_ */ | ||
893 | } __packed; | ||
894 | |||
895 | struct rx_ppdu_end { | ||
896 | struct rx_ppdu_end_common common; | ||
897 | union { | ||
898 | struct rx_ppdu_end_qca988x qca988x; | ||
899 | struct rx_ppdu_end_qca6174 qca6174; | ||
900 | } __packed; | ||
901 | } __packed; | ||
902 | |||
880 | /* | 903 | /* |
881 | * evm_p0 | 904 | * evm_p0 |
882 | * EVM for pilot 0. Contain EVM for streams: 0, 1, 2 and 3. | 905 | * EVM for pilot 0. Contain EVM for streams: 0, 1, 2 and 3. |