18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright(c) 2009-2012 Realtek Corporation.*/ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef __REALTEK_92S_DEF_H__ 58c2ecf20Sopenharmony_ci#define __REALTEK_92S_DEF_H__ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#define RX_MPDU_QUEUE 0 88c2ecf20Sopenharmony_ci#define RX_CMD_QUEUE 1 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define SHORT_SLOT_TIME 9 118c2ecf20Sopenharmony_ci#define NON_SHORT_SLOT_TIME 20 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci/* Queue Select Value in TxDesc */ 148c2ecf20Sopenharmony_ci#define QSLT_BK 0x2 158c2ecf20Sopenharmony_ci#define QSLT_BE 0x0 168c2ecf20Sopenharmony_ci#define QSLT_VI 0x5 178c2ecf20Sopenharmony_ci#define QSLT_VO 0x6 188c2ecf20Sopenharmony_ci#define QSLT_BEACON 0x10 198c2ecf20Sopenharmony_ci#define QSLT_HIGH 0x11 208c2ecf20Sopenharmony_ci#define QSLT_MGNT 0x12 218c2ecf20Sopenharmony_ci#define QSLT_CMD 0x13 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci/* Tx Desc */ 248c2ecf20Sopenharmony_ci#define TX_DESC_SIZE_RTL8192S (16 * 4) 258c2ecf20Sopenharmony_ci#define TX_CMDDESC_SIZE_RTL8192S (16 * 4) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci/* macros to read/write various fields in RX or TX descriptors */ 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* Dword 0 */ 308c2ecf20Sopenharmony_cistatic inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val) 318c2ecf20Sopenharmony_ci{ 328c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, GENMASK(15, 0)); 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val) 368c2ecf20Sopenharmony_ci{ 378c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, GENMASK(23, 16)); 388c2ecf20Sopenharmony_ci} 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_cistatic inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val) 418c2ecf20Sopenharmony_ci{ 428c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(26)); 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistatic inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val) 468c2ecf20Sopenharmony_ci{ 478c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(27)); 488c2ecf20Sopenharmony_ci} 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_cistatic inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val) 518c2ecf20Sopenharmony_ci{ 528c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(28)); 538c2ecf20Sopenharmony_ci} 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cistatic inline void set_tx_desc_own(__le32 *__pdesc, u32 __val) 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(31)); 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_cistatic inline u32 get_tx_desc_own(__le32 *__pdesc) 618c2ecf20Sopenharmony_ci{ 628c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(31)); 638c2ecf20Sopenharmony_ci} 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci/* Dword 1 */ 668c2ecf20Sopenharmony_cistatic inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val) 678c2ecf20Sopenharmony_ci{ 688c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0)); 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_cistatic inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val) 728c2ecf20Sopenharmony_ci{ 738c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8)); 748c2ecf20Sopenharmony_ci} 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_cistatic inline void set_tx_desc_non_qos(__le32 *__pdesc, u32 __val) 778c2ecf20Sopenharmony_ci{ 788c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 1), __val, BIT(16)); 798c2ecf20Sopenharmony_ci} 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cistatic inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val) 828c2ecf20Sopenharmony_ci{ 838c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22)); 848c2ecf20Sopenharmony_ci} 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci/* Dword 2 */ 878c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rsvd_macid(__le32 *__pdesc, u32 __val) 888c2ecf20Sopenharmony_ci{ 898c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 2), __val, GENMASK(28, 24)); 908c2ecf20Sopenharmony_ci} 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_cistatic inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val) 938c2ecf20Sopenharmony_ci{ 948c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 2), __val, BIT(29)); 958c2ecf20Sopenharmony_ci} 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci/* Dword 3 */ 988c2ecf20Sopenharmony_cistatic inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val) 998c2ecf20Sopenharmony_ci{ 1008c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16)); 1018c2ecf20Sopenharmony_ci} 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci/* Dword 4 */ 1048c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val) 1058c2ecf20Sopenharmony_ci{ 1068c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, GENMASK(5, 0)); 1078c2ecf20Sopenharmony_ci} 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_cistatic inline void set_tx_desc_cts_enable(__le32 *__pdesc, u32 __val) 1108c2ecf20Sopenharmony_ci{ 1118c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(11)); 1128c2ecf20Sopenharmony_ci} 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val) 1158c2ecf20Sopenharmony_ci{ 1168c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(12)); 1178c2ecf20Sopenharmony_ci} 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_cistatic inline void set_tx_desc_ra_brsr_id(__le32 *__pdesc, u32 __val) 1208c2ecf20Sopenharmony_ci{ 1218c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, GENMASK(15, 13)); 1228c2ecf20Sopenharmony_ci} 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_cistatic inline void set_tx_desc_txht(__le32 *__pdesc, u32 __val) 1258c2ecf20Sopenharmony_ci{ 1268c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(16)); 1278c2ecf20Sopenharmony_ci} 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_short(__le32 *__pdesc, u32 __val) 1308c2ecf20Sopenharmony_ci{ 1318c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(17)); 1328c2ecf20Sopenharmony_ci} 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_bandwidth(__le32 *__pdesc, u32 __val) 1358c2ecf20Sopenharmony_ci{ 1368c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(18)); 1378c2ecf20Sopenharmony_ci} 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val) 1408c2ecf20Sopenharmony_ci{ 1418c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, GENMASK(20, 19)); 1428c2ecf20Sopenharmony_ci} 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val) 1458c2ecf20Sopenharmony_ci{ 1468c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(25)); 1478c2ecf20Sopenharmony_ci} 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_bandwidth(__le32 *__pdesc, u32 __val) 1508c2ecf20Sopenharmony_ci{ 1518c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(26)); 1528c2ecf20Sopenharmony_ci} 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_sub_carrier(__le32 *__pdesc, u32 __val) 1558c2ecf20Sopenharmony_ci{ 1568c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, GENMASK(28, 27)); 1578c2ecf20Sopenharmony_ci} 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_cistatic inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val) 1608c2ecf20Sopenharmony_ci{ 1618c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, GENMASK(30, 29)); 1628c2ecf20Sopenharmony_ci} 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_cistatic inline void set_tx_desc_user_rate(__le32 *__pdesc, u32 __val) 1658c2ecf20Sopenharmony_ci{ 1668c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 4), __val, BIT(31)); 1678c2ecf20Sopenharmony_ci} 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci/* Dword 5 */ 1708c2ecf20Sopenharmony_cistatic inline void set_tx_desc_packet_id(__le32 *__pdesc, u32 __val) 1718c2ecf20Sopenharmony_ci{ 1728c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 5), __val, GENMASK(8, 0)); 1738c2ecf20Sopenharmony_ci} 1748c2ecf20Sopenharmony_ci 1758c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val) 1768c2ecf20Sopenharmony_ci{ 1778c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 5), __val, GENMASK(14, 9)); 1788c2ecf20Sopenharmony_ci} 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_cistatic inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val) 1818c2ecf20Sopenharmony_ci{ 1828c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 5), __val, GENMASK(20, 16)); 1838c2ecf20Sopenharmony_ci} 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_ci/* Dword 7 */ 1868c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val) 1878c2ecf20Sopenharmony_ci{ 1888c2ecf20Sopenharmony_ci le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0)); 1898c2ecf20Sopenharmony_ci} 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ci/* Dword 8 */ 1928c2ecf20Sopenharmony_cistatic inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val) 1938c2ecf20Sopenharmony_ci{ 1948c2ecf20Sopenharmony_ci *(__pdesc + 8) = cpu_to_le32(__val); 1958c2ecf20Sopenharmony_ci} 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_cistatic inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc) 1988c2ecf20Sopenharmony_ci{ 1998c2ecf20Sopenharmony_ci return le32_to_cpu(*((__pdesc + 8))); 2008c2ecf20Sopenharmony_ci} 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci/* Dword 9 */ 2038c2ecf20Sopenharmony_cistatic inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val) 2048c2ecf20Sopenharmony_ci{ 2058c2ecf20Sopenharmony_ci *(__pdesc + 9) = cpu_to_le32(__val); 2068c2ecf20Sopenharmony_ci} 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ci/* Because the PCI Tx descriptors are chaied at the 2098c2ecf20Sopenharmony_ci * initialization and all the NextDescAddresses in 2108c2ecf20Sopenharmony_ci * these descriptors cannot not be cleared (,or 2118c2ecf20Sopenharmony_ci * driver/HW cannot find the next descriptor), the 2128c2ecf20Sopenharmony_ci * offset 36 (NextDescAddresses) is reserved when 2138c2ecf20Sopenharmony_ci * the desc is cleared. */ 2148c2ecf20Sopenharmony_ci#define TX_DESC_NEXT_DESC_OFFSET 36 2158c2ecf20Sopenharmony_ci#define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size) \ 2168c2ecf20Sopenharmony_ci memset(__pdesc, 0, min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET)) 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_ci/* Rx Desc */ 2198c2ecf20Sopenharmony_ci#define RX_STATUS_DESC_SIZE 24 2208c2ecf20Sopenharmony_ci#define RX_DRV_INFO_SIZE_UNIT 8 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ci/* DWORD 0 */ 2238c2ecf20Sopenharmony_cistatic inline void set_rx_status_desc_pkt_len(__le32 *__pdesc, u32 __val) 2248c2ecf20Sopenharmony_ci{ 2258c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, GENMASK(13, 0)); 2268c2ecf20Sopenharmony_ci} 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_cistatic inline void set_rx_status_desc_eor(__le32 *__pdesc, u32 __val) 2298c2ecf20Sopenharmony_ci{ 2308c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(30)); 2318c2ecf20Sopenharmony_ci} 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_cistatic inline void set_rx_status_desc_own(__le32 *__pdesc, u32 __val) 2348c2ecf20Sopenharmony_ci{ 2358c2ecf20Sopenharmony_ci le32p_replace_bits(__pdesc, __val, BIT(31)); 2368c2ecf20Sopenharmony_ci} 2378c2ecf20Sopenharmony_ci 2388c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_pkt_len(__le32 *__pdesc) 2398c2ecf20Sopenharmony_ci{ 2408c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), GENMASK(13, 0)); 2418c2ecf20Sopenharmony_ci} 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_crc32(__le32 *__pdesc) 2448c2ecf20Sopenharmony_ci{ 2458c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(14)); 2468c2ecf20Sopenharmony_ci} 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_icv(__le32 *__pdesc) 2498c2ecf20Sopenharmony_ci{ 2508c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(15)); 2518c2ecf20Sopenharmony_ci} 2528c2ecf20Sopenharmony_ci 2538c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_drvinfo_size(__le32 *__pdesc) 2548c2ecf20Sopenharmony_ci{ 2558c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), GENMASK(19, 16)); 2568c2ecf20Sopenharmony_ci} 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_shift(__le32 *__pdesc) 2598c2ecf20Sopenharmony_ci{ 2608c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), GENMASK(25, 24)); 2618c2ecf20Sopenharmony_ci} 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_phy_status(__le32 *__pdesc) 2648c2ecf20Sopenharmony_ci{ 2658c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(26)); 2668c2ecf20Sopenharmony_ci} 2678c2ecf20Sopenharmony_ci 2688c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_swdec(__le32 *__pdesc) 2698c2ecf20Sopenharmony_ci{ 2708c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(27)); 2718c2ecf20Sopenharmony_ci} 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_own(__le32 *__pdesc) 2748c2ecf20Sopenharmony_ci{ 2758c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc), BIT(31)); 2768c2ecf20Sopenharmony_ci} 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_ci/* DWORD 1 */ 2798c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_paggr(__le32 *__pdesc) 2808c2ecf20Sopenharmony_ci{ 2818c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 1), BIT(14)); 2828c2ecf20Sopenharmony_ci} 2838c2ecf20Sopenharmony_ci 2848c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_faggr(__le32 *__pdesc) 2858c2ecf20Sopenharmony_ci{ 2868c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 1), BIT(15)); 2878c2ecf20Sopenharmony_ci} 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_ci/* DWORD 3 */ 2908c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_rx_mcs(__le32 *__pdesc) 2918c2ecf20Sopenharmony_ci{ 2928c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0)); 2938c2ecf20Sopenharmony_ci} 2948c2ecf20Sopenharmony_ci 2958c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_rx_ht(__le32 *__pdesc) 2968c2ecf20Sopenharmony_ci{ 2978c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 3), BIT(6)); 2988c2ecf20Sopenharmony_ci} 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_splcp(__le32 *__pdesc) 3018c2ecf20Sopenharmony_ci{ 3028c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 3), BIT(8)); 3038c2ecf20Sopenharmony_ci} 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_bw(__le32 *__pdesc) 3068c2ecf20Sopenharmony_ci{ 3078c2ecf20Sopenharmony_ci return le32_get_bits(*(__pdesc + 3), BIT(9)); 3088c2ecf20Sopenharmony_ci} 3098c2ecf20Sopenharmony_ci 3108c2ecf20Sopenharmony_ci/* DWORD 5 */ 3118c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_tsfl(__le32 *__pdesc) 3128c2ecf20Sopenharmony_ci{ 3138c2ecf20Sopenharmony_ci return le32_to_cpu(*((__pdesc + 5))); 3148c2ecf20Sopenharmony_ci} 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ci/* DWORD 6 */ 3178c2ecf20Sopenharmony_cistatic inline void set_rx_status__desc_buff_addr(__le32 *__pdesc, u32 __val) 3188c2ecf20Sopenharmony_ci{ 3198c2ecf20Sopenharmony_ci *(__pdesc + 6) = cpu_to_le32(__val); 3208c2ecf20Sopenharmony_ci} 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_cistatic inline u32 get_rx_status_desc_buff_addr(__le32 *__pdesc) 3238c2ecf20Sopenharmony_ci{ 3248c2ecf20Sopenharmony_ci return le32_to_cpu(*(__pdesc + 6)); 3258c2ecf20Sopenharmony_ci} 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_ci#define SE_RX_HAL_IS_CCK_RATE(_pdesc)\ 3288c2ecf20Sopenharmony_ci (get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE1M || \ 3298c2ecf20Sopenharmony_ci get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE2M || \ 3308c2ecf20Sopenharmony_ci get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE5_5M ||\ 3318c2ecf20Sopenharmony_ci get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE11M) 3328c2ecf20Sopenharmony_ci 3338c2ecf20Sopenharmony_cienum rf_optype { 3348c2ecf20Sopenharmony_ci RF_OP_BY_SW_3WIRE = 0, 3358c2ecf20Sopenharmony_ci RF_OP_BY_FW, 3368c2ecf20Sopenharmony_ci RF_OP_MAX 3378c2ecf20Sopenharmony_ci}; 3388c2ecf20Sopenharmony_ci 3398c2ecf20Sopenharmony_cienum ic_inferiority { 3408c2ecf20Sopenharmony_ci IC_INFERIORITY_A = 0, 3418c2ecf20Sopenharmony_ci IC_INFERIORITY_B = 1, 3428c2ecf20Sopenharmony_ci}; 3438c2ecf20Sopenharmony_ci 3448c2ecf20Sopenharmony_cienum fwcmd_iotype { 3458c2ecf20Sopenharmony_ci /* For DIG DM */ 3468c2ecf20Sopenharmony_ci FW_CMD_DIG_ENABLE = 0, 3478c2ecf20Sopenharmony_ci FW_CMD_DIG_DISABLE = 1, 3488c2ecf20Sopenharmony_ci FW_CMD_DIG_HALT = 2, 3498c2ecf20Sopenharmony_ci FW_CMD_DIG_RESUME = 3, 3508c2ecf20Sopenharmony_ci /* For High Power DM */ 3518c2ecf20Sopenharmony_ci FW_CMD_HIGH_PWR_ENABLE = 4, 3528c2ecf20Sopenharmony_ci FW_CMD_HIGH_PWR_DISABLE = 5, 3538c2ecf20Sopenharmony_ci /* For Rate adaptive DM */ 3548c2ecf20Sopenharmony_ci FW_CMD_RA_RESET = 6, 3558c2ecf20Sopenharmony_ci FW_CMD_RA_ACTIVE = 7, 3568c2ecf20Sopenharmony_ci FW_CMD_RA_REFRESH_N = 8, 3578c2ecf20Sopenharmony_ci FW_CMD_RA_REFRESH_BG = 9, 3588c2ecf20Sopenharmony_ci FW_CMD_RA_INIT = 10, 3598c2ecf20Sopenharmony_ci /* For FW supported IQK */ 3608c2ecf20Sopenharmony_ci FW_CMD_IQK_INIT = 11, 3618c2ecf20Sopenharmony_ci /* Tx power tracking switch, 3628c2ecf20Sopenharmony_ci * MP driver only */ 3638c2ecf20Sopenharmony_ci FW_CMD_TXPWR_TRACK_ENABLE = 12, 3648c2ecf20Sopenharmony_ci /* Tx power tracking switch, 3658c2ecf20Sopenharmony_ci * MP driver only */ 3668c2ecf20Sopenharmony_ci FW_CMD_TXPWR_TRACK_DISABLE = 13, 3678c2ecf20Sopenharmony_ci /* Tx power tracking with thermal 3688c2ecf20Sopenharmony_ci * indication, for Normal driver */ 3698c2ecf20Sopenharmony_ci FW_CMD_TXPWR_TRACK_THERMAL = 14, 3708c2ecf20Sopenharmony_ci FW_CMD_PAUSE_DM_BY_SCAN = 15, 3718c2ecf20Sopenharmony_ci FW_CMD_RESUME_DM_BY_SCAN = 16, 3728c2ecf20Sopenharmony_ci FW_CMD_RA_REFRESH_N_COMB = 17, 3738c2ecf20Sopenharmony_ci FW_CMD_RA_REFRESH_BG_COMB = 18, 3748c2ecf20Sopenharmony_ci FW_CMD_ANTENNA_SW_ENABLE = 19, 3758c2ecf20Sopenharmony_ci FW_CMD_ANTENNA_SW_DISABLE = 20, 3768c2ecf20Sopenharmony_ci /* Tx Status report for CCX from FW */ 3778c2ecf20Sopenharmony_ci FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, 3788c2ecf20Sopenharmony_ci /* Indifate firmware that driver 3798c2ecf20Sopenharmony_ci * enters LPS, For PS-Poll issue */ 3808c2ecf20Sopenharmony_ci FW_CMD_LPS_ENTER = 22, 3818c2ecf20Sopenharmony_ci /* Indicate firmware that driver 3828c2ecf20Sopenharmony_ci * leave LPS*/ 3838c2ecf20Sopenharmony_ci FW_CMD_LPS_LEAVE = 23, 3848c2ecf20Sopenharmony_ci /* Set DIG mode to signal strength */ 3858c2ecf20Sopenharmony_ci FW_CMD_DIG_MODE_SS = 24, 3868c2ecf20Sopenharmony_ci /* Set DIG mode to false alarm. */ 3878c2ecf20Sopenharmony_ci FW_CMD_DIG_MODE_FA = 25, 3888c2ecf20Sopenharmony_ci FW_CMD_ADD_A2_ENTRY = 26, 3898c2ecf20Sopenharmony_ci FW_CMD_CTRL_DM_BY_DRIVER = 27, 3908c2ecf20Sopenharmony_ci FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28, 3918c2ecf20Sopenharmony_ci FW_CMD_PAPE_CONTROL = 29, 3928c2ecf20Sopenharmony_ci FW_CMD_IQK_ENABLE = 30, 3938c2ecf20Sopenharmony_ci}; 3948c2ecf20Sopenharmony_ci 3958c2ecf20Sopenharmony_ci/* Driver info contain PHY status 3968c2ecf20Sopenharmony_ci * and other variabel size info 3978c2ecf20Sopenharmony_ci * PHY Status content as below 3988c2ecf20Sopenharmony_ci */ 3998c2ecf20Sopenharmony_cistruct rx_fwinfo { 4008c2ecf20Sopenharmony_ci /* DWORD 0 */ 4018c2ecf20Sopenharmony_ci u8 gain_trsw[4]; 4028c2ecf20Sopenharmony_ci /* DWORD 1 */ 4038c2ecf20Sopenharmony_ci u8 pwdb_all; 4048c2ecf20Sopenharmony_ci u8 cfosho[4]; 4058c2ecf20Sopenharmony_ci /* DWORD 2 */ 4068c2ecf20Sopenharmony_ci u8 cfotail[4]; 4078c2ecf20Sopenharmony_ci /* DWORD 3 */ 4088c2ecf20Sopenharmony_ci s8 rxevm[2]; 4098c2ecf20Sopenharmony_ci s8 rxsnr[4]; 4108c2ecf20Sopenharmony_ci /* DWORD 4 */ 4118c2ecf20Sopenharmony_ci u8 pdsnr[2]; 4128c2ecf20Sopenharmony_ci /* DWORD 5 */ 4138c2ecf20Sopenharmony_ci u8 csi_current[2]; 4148c2ecf20Sopenharmony_ci u8 csi_target[2]; 4158c2ecf20Sopenharmony_ci /* DWORD 6 */ 4168c2ecf20Sopenharmony_ci u8 sigevm; 4178c2ecf20Sopenharmony_ci u8 max_ex_pwr; 4188c2ecf20Sopenharmony_ci u8 ex_intf_flag:1; 4198c2ecf20Sopenharmony_ci u8 sgi_en:1; 4208c2ecf20Sopenharmony_ci u8 rxsc:2; 4218c2ecf20Sopenharmony_ci u8 reserve:4; 4228c2ecf20Sopenharmony_ci}; 4238c2ecf20Sopenharmony_ci 4248c2ecf20Sopenharmony_cistruct phy_sts_cck_8192s_t { 4258c2ecf20Sopenharmony_ci u8 adc_pwdb_x[4]; 4268c2ecf20Sopenharmony_ci u8 sq_rpt; 4278c2ecf20Sopenharmony_ci u8 cck_agc_rpt; 4288c2ecf20Sopenharmony_ci}; 4298c2ecf20Sopenharmony_ci 4308c2ecf20Sopenharmony_ci#endif 4318c2ecf20Sopenharmony_ci 432