Loading drivers/net/wireless/ath/ath10k/ce.c +20 −2 Original line number Diff line number Diff line Loading @@ -298,10 +298,22 @@ int ath10k_ce_send_nolock(struct ath10k_ce_pipe *ce_state, if (flags & CE_SEND_FLAG_GATHER) desc_flags |= CE_DESC_FLAGS_GATHER; if (flags & CE_SEND_FLAG_BYTE_SWAP) desc_flags |= CE_DESC_FLAGS_BYTE_SWAP; if (QCA_REV_WCN3990(ar)) { flags |= upper_32_bits(buffer) & CE_DESC_FLAGS_GET_MASK; sdesc.addr_lo = __cpu_to_le32(buffer); sdesc.addr_hi = flags; if (flags & CE_SEND_FLAG_GATHER) sdesc.addr_hi |= CE_WCN3990_DESC_FLAGS_GATHER; else sdesc.addr_hi &= ~CE_WCN3990_DESC_FLAGS_GATHER; } else { sdesc.addr = __cpu_to_le32(buffer); } sdesc.nbytes = __cpu_to_le16(nbytes); sdesc.flags = __cpu_to_le16(desc_flags); Loading Loading @@ -410,7 +422,13 @@ int __ath10k_ce_rx_post_buf(struct ath10k_ce_pipe *pipe, void *ctx, CE_RING_DELTA(nentries_mask, write_index, sw_index - 1) == 0) return -ENOSPC; if (QCA_REV_WCN3990(ar)) { desc->addr = paddr; desc->addr &= CE_DESC_37BIT_ADDR_MASK; } else { desc->addr = __cpu_to_le32(paddr); } desc->nbytes = 0; dest_ring->per_transfer_context[write_index] = ctx; Loading drivers/net/wireless/ath/ath10k/ce.h +11 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,10 @@ struct ath10k_ce_pipe; #define CE_DESC_FLAGS_GATHER (1 << 0) #define CE_DESC_FLAGS_BYTE_SWAP (1 << 1) #define CE_WCN3990_DESC_FLAGS_GATHER BIT(31) #define CE_DESC_FLAGS_GET_MASK 0x1F #define CE_DESC_37BIT_ADDR_MASK 0x1FFFFFFFFF /* Following desc flags are used in QCA99X0 */ #define CE_DESC_FLAGS_HOST_INT_DIS (1 << 2) Loading @@ -54,7 +58,13 @@ struct ce_desc { }; #else struct ce_desc { union { __le64 addr; struct { __le32 addr_lo; __le32 addr_hi; }; }; u16 nbytes; /* length in register map */ u16 flags; /* fw_metadata_high */ u32 toeplitz_hash_result; Loading Loading
drivers/net/wireless/ath/ath10k/ce.c +20 −2 Original line number Diff line number Diff line Loading @@ -298,10 +298,22 @@ int ath10k_ce_send_nolock(struct ath10k_ce_pipe *ce_state, if (flags & CE_SEND_FLAG_GATHER) desc_flags |= CE_DESC_FLAGS_GATHER; if (flags & CE_SEND_FLAG_BYTE_SWAP) desc_flags |= CE_DESC_FLAGS_BYTE_SWAP; if (QCA_REV_WCN3990(ar)) { flags |= upper_32_bits(buffer) & CE_DESC_FLAGS_GET_MASK; sdesc.addr_lo = __cpu_to_le32(buffer); sdesc.addr_hi = flags; if (flags & CE_SEND_FLAG_GATHER) sdesc.addr_hi |= CE_WCN3990_DESC_FLAGS_GATHER; else sdesc.addr_hi &= ~CE_WCN3990_DESC_FLAGS_GATHER; } else { sdesc.addr = __cpu_to_le32(buffer); } sdesc.nbytes = __cpu_to_le16(nbytes); sdesc.flags = __cpu_to_le16(desc_flags); Loading Loading @@ -410,7 +422,13 @@ int __ath10k_ce_rx_post_buf(struct ath10k_ce_pipe *pipe, void *ctx, CE_RING_DELTA(nentries_mask, write_index, sw_index - 1) == 0) return -ENOSPC; if (QCA_REV_WCN3990(ar)) { desc->addr = paddr; desc->addr &= CE_DESC_37BIT_ADDR_MASK; } else { desc->addr = __cpu_to_le32(paddr); } desc->nbytes = 0; dest_ring->per_transfer_context[write_index] = ctx; Loading
drivers/net/wireless/ath/ath10k/ce.h +11 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,10 @@ struct ath10k_ce_pipe; #define CE_DESC_FLAGS_GATHER (1 << 0) #define CE_DESC_FLAGS_BYTE_SWAP (1 << 1) #define CE_WCN3990_DESC_FLAGS_GATHER BIT(31) #define CE_DESC_FLAGS_GET_MASK 0x1F #define CE_DESC_37BIT_ADDR_MASK 0x1FFFFFFFFF /* Following desc flags are used in QCA99X0 */ #define CE_DESC_FLAGS_HOST_INT_DIS (1 << 2) Loading @@ -54,7 +58,13 @@ struct ce_desc { }; #else struct ce_desc { union { __le64 addr; struct { __le32 addr_lo; __le32 addr_hi; }; }; u16 nbytes; /* length in register map */ u16 flags; /* fw_metadata_high */ u32 toeplitz_hash_result; Loading