root/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. set_tx_desc_pkt_size
  2. set_tx_desc_offset
  3. set_tx_desc_bmc
  4. set_tx_desc_htc
  5. set_tx_desc_last_seg
  6. set_tx_desc_first_seg
  7. set_tx_desc_linip
  8. set_tx_desc_own
  9. get_tx_desc_own
  10. set_tx_desc_macid
  11. set_tx_desc_queue_sel
  12. set_tx_desc_rate_id
  13. set_tx_desc_sec_type
  14. set_tx_desc_pkt_offset
  15. set_tx_desc_agg_enable
  16. set_tx_desc_rdg_enable
  17. set_tx_desc_more_frag
  18. set_tx_desc_ampdu_density
  19. set_tx_desc_hwseq_sel
  20. set_tx_desc_use_rate
  21. set_tx_desc_disable_fb
  22. set_tx_desc_cts2self
  23. set_tx_desc_rts_enable
  24. set_tx_desc_hw_rts_enable
  25. set_tx_desc_nav_use_hdr
  26. set_tx_desc_max_agg_num
  27. set_tx_desc_tx_ant
  28. set_tx_desc_tx_rate
  29. set_tx_desc_data_rate_fb_limit
  30. set_tx_desc_rts_rate_fb_limit
  31. set_tx_desc_rts_rate
  32. set_tx_desc_tx_sub_carrier
  33. set_tx_desc_data_shortgi
  34. set_tx_desc_data_bw
  35. set_tx_desc_rts_short
  36. set_tx_desc_rts_sc
  37. set_tx_desc_tx_buffer_size
  38. set_tx_desc_hwseq_en
  39. set_tx_desc_seq
  40. set_tx_desc_tx_buffer_address
  41. get_tx_desc_tx_buffer_address
  42. set_tx_desc_next_desc_address
  43. get_rx_desc_pkt_len
  44. get_rx_desc_crc32
  45. get_rx_desc_icv
  46. get_rx_desc_drv_info_size
  47. get_rx_desc_shift
  48. get_rx_desc_physt
  49. get_rx_desc_swdec
  50. get_rx_desc_own
  51. set_rx_desc_pkt_len
  52. set_rx_desc_eor
  53. set_rx_desc_own
  54. get_rx_desc_macid
  55. get_rx_desc_paggr
  56. get_rx_status_desc_rpt_sel
  57. get_rx_desc_rxmcs
  58. get_rx_status_desc_pattern_match
  59. get_rx_status_desc_unicast_match
  60. get_rx_status_desc_magic_match
  61. get_rx_desc_splcp
  62. get_rx_desc_bw
  63. get_rx_desc_tsfl
  64. get_rx_desc_buff_addr
  65. set_rx_desc_buff_addr
  66. get_rx_rpt2_desc_macid_valid_1
  67. get_rx_rpt2_desc_macid_valid_2
  68. set_earlymode_pktnum
  69. set_earlymode_len0
  70. set_earlymode_len1
  71. set_earlymode_len2_1
  72. set_earlymode_len2_2
  73. set_earlymode_len3
  74. set_earlymode_len4
  75. clear_pci_tx_desc_content

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /* Copyright(c) 2009-2010  Realtek Corporation.*/
   3 
   4 #ifndef __RTL8821AE_TRX_H__
   5 #define __RTL8821AE_TRX_H__
   6 
   7 #define TX_DESC_SIZE                                    40
   8 #define TX_DESC_AGGR_SUBFRAME_SIZE              32
   9 
  10 #define RX_DESC_SIZE                                    32
  11 #define RX_DRV_INFO_SIZE_UNIT                   8
  12 
  13 #define TX_DESC_NEXT_DESC_OFFSET                40
  14 #define USB_HWDESC_HEADER_LEN                   40
  15 #define CRCLENGTH                                               4
  16 
  17 static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
  18 {
  19         le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
  20 }
  21 
  22 static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
  23 {
  24         le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
  25 }
  26 
  27 static inline void set_tx_desc_bmc(__le32 *__pdesc, u32 __val)
  28 {
  29         le32p_replace_bits(__pdesc, __val, BIT(24));
  30 }
  31 
  32 static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
  33 {
  34         le32p_replace_bits(__pdesc, __val, BIT(25));
  35 }
  36 
  37 static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
  38 {
  39         le32p_replace_bits(__pdesc, __val, BIT(26));
  40 }
  41 
  42 static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
  43 {
  44         le32p_replace_bits(__pdesc, __val, BIT(27));
  45 }
  46 
  47 static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
  48 {
  49         le32p_replace_bits(__pdesc, __val, BIT(28));
  50 }
  51 
  52 static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
  53 {
  54         le32p_replace_bits(__pdesc, __val, BIT(31));
  55 }
  56 
  57 static inline int get_tx_desc_own(__le32 *__pdesc)
  58 {
  59         return le32_get_bits(*(__pdesc), BIT(31));
  60 }
  61 
  62 static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
  63 {
  64         le32p_replace_bits(__pdesc + 1, __val, GENMASK(6, 0));
  65 }
  66 
  67 static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
  68 {
  69         le32p_replace_bits(__pdesc + 1, __val, GENMASK(12, 8));
  70 }
  71 
  72 static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
  73 {
  74         le32p_replace_bits(__pdesc + 1, __val, GENMASK(20, 16));
  75 }
  76 
  77 static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
  78 {
  79         le32p_replace_bits(__pdesc + 1, __val, GENMASK(23, 22));
  80 }
  81 
  82 static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
  83 {
  84         le32p_replace_bits(__pdesc + 1, __val, GENMASK(28, 24));
  85 }
  86 
  87 static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
  88 {
  89         le32p_replace_bits(__pdesc + 2, __val, BIT(12));
  90 }
  91 
  92 static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
  93 {
  94         le32p_replace_bits(__pdesc + 2, __val, BIT(13));
  95 }
  96 
  97 static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
  98 {
  99         le32p_replace_bits(__pdesc + 2, __val, BIT(17));
 100 }
 101 
 102 static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
 103 {
 104         le32p_replace_bits(__pdesc + 2, __val, GENMASK(22, 20));
 105 }
 106 
 107 static inline void set_tx_desc_hwseq_sel(__le32 *__pdesc, u32 __val)
 108 {
 109         le32p_replace_bits(__pdesc + 3, __val, GENMASK(7, 6));
 110 }
 111 
 112 static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
 113 {
 114         le32p_replace_bits(__pdesc + 3, __val, BIT(8));
 115 }
 116 
 117 static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
 118 {
 119         le32p_replace_bits(__pdesc + 3, __val, BIT(10));
 120 }
 121 
 122 static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
 123 {
 124         le32p_replace_bits(__pdesc + 3, __val, BIT(11));
 125 }
 126 
 127 static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
 128 {
 129         le32p_replace_bits(__pdesc + 3, __val, BIT(12));
 130 }
 131 
 132 static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
 133 {
 134         le32p_replace_bits(__pdesc + 3, __val, BIT(13));
 135 }
 136 
 137 static inline void set_tx_desc_nav_use_hdr(__le32 *__pdesc, u32 __val)
 138 {
 139         le32p_replace_bits(__pdesc + 3, __val, BIT(15));
 140 }
 141 
 142 static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
 143 {
 144         le32p_replace_bits(__pdesc + 3, __val, GENMASK(21, 17));
 145 }
 146 
 147 static inline void set_tx_desc_tx_ant(__le32 *__pdesc, u32 __val)
 148 {
 149         le32p_replace_bits(__pdesc + 5, __val, GENMASK(27, 24));
 150 }
 151 
 152 static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
 153 {
 154         le32p_replace_bits(__pdesc + 4, __val, GENMASK(6, 0));
 155 }
 156 
 157 static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
 158 {
 159         le32p_replace_bits(__pdesc + 4, __val, GENMASK(12, 8));
 160 }
 161 
 162 static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
 163 {
 164         le32p_replace_bits(__pdesc + 4, __val, GENMASK(16, 13));
 165 }
 166 
 167 static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
 168 {
 169         le32p_replace_bits(__pdesc + 4, __val, GENMASK(28, 24));
 170 }
 171 
 172 static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
 173 {
 174         le32p_replace_bits(__pdesc + 5, __val, GENMASK(3, 0));
 175 }
 176 
 177 static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
 178 {
 179         le32p_replace_bits(__pdesc + 5, __val, BIT(4));
 180 }
 181 
 182 static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
 183 {
 184         le32p_replace_bits(__pdesc + 5, __val, GENMASK(6, 5));
 185 }
 186 
 187 static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
 188 {
 189         le32p_replace_bits(__pdesc + 5, __val, BIT(12));
 190 }
 191 
 192 static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
 193 {
 194         le32p_replace_bits(__pdesc + 5, __val, GENMASK(16, 13));
 195 }
 196 
 197 static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
 198 {
 199         le32p_replace_bits(__pdesc + 7, __val, GENMASK(15, 0));
 200 }
 201 
 202 static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
 203 {
 204         le32p_replace_bits(__pdesc + 8, __val, BIT(15));
 205 }
 206 
 207 static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
 208 {
 209         le32p_replace_bits(__pdesc + 9, __val, GENMASK(23, 12));
 210 }
 211 
 212 static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
 213 {
 214         *(__pdesc + 10) = cpu_to_le32(__val);
 215 }
 216 
 217 static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
 218 {
 219         return le32_to_cpu(*(__pdesc + 10));
 220 }
 221 
 222 static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
 223 {
 224         *(__pdesc + 12) = cpu_to_le32(__val);
 225 }
 226 
 227 static inline int get_rx_desc_pkt_len(__le32 *__pdesc)
 228 {
 229         return le32_get_bits(*(__pdesc), GENMASK(13, 0));
 230 }
 231 
 232 static inline int get_rx_desc_crc32(__le32 *__pdesc)
 233 {
 234         return le32_get_bits(*(__pdesc), BIT(14));
 235 }
 236 
 237 static inline int get_rx_desc_icv(__le32 *__pdesc)
 238 {
 239         return le32_get_bits(*(__pdesc), BIT(15));
 240 }
 241 
 242 static inline int get_rx_desc_drv_info_size(__le32 *__pdesc)
 243 {
 244         return le32_get_bits(*(__pdesc), GENMASK(19, 16));
 245 }
 246 
 247 static inline int get_rx_desc_shift(__le32 *__pdesc)
 248 {
 249         return le32_get_bits(*(__pdesc), GENMASK(25, 24));
 250 }
 251 
 252 static inline int get_rx_desc_physt(__le32 *__pdesc)
 253 {
 254         return le32_get_bits(*(__pdesc), BIT(26));
 255 }
 256 
 257 static inline int get_rx_desc_swdec(__le32 *__pdesc)
 258 {
 259         return le32_get_bits(*(__pdesc), BIT(27));
 260 }
 261 
 262 static inline int get_rx_desc_own(__le32 *__pdesc)
 263 {
 264         return le32_get_bits(*(__pdesc), BIT(31));
 265 }
 266 
 267 static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
 268 {
 269         le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
 270 }
 271 
 272 static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
 273 {
 274         le32p_replace_bits(__pdesc, __val, BIT(30));
 275 }
 276 
 277 static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
 278 {
 279         le32p_replace_bits(__pdesc, __val, BIT(31));
 280 }
 281 
 282 static inline int get_rx_desc_macid(__le32 *__pdesc)
 283 {
 284         return le32_get_bits(*(__pdesc + 1), GENMASK(6, 0));
 285 }
 286 
 287 static inline int get_rx_desc_paggr(__le32 *__pdesc)
 288 {
 289         return le32_get_bits(*(__pdesc + 1), BIT(15));
 290 }
 291 
 292 static inline int get_rx_status_desc_rpt_sel(__le32 *__pdesc)
 293 {
 294         return le32_get_bits(*(__pdesc + 1), BIT(28));
 295 }
 296 
 297 static inline int get_rx_desc_rxmcs(__le32 *__pdesc)
 298 {
 299         return le32_get_bits(*(__pdesc + 3), GENMASK(6, 0));
 300 }
 301 
 302 static inline int get_rx_status_desc_pattern_match(__le32 *__pdesc)
 303 {
 304         return le32_get_bits(*(__pdesc + 3), BIT(29));
 305 }
 306 
 307 static inline int get_rx_status_desc_unicast_match(__le32 *__pdesc)
 308 {
 309         return le32_get_bits(*(__pdesc + 3), BIT(30));
 310 }
 311 
 312 static inline int get_rx_status_desc_magic_match(__le32 *__pdesc)
 313 {
 314         return le32_get_bits(*(__pdesc + 3), BIT(31));
 315 }
 316 
 317 static inline int get_rx_desc_splcp(__le32 *__pdesc)
 318 {
 319         return le32_get_bits(*(__pdesc + 4), BIT(0));
 320 }
 321 
 322 static inline int get_rx_desc_bw(__le32 *__pdesc)
 323 {
 324         return le32_get_bits(*(__pdesc + 4), GENMASK(5, 4));
 325 }
 326 
 327 static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
 328 {
 329         return le32_to_cpu(*(__pdesc + 5));
 330 }
 331 
 332 static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
 333 {
 334         return le32_to_cpu(*(__pdesc + 6));
 335 }
 336 
 337 static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
 338 {
 339         *(__pdesc + 6) = cpu_to_le32(__val);
 340 }
 341 
 342 /* TX report 2 format in Rx desc*/
 343 
 344 static inline u32 get_rx_rpt2_desc_macid_valid_1(__le32 *__status)
 345 {
 346         return le32_to_cpu(*(__status + 4));
 347 }
 348 
 349 static inline u32 get_rx_rpt2_desc_macid_valid_2(__le32 *__status)
 350 {
 351         return le32_to_cpu(*(__status + 5));
 352 }
 353 
 354 static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
 355 {
 356         le32p_replace_bits(__paddr, __value, GENMASK(3, 0));
 357 }
 358 
 359 static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
 360 {
 361         le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
 362 }
 363 
 364 static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
 365 {
 366         le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
 367 }
 368 
 369 static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
 370 {
 371         le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
 372 }
 373 
 374 static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
 375 {
 376         le32p_replace_bits(__paddr, __value, GENMASK(7, 0));
 377 }
 378 
 379 static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
 380 {
 381         le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
 382 }
 383 
 384 static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
 385 {
 386         le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
 387 }
 388 
 389 static inline void clear_pci_tx_desc_content(__le32 *__pdesc, int _size)
 390 {
 391         if (_size > TX_DESC_NEXT_DESC_OFFSET)
 392                 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);
 393         else
 394                 memset(__pdesc, 0, _size);
 395 }
 396 
 397 #define RTL8821AE_RX_HAL_IS_CCK_RATE(rxmcs)\
 398         (rxmcs == DESC_RATE1M ||\
 399          rxmcs == DESC_RATE2M ||\
 400          rxmcs == DESC_RATE5_5M ||\
 401          rxmcs == DESC_RATE11M)
 402 
 403 struct phy_rx_agc_info_t {
 404         #ifdef __LITTLE_ENDIAN
 405                 u8      gain:7, trsw:1;
 406         #else
 407                 u8      trsw:1, gain:7;
 408         #endif
 409 };
 410 
 411 struct phy_status_rpt {
 412         /* DWORD 0 */
 413         u8 gain_trsw[2];
 414 #ifdef __LITTLE_ENDIAN
 415         u16 chl_num:10;
 416         u16 sub_chnl:4;
 417         u16 r_rfmod:2;
 418 #else   /* _BIG_ENDIAN_ */
 419         u16 r_rfmod:2;
 420         u16 sub_chnl:4;
 421         u16 chl_num:10;
 422 #endif
 423         /* DWORD 1 */
 424         u8 pwdb_all;
 425         u8 cfosho[4];   /* DW 1 byte 1 DW 2 byte 0 */
 426 
 427         /* DWORD 2 */
 428         s8 cfotail[4];  /* DW 2 byte 1 DW 3 byte 0 */
 429 
 430         /* DWORD 3 */
 431         s8 rxevm[2];    /* DW 3 byte 1 DW 3 byte 2 */
 432         s8 rxsnr[2];    /* DW 3 byte 3 DW 4 byte 0 */
 433 
 434         /* DWORD 4 */
 435         u8 pcts_msk_rpt[2];
 436         u8 pdsnr[2];    /* DW 4 byte 3 DW 5 Byte 0 */
 437 
 438         /* DWORD 5 */
 439         u8 csi_current[2];
 440         u8 rx_gain_c;
 441 
 442         /* DWORD 6 */
 443         u8 rx_gain_d;
 444         u8 sigevm;
 445         u8 resvd_0;
 446         u8 antidx_anta:3;
 447         u8 antidx_antb:3;
 448         u8 resvd_1:2;
 449 } __packed;
 450 
 451 struct rx_fwinfo_8821ae {
 452         u8 gain_trsw[4];
 453         u8 pwdb_all;
 454         u8 cfosho[4];
 455         u8 cfotail[4];
 456         s8 rxevm[2];
 457         s8 rxsnr[4];
 458         u8 pdsnr[2];
 459         u8 csi_current[2];
 460         u8 csi_target[2];
 461         u8 sigevm;
 462         u8 max_ex_pwr;
 463         u8 ex_intf_flag:1;
 464         u8 sgi_en:1;
 465         u8 rxsc:2;
 466         u8 reserve:4;
 467 } __packed;
 468 
 469 struct tx_desc_8821ae {
 470         u32 pktsize:16;
 471         u32 offset:8;
 472         u32 bmc:1;
 473         u32 htc:1;
 474         u32 lastseg:1;
 475         u32 firstseg:1;
 476         u32 linip:1;
 477         u32 noacm:1;
 478         u32 gf:1;
 479         u32 own:1;
 480 
 481         u32 macid:6;
 482         u32 rsvd0:2;
 483         u32 queuesel:5;
 484         u32 rd_nav_ext:1;
 485         u32 lsig_txop_en:1;
 486         u32 pifs:1;
 487         u32 rateid:4;
 488         u32 nav_usehdr:1;
 489         u32 en_descid:1;
 490         u32 sectype:2;
 491         u32 pktoffset:8;
 492 
 493         u32 rts_rc:6;
 494         u32 data_rc:6;
 495         u32 agg_en:1;
 496         u32 rdg_en:1;
 497         u32 bar_retryht:2;
 498         u32 agg_break:1;
 499         u32 morefrag:1;
 500         u32 raw:1;
 501         u32 ccx:1;
 502         u32 ampdudensity:3;
 503         u32 bt_int:1;
 504         u32 ant_sela:1;
 505         u32 ant_selb:1;
 506         u32 txant_cck:2;
 507         u32 txant_l:2;
 508         u32 txant_ht:2;
 509 
 510         u32 nextheadpage:8;
 511         u32 tailpage:8;
 512         u32 seq:12;
 513         u32 cpu_handle:1;
 514         u32 tag1:1;
 515         u32 trigger_int:1;
 516         u32 hwseq_en:1;
 517 
 518         u32 rtsrate:5;
 519         u32 apdcfe:1;
 520         u32 qos:1;
 521         u32 hwseq_ssn:1;
 522         u32 userrate:1;
 523         u32 dis_rtsfb:1;
 524         u32 dis_datafb:1;
 525         u32 cts2self:1;
 526         u32 rts_en:1;
 527         u32 hwrts_en:1;
 528         u32 portid:1;
 529         u32 pwr_status:3;
 530         u32 waitdcts:1;
 531         u32 cts2ap_en:1;
 532         u32 txsc:2;
 533         u32 stbc:2;
 534         u32 txshort:1;
 535         u32 txbw:1;
 536         u32 rtsshort:1;
 537         u32 rtsbw:1;
 538         u32 rtssc:2;
 539         u32 rtsstbc:2;
 540 
 541         u32 txrate:6;
 542         u32 shortgi:1;
 543         u32 ccxt:1;
 544         u32 txrate_fb_lmt:5;
 545         u32 rtsrate_fb_lmt:4;
 546         u32 retrylmt_en:1;
 547         u32 txretrylmt:6;
 548         u32 usb_txaggnum:8;
 549 
 550         u32 txagca:5;
 551         u32 txagcb:5;
 552         u32 usemaxlen:1;
 553         u32 maxaggnum:5;
 554         u32 mcsg1maxlen:4;
 555         u32 mcsg2maxlen:4;
 556         u32 mcsg3maxlen:4;
 557         u32 mcs7sgimaxlen:4;
 558 
 559         u32 txbuffersize:16;
 560         u32 sw_offset30:8;
 561         u32 sw_offset31:4;
 562         u32 rsvd1:1;
 563         u32 antsel_c:1;
 564         u32 null_0:1;
 565         u32 null_1:1;
 566 
 567         u32 txbuffaddr;
 568         u32 txbufferaddr64;
 569         u32 nextdescaddress;
 570         u32 nextdescaddress64;
 571 
 572         u32 reserve_pass_pcie_mm_limit[4];
 573 } __packed;
 574 
 575 struct rx_desc_8821ae {
 576         u32 length:14;
 577         u32 crc32:1;
 578         u32 icverror:1;
 579         u32 drv_infosize:4;
 580         u32 security:3;
 581         u32 qos:1;
 582         u32 shift:2;
 583         u32 phystatus:1;
 584         u32 swdec:1;
 585         u32 lastseg:1;
 586         u32 firstseg:1;
 587         u32 eor:1;
 588         u32 own:1;
 589 
 590         u32 macid:6;
 591         u32 tid:4;
 592         u32 hwrsvd:5;
 593         u32 paggr:1;
 594         u32 faggr:1;
 595         u32 a1_fit:4;
 596         u32 a2_fit:4;
 597         u32 pam:1;
 598         u32 pwr:1;
 599         u32 moredata:1;
 600         u32 morefrag:1;
 601         u32 type:2;
 602         u32 mc:1;
 603         u32 bc:1;
 604 
 605         u32 seq:12;
 606         u32 frag:4;
 607         u32 nextpktlen:14;
 608         u32 nextind:1;
 609         u32 rsvd:1;
 610 
 611         u32 rxmcs:6;
 612         u32 rxht:1;
 613         u32 amsdu:1;
 614         u32 splcp:1;
 615         u32 bandwidth:1;
 616         u32 htc:1;
 617         u32 tcpchk_rpt:1;
 618         u32 ipcchk_rpt:1;
 619         u32 tcpchk_valid:1;
 620         u32 hwpcerr:1;
 621         u32 hwpcind:1;
 622         u32 iv0:16;
 623 
 624         u32 iv1;
 625 
 626         u32 tsfl;
 627 
 628         u32 bufferaddress;
 629         u32 bufferaddress64;
 630 
 631 } __packed;
 632 
 633 void rtl8821ae_tx_fill_desc(struct ieee80211_hw *hw,
 634                             struct ieee80211_hdr *hdr, u8 *pdesc_tx, u8 *txbd,
 635                             struct ieee80211_tx_info *info,
 636                             struct ieee80211_sta *sta,
 637                             struct sk_buff *skb,
 638                             u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
 639 bool rtl8821ae_rx_query_desc(struct ieee80211_hw *hw,
 640                              struct rtl_stats *status,
 641                              struct ieee80211_rx_status *rx_status,
 642                              u8 *pdesc, struct sk_buff *skb);
 643 void rtl8821ae_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
 644                         bool istx, u8 desc_name, u8 *val);
 645 u64 rtl8821ae_get_desc(struct ieee80211_hw *hw,
 646                        u8 *pdesc, bool istx, u8 desc_name);
 647 bool rtl8821ae_is_tx_desc_closed(struct ieee80211_hw *hw,
 648                                  u8 hw_queue, u16 index);
 649 void rtl8821ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
 650 void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
 651                                bool firstseg, bool lastseg,
 652                                struct sk_buff *skb);
 653 #endif

/* [<][>][^][v][top][bottom][index][help] */