1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright(c) 2009-2013 Realtek Corporation.*/ 3 4 #ifndef __RTL92CE_TRX_H__ 5 #define __RTL92CE_TRX_H__ 6 7 #define TX_DESC_SIZE 64 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 32 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(5, 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(19, 16)); 75 } 76 77 static inline void set_tx_desc_nav_use_hdr(__le32 *__pdesc, u32 __val) 78 { 79 le32p_replace_bits(__pdesc + 1, __val, BIT(20)); 80 } 81 82 static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val) 83 { 84 le32p_replace_bits(__pdesc + 1, __val, GENMASK(23, 22)); 85 } 86 87 static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val) 88 { 89 le32p_replace_bits(__pdesc + 1, __val, GENMASK(30, 26)); 90 } 91 92 static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val) 93 { 94 le32p_replace_bits(__pdesc + 2, __val, BIT(12)); 95 } 96 97 static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val) 98 { 99 le32p_replace_bits(__pdesc + 2, __val, BIT(13)); 100 } 101 102 static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val) 103 { 104 le32p_replace_bits(__pdesc + 2, __val, BIT(17)); 105 } 106 107 static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val) 108 { 109 le32p_replace_bits(__pdesc + 2, __val, GENMASK(22, 20)); 110 } 111 112 static inline void set_tx_desc_antsel_a(__le32 *__pdesc, u32 __val) 113 { 114 le32p_replace_bits(__pdesc + 2, __val, BIT(24)); 115 } 116 117 static inline void set_tx_desc_antsel_b(__le32 *__pdesc, u32 __val) 118 { 119 le32p_replace_bits(__pdesc + 2, __val, BIT(25)); 120 } 121 122 static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val) 123 { 124 le32p_replace_bits(__pdesc + 3, __val, GENMASK(27, 16)); 125 } 126 127 static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val) 128 { 129 le32p_replace_bits(__pdesc + 3, __val, BIT(31)); 130 } 131 132 static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val) 133 { 134 le32p_replace_bits(__pdesc + 4, __val, GENMASK(4, 0)); 135 } 136 137 static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val) 138 { 139 le32p_replace_bits(__pdesc + 4, __val, BIT(6)); 140 } 141 142 static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val) 143 { 144 le32p_replace_bits(__pdesc + 4, __val, BIT(8)); 145 } 146 147 static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val) 148 { 149 le32p_replace_bits(__pdesc + 4, __val, BIT(10)); 150 } 151 152 static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val) 153 { 154 le32p_replace_bits(__pdesc + 4, __val, BIT(11)); 155 } 156 157 static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val) 158 { 159 le32p_replace_bits(__pdesc + 4, __val, BIT(12)); 160 } 161 162 static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val) 163 { 164 le32p_replace_bits(__pdesc + 4, __val, BIT(13)); 165 } 166 167 static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val) 168 { 169 le32p_replace_bits(__pdesc + 4, __val, GENMASK(21, 20)); 170 } 171 172 static inline void set_tx_desc_tx_stbc(__le32 *__pdesc, u32 __val) 173 { 174 le32p_replace_bits(__pdesc + 4, __val, GENMASK(23, 22)); 175 } 176 177 static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val) 178 { 179 le32p_replace_bits(__pdesc + 4, __val, BIT(25)); 180 } 181 182 static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val) 183 { 184 le32p_replace_bits(__pdesc + 4, __val, BIT(26)); 185 } 186 187 static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val) 188 { 189 le32p_replace_bits(__pdesc + 4, __val, BIT(27)); 190 } 191 192 static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val) 193 { 194 le32p_replace_bits(__pdesc + 4, __val, GENMASK(29, 28)); 195 } 196 197 static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val) 198 { 199 le32p_replace_bits(__pdesc + 4, __val, GENMASK(31, 30)); 200 } 201 202 static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val) 203 { 204 le32p_replace_bits(__pdesc + 5, __val, GENMASK(5, 0)); 205 } 206 207 static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val) 208 { 209 le32p_replace_bits(__pdesc + 5, __val, BIT(6)); 210 } 211 212 static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val) 213 { 214 le32p_replace_bits(__pdesc + 5, __val, GENMASK(12, 8)); 215 } 216 217 static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val) 218 { 219 le32p_replace_bits(__pdesc + 5, __val, GENMASK(16, 13)); 220 } 221 222 static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val) 223 { 224 le32p_replace_bits(__pdesc + 6, __val, GENMASK(15, 11)); 225 } 226 227 static inline void set_tx_desc_antsel_c(__le32 *__pdesc, u32 __val) 228 { 229 le32p_replace_bits(__pdesc + 7, __val, BIT(29)); 230 } 231 232 static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val) 233 { 234 le32p_replace_bits(__pdesc + 7, __val, GENMASK(15, 0)); 235 } 236 237 static inline int get_tx_desc_tx_buffer_size(__le32 *__pdesc) 238 { 239 return le32_get_bits(*(__pdesc + 7), GENMASK(15, 0)); 240 } 241 242 static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val) 243 { 244 *(__pdesc + 8) = cpu_to_le32(__val); 245 } 246 247 static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc) 248 { 249 return le32_to_cpu(*(__pdesc + 8)); 250 } 251 252 static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val) 253 { 254 *(__pdesc + 10) = cpu_to_le32(__val); 255 } 256 257 static inline int get_rx_desc_pkt_len(__le32 *__pdesc) 258 { 259 return le32_get_bits(*(__pdesc), GENMASK(13, 0)); 260 } 261 262 static inline int get_rx_desc_crc32(__le32 *__pdesc) 263 { 264 return le32_get_bits(*(__pdesc), BIT(14)); 265 } 266 267 static inline int get_rx_desc_icv(__le32 *__pdesc) 268 { 269 return le32_get_bits(*(__pdesc), BIT(15)); 270 } 271 272 static inline int get_rx_desc_drv_info_size(__le32 *__pdesc) 273 { 274 return le32_get_bits(*(__pdesc), GENMASK(19, 16)); 275 } 276 277 static inline int get_rx_desc_security(__le32 *__pdesc) 278 { 279 return le32_get_bits(*(__pdesc), GENMASK(22, 20)); 280 } 281 282 static inline int get_rx_desc_qos(__le32 *__pdesc) 283 { 284 return le32_get_bits(*(__pdesc), BIT(23)); 285 } 286 287 static inline int get_rx_desc_shift(__le32 *__pdesc) 288 { 289 return le32_get_bits(*(__pdesc), GENMASK(25, 24)); 290 } 291 292 static inline int get_rx_desc_physt(__le32 *__pdesc) 293 { 294 return le32_get_bits(*(__pdesc), BIT(26)); 295 } 296 297 static inline int get_rx_desc_swdec(__le32 *__pdesc) 298 { 299 return le32_get_bits(*(__pdesc), BIT(27)); 300 } 301 302 static inline int get_rx_desc_ls(__le32 *__pdesc) 303 { 304 return le32_get_bits(*(__pdesc), BIT(28)); 305 } 306 307 static inline int get_rx_desc_fs(__le32 *__pdesc) 308 { 309 return le32_get_bits(*(__pdesc), BIT(29)); 310 } 311 312 static inline int get_rx_desc_eor(__le32 *__pdesc) 313 { 314 return le32_get_bits(*(__pdesc), BIT(30)); 315 } 316 317 static inline int get_rx_desc_own(__le32 *__pdesc) 318 { 319 return le32_get_bits(*(__pdesc), BIT(31)); 320 } 321 322 static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val) 323 { 324 le32p_replace_bits(__pdesc, __val, GENMASK(13, 0)); 325 } 326 327 static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val) 328 { 329 le32p_replace_bits(__pdesc, __val, BIT(30)); 330 } 331 332 static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val) 333 { 334 le32p_replace_bits(__pdesc, __val, BIT(31)); 335 } 336 337 static inline int get_rx_desc_macid(__le32 *__pdesc) 338 { 339 return le32_get_bits(*(__pdesc + 1), GENMASK(5, 0)); 340 } 341 342 static inline int get_rx_desc_paggr(__le32 *__pdesc) 343 { 344 return le32_get_bits(*(__pdesc + 1), BIT(14)); 345 } 346 347 static inline int get_rx_desc_faggr(__le32 *__pdesc) 348 { 349 return le32_get_bits(*(__pdesc + 1), BIT(15)); 350 } 351 352 static inline int get_rx_desc_a1_fit(__le32 *__pdesc) 353 { 354 return le32_get_bits(*(__pdesc + 1), GENMASK(19, 16)); 355 } 356 357 static inline int get_rx_desc_a2_fit(__le32 *__pdesc) 358 { 359 return le32_get_bits(*(__pdesc + 1), GENMASK(23, 20)); 360 } 361 362 static inline int get_rx_desc_pam(__le32 *__pdesc) 363 { 364 return le32_get_bits(*(__pdesc + 1), BIT(24)); 365 } 366 367 static inline int get_rx_desc_pwr(__le32 *__pdesc) 368 { 369 return le32_get_bits(*(__pdesc + 1), BIT(25)); 370 } 371 372 static inline int get_rx_desc_md(__le32 *__pdesc) 373 { 374 return le32_get_bits(*(__pdesc + 1), BIT(26)); 375 } 376 377 static inline int get_rx_desc_mf(__le32 *__pdesc) 378 { 379 return le32_get_bits(*(__pdesc + 1), BIT(27)); 380 } 381 382 static inline int get_rx_desc_type(__le32 *__pdesc) 383 { 384 return le32_get_bits(*(__pdesc + 1), GENMASK(29, 28)); 385 } 386 387 static inline int get_rx_desc_mc(__le32 *__pdesc) 388 { 389 return le32_get_bits(*(__pdesc + 1), BIT(30)); 390 } 391 392 static inline int get_rx_desc_bc(__le32 *__pdesc) 393 { 394 return le32_get_bits(*(__pdesc + 1), BIT(31)); 395 } 396 397 static inline int get_rx_desc_seq(__le32 *__pdesc) 398 { 399 return le32_get_bits(*(__pdesc + 2), GENMASK(11, 0)); 400 } 401 402 static inline int get_rx_desc_frag(__le32 *__pdesc) 403 { 404 return le32_get_bits(*(__pdesc + 2), GENMASK(15, 12)); 405 } 406 407 static inline int get_rx_desc_rxmcs(__le32 *__pdesc) 408 { 409 return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0)); 410 } 411 412 static inline int get_rx_desc_rxht(__le32 *__pdesc) 413 { 414 return le32_get_bits(*(__pdesc + 3), BIT(6)); 415 } 416 417 static inline int get_rx_status_desc_rx_gf(__le32 *__pdesc) 418 { 419 return le32_get_bits(*(__pdesc + 3), BIT(7)); 420 } 421 422 static inline int get_rx_desc_splcp(__le32 *__pdesc) 423 { 424 return le32_get_bits(*(__pdesc + 3), BIT(8)); 425 } 426 427 static inline int get_rx_desc_bw(__le32 *__pdesc) 428 { 429 return le32_get_bits(*(__pdesc + 3), BIT(9)); 430 } 431 432 static inline int get_rx_desc_htc(__le32 *__pdesc) 433 { 434 return le32_get_bits(*(__pdesc + 3), BIT(10)); 435 } 436 437 static inline int get_rx_status_desc_eosp(__le32 *__pdesc) 438 { 439 return le32_get_bits(*(__pdesc + 3), BIT(11)); 440 } 441 442 static inline int get_rx_status_desc_bssid_fit(__le32 *__pdesc) 443 { 444 return le32_get_bits(*(__pdesc + 3), GENMASK(13, 12)); 445 } 446 447 static inline int get_rx_status_desc_rpt_sel(__le32 *__pdesc) 448 { 449 return le32_get_bits(*(__pdesc + 3), GENMASK(15, 14)); 450 } 451 452 static inline int get_rx_status_desc_pattern_match(__le32 *__pdesc) 453 { 454 return le32_get_bits(*(__pdesc + 3), BIT(29)); 455 } 456 457 static inline int get_rx_status_desc_unicast_match(__le32 *__pdesc) 458 { 459 return le32_get_bits(*(__pdesc + 3), BIT(30)); 460 } 461 462 static inline int get_rx_status_desc_magic_match(__le32 *__pdesc) 463 { 464 return le32_get_bits(*(__pdesc + 3), BIT(31)); 465 } 466 467 static inline u32 get_rx_desc_iv1(__le32 *__pdesc) 468 { 469 return le32_to_cpu(*(__pdesc + 4)); 470 } 471 472 static inline u32 get_rx_desc_tsfl(__le32 *__pdesc) 473 { 474 return le32_to_cpu(*(__pdesc + 5)); 475 } 476 477 static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc) 478 { 479 return le32_to_cpu(*(__pdesc + 6)); 480 } 481 482 static inline u32 get_rx_desc_buff_addr64(__le32 *__pdesc) 483 { 484 return le32_to_cpu(*(__pdesc + 7)); 485 } 486 487 static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val) 488 { 489 *(__pdesc + 6) = cpu_to_le32(__val); 490 } 491 492 static inline void set_rx_desc_buff_addr64(__le32 *__pdesc, u32 __val) 493 { 494 *(__pdesc + 7) = cpu_to_le32(__val); 495 } 496 497 /* TX report 2 format in Rx desc*/ 498 499 static inline int get_rx_rpt2_desc_pkt_len(__le32 *__status) 500 { 501 return le32_get_bits(*(__status), GENMASK(8, 0)); 502 } 503 504 static inline u32 get_rx_rpt2_desc_macid_valid_1(__le32 *__status) 505 { 506 return le32_to_cpu(*(__status + 4)); 507 } 508 509 static inline u32 get_rx_rpt2_desc_macid_valid_2(__le32 *__status) 510 { 511 return le32_to_cpu(*(__status + 5)); 512 } 513 514 static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value) 515 { 516 le32p_replace_bits(__paddr, __value, GENMASK(3, 0)); 517 } 518 519 static inline void set_earlymode_len0(__le32 *__paddr, u32 __value) 520 { 521 le32p_replace_bits(__paddr, __value, GENMASK(15, 4)); 522 } 523 524 static inline void set_earlymode_len1(__le32 *__paddr, u32 __value) 525 { 526 le32p_replace_bits(__paddr, __value, GENMASK(27, 16)); 527 } 528 529 static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value) 530 { 531 le32p_replace_bits(__paddr, __value, GENMASK(31, 28)); 532 } 533 534 static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value) 535 { 536 le32p_replace_bits(__paddr + 1, __value, GENMASK(7, 0)); 537 } 538 539 static inline void set_earlymode_len3(__le32 *__paddr, u32 __value) 540 { 541 le32p_replace_bits(__paddr + 1, __value, GENMASK(19, 8)); 542 } 543 544 static inline void set_earlymode_len4(__le32 *__paddr, u32 __value) 545 { 546 le32p_replace_bits(__paddr + 1, __value, GENMASK(31, 20)); 547 } 548 549 static inline void clear_pci_tx_desc_content(__le32 *__pdesc, int _size) 550 { 551 if (_size > TX_DESC_NEXT_DESC_OFFSET) 552 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET); 553 else 554 memset(__pdesc, 0, _size); 555 } 556 557 #define RTL8188_RX_HAL_IS_CCK_RATE(rxmcs)\ 558 (rxmcs == DESC92C_RATE1M ||\ 559 rxmcs == DESC92C_RATE2M ||\ 560 rxmcs == DESC92C_RATE5_5M ||\ 561 rxmcs == DESC92C_RATE11M) 562 563 struct phy_status_rpt { 564 u8 padding[2]; 565 u8 ch_corr[2]; 566 u8 cck_sig_qual_ofdm_pwdb_all; 567 u8 cck_agc_rpt_ofdm_cfosho_a; 568 u8 cck_rpt_b_ofdm_cfosho_b; 569 u8 rsvd_1;/* ch_corr_msb; */ 570 u8 noise_power_db_msb; 571 u8 path_cfotail[2]; 572 u8 pcts_mask[2]; 573 u8 stream_rxevm[2]; 574 u8 path_rxsnr[2]; 575 u8 noise_power_db_lsb; 576 u8 rsvd_2[3]; 577 u8 stream_csi[2]; 578 u8 stream_target_csi[2]; 579 u8 sig_evm; 580 u8 rsvd_3; 581 #if defined(__LITTLE_ENDIAN) 582 u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/ 583 u8 sgi_en:1; 584 u8 rxsc:2; 585 u8 idle_long:1; 586 u8 r_ant_train_en:1; 587 u8 ant_sel_b:1; 588 u8 ant_sel:1; 589 #else /* __BIG_ENDIAN */ 590 u8 ant_sel:1; 591 u8 ant_sel_b:1; 592 u8 r_ant_train_en:1; 593 u8 idle_long:1; 594 u8 rxsc:2; 595 u8 sgi_en:1; 596 u8 antsel_rx_keep_2:1; /*ex_intf_flg:1;*/ 597 #endif 598 } __packed; 599 600 struct rx_fwinfo_88e { 601 u8 gain_trsw[4]; 602 u8 pwdb_all; 603 u8 cfosho[4]; 604 u8 cfotail[4]; 605 s8 rxevm[2]; 606 s8 rxsnr[4]; 607 u8 pdsnr[2]; 608 u8 csi_current[2]; 609 u8 csi_target[2]; 610 u8 sigevm; 611 u8 max_ex_pwr; 612 u8 ex_intf_flag:1; 613 u8 sgi_en:1; 614 u8 rxsc:2; 615 u8 reserve:4; 616 } __packed; 617 618 struct tx_desc_88e { 619 u32 pktsize:16; 620 u32 offset:8; 621 u32 bmc:1; 622 u32 htc:1; 623 u32 lastseg:1; 624 u32 firstseg:1; 625 u32 linip:1; 626 u32 noacm:1; 627 u32 gf:1; 628 u32 own:1; 629 630 u32 macid:6; 631 u32 rsvd0:2; 632 u32 queuesel:5; 633 u32 rd_nav_ext:1; 634 u32 lsig_txop_en:1; 635 u32 pifs:1; 636 u32 rateid:4; 637 u32 nav_usehdr:1; 638 u32 en_descid:1; 639 u32 sectype:2; 640 u32 pktoffset:8; 641 642 u32 rts_rc:6; 643 u32 data_rc:6; 644 u32 agg_en:1; 645 u32 rdg_en:1; 646 u32 bar_retryht:2; 647 u32 agg_break:1; 648 u32 morefrag:1; 649 u32 raw:1; 650 u32 ccx:1; 651 u32 ampdudensity:3; 652 u32 bt_int:1; 653 u32 ant_sela:1; 654 u32 ant_selb:1; 655 u32 txant_cck:2; 656 u32 txant_l:2; 657 u32 txant_ht:2; 658 659 u32 nextheadpage:8; 660 u32 tailpage:8; 661 u32 seq:12; 662 u32 cpu_handle:1; 663 u32 tag1:1; 664 u32 trigger_int:1; 665 u32 hwseq_en:1; 666 667 u32 rtsrate:5; 668 u32 apdcfe:1; 669 u32 qos:1; 670 u32 hwseq_ssn:1; 671 u32 userrate:1; 672 u32 dis_rtsfb:1; 673 u32 dis_datafb:1; 674 u32 cts2self:1; 675 u32 rts_en:1; 676 u32 hwrts_en:1; 677 u32 portid:1; 678 u32 pwr_status:3; 679 u32 waitdcts:1; 680 u32 cts2ap_en:1; 681 u32 txsc:2; 682 u32 stbc:2; 683 u32 txshort:1; 684 u32 txbw:1; 685 u32 rtsshort:1; 686 u32 rtsbw:1; 687 u32 rtssc:2; 688 u32 rtsstbc:2; 689 690 u32 txrate:6; 691 u32 shortgi:1; 692 u32 ccxt:1; 693 u32 txrate_fb_lmt:5; 694 u32 rtsrate_fb_lmt:4; 695 u32 retrylmt_en:1; 696 u32 txretrylmt:6; 697 u32 usb_txaggnum:8; 698 699 u32 txagca:5; 700 u32 txagcb:5; 701 u32 usemaxlen:1; 702 u32 maxaggnum:5; 703 u32 mcsg1maxlen:4; 704 u32 mcsg2maxlen:4; 705 u32 mcsg3maxlen:4; 706 u32 mcs7sgimaxlen:4; 707 708 u32 txbuffersize:16; 709 u32 sw_offset30:8; 710 u32 sw_offset31:4; 711 u32 rsvd1:1; 712 u32 antsel_c:1; 713 u32 null_0:1; 714 u32 null_1:1; 715 716 u32 txbuffaddr; 717 u32 txbufferaddr64; 718 u32 nextdescaddress; 719 u32 nextdescaddress64; 720 721 u32 reserve_pass_pcie_mm_limit[4]; 722 } __packed; 723 724 struct rx_desc_88e { 725 u32 length:14; 726 u32 crc32:1; 727 u32 icverror:1; 728 u32 drv_infosize:4; 729 u32 security:3; 730 u32 qos:1; 731 u32 shift:2; 732 u32 phystatus:1; 733 u32 swdec:1; 734 u32 lastseg:1; 735 u32 firstseg:1; 736 u32 eor:1; 737 u32 own:1; 738 739 u32 macid:6; 740 u32 tid:4; 741 u32 hwrsvd:5; 742 u32 paggr:1; 743 u32 faggr:1; 744 u32 a1_fit:4; 745 u32 a2_fit:4; 746 u32 pam:1; 747 u32 pwr:1; 748 u32 moredata:1; 749 u32 morefrag:1; 750 u32 type:2; 751 u32 mc:1; 752 u32 bc:1; 753 754 u32 seq:12; 755 u32 frag:4; 756 u32 nextpktlen:14; 757 u32 nextind:1; 758 u32 rsvd:1; 759 760 u32 rxmcs:6; 761 u32 rxht:1; 762 u32 amsdu:1; 763 u32 splcp:1; 764 u32 bandwidth:1; 765 u32 htc:1; 766 u32 tcpchk_rpt:1; 767 u32 ipcchk_rpt:1; 768 u32 tcpchk_valid:1; 769 u32 hwpcerr:1; 770 u32 hwpcind:1; 771 u32 iv0:16; 772 773 u32 iv1; 774 775 u32 tsfl; 776 777 u32 bufferaddress; 778 u32 bufferaddress64; 779 780 } __packed; 781 782 void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, 783 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 784 u8 *txbd, struct ieee80211_tx_info *info, 785 struct ieee80211_sta *sta, 786 struct sk_buff *skb, 787 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc); 788 bool rtl88ee_rx_query_desc(struct ieee80211_hw *hw, 789 struct rtl_stats *status, 790 struct ieee80211_rx_status *rx_status, 791 u8 *pdesc, struct sk_buff *skb); 792 void rtl88ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, 793 bool istx, u8 desc_name, u8 *val); 794 u64 rtl88ee_get_desc(struct ieee80211_hw *hw, 795 u8 *pdesc, bool istx, u8 desc_name); 796 bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw, 797 u8 hw_queue, u16 index); 798 void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 799 void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 800 bool firstseg, bool lastseg, 801 struct sk_buff *skb); 802 #endif 803