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 1750ebdaa2SBitterblue Smith enum rtl92d_rx_desc_enc { 1850ebdaa2SBitterblue Smith RX_DESC_ENC_NONE = 0, 1950ebdaa2SBitterblue Smith RX_DESC_ENC_WEP40 = 1, 2050ebdaa2SBitterblue Smith RX_DESC_ENC_TKIP_WO_MIC = 2, 2150ebdaa2SBitterblue Smith RX_DESC_ENC_TKIP_MIC = 3, 2250ebdaa2SBitterblue Smith RX_DESC_ENC_AES = 4, 2350ebdaa2SBitterblue Smith RX_DESC_ENC_WEP104 = 5, 2450ebdaa2SBitterblue Smith }; 2550ebdaa2SBitterblue Smith 26f1d2b4d3SLarry Finger /* macros to read/write various fields in RX or TX descriptors */ 27f1d2b4d3SLarry Finger 2896c21a25SLarry Finger static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val) 29fa2b36a3SLarry Finger { 3096c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, GENMASK(15, 0)); 31fa2b36a3SLarry Finger } 32f1d2b4d3SLarry Finger 3396c21a25SLarry Finger static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val) 34fa2b36a3SLarry Finger { 3596c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, GENMASK(23, 16)); 36fa2b36a3SLarry Finger } 37f1d2b4d3SLarry Finger 3896c21a25SLarry Finger static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val) 39fa2b36a3SLarry Finger { 4096c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(25)); 41fa2b36a3SLarry Finger } 42f1d2b4d3SLarry Finger 4396c21a25SLarry Finger static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val) 44fa2b36a3SLarry Finger { 4596c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(26)); 46fa2b36a3SLarry Finger } 47f1d2b4d3SLarry Finger 4896c21a25SLarry Finger static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val) 49fa2b36a3SLarry Finger { 5096c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(27)); 51fa2b36a3SLarry Finger } 52f1d2b4d3SLarry Finger 5396c21a25SLarry Finger static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val) 54fa2b36a3SLarry Finger { 5596c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(28)); 56fa2b36a3SLarry Finger } 57f1d2b4d3SLarry Finger 5896c21a25SLarry Finger static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val) 59fa2b36a3SLarry Finger { 6096c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(31)); 61fa2b36a3SLarry Finger } 62f1d2b4d3SLarry Finger 6396c21a25SLarry Finger static inline u32 get_tx_desc_own(__le32 *__pdesc) 64fa2b36a3SLarry Finger { 6596c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(31)); 66fa2b36a3SLarry Finger } 67f1d2b4d3SLarry Finger 6896c21a25SLarry Finger static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val) 69fa2b36a3SLarry Finger { 7096c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0)); 71fa2b36a3SLarry Finger } 72f1d2b4d3SLarry Finger 7396c21a25SLarry Finger static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val) 74fa2b36a3SLarry Finger { 7596c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, BIT(5)); 76fa2b36a3SLarry Finger } 77f1d2b4d3SLarry Finger 7896c21a25SLarry Finger static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val) 79fa2b36a3SLarry Finger { 8096c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, BIT(7)); 81fa2b36a3SLarry Finger } 82f1d2b4d3SLarry Finger 8396c21a25SLarry Finger static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val) 84fa2b36a3SLarry Finger { 8596c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8)); 86fa2b36a3SLarry Finger } 87f1d2b4d3SLarry Finger 8896c21a25SLarry Finger static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val) 89fa2b36a3SLarry Finger { 9096c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, GENMASK(19, 16)); 91fa2b36a3SLarry Finger } 92f1d2b4d3SLarry Finger 9396c21a25SLarry Finger static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val) 94fa2b36a3SLarry Finger { 9596c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22)); 96fa2b36a3SLarry Finger } 97f1d2b4d3SLarry Finger 9896c21a25SLarry Finger static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val) 99fa2b36a3SLarry Finger { 10096c21a25SLarry Finger le32p_replace_bits((__pdesc + 1), __val, GENMASK(30, 26)); 101fa2b36a3SLarry Finger } 102f1d2b4d3SLarry Finger 10396c21a25SLarry Finger static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val) 104fa2b36a3SLarry Finger { 10596c21a25SLarry Finger le32p_replace_bits((__pdesc + 2), __val, BIT(17)); 106fa2b36a3SLarry Finger } 107f1d2b4d3SLarry Finger 10896c21a25SLarry Finger static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val) 109fa2b36a3SLarry Finger { 11096c21a25SLarry Finger le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20)); 111fa2b36a3SLarry Finger } 112f1d2b4d3SLarry Finger 11396c21a25SLarry Finger static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val) 114fa2b36a3SLarry Finger { 11596c21a25SLarry Finger le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16)); 116fa2b36a3SLarry Finger } 117fa2b36a3SLarry Finger 11896c21a25SLarry Finger static inline void set_tx_desc_pkt_id(__le32 *__pdesc, u32 __val) 119fa2b36a3SLarry Finger { 12096c21a25SLarry Finger le32p_replace_bits((__pdesc + 3), __val, GENMASK(31, 28)); 121fa2b36a3SLarry Finger } 122fa2b36a3SLarry Finger 12396c21a25SLarry Finger static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val) 124fa2b36a3SLarry Finger { 12596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, GENMASK(4, 0)); 126fa2b36a3SLarry Finger } 127fa2b36a3SLarry Finger 12896c21a25SLarry Finger static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val) 129fa2b36a3SLarry Finger { 13096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(6)); 131fa2b36a3SLarry Finger } 132fa2b36a3SLarry Finger 13396c21a25SLarry Finger static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val) 134fa2b36a3SLarry Finger { 13596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(7)); 136fa2b36a3SLarry Finger } 137fa2b36a3SLarry Finger 13896c21a25SLarry Finger static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val) 139fa2b36a3SLarry Finger { 14096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(8)); 141fa2b36a3SLarry Finger } 142fa2b36a3SLarry Finger 14396c21a25SLarry Finger static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val) 144fa2b36a3SLarry Finger { 14596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(10)); 146fa2b36a3SLarry Finger } 147fa2b36a3SLarry Finger 14896c21a25SLarry Finger static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val) 149fa2b36a3SLarry Finger { 15096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(11)); 151fa2b36a3SLarry Finger } 152fa2b36a3SLarry Finger 15396c21a25SLarry Finger static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val) 154fa2b36a3SLarry Finger { 15596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(12)); 156fa2b36a3SLarry Finger } 157fa2b36a3SLarry Finger 15896c21a25SLarry Finger static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val) 159fa2b36a3SLarry Finger { 16096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(13)); 161fa2b36a3SLarry Finger } 162fa2b36a3SLarry Finger 16396c21a25SLarry Finger static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val) 164fa2b36a3SLarry Finger { 16596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, GENMASK(21, 20)); 166fa2b36a3SLarry Finger } 167fa2b36a3SLarry Finger 16896c21a25SLarry Finger static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val) 169fa2b36a3SLarry Finger { 17096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(25)); 171fa2b36a3SLarry Finger } 172fa2b36a3SLarry Finger 17396c21a25SLarry Finger static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val) 174fa2b36a3SLarry Finger { 17596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(26)); 176fa2b36a3SLarry Finger } 177fa2b36a3SLarry Finger 17896c21a25SLarry Finger static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val) 179fa2b36a3SLarry Finger { 18096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, BIT(27)); 181fa2b36a3SLarry Finger } 182fa2b36a3SLarry Finger 18396c21a25SLarry Finger static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val) 184fa2b36a3SLarry Finger { 18596c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, GENMASK(29, 28)); 186fa2b36a3SLarry Finger } 187fa2b36a3SLarry Finger 18896c21a25SLarry Finger static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val) 189fa2b36a3SLarry Finger { 19096c21a25SLarry Finger le32p_replace_bits((__pdesc + 4), __val, GENMASK(31, 30)); 191fa2b36a3SLarry Finger } 192fa2b36a3SLarry Finger 19396c21a25SLarry Finger static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val) 194fa2b36a3SLarry Finger { 19596c21a25SLarry Finger le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0)); 196fa2b36a3SLarry Finger } 197fa2b36a3SLarry Finger 19896c21a25SLarry Finger static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val) 199fa2b36a3SLarry Finger { 20096c21a25SLarry Finger le32p_replace_bits((__pdesc + 5), __val, BIT(6)); 201fa2b36a3SLarry Finger } 202fa2b36a3SLarry Finger 20396c21a25SLarry Finger static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val) 204fa2b36a3SLarry Finger { 20596c21a25SLarry Finger le32p_replace_bits((__pdesc + 5), __val, GENMASK(12, 8)); 206fa2b36a3SLarry Finger } 207fa2b36a3SLarry Finger 20896c21a25SLarry Finger static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val) 209fa2b36a3SLarry Finger { 21096c21a25SLarry Finger le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13)); 211fa2b36a3SLarry Finger } 212fa2b36a3SLarry Finger 21396c21a25SLarry Finger static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val) 214fa2b36a3SLarry Finger { 21596c21a25SLarry Finger le32p_replace_bits((__pdesc + 6), __val, GENMASK(15, 11)); 216fa2b36a3SLarry Finger } 217fa2b36a3SLarry Finger 21896c21a25SLarry Finger static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val) 219fa2b36a3SLarry Finger { 22096c21a25SLarry Finger le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0)); 221fa2b36a3SLarry Finger } 222fa2b36a3SLarry Finger 22396c21a25SLarry Finger static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val) 224fa2b36a3SLarry Finger { 22596c21a25SLarry Finger *(__pdesc + 8) = cpu_to_le32(__val); 226fa2b36a3SLarry Finger } 227fa2b36a3SLarry Finger 22896c21a25SLarry Finger static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc) 229fa2b36a3SLarry Finger { 23096c21a25SLarry Finger return le32_to_cpu(*(__pdesc + 8)); 231fa2b36a3SLarry Finger } 232fa2b36a3SLarry Finger 23396c21a25SLarry Finger static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val) 234fa2b36a3SLarry Finger { 23596c21a25SLarry Finger *(__pdesc + 10) = cpu_to_le32(__val); 236fa2b36a3SLarry Finger } 237fa2b36a3SLarry Finger 23896c21a25SLarry Finger static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc) 239fa2b36a3SLarry Finger { 24096c21a25SLarry Finger return le32_get_bits(*__pdesc, GENMASK(13, 0)); 241fa2b36a3SLarry Finger } 242fa2b36a3SLarry Finger 24396c21a25SLarry Finger static inline u32 get_rx_desc_crc32(__le32 *__pdesc) 244fa2b36a3SLarry Finger { 24596c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(14)); 246fa2b36a3SLarry Finger } 247fa2b36a3SLarry Finger 24896c21a25SLarry Finger static inline u32 get_rx_desc_icv(__le32 *__pdesc) 249fa2b36a3SLarry Finger { 25096c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(15)); 251fa2b36a3SLarry Finger } 252fa2b36a3SLarry Finger 25396c21a25SLarry Finger static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc) 254fa2b36a3SLarry Finger { 25596c21a25SLarry Finger return le32_get_bits(*__pdesc, GENMASK(19, 16)); 256fa2b36a3SLarry Finger } 257fa2b36a3SLarry Finger 25850ebdaa2SBitterblue Smith static inline u32 get_rx_desc_enc_type(__le32 *__pdesc) 25950ebdaa2SBitterblue Smith { 26050ebdaa2SBitterblue Smith return le32_get_bits(*__pdesc, GENMASK(22, 20)); 26150ebdaa2SBitterblue Smith } 26250ebdaa2SBitterblue Smith 26396c21a25SLarry Finger static inline u32 get_rx_desc_shift(__le32 *__pdesc) 264fa2b36a3SLarry Finger { 26596c21a25SLarry Finger return le32_get_bits(*__pdesc, GENMASK(25, 24)); 266fa2b36a3SLarry Finger } 267fa2b36a3SLarry Finger 26896c21a25SLarry Finger static inline u32 get_rx_desc_physt(__le32 *__pdesc) 269fa2b36a3SLarry Finger { 27096c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(26)); 271fa2b36a3SLarry Finger } 272fa2b36a3SLarry Finger 27396c21a25SLarry Finger static inline u32 get_rx_desc_swdec(__le32 *__pdesc) 274fa2b36a3SLarry Finger { 27596c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(27)); 276fa2b36a3SLarry Finger } 277fa2b36a3SLarry Finger 27896c21a25SLarry Finger static inline u32 get_rx_desc_own(__le32 *__pdesc) 279fa2b36a3SLarry Finger { 28096c21a25SLarry Finger return le32_get_bits(*__pdesc, BIT(31)); 281fa2b36a3SLarry Finger } 282fa2b36a3SLarry Finger 28396c21a25SLarry Finger static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val) 284fa2b36a3SLarry Finger { 28596c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, GENMASK(13, 0)); 286fa2b36a3SLarry Finger } 287fa2b36a3SLarry Finger 28896c21a25SLarry Finger static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val) 289fa2b36a3SLarry Finger { 29096c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(30)); 291fa2b36a3SLarry Finger } 292fa2b36a3SLarry Finger 29396c21a25SLarry Finger static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val) 294fa2b36a3SLarry Finger { 29596c21a25SLarry Finger le32p_replace_bits(__pdesc, __val, BIT(31)); 296fa2b36a3SLarry Finger } 297fa2b36a3SLarry Finger 29896c21a25SLarry Finger static inline u32 get_rx_desc_paggr(__le32 *__pdesc) 299fa2b36a3SLarry Finger { 30096c21a25SLarry Finger return le32_get_bits(*(__pdesc + 1), BIT(14)); 301fa2b36a3SLarry Finger } 302fa2b36a3SLarry Finger 30396c21a25SLarry Finger static inline u32 get_rx_desc_faggr(__le32 *__pdesc) 304fa2b36a3SLarry Finger { 30596c21a25SLarry Finger return le32_get_bits(*(__pdesc + 1), BIT(15)); 306fa2b36a3SLarry Finger } 307fa2b36a3SLarry Finger 30896c21a25SLarry Finger static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc) 309fa2b36a3SLarry Finger { 31096c21a25SLarry Finger return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0)); 311fa2b36a3SLarry Finger } 312fa2b36a3SLarry Finger 31396c21a25SLarry Finger static inline u32 get_rx_desc_rxht(__le32 *__pdesc) 314fa2b36a3SLarry Finger { 31596c21a25SLarry Finger return le32_get_bits(*(__pdesc + 3), BIT(6)); 316fa2b36a3SLarry Finger } 317fa2b36a3SLarry Finger 31896c21a25SLarry Finger static inline u32 get_rx_desc_splcp(__le32 *__pdesc) 319fa2b36a3SLarry Finger { 32096c21a25SLarry Finger return le32_get_bits(*(__pdesc + 3), BIT(8)); 321fa2b36a3SLarry Finger } 322fa2b36a3SLarry Finger 32396c21a25SLarry Finger static inline u32 get_rx_desc_bw(__le32 *__pdesc) 324fa2b36a3SLarry Finger { 32596c21a25SLarry Finger return le32_get_bits(*(__pdesc + 3), BIT(9)); 326fa2b36a3SLarry Finger } 327fa2b36a3SLarry Finger 32896c21a25SLarry Finger static inline u32 get_rx_desc_tsfl(__le32 *__pdesc) 329fa2b36a3SLarry Finger { 33096c21a25SLarry Finger return le32_to_cpu(*(__pdesc + 5)); 331fa2b36a3SLarry Finger } 332fa2b36a3SLarry Finger 33396c21a25SLarry Finger static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc) 334fa2b36a3SLarry Finger { 33596c21a25SLarry Finger return le32_to_cpu(*(__pdesc + 6)); 336fa2b36a3SLarry Finger } 337fa2b36a3SLarry Finger 33896c21a25SLarry Finger static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val) 339fa2b36a3SLarry Finger { 34096c21a25SLarry Finger *(__pdesc + 6) = cpu_to_le32(__val); 341fa2b36a3SLarry Finger } 342f1d2b4d3SLarry Finger 34396c21a25SLarry Finger static inline void clear_pci_tx_desc_content(__le32 *__pdesc, u32 _size) 34496c21a25SLarry Finger { 34596c21a25SLarry Finger memset((void *)__pdesc, 0, 34696c21a25SLarry Finger min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET)); 34796c21a25SLarry Finger } 348f1d2b4d3SLarry Finger 349f1d2b4d3SLarry Finger /* For 92D early mode */ 35096c21a25SLarry Finger static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value) 351fa2b36a3SLarry Finger { 35296c21a25SLarry Finger le32p_replace_bits(__paddr, __value, GENMASK(2, 0)); 353fa2b36a3SLarry Finger } 354fa2b36a3SLarry Finger 35596c21a25SLarry Finger static inline void set_earlymode_len0(__le32 *__paddr, u32 __value) 356fa2b36a3SLarry Finger { 35796c21a25SLarry Finger le32p_replace_bits(__paddr, __value, GENMASK(15, 4)); 358fa2b36a3SLarry Finger } 359fa2b36a3SLarry Finger 36096c21a25SLarry Finger static inline void set_earlymode_len1(__le32 *__paddr, u32 __value) 361fa2b36a3SLarry Finger { 36296c21a25SLarry Finger le32p_replace_bits(__paddr, __value, GENMASK(27, 16)); 363fa2b36a3SLarry Finger } 364fa2b36a3SLarry Finger 36596c21a25SLarry Finger static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value) 366fa2b36a3SLarry Finger { 36796c21a25SLarry Finger le32p_replace_bits(__paddr, __value, GENMASK(31, 28)); 368fa2b36a3SLarry Finger } 369fa2b36a3SLarry Finger 37096c21a25SLarry Finger static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value) 371fa2b36a3SLarry Finger { 37296c21a25SLarry Finger le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0)); 373fa2b36a3SLarry Finger } 374fa2b36a3SLarry Finger 37596c21a25SLarry Finger static inline void set_earlymode_len3(__le32 *__paddr, u32 __value) 376fa2b36a3SLarry Finger { 37796c21a25SLarry Finger le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8)); 378fa2b36a3SLarry Finger } 379fa2b36a3SLarry Finger 38096c21a25SLarry Finger static inline void set_earlymode_len4(__le32 *__paddr, u32 __value) 381fa2b36a3SLarry Finger { 38296c21a25SLarry Finger le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20)); 383fa2b36a3SLarry Finger } 384f1d2b4d3SLarry Finger 385f1d2b4d3SLarry Finger struct rx_fwinfo_92d { 386f1d2b4d3SLarry Finger u8 gain_trsw[4]; 387f1d2b4d3SLarry Finger u8 pwdb_all; 388f1d2b4d3SLarry Finger u8 cfosho[4]; 389f1d2b4d3SLarry Finger u8 cfotail[4]; 39008aba42fSArnd Bergmann s8 rxevm[2]; 39108aba42fSArnd Bergmann s8 rxsnr[4]; 392f1d2b4d3SLarry Finger u8 pdsnr[2]; 393f1d2b4d3SLarry Finger u8 csi_current[2]; 394f1d2b4d3SLarry Finger u8 csi_target[2]; 395f1d2b4d3SLarry Finger u8 sigevm; 396f1d2b4d3SLarry Finger u8 max_ex_pwr; 397f1d2b4d3SLarry Finger u8 ex_intf_flag:1; 398f1d2b4d3SLarry Finger u8 sgi_en:1; 399f1d2b4d3SLarry Finger u8 rxsc:2; 400f1d2b4d3SLarry Finger u8 reserve:4; 401f1d2b4d3SLarry Finger } __packed; 402f1d2b4d3SLarry Finger 403f1d2b4d3SLarry Finger struct tx_desc_92d { 404f1d2b4d3SLarry Finger u32 pktsize:16; 405f1d2b4d3SLarry Finger u32 offset:8; 406f1d2b4d3SLarry Finger u32 bmc:1; 407f1d2b4d3SLarry Finger u32 htc:1; 408f1d2b4d3SLarry Finger u32 lastseg:1; 409f1d2b4d3SLarry Finger u32 firstseg:1; 410f1d2b4d3SLarry Finger u32 linip:1; 411f1d2b4d3SLarry Finger u32 noacm:1; 412f1d2b4d3SLarry Finger u32 gf:1; 413f1d2b4d3SLarry Finger u32 own:1; 414f1d2b4d3SLarry Finger 415f1d2b4d3SLarry Finger u32 macid:5; 416f1d2b4d3SLarry Finger u32 agg_en:1; 417f1d2b4d3SLarry Finger u32 bk:1; 418f1d2b4d3SLarry Finger u32 rdg_en:1; 419f1d2b4d3SLarry Finger u32 queuesel:5; 420f1d2b4d3SLarry Finger u32 rd_nav_ext:1; 421f1d2b4d3SLarry Finger u32 lsig_txop_en:1; 422f1d2b4d3SLarry Finger u32 pifs:1; 423f1d2b4d3SLarry Finger u32 rateid:4; 424f1d2b4d3SLarry Finger u32 nav_usehdr:1; 425f1d2b4d3SLarry Finger u32 en_descid:1; 426f1d2b4d3SLarry Finger u32 sectype:2; 427f1d2b4d3SLarry Finger u32 pktoffset:8; 428f1d2b4d3SLarry Finger 429f1d2b4d3SLarry Finger u32 rts_rc:6; 430f1d2b4d3SLarry Finger u32 data_rc:6; 431f1d2b4d3SLarry Finger u32 rsvd0:2; 432f1d2b4d3SLarry Finger u32 bar_retryht:2; 433f1d2b4d3SLarry Finger u32 rsvd1:1; 434f1d2b4d3SLarry Finger u32 morefrag:1; 435f1d2b4d3SLarry Finger u32 raw:1; 436f1d2b4d3SLarry Finger u32 ccx:1; 437f1d2b4d3SLarry Finger u32 ampdudensity:3; 438f1d2b4d3SLarry Finger u32 rsvd2:1; 439f1d2b4d3SLarry Finger u32 ant_sela:1; 440f1d2b4d3SLarry Finger u32 ant_selb:1; 441f1d2b4d3SLarry Finger u32 txant_cck:2; 442f1d2b4d3SLarry Finger u32 txant_l:2; 443f1d2b4d3SLarry Finger u32 txant_ht:2; 444f1d2b4d3SLarry Finger 445f1d2b4d3SLarry Finger u32 nextheadpage:8; 446f1d2b4d3SLarry Finger u32 tailpage:8; 447f1d2b4d3SLarry Finger u32 seq:12; 448f1d2b4d3SLarry Finger u32 pktid:4; 449f1d2b4d3SLarry Finger 450f1d2b4d3SLarry Finger u32 rtsrate:5; 451f1d2b4d3SLarry Finger u32 apdcfe:1; 452f1d2b4d3SLarry Finger u32 qos:1; 453f1d2b4d3SLarry Finger u32 hwseq_enable:1; 454f1d2b4d3SLarry Finger u32 userrate:1; 455f1d2b4d3SLarry Finger u32 dis_rtsfb:1; 456f1d2b4d3SLarry Finger u32 dis_datafb:1; 457f1d2b4d3SLarry Finger u32 cts2self:1; 458f1d2b4d3SLarry Finger u32 rts_en:1; 459f1d2b4d3SLarry Finger u32 hwrts_en:1; 460f1d2b4d3SLarry Finger u32 portid:1; 461f1d2b4d3SLarry Finger u32 rsvd3:3; 462f1d2b4d3SLarry Finger u32 waitdcts:1; 463f1d2b4d3SLarry Finger u32 cts2ap_en:1; 464f1d2b4d3SLarry Finger u32 txsc:2; 465f1d2b4d3SLarry Finger u32 stbc:2; 466f1d2b4d3SLarry Finger u32 txshort:1; 467f1d2b4d3SLarry Finger u32 txbw:1; 468f1d2b4d3SLarry Finger u32 rtsshort:1; 469f1d2b4d3SLarry Finger u32 rtsbw:1; 470f1d2b4d3SLarry Finger u32 rtssc:2; 471f1d2b4d3SLarry Finger u32 rtsstbc:2; 472f1d2b4d3SLarry Finger 473f1d2b4d3SLarry Finger u32 txrate:6; 474f1d2b4d3SLarry Finger u32 shortgi:1; 475f1d2b4d3SLarry Finger u32 ccxt:1; 476f1d2b4d3SLarry Finger u32 txrate_fb_lmt:5; 477f1d2b4d3SLarry Finger u32 rtsrate_fb_lmt:4; 478f1d2b4d3SLarry Finger u32 retrylmt_en:1; 479f1d2b4d3SLarry Finger u32 txretrylmt:6; 480f1d2b4d3SLarry Finger u32 usb_txaggnum:8; 481f1d2b4d3SLarry Finger 482f1d2b4d3SLarry Finger u32 txagca:5; 483f1d2b4d3SLarry Finger u32 txagcb:5; 484f1d2b4d3SLarry Finger u32 usemaxlen:1; 485f1d2b4d3SLarry Finger u32 maxaggnum:5; 486f1d2b4d3SLarry Finger u32 mcsg1maxlen:4; 487f1d2b4d3SLarry Finger u32 mcsg2maxlen:4; 488f1d2b4d3SLarry Finger u32 mcsg3maxlen:4; 489f1d2b4d3SLarry Finger u32 mcs7sgimaxlen:4; 490f1d2b4d3SLarry Finger 491f1d2b4d3SLarry Finger u32 txbuffersize:16; 492f1d2b4d3SLarry Finger u32 mcsg4maxlen:4; 493f1d2b4d3SLarry Finger u32 mcsg5maxlen:4; 494f1d2b4d3SLarry Finger u32 mcsg6maxlen:4; 495f1d2b4d3SLarry Finger u32 mcsg15sgimaxlen:4; 496f1d2b4d3SLarry Finger 497f1d2b4d3SLarry Finger u32 txbuffaddr; 498f1d2b4d3SLarry Finger u32 txbufferaddr64; 499f1d2b4d3SLarry Finger u32 nextdescaddress; 500f1d2b4d3SLarry Finger u32 nextdescaddress64; 501f1d2b4d3SLarry Finger 502f1d2b4d3SLarry Finger u32 reserve_pass_pcie_mm_limit[4]; 503f1d2b4d3SLarry Finger } __packed; 504f1d2b4d3SLarry Finger 505f1d2b4d3SLarry Finger struct rx_desc_92d { 506f1d2b4d3SLarry Finger u32 length:14; 507f1d2b4d3SLarry Finger u32 crc32:1; 508f1d2b4d3SLarry Finger u32 icverror:1; 509f1d2b4d3SLarry Finger u32 drv_infosize:4; 510f1d2b4d3SLarry Finger u32 security:3; 511f1d2b4d3SLarry Finger u32 qos:1; 512f1d2b4d3SLarry Finger u32 shift:2; 513f1d2b4d3SLarry Finger u32 phystatus:1; 514f1d2b4d3SLarry Finger u32 swdec:1; 515f1d2b4d3SLarry Finger u32 lastseg:1; 516f1d2b4d3SLarry Finger u32 firstseg:1; 517f1d2b4d3SLarry Finger u32 eor:1; 518f1d2b4d3SLarry Finger u32 own:1; 519f1d2b4d3SLarry Finger 520f1d2b4d3SLarry Finger u32 macid:5; 521f1d2b4d3SLarry Finger u32 tid:4; 522f1d2b4d3SLarry Finger u32 hwrsvd:5; 523f1d2b4d3SLarry Finger u32 paggr:1; 524f1d2b4d3SLarry Finger u32 faggr:1; 525f1d2b4d3SLarry Finger u32 a1_fit:4; 526f1d2b4d3SLarry Finger u32 a2_fit:4; 527f1d2b4d3SLarry Finger u32 pam:1; 528f1d2b4d3SLarry Finger u32 pwr:1; 529f1d2b4d3SLarry Finger u32 moredata:1; 530f1d2b4d3SLarry Finger u32 morefrag:1; 531f1d2b4d3SLarry Finger u32 type:2; 532f1d2b4d3SLarry Finger u32 mc:1; 533f1d2b4d3SLarry Finger u32 bc:1; 534f1d2b4d3SLarry Finger 535f1d2b4d3SLarry Finger u32 seq:12; 536f1d2b4d3SLarry Finger u32 frag:4; 537f1d2b4d3SLarry Finger u32 nextpktlen:14; 538f1d2b4d3SLarry Finger u32 nextind:1; 539f1d2b4d3SLarry Finger u32 rsvd:1; 540f1d2b4d3SLarry Finger 541f1d2b4d3SLarry Finger u32 rxmcs:6; 542f1d2b4d3SLarry Finger u32 rxht:1; 543f1d2b4d3SLarry Finger u32 amsdu:1; 544f1d2b4d3SLarry Finger u32 splcp:1; 545f1d2b4d3SLarry Finger u32 bandwidth:1; 546f1d2b4d3SLarry Finger u32 htc:1; 547f1d2b4d3SLarry Finger u32 tcpchk_rpt:1; 548f1d2b4d3SLarry Finger u32 ipcchk_rpt:1; 549f1d2b4d3SLarry Finger u32 tcpchk_valid:1; 550f1d2b4d3SLarry Finger u32 hwpcerr:1; 551f1d2b4d3SLarry Finger u32 hwpcind:1; 552f1d2b4d3SLarry Finger u32 iv0:16; 553f1d2b4d3SLarry Finger 554f1d2b4d3SLarry Finger u32 iv1; 555f1d2b4d3SLarry Finger 556f1d2b4d3SLarry Finger u32 tsfl; 557f1d2b4d3SLarry Finger 558f1d2b4d3SLarry Finger u32 bufferaddress; 559f1d2b4d3SLarry Finger u32 bufferaddress64; 560f1d2b4d3SLarry Finger 561f1d2b4d3SLarry Finger } __packed; 562f1d2b4d3SLarry Finger 563f1d2b4d3SLarry Finger void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, 564f1d2b4d3SLarry Finger struct ieee80211_hdr *hdr, u8 *pdesc, 565f1d2b4d3SLarry Finger u8 *pbd_desc_tx, struct ieee80211_tx_info *info, 566f1d2b4d3SLarry Finger struct ieee80211_sta *sta, 567f1d2b4d3SLarry Finger struct sk_buff *skb, u8 hw_queue, 568f1d2b4d3SLarry Finger struct rtl_tcb_desc *ptcb_desc); 569f1d2b4d3SLarry Finger bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, 570f1d2b4d3SLarry Finger struct rtl_stats *stats, 571f1d2b4d3SLarry Finger struct ieee80211_rx_status *rx_status, 572f1d2b4d3SLarry Finger u8 *pdesc, struct sk_buff *skb); 573f1d2b4d3SLarry Finger void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, 574f1d2b4d3SLarry Finger u8 desc_name, u8 *val); 5750c07bd74SPing-Ke Shih u64 rtl92de_get_desc(struct ieee80211_hw *hw, 5760c07bd74SPing-Ke Shih u8 *p_desc, bool istx, u8 desc_name); 5773155db76SLarry Finger bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw, 5783155db76SLarry Finger u8 hw_queue, u16 index); 579f1d2b4d3SLarry Finger void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 580f1d2b4d3SLarry Finger void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 581f1d2b4d3SLarry Finger bool b_firstseg, bool b_lastseg, 582f1d2b4d3SLarry Finger struct sk_buff *skb); 583f1d2b4d3SLarry Finger 584f1d2b4d3SLarry Finger #endif 585