Commit e62ee5c3 authored by Govind Singh's avatar Govind Singh Committed by Kalle Valo

ath10k: Add support for htt_data_tx_desc_64 descriptor

WCN3990 target uses 64 bit frags_paddr in htt tx descriptor,
which holds the physical address of SKB fragments in tx data path.

In order to support 64 bit bit frags_paddr in htt tx descriptor, define
htt_data_tx_desc_64 descriptor and ath10k_htt_tx_64 method for handling
tx data path with new descriptor fields.
Signed-off-by: default avatarGovind Singh <govinds@qti.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 71ad7096
...@@ -187,6 +187,22 @@ struct htt_data_tx_desc { ...@@ -187,6 +187,22 @@ struct htt_data_tx_desc {
u8 prefetch[0]; /* start of frame, for FW classification engine */ u8 prefetch[0]; /* start of frame, for FW classification engine */
} __packed; } __packed;
struct htt_data_tx_desc_64 {
u8 flags0; /* %HTT_DATA_TX_DESC_FLAGS0_ */
__le16 flags1; /* %HTT_DATA_TX_DESC_FLAGS1_ */
__le16 len;
__le16 id;
__le64 frags_paddr;
union {
__le32 peerid;
struct {
__le16 peerid;
__le16 freq;
} __packed offchan_tx;
} __packed;
u8 prefetch[0]; /* start of frame, for FW classification engine */
} __packed;
enum htt_rx_ring_flags { enum htt_rx_ring_flags {
HTT_RX_RING_FLAGS_MAC80211_HDR = 1 << 0, HTT_RX_RING_FLAGS_MAC80211_HDR = 1 << 0,
HTT_RX_RING_FLAGS_MSDU_PAYLOAD = 1 << 1, HTT_RX_RING_FLAGS_MSDU_PAYLOAD = 1 << 1,
...@@ -1648,13 +1664,20 @@ struct htt_peer_unmap_event { ...@@ -1648,13 +1664,20 @@ struct htt_peer_unmap_event {
u16 peer_id; u16 peer_id;
}; };
struct ath10k_htt_txbuf { struct ath10k_htt_txbuf_32 {
struct htt_data_tx_desc_frag frags[2]; struct htt_data_tx_desc_frag frags[2];
struct ath10k_htc_hdr htc_hdr; struct ath10k_htc_hdr htc_hdr;
struct htt_cmd_hdr cmd_hdr; struct htt_cmd_hdr cmd_hdr;
struct htt_data_tx_desc cmd_tx; struct htt_data_tx_desc cmd_tx;
} __packed; } __packed;
struct ath10k_htt_txbuf_64 {
struct htt_data_tx_desc_frag frags[2];
struct ath10k_htc_hdr htc_hdr;
struct htt_cmd_hdr cmd_hdr;
struct htt_data_tx_desc_64 cmd_tx;
} __packed;
struct ath10k_htt { struct ath10k_htt {
struct ath10k *ar; struct ath10k *ar;
enum ath10k_htc_ep_id eid; enum ath10k_htc_ep_id eid;
...@@ -1785,7 +1808,11 @@ struct ath10k_htt { ...@@ -1785,7 +1808,11 @@ struct ath10k_htt {
struct { struct {
dma_addr_t paddr; dma_addr_t paddr;
struct ath10k_htt_txbuf *vaddr; union {
struct ath10k_htt_txbuf_32 *vaddr_txbuff_32;
struct ath10k_htt_txbuf_64 *vaddr_txbuff_64;
};
size_t size;
} txbuf; } txbuf;
struct { struct {
...@@ -1808,6 +1835,10 @@ struct ath10k_htt_tx_ops { ...@@ -1808,6 +1835,10 @@ struct ath10k_htt_tx_ops {
int (*htt_send_frag_desc_bank_cfg)(struct ath10k_htt *htt); int (*htt_send_frag_desc_bank_cfg)(struct ath10k_htt *htt);
int (*htt_alloc_frag_desc)(struct ath10k_htt *htt); int (*htt_alloc_frag_desc)(struct ath10k_htt *htt);
void (*htt_free_frag_desc)(struct ath10k_htt *htt); void (*htt_free_frag_desc)(struct ath10k_htt *htt);
int (*htt_tx)(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
struct sk_buff *msdu);
int (*htt_alloc_txbuff)(struct ath10k_htt *htt);
void (*htt_free_txbuff)(struct ath10k_htt *htt);
}; };
#define RX_HTT_HDR_STATUS_LEN 64 #define RX_HTT_HDR_STATUS_LEN 64
...@@ -1912,9 +1943,6 @@ int ath10k_htt_tx_mgmt_inc_pending(struct ath10k_htt *htt, bool is_mgmt, ...@@ -1912,9 +1943,6 @@ int ath10k_htt_tx_mgmt_inc_pending(struct ath10k_htt *htt, bool is_mgmt,
int ath10k_htt_tx_alloc_msdu_id(struct ath10k_htt *htt, struct sk_buff *skb); int ath10k_htt_tx_alloc_msdu_id(struct ath10k_htt *htt, struct sk_buff *skb);
void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id); void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id);
int ath10k_htt_mgmt_tx(struct ath10k_htt *htt, struct sk_buff *msdu); int ath10k_htt_mgmt_tx(struct ath10k_htt *htt, struct sk_buff *msdu);
int ath10k_htt_tx(struct ath10k_htt *htt,
enum ath10k_hw_txrx_mode txmode,
struct sk_buff *msdu);
void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar, void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
struct sk_buff *skb); struct sk_buff *skb);
int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget); int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget);
......
This diff is collapsed.
...@@ -3597,7 +3597,7 @@ static int ath10k_mac_tx_submit(struct ath10k *ar, ...@@ -3597,7 +3597,7 @@ static int ath10k_mac_tx_submit(struct ath10k *ar,
switch (txpath) { switch (txpath) {
case ATH10K_MAC_TX_HTT: case ATH10K_MAC_TX_HTT:
ret = ath10k_htt_tx(htt, txmode, skb); ret = htt->tx_ops->htt_tx(htt, txmode, skb);
break; break;
case ATH10K_MAC_TX_HTT_MGMT: case ATH10K_MAC_TX_HTT_MGMT:
ret = ath10k_htt_mgmt_tx(htt, skb); ret = ath10k_htt_mgmt_tx(htt, skb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment