15bd4f692SLarry Finger /* SPDX-License-Identifier: GPL-2.0 */ 25bd4f692SLarry Finger /* Copyright(c) 2009-2012 Realtek Corporation.*/ 3f1d2b4d3SLarry Finger 4f1d2b4d3SLarry Finger #ifndef __RTL92DE_TRX_H__ 5f1d2b4d3SLarry Finger #define __RTL92DE_TRX_H__ 6f1d2b4d3SLarry Finger 7f1d2b4d3SLarry Finger #define TX_DESC_SIZE 64 8f1d2b4d3SLarry Finger #define TX_DESC_AGGR_SUBFRAME_SIZE 32 9f1d2b4d3SLarry Finger 10f1d2b4d3SLarry Finger #define RX_DESC_SIZE 32 11f1d2b4d3SLarry Finger #define RX_DRV_INFO_SIZE_UNIT 8 12f1d2b4d3SLarry Finger 13f1d2b4d3SLarry Finger #define TX_DESC_NEXT_DESC_OFFSET 40 14f1d2b4d3SLarry Finger #define USB_HWDESC_HEADER_LEN 32 15f1d2b4d3SLarry Finger #define CRCLENGTH 4 16f1d2b4d3SLarry Finger 17f1d2b4d3SLarry Finger /* Define a macro that takes a le32 word, converts it to host ordering, 18f1d2b4d3SLarry Finger * right shifts by a specified count, creates a mask of the specified 19f1d2b4d3SLarry Finger * bit count, and extracts that number of bits. 20f1d2b4d3SLarry Finger */ 21f1d2b4d3SLarry Finger 22f1d2b4d3SLarry Finger #define SHIFT_AND_MASK_LE(__pdesc, __shift, __mask) \ 23f1d2b4d3SLarry Finger ((le32_to_cpu(*(((__le32 *)(__pdesc)))) >> (__shift)) & \ 24f1d2b4d3SLarry Finger BIT_LEN_MASK_32(__mask)) 25f1d2b4d3SLarry Finger 26f1d2b4d3SLarry Finger /* Define a macro that clears a bit field in an le32 word and 27f1d2b4d3SLarry Finger * sets the specified value into that bit field. The resulting 28f1d2b4d3SLarry Finger * value remains in le32 ordering; however, it is properly converted 29f1d2b4d3SLarry Finger * to host ordering for the clear and set operations before conversion 30f1d2b4d3SLarry Finger * back to le32. 31f1d2b4d3SLarry Finger */ 32f1d2b4d3SLarry Finger 33f1d2b4d3SLarry Finger #define SET_BITS_OFFSET_LE(__pdesc, __shift, __len, __val) \ 34f1d2b4d3SLarry Finger (*(__le32 *)(__pdesc) = \ 35f1d2b4d3SLarry Finger (cpu_to_le32((le32_to_cpu(*((__le32 *)(__pdesc))) & \ 36f1d2b4d3SLarry Finger (~(BIT_OFFSET_LEN_MASK_32((__shift), __len)))) | \ 37f1d2b4d3SLarry Finger (((u32)(__val) & BIT_LEN_MASK_32(__len)) << (__shift))))); 38f1d2b4d3SLarry Finger 39f1d2b4d3SLarry Finger /* macros to read/write various fields in RX or TX descriptors */ 40f1d2b4d3SLarry Finger 41f1d2b4d3SLarry Finger #define SET_TX_DESC_PKT_SIZE(__pdesc, __val) \ 42f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 0, 16, __val) 43f1d2b4d3SLarry Finger #define SET_TX_DESC_OFFSET(__pdesc, __val) \ 44f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 16, 8, __val) 45f1d2b4d3SLarry Finger #define SET_TX_DESC_BMC(__pdesc, __val) \ 46f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 24, 1, __val) 47f1d2b4d3SLarry Finger #define SET_TX_DESC_HTC(__pdesc, __val) \ 48f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 25, 1, __val) 49f1d2b4d3SLarry Finger #define SET_TX_DESC_LAST_SEG(__pdesc, __val) \ 50f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 26, 1, __val) 51f1d2b4d3SLarry Finger #define SET_TX_DESC_FIRST_SEG(__pdesc, __val) \ 52f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 27, 1, __val) 53f1d2b4d3SLarry Finger #define SET_TX_DESC_LINIP(__pdesc, __val) \ 54f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 28, 1, __val) 55f1d2b4d3SLarry Finger #define SET_TX_DESC_NO_ACM(__pdesc, __val) \ 56f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 29, 1, __val) 57f1d2b4d3SLarry Finger #define SET_TX_DESC_GF(__pdesc, __val) \ 58f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 30, 1, __val) 59f1d2b4d3SLarry Finger #define SET_TX_DESC_OWN(__pdesc, __val) \ 60f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 31, 1, __val) 61f1d2b4d3SLarry Finger 62f1d2b4d3SLarry Finger #define GET_TX_DESC_PKT_SIZE(__pdesc) \ 63f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 0, 16) 64f1d2b4d3SLarry Finger #define GET_TX_DESC_OFFSET(__pdesc) \ 65f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 16, 8) 66f1d2b4d3SLarry Finger #define GET_TX_DESC_BMC(__pdesc) \ 67f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 24, 1) 68f1d2b4d3SLarry Finger #define GET_TX_DESC_HTC(__pdesc) \ 69f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 25, 1) 70f1d2b4d3SLarry Finger #define GET_TX_DESC_LAST_SEG(__pdesc) \ 71f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 26, 1) 72f1d2b4d3SLarry Finger #define GET_TX_DESC_FIRST_SEG(__pdesc) \ 73f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 27, 1) 74f1d2b4d3SLarry Finger #define GET_TX_DESC_LINIP(__pdesc) \ 75f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 28, 1) 76f1d2b4d3SLarry Finger #define GET_TX_DESC_NO_ACM(__pdesc) \ 77f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 29, 1) 78f1d2b4d3SLarry Finger #define GET_TX_DESC_GF(__pdesc) \ 79f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 30, 1) 80f1d2b4d3SLarry Finger #define GET_TX_DESC_OWN(__pdesc) \ 81f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 31, 1) 82f1d2b4d3SLarry Finger 83f1d2b4d3SLarry Finger #define SET_TX_DESC_MACID(__pdesc, __val) \ 84f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 0, 5, __val) 85f1d2b4d3SLarry Finger #define SET_TX_DESC_AGG_ENABLE(__pdesc, __val) \ 86f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 5, 1, __val) 87f1d2b4d3SLarry Finger #define SET_TX_DESC_BK(__pdesc, __val) \ 88f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 6, 1, __val) 89f1d2b4d3SLarry Finger #define SET_TX_DESC_RDG_ENABLE(__pdesc, __val) \ 90f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 7, 1, __val) 91f1d2b4d3SLarry Finger #define SET_TX_DESC_QUEUE_SEL(__pdesc, __val) \ 92f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 8, 5, __val) 93f1d2b4d3SLarry Finger #define SET_TX_DESC_RDG_NAV_EXT(__pdesc, __val) \ 94f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 13, 1, __val) 95f1d2b4d3SLarry Finger #define SET_TX_DESC_LSIG_TXOP_EN(__pdesc, __val) \ 96f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 14, 1, __val) 97f1d2b4d3SLarry Finger #define SET_TX_DESC_PIFS(__pdesc, __val) \ 98f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 15, 1, __val) 99f1d2b4d3SLarry Finger #define SET_TX_DESC_RATE_ID(__pdesc, __val) \ 100f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 16, 4, __val) 101f1d2b4d3SLarry Finger #define SET_TX_DESC_NAV_USE_HDR(__pdesc, __val) \ 102f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 20, 1, __val) 103f1d2b4d3SLarry Finger #define SET_TX_DESC_EN_DESC_ID(__pdesc, __val) \ 104f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 21, 1, __val) 105f1d2b4d3SLarry Finger #define SET_TX_DESC_SEC_TYPE(__pdesc, __val) \ 106f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 22, 2, __val) 107f1d2b4d3SLarry Finger #define SET_TX_DESC_PKT_OFFSET(__pdesc, __val) \ 108f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+4, 26, 8, __val) 109f1d2b4d3SLarry Finger 110f1d2b4d3SLarry Finger #define GET_TX_DESC_MACID(__pdesc) \ 111f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 0, 5) 112f1d2b4d3SLarry Finger #define GET_TX_DESC_AGG_ENABLE(__pdesc) \ 113f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 5, 1) 114f1d2b4d3SLarry Finger #define GET_TX_DESC_AGG_BREAK(__pdesc) \ 115f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 6, 1) 116f1d2b4d3SLarry Finger #define GET_TX_DESC_RDG_ENABLE(__pdesc) \ 117f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 7, 1) 118f1d2b4d3SLarry Finger #define GET_TX_DESC_QUEUE_SEL(__pdesc) \ 119f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 8, 5) 120f1d2b4d3SLarry Finger #define GET_TX_DESC_RDG_NAV_EXT(__pdesc) \ 121f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 13, 1) 122f1d2b4d3SLarry Finger #define GET_TX_DESC_LSIG_TXOP_EN(__pdesc) \ 123f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 14, 1) 124f1d2b4d3SLarry Finger #define GET_TX_DESC_PIFS(__pdesc) \ 125f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 15, 1) 126f1d2b4d3SLarry Finger #define GET_TX_DESC_RATE_ID(__pdesc) \ 127f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 16, 4) 128f1d2b4d3SLarry Finger #define GET_TX_DESC_NAV_USE_HDR(__pdesc) \ 129f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 20, 1) 130f1d2b4d3SLarry Finger #define GET_TX_DESC_EN_DESC_ID(__pdesc) \ 131f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 21, 1) 132f1d2b4d3SLarry Finger #define GET_TX_DESC_SEC_TYPE(__pdesc) \ 133f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 22, 2) 134f1d2b4d3SLarry Finger #define GET_TX_DESC_PKT_OFFSET(__pdesc) \ 135f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 24, 8) 136f1d2b4d3SLarry Finger 137f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_RC(__pdesc, __val) \ 138f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 0, 6, __val) 139f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_RC(__pdesc, __val) \ 140f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 6, 6, __val) 141f1d2b4d3SLarry Finger #define SET_TX_DESC_BAR_RTY_TH(__pdesc, __val) \ 142f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 14, 2, __val) 143f1d2b4d3SLarry Finger #define SET_TX_DESC_MORE_FRAG(__pdesc, __val) \ 144f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 17, 1, __val) 145f1d2b4d3SLarry Finger #define SET_TX_DESC_RAW(__pdesc, __val) \ 146f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 18, 1, __val) 147f1d2b4d3SLarry Finger #define SET_TX_DESC_CCX(__pdesc, __val) \ 148f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 19, 1, __val) 149f1d2b4d3SLarry Finger #define SET_TX_DESC_AMPDU_DENSITY(__pdesc, __val) \ 150f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 20, 3, __val) 151f1d2b4d3SLarry Finger #define SET_TX_DESC_ANTSEL_A(__pdesc, __val) \ 152f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 24, 1, __val) 153f1d2b4d3SLarry Finger #define SET_TX_DESC_ANTSEL_B(__pdesc, __val) \ 154f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 25, 1, __val) 155f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_ANT_CCK(__pdesc, __val) \ 156f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 26, 2, __val) 157f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_ANTL(__pdesc, __val) \ 158f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 28, 2, __val) 159f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_ANT_HT(__pdesc, __val) \ 160f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+8, 30, 2, __val) 161f1d2b4d3SLarry Finger 162f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_RC(__pdesc) \ 163f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 0, 6) 164f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_RC(__pdesc) \ 165f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 6, 6) 166f1d2b4d3SLarry Finger #define GET_TX_DESC_BAR_RTY_TH(__pdesc) \ 167f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 14, 2) 168f1d2b4d3SLarry Finger #define GET_TX_DESC_MORE_FRAG(__pdesc) \ 169f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 17, 1) 170f1d2b4d3SLarry Finger #define GET_TX_DESC_RAW(__pdesc) \ 171f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 18, 1) 172f1d2b4d3SLarry Finger #define GET_TX_DESC_CCX(__pdesc) \ 173f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 19, 1) 174f1d2b4d3SLarry Finger #define GET_TX_DESC_AMPDU_DENSITY(__pdesc) \ 175f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 20, 3) 176f1d2b4d3SLarry Finger #define GET_TX_DESC_ANTSEL_A(__pdesc) \ 177f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 24, 1) 178f1d2b4d3SLarry Finger #define GET_TX_DESC_ANTSEL_B(__pdesc) \ 179f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 25, 1) 180f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_ANT_CCK(__pdesc) \ 181f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 26, 2) 182f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_ANTL(__pdesc) \ 183f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 28, 2) 184f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_ANT_HT(__pdesc) \ 185f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 30, 2) 186f1d2b4d3SLarry Finger 187f1d2b4d3SLarry Finger #define SET_TX_DESC_NEXT_HEAP_PAGE(__pdesc, __val) \ 188f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+12, 0, 8, __val) 189f1d2b4d3SLarry Finger #define SET_TX_DESC_TAIL_PAGE(__pdesc, __val) \ 190f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+12, 8, 8, __val) 191f1d2b4d3SLarry Finger #define SET_TX_DESC_SEQ(__pdesc, __val) \ 192f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+12, 16, 12, __val) 193f1d2b4d3SLarry Finger #define SET_TX_DESC_PKT_ID(__pdesc, __val) \ 194f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+12, 28, 4, __val) 195f1d2b4d3SLarry Finger 196f1d2b4d3SLarry Finger #define GET_TX_DESC_NEXT_HEAP_PAGE(__pdesc) \ 197f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 0, 8) 198f1d2b4d3SLarry Finger #define GET_TX_DESC_TAIL_PAGE(__pdesc) \ 199f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 8, 8) 200f1d2b4d3SLarry Finger #define GET_TX_DESC_SEQ(__pdesc) \ 201f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 16, 12) 202f1d2b4d3SLarry Finger #define GET_TX_DESC_PKT_ID(__pdesc) \ 203f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 28, 4) 204f1d2b4d3SLarry Finger 205f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_RATE(__pdesc, __val) \ 206f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 0, 5, __val) 207f1d2b4d3SLarry Finger #define SET_TX_DESC_AP_DCFE(__pdesc, __val) \ 208f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 5, 1, __val) 209f1d2b4d3SLarry Finger #define SET_TX_DESC_QOS(__pdesc, __val) \ 210f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 6, 1, __val) 211f1d2b4d3SLarry Finger #define SET_TX_DESC_HWSEQ_EN(__pdesc, __val) \ 212f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 7, 1, __val) 213f1d2b4d3SLarry Finger #define SET_TX_DESC_USE_RATE(__pdesc, __val) \ 214f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 8, 1, __val) 215f1d2b4d3SLarry Finger #define SET_TX_DESC_DISABLE_RTS_FB(__pdesc, __val) \ 216f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 9, 1, __val) 217f1d2b4d3SLarry Finger #define SET_TX_DESC_DISABLE_FB(__pdesc, __val) \ 218f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 10, 1, __val) 219f1d2b4d3SLarry Finger #define SET_TX_DESC_CTS2SELF(__pdesc, __val) \ 220f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 11, 1, __val) 221f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_ENABLE(__pdesc, __val) \ 222f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 12, 1, __val) 223f1d2b4d3SLarry Finger #define SET_TX_DESC_HW_RTS_ENABLE(__pdesc, __val) \ 224f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 13, 1, __val) 225f1d2b4d3SLarry Finger #define SET_TX_DESC_PORT_ID(__pdesc, __val) \ 226f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 14, 1, __val) 227f1d2b4d3SLarry Finger #define SET_TX_DESC_WAIT_DCTS(__pdesc, __val) \ 228f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 18, 1, __val) 229f1d2b4d3SLarry Finger #define SET_TX_DESC_CTS2AP_EN(__pdesc, __val) \ 230f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 19, 1, __val) 231f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_SUB_CARRIER(__pdesc, __val) \ 232f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 20, 2, __val) 233f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_STBC(__pdesc, __val) \ 234f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 22, 2, __val) 235f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_SHORT(__pdesc, __val) \ 236f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 24, 1, __val) 237f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_BW(__pdesc, __val) \ 238f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 25, 1, __val) 239f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_SHORT(__pdesc, __val) \ 240f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 26, 1, __val) 241f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_BW(__pdesc, __val) \ 242f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 27, 1, __val) 243f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_SC(__pdesc, __val) \ 244f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 28, 2, __val) 245f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_STBC(__pdesc, __val) \ 246f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+16, 30, 2, __val) 247f1d2b4d3SLarry Finger 248f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_RATE(__pdesc) \ 249f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 0, 5) 250f1d2b4d3SLarry Finger #define GET_TX_DESC_AP_DCFE(__pdesc) \ 251f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 5, 1) 252f1d2b4d3SLarry Finger #define GET_TX_DESC_QOS(__pdesc) \ 253f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 6, 1) 254f1d2b4d3SLarry Finger #define GET_TX_DESC_HWSEQ_EN(__pdesc) \ 255f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 7, 1) 256f1d2b4d3SLarry Finger #define GET_TX_DESC_USE_RATE(__pdesc) \ 257f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 8, 1) 258f1d2b4d3SLarry Finger #define GET_TX_DESC_DISABLE_RTS_FB(__pdesc) \ 259f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 9, 1) 260f1d2b4d3SLarry Finger #define GET_TX_DESC_DISABLE_FB(__pdesc) \ 261f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 10, 1) 262f1d2b4d3SLarry Finger #define GET_TX_DESC_CTS2SELF(__pdesc) \ 263f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 11, 1) 264f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_ENABLE(__pdesc) \ 265f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 12, 1) 266f1d2b4d3SLarry Finger #define GET_TX_DESC_HW_RTS_ENABLE(__pdesc) \ 267f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 13, 1) 268f1d2b4d3SLarry Finger #define GET_TX_DESC_PORT_ID(__pdesc) \ 269f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 14, 1) 270f1d2b4d3SLarry Finger #define GET_TX_DESC_WAIT_DCTS(__pdesc) \ 271f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 18, 1) 272f1d2b4d3SLarry Finger #define GET_TX_DESC_CTS2AP_EN(__pdesc) \ 273f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 19, 1) 274f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_SUB_CARRIER(__pdesc) \ 275f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 20, 2) 276f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_STBC(__pdesc) \ 277f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 22, 2) 278f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_SHORT(__pdesc) \ 279f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 24, 1) 280f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_BW(__pdesc) \ 281f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 25, 1) 282f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_SHORT(__pdesc) \ 283f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 26, 1) 284f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_BW(__pdesc) \ 285f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 27, 1) 286f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_SC(__pdesc) \ 287f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 28, 2) 288f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_STBC(__pdesc) \ 289f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 30, 2) 290f1d2b4d3SLarry Finger 291f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_RATE(__pdesc, __val) \ 292f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 0, 6, __val) 293f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_SHORTGI(__pdesc, __val) \ 294f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 6, 1, __val) 295f1d2b4d3SLarry Finger #define SET_TX_DESC_CCX_TAG(__pdesc, __val) \ 296f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 7, 1, __val) 297f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc, __val) \ 298f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 8, 5, __val) 299f1d2b4d3SLarry Finger #define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc, __val) \ 300f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 13, 4, __val) 301f1d2b4d3SLarry Finger #define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc, __val) \ 302f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 17, 1, __val) 303f1d2b4d3SLarry Finger #define SET_TX_DESC_DATA_RETRY_LIMIT(__pdesc, __val) \ 304f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 18, 6, __val) 305f1d2b4d3SLarry Finger #define SET_TX_DESC_USB_TXAGG_NUM(__pdesc, __val) \ 306f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+20, 24, 8, __val) 307f1d2b4d3SLarry Finger 308f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_RATE(__pdesc) \ 309f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 0, 6) 310f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_SHORTGI(__pdesc) \ 311f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 6, 1) 312f1d2b4d3SLarry Finger #define GET_TX_DESC_CCX_TAG(__pdesc) \ 313f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 7, 1) 314f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc) \ 315f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 8, 5) 316f1d2b4d3SLarry Finger #define GET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc) \ 317f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 13, 4) 318f1d2b4d3SLarry Finger #define GET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc) \ 319f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 17, 1) 320f1d2b4d3SLarry Finger #define GET_TX_DESC_DATA_RETRY_LIMIT(__pdesc) \ 321f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 18, 6) 322f1d2b4d3SLarry Finger #define GET_TX_DESC_USB_TXAGG_NUM(__pdesc) \ 323f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 24, 8) 324f1d2b4d3SLarry Finger 325f1d2b4d3SLarry Finger #define SET_TX_DESC_TXAGC_A(__pdesc, __val) \ 326f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 0, 5, __val) 327f1d2b4d3SLarry Finger #define SET_TX_DESC_TXAGC_B(__pdesc, __val) \ 328f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 5, 5, __val) 329f1d2b4d3SLarry Finger #define SET_TX_DESC_USE_MAX_LEN(__pdesc, __val) \ 330f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 10, 1, __val) 331f1d2b4d3SLarry Finger #define SET_TX_DESC_MAX_AGG_NUM(__pdesc, __val) \ 332f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 11, 5, __val) 333f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG1_MAX_LEN(__pdesc, __val) \ 334f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 16, 4, __val) 335f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG2_MAX_LEN(__pdesc, __val) \ 336f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 20, 4, __val) 337f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG3_MAX_LEN(__pdesc, __val) \ 338f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 24, 4, __val) 339f1d2b4d3SLarry Finger #define SET_TX_DESC_MCS7_SGI_MAX_LEN(__pdesc, __val) \ 340f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 28, 4, __val) 341f1d2b4d3SLarry Finger 342f1d2b4d3SLarry Finger #define GET_TX_DESC_TXAGC_A(__pdesc) \ 343f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 0, 5) 344f1d2b4d3SLarry Finger #define GET_TX_DESC_TXAGC_B(__pdesc) \ 345f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 5, 5) 346f1d2b4d3SLarry Finger #define GET_TX_DESC_USE_MAX_LEN(__pdesc) \ 347f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 10, 1) 348f1d2b4d3SLarry Finger #define GET_TX_DESC_MAX_AGG_NUM(__pdesc) \ 349f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 11, 5) 350f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG1_MAX_LEN(__pdesc) \ 351f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 16, 4) 352f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG2_MAX_LEN(__pdesc) \ 353f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 20, 4) 354f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG3_MAX_LEN(__pdesc) \ 355f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 24, 4) 356f1d2b4d3SLarry Finger #define GET_TX_DESC_MCS7_SGI_MAX_LEN(__pdesc) \ 357f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 28, 4) 358f1d2b4d3SLarry Finger 359f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_BUFFER_SIZE(__pdesc, __val) \ 360f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 0, 16, __val) 361f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG4_MAX_LEN(__pdesc, __val) \ 362f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 16, 4, __val) 363f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG5_MAX_LEN(__pdesc, __val) \ 364f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 20, 4, __val) 365f1d2b4d3SLarry Finger #define SET_TX_DESC_MCSG6_MAX_LEN(__pdesc, __val) \ 366f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 24, 4, __val) 367f1d2b4d3SLarry Finger #define SET_TX_DESC_MCS15_SGI_MAX_LEN(__pdesc, __val) \ 368f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 28, 4, __val) 369f1d2b4d3SLarry Finger 370f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_BUFFER_SIZE(__pdesc) \ 371f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 0, 16) 372f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG4_MAX_LEN(__pdesc) \ 373f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 16, 4) 374f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG5_MAX_LEN(__pdesc) \ 375f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 20, 4) 376f1d2b4d3SLarry Finger #define GET_TX_DESC_MCSG6_MAX_LEN(__pdesc) \ 377f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 24, 4) 378f1d2b4d3SLarry Finger #define GET_TX_DESC_MCS15_SGI_MAX_LEN(__pdesc) \ 379f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 28, 4) 380f1d2b4d3SLarry Finger 381f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val) \ 382f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+32, 0, 32, __val) 383f1d2b4d3SLarry Finger #define SET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc, __val) \ 384f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+36, 0, 32, __val) 385f1d2b4d3SLarry Finger 386f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc) \ 387f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+32, 0, 32) 388f1d2b4d3SLarry Finger #define GET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc) \ 389f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+36, 0, 32) 390f1d2b4d3SLarry Finger 391f1d2b4d3SLarry Finger #define SET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc, __val) \ 392f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+40, 0, 32, __val) 393f1d2b4d3SLarry Finger #define SET_TX_DESC_NEXT_DESC_ADDRESS64(__pdesc, __val) \ 394f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+44, 0, 32, __val) 395f1d2b4d3SLarry Finger 396f1d2b4d3SLarry Finger #define GET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc) \ 397f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+40, 0, 32) 398f1d2b4d3SLarry Finger #define GET_TX_DESC_NEXT_DESC_ADDRESS64(__pdesc) \ 399f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+44, 0, 32) 400f1d2b4d3SLarry Finger 401f1d2b4d3SLarry Finger #define GET_RX_DESC_PKT_LEN(__pdesc) \ 402f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 0, 14) 403f1d2b4d3SLarry Finger #define GET_RX_DESC_CRC32(__pdesc) \ 404f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 14, 1) 405f1d2b4d3SLarry Finger #define GET_RX_DESC_ICV(__pdesc) \ 406f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 15, 1) 407f1d2b4d3SLarry Finger #define GET_RX_DESC_DRV_INFO_SIZE(__pdesc) \ 408f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 16, 4) 409f1d2b4d3SLarry Finger #define GET_RX_DESC_SECURITY(__pdesc) \ 410f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 20, 3) 411f1d2b4d3SLarry Finger #define GET_RX_DESC_QOS(__pdesc) \ 412f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 23, 1) 413f1d2b4d3SLarry Finger #define GET_RX_DESC_SHIFT(__pdesc) \ 414f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 24, 2) 415f1d2b4d3SLarry Finger #define GET_RX_DESC_PHYST(__pdesc) \ 416f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 26, 1) 417f1d2b4d3SLarry Finger #define GET_RX_DESC_SWDEC(__pdesc) \ 418f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 27, 1) 419f1d2b4d3SLarry Finger #define GET_RX_DESC_LS(__pdesc) \ 420f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 28, 1) 421f1d2b4d3SLarry Finger #define GET_RX_DESC_FS(__pdesc) \ 422f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 29, 1) 423f1d2b4d3SLarry Finger #define GET_RX_DESC_EOR(__pdesc) \ 424f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 30, 1) 425f1d2b4d3SLarry Finger #define GET_RX_DESC_OWN(__pdesc) \ 426f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc, 31, 1) 427f1d2b4d3SLarry Finger 428f1d2b4d3SLarry Finger #define SET_RX_DESC_PKT_LEN(__pdesc, __val) \ 429f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 0, 14, __val) 430f1d2b4d3SLarry Finger #define SET_RX_DESC_EOR(__pdesc, __val) \ 431f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 30, 1, __val) 432f1d2b4d3SLarry Finger #define SET_RX_DESC_OWN(__pdesc, __val) \ 433f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc, 31, 1, __val) 434f1d2b4d3SLarry Finger 435f1d2b4d3SLarry Finger #define GET_RX_DESC_MACID(__pdesc) \ 436f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 0, 5) 437f1d2b4d3SLarry Finger #define GET_RX_DESC_TID(__pdesc) \ 438f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 5, 4) 439f1d2b4d3SLarry Finger #define GET_RX_DESC_HWRSVD(__pdesc) \ 440f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 9, 5) 441f1d2b4d3SLarry Finger #define GET_RX_DESC_PAGGR(__pdesc) \ 442f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 14, 1) 443f1d2b4d3SLarry Finger #define GET_RX_DESC_FAGGR(__pdesc) \ 444f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 15, 1) 445f1d2b4d3SLarry Finger #define GET_RX_DESC_A1_FIT(__pdesc) \ 446f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 16, 4) 447f1d2b4d3SLarry Finger #define GET_RX_DESC_A2_FIT(__pdesc) \ 448f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 20, 4) 449f1d2b4d3SLarry Finger #define GET_RX_DESC_PAM(__pdesc) \ 450f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 24, 1) 451f1d2b4d3SLarry Finger #define GET_RX_DESC_PWR(__pdesc) \ 452f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 25, 1) 453f1d2b4d3SLarry Finger #define GET_RX_DESC_MD(__pdesc) \ 454f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 26, 1) 455f1d2b4d3SLarry Finger #define GET_RX_DESC_MF(__pdesc) \ 456f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 27, 1) 457f1d2b4d3SLarry Finger #define GET_RX_DESC_TYPE(__pdesc) \ 458f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 28, 2) 459f1d2b4d3SLarry Finger #define GET_RX_DESC_MC(__pdesc) \ 460f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 30, 1) 461f1d2b4d3SLarry Finger #define GET_RX_DESC_BC(__pdesc) \ 462f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+4, 31, 1) 463f1d2b4d3SLarry Finger #define GET_RX_DESC_SEQ(__pdesc) \ 464f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 0, 12) 465f1d2b4d3SLarry Finger #define GET_RX_DESC_FRAG(__pdesc) \ 466f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 12, 4) 467f1d2b4d3SLarry Finger #define GET_RX_DESC_NEXT_PKT_LEN(__pdesc) \ 468f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 16, 14) 469f1d2b4d3SLarry Finger #define GET_RX_DESC_NEXT_IND(__pdesc) \ 470f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 30, 1) 471f1d2b4d3SLarry Finger #define GET_RX_DESC_RSVD(__pdesc) \ 472f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+8, 31, 1) 473f1d2b4d3SLarry Finger 474f1d2b4d3SLarry Finger #define GET_RX_DESC_RXMCS(__pdesc) \ 475f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 0, 6) 476f1d2b4d3SLarry Finger #define GET_RX_DESC_RXHT(__pdesc) \ 477f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 6, 1) 478f1d2b4d3SLarry Finger #define GET_RX_DESC_SPLCP(__pdesc) \ 479f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 8, 1) 480f1d2b4d3SLarry Finger #define GET_RX_DESC_BW(__pdesc) \ 481f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 9, 1) 482f1d2b4d3SLarry Finger #define GET_RX_DESC_HTC(__pdesc) \ 483f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 10, 1) 484f1d2b4d3SLarry Finger #define GET_RX_DESC_HWPC_ERR(__pdesc) \ 485f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 14, 1) 486f1d2b4d3SLarry Finger #define GET_RX_DESC_HWPC_IND(__pdesc) \ 487f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 15, 1) 488f1d2b4d3SLarry Finger #define GET_RX_DESC_IV0(__pdesc) \ 489f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+12, 16, 16) 490f1d2b4d3SLarry Finger 491f1d2b4d3SLarry Finger #define GET_RX_DESC_IV1(__pdesc) \ 492f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+16, 0, 32) 493f1d2b4d3SLarry Finger #define GET_RX_DESC_TSFL(__pdesc) \ 494f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+20, 0, 32) 495f1d2b4d3SLarry Finger 496f1d2b4d3SLarry Finger #define GET_RX_DESC_BUFF_ADDR(__pdesc) \ 497f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+24, 0, 32) 498f1d2b4d3SLarry Finger #define GET_RX_DESC_BUFF_ADDR64(__pdesc) \ 499f1d2b4d3SLarry Finger SHIFT_AND_MASK_LE(__pdesc+28, 0, 32) 500f1d2b4d3SLarry Finger 501f1d2b4d3SLarry Finger #define SET_RX_DESC_BUFF_ADDR(__pdesc, __val) \ 502f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+24, 0, 32, __val) 503f1d2b4d3SLarry Finger #define SET_RX_DESC_BUFF_ADDR64(__pdesc, __val) \ 504f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__pdesc+28, 0, 32, __val) 505f1d2b4d3SLarry Finger 506f1d2b4d3SLarry Finger #define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size) \ 507f1d2b4d3SLarry Finger memset((void *)__pdesc, 0, \ 508f1d2b4d3SLarry Finger min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET)) 509f1d2b4d3SLarry Finger 510f1d2b4d3SLarry Finger /* For 92D early mode */ 511f1d2b4d3SLarry Finger #define SET_EARLYMODE_PKTNUM(__paddr, __value) \ 512f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr, 0, 3, __value) 513f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN0(__paddr, __value) \ 514f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr, 4, 12, __value) 515f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN1(__paddr, __value) \ 516f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr, 16, 12, __value) 517f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN2_1(__paddr, __value) \ 518f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr, 28, 4, __value) 519f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN2_2(__paddr, __value) \ 520f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr+4, 0, 8, __value) 521f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN3(__paddr, __value) \ 522f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr+4, 8, 12, __value) 523f1d2b4d3SLarry Finger #define SET_EARLYMODE_LEN4(__paddr, __value) \ 524f1d2b4d3SLarry Finger SET_BITS_OFFSET_LE(__paddr+4, 20, 12, __value) 525f1d2b4d3SLarry Finger 526f1d2b4d3SLarry Finger struct rx_fwinfo_92d { 527f1d2b4d3SLarry Finger u8 gain_trsw[4]; 528f1d2b4d3SLarry Finger u8 pwdb_all; 529f1d2b4d3SLarry Finger u8 cfosho[4]; 530f1d2b4d3SLarry Finger u8 cfotail[4]; 53108aba42fSArnd Bergmann s8 rxevm[2]; 53208aba42fSArnd Bergmann s8 rxsnr[4]; 533f1d2b4d3SLarry Finger u8 pdsnr[2]; 534f1d2b4d3SLarry Finger u8 csi_current[2]; 535f1d2b4d3SLarry Finger u8 csi_target[2]; 536f1d2b4d3SLarry Finger u8 sigevm; 537f1d2b4d3SLarry Finger u8 max_ex_pwr; 538f1d2b4d3SLarry Finger u8 ex_intf_flag:1; 539f1d2b4d3SLarry Finger u8 sgi_en:1; 540f1d2b4d3SLarry Finger u8 rxsc:2; 541f1d2b4d3SLarry Finger u8 reserve:4; 542f1d2b4d3SLarry Finger } __packed; 543f1d2b4d3SLarry Finger 544f1d2b4d3SLarry Finger struct tx_desc_92d { 545f1d2b4d3SLarry Finger u32 pktsize:16; 546f1d2b4d3SLarry Finger u32 offset:8; 547f1d2b4d3SLarry Finger u32 bmc:1; 548f1d2b4d3SLarry Finger u32 htc:1; 549f1d2b4d3SLarry Finger u32 lastseg:1; 550f1d2b4d3SLarry Finger u32 firstseg:1; 551f1d2b4d3SLarry Finger u32 linip:1; 552f1d2b4d3SLarry Finger u32 noacm:1; 553f1d2b4d3SLarry Finger u32 gf:1; 554f1d2b4d3SLarry Finger u32 own:1; 555f1d2b4d3SLarry Finger 556f1d2b4d3SLarry Finger u32 macid:5; 557f1d2b4d3SLarry Finger u32 agg_en:1; 558f1d2b4d3SLarry Finger u32 bk:1; 559f1d2b4d3SLarry Finger u32 rdg_en:1; 560f1d2b4d3SLarry Finger u32 queuesel:5; 561f1d2b4d3SLarry Finger u32 rd_nav_ext:1; 562f1d2b4d3SLarry Finger u32 lsig_txop_en:1; 563f1d2b4d3SLarry Finger u32 pifs:1; 564f1d2b4d3SLarry Finger u32 rateid:4; 565f1d2b4d3SLarry Finger u32 nav_usehdr:1; 566f1d2b4d3SLarry Finger u32 en_descid:1; 567f1d2b4d3SLarry Finger u32 sectype:2; 568f1d2b4d3SLarry Finger u32 pktoffset:8; 569f1d2b4d3SLarry Finger 570f1d2b4d3SLarry Finger u32 rts_rc:6; 571f1d2b4d3SLarry Finger u32 data_rc:6; 572f1d2b4d3SLarry Finger u32 rsvd0:2; 573f1d2b4d3SLarry Finger u32 bar_retryht:2; 574f1d2b4d3SLarry Finger u32 rsvd1:1; 575f1d2b4d3SLarry Finger u32 morefrag:1; 576f1d2b4d3SLarry Finger u32 raw:1; 577f1d2b4d3SLarry Finger u32 ccx:1; 578f1d2b4d3SLarry Finger u32 ampdudensity:3; 579f1d2b4d3SLarry Finger u32 rsvd2:1; 580f1d2b4d3SLarry Finger u32 ant_sela:1; 581f1d2b4d3SLarry Finger u32 ant_selb:1; 582f1d2b4d3SLarry Finger u32 txant_cck:2; 583f1d2b4d3SLarry Finger u32 txant_l:2; 584f1d2b4d3SLarry Finger u32 txant_ht:2; 585f1d2b4d3SLarry Finger 586f1d2b4d3SLarry Finger u32 nextheadpage:8; 587f1d2b4d3SLarry Finger u32 tailpage:8; 588f1d2b4d3SLarry Finger u32 seq:12; 589f1d2b4d3SLarry Finger u32 pktid:4; 590f1d2b4d3SLarry Finger 591f1d2b4d3SLarry Finger u32 rtsrate:5; 592f1d2b4d3SLarry Finger u32 apdcfe:1; 593f1d2b4d3SLarry Finger u32 qos:1; 594f1d2b4d3SLarry Finger u32 hwseq_enable:1; 595f1d2b4d3SLarry Finger u32 userrate:1; 596f1d2b4d3SLarry Finger u32 dis_rtsfb:1; 597f1d2b4d3SLarry Finger u32 dis_datafb:1; 598f1d2b4d3SLarry Finger u32 cts2self:1; 599f1d2b4d3SLarry Finger u32 rts_en:1; 600f1d2b4d3SLarry Finger u32 hwrts_en:1; 601f1d2b4d3SLarry Finger u32 portid:1; 602f1d2b4d3SLarry Finger u32 rsvd3:3; 603f1d2b4d3SLarry Finger u32 waitdcts:1; 604f1d2b4d3SLarry Finger u32 cts2ap_en:1; 605f1d2b4d3SLarry Finger u32 txsc:2; 606f1d2b4d3SLarry Finger u32 stbc:2; 607f1d2b4d3SLarry Finger u32 txshort:1; 608f1d2b4d3SLarry Finger u32 txbw:1; 609f1d2b4d3SLarry Finger u32 rtsshort:1; 610f1d2b4d3SLarry Finger u32 rtsbw:1; 611f1d2b4d3SLarry Finger u32 rtssc:2; 612f1d2b4d3SLarry Finger u32 rtsstbc:2; 613f1d2b4d3SLarry Finger 614f1d2b4d3SLarry Finger u32 txrate:6; 615f1d2b4d3SLarry Finger u32 shortgi:1; 616f1d2b4d3SLarry Finger u32 ccxt:1; 617f1d2b4d3SLarry Finger u32 txrate_fb_lmt:5; 618f1d2b4d3SLarry Finger u32 rtsrate_fb_lmt:4; 619f1d2b4d3SLarry Finger u32 retrylmt_en:1; 620f1d2b4d3SLarry Finger u32 txretrylmt:6; 621f1d2b4d3SLarry Finger u32 usb_txaggnum:8; 622f1d2b4d3SLarry Finger 623f1d2b4d3SLarry Finger u32 txagca:5; 624f1d2b4d3SLarry Finger u32 txagcb:5; 625f1d2b4d3SLarry Finger u32 usemaxlen:1; 626f1d2b4d3SLarry Finger u32 maxaggnum:5; 627f1d2b4d3SLarry Finger u32 mcsg1maxlen:4; 628f1d2b4d3SLarry Finger u32 mcsg2maxlen:4; 629f1d2b4d3SLarry Finger u32 mcsg3maxlen:4; 630f1d2b4d3SLarry Finger u32 mcs7sgimaxlen:4; 631f1d2b4d3SLarry Finger 632f1d2b4d3SLarry Finger u32 txbuffersize:16; 633f1d2b4d3SLarry Finger u32 mcsg4maxlen:4; 634f1d2b4d3SLarry Finger u32 mcsg5maxlen:4; 635f1d2b4d3SLarry Finger u32 mcsg6maxlen:4; 636f1d2b4d3SLarry Finger u32 mcsg15sgimaxlen:4; 637f1d2b4d3SLarry Finger 638f1d2b4d3SLarry Finger u32 txbuffaddr; 639f1d2b4d3SLarry Finger u32 txbufferaddr64; 640f1d2b4d3SLarry Finger u32 nextdescaddress; 641f1d2b4d3SLarry Finger u32 nextdescaddress64; 642f1d2b4d3SLarry Finger 643f1d2b4d3SLarry Finger u32 reserve_pass_pcie_mm_limit[4]; 644f1d2b4d3SLarry Finger } __packed; 645f1d2b4d3SLarry Finger 646f1d2b4d3SLarry Finger struct rx_desc_92d { 647f1d2b4d3SLarry Finger u32 length:14; 648f1d2b4d3SLarry Finger u32 crc32:1; 649f1d2b4d3SLarry Finger u32 icverror:1; 650f1d2b4d3SLarry Finger u32 drv_infosize:4; 651f1d2b4d3SLarry Finger u32 security:3; 652f1d2b4d3SLarry Finger u32 qos:1; 653f1d2b4d3SLarry Finger u32 shift:2; 654f1d2b4d3SLarry Finger u32 phystatus:1; 655f1d2b4d3SLarry Finger u32 swdec:1; 656f1d2b4d3SLarry Finger u32 lastseg:1; 657f1d2b4d3SLarry Finger u32 firstseg:1; 658f1d2b4d3SLarry Finger u32 eor:1; 659f1d2b4d3SLarry Finger u32 own:1; 660f1d2b4d3SLarry Finger 661f1d2b4d3SLarry Finger u32 macid:5; 662f1d2b4d3SLarry Finger u32 tid:4; 663f1d2b4d3SLarry Finger u32 hwrsvd:5; 664f1d2b4d3SLarry Finger u32 paggr:1; 665f1d2b4d3SLarry Finger u32 faggr:1; 666f1d2b4d3SLarry Finger u32 a1_fit:4; 667f1d2b4d3SLarry Finger u32 a2_fit:4; 668f1d2b4d3SLarry Finger u32 pam:1; 669f1d2b4d3SLarry Finger u32 pwr:1; 670f1d2b4d3SLarry Finger u32 moredata:1; 671f1d2b4d3SLarry Finger u32 morefrag:1; 672f1d2b4d3SLarry Finger u32 type:2; 673f1d2b4d3SLarry Finger u32 mc:1; 674f1d2b4d3SLarry Finger u32 bc:1; 675f1d2b4d3SLarry Finger 676f1d2b4d3SLarry Finger u32 seq:12; 677f1d2b4d3SLarry Finger u32 frag:4; 678f1d2b4d3SLarry Finger u32 nextpktlen:14; 679f1d2b4d3SLarry Finger u32 nextind:1; 680f1d2b4d3SLarry Finger u32 rsvd:1; 681f1d2b4d3SLarry Finger 682f1d2b4d3SLarry Finger u32 rxmcs:6; 683f1d2b4d3SLarry Finger u32 rxht:1; 684f1d2b4d3SLarry Finger u32 amsdu:1; 685f1d2b4d3SLarry Finger u32 splcp:1; 686f1d2b4d3SLarry Finger u32 bandwidth:1; 687f1d2b4d3SLarry Finger u32 htc:1; 688f1d2b4d3SLarry Finger u32 tcpchk_rpt:1; 689f1d2b4d3SLarry Finger u32 ipcchk_rpt:1; 690f1d2b4d3SLarry Finger u32 tcpchk_valid:1; 691f1d2b4d3SLarry Finger u32 hwpcerr:1; 692f1d2b4d3SLarry Finger u32 hwpcind:1; 693f1d2b4d3SLarry Finger u32 iv0:16; 694f1d2b4d3SLarry Finger 695f1d2b4d3SLarry Finger u32 iv1; 696f1d2b4d3SLarry Finger 697f1d2b4d3SLarry Finger u32 tsfl; 698f1d2b4d3SLarry Finger 699f1d2b4d3SLarry Finger u32 bufferaddress; 700f1d2b4d3SLarry Finger u32 bufferaddress64; 701f1d2b4d3SLarry Finger 702f1d2b4d3SLarry Finger } __packed; 703f1d2b4d3SLarry Finger 704f1d2b4d3SLarry Finger void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, 705f1d2b4d3SLarry Finger struct ieee80211_hdr *hdr, u8 *pdesc, 706f1d2b4d3SLarry Finger u8 *pbd_desc_tx, struct ieee80211_tx_info *info, 707f1d2b4d3SLarry Finger struct ieee80211_sta *sta, 708f1d2b4d3SLarry Finger struct sk_buff *skb, u8 hw_queue, 709f1d2b4d3SLarry Finger struct rtl_tcb_desc *ptcb_desc); 710f1d2b4d3SLarry Finger bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, 711f1d2b4d3SLarry Finger struct rtl_stats *stats, 712f1d2b4d3SLarry Finger struct ieee80211_rx_status *rx_status, 713f1d2b4d3SLarry Finger u8 *pdesc, struct sk_buff *skb); 714f1d2b4d3SLarry Finger void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, 715f1d2b4d3SLarry Finger u8 desc_name, u8 *val); 7160c07bd74SPing-Ke Shih u64 rtl92de_get_desc(struct ieee80211_hw *hw, 7170c07bd74SPing-Ke Shih u8 *p_desc, bool istx, u8 desc_name); 7183155db76SLarry Finger bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw, 7193155db76SLarry Finger u8 hw_queue, u16 index); 720f1d2b4d3SLarry Finger void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 721f1d2b4d3SLarry Finger void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 722f1d2b4d3SLarry Finger bool b_firstseg, bool b_lastseg, 723f1d2b4d3SLarry Finger struct sk_buff *skb); 724f1d2b4d3SLarry Finger 725f1d2b4d3SLarry Finger #endif 726