def.h (10353B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* Copyright(c) 2009-2012 Realtek Corporation.*/ 3 4#ifndef __REALTEK_92S_DEF_H__ 5#define __REALTEK_92S_DEF_H__ 6 7#define RX_MPDU_QUEUE 0 8#define RX_CMD_QUEUE 1 9 10#define SHORT_SLOT_TIME 9 11#define NON_SHORT_SLOT_TIME 20 12 13/* Queue Select Value in TxDesc */ 14#define QSLT_BK 0x2 15#define QSLT_BE 0x0 16#define QSLT_VI 0x5 17#define QSLT_VO 0x6 18#define QSLT_BEACON 0x10 19#define QSLT_HIGH 0x11 20#define QSLT_MGNT 0x12 21#define QSLT_CMD 0x13 22 23/* Tx Desc */ 24#define TX_DESC_SIZE_RTL8192S (16 * 4) 25#define TX_CMDDESC_SIZE_RTL8192S (16 * 4) 26 27/* macros to read/write various fields in RX or TX descriptors */ 28 29/* Dword 0 */ 30static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val) 31{ 32 le32p_replace_bits(__pdesc, __val, GENMASK(15, 0)); 33} 34 35static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val) 36{ 37 le32p_replace_bits(__pdesc, __val, GENMASK(23, 16)); 38} 39 40static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val) 41{ 42 le32p_replace_bits(__pdesc, __val, BIT(26)); 43} 44 45static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val) 46{ 47 le32p_replace_bits(__pdesc, __val, BIT(27)); 48} 49 50static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val) 51{ 52 le32p_replace_bits(__pdesc, __val, BIT(28)); 53} 54 55static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val) 56{ 57 le32p_replace_bits(__pdesc, __val, BIT(31)); 58} 59 60static inline u32 get_tx_desc_own(__le32 *__pdesc) 61{ 62 return le32_get_bits(*(__pdesc), BIT(31)); 63} 64 65/* Dword 1 */ 66static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val) 67{ 68 le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0)); 69} 70 71static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val) 72{ 73 le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8)); 74} 75 76static inline void set_tx_desc_non_qos(__le32 *__pdesc, u32 __val) 77{ 78 le32p_replace_bits((__pdesc + 1), __val, BIT(16)); 79} 80 81static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val) 82{ 83 le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22)); 84} 85 86/* Dword 2 */ 87static inline void set_tx_desc_rsvd_macid(__le32 *__pdesc, u32 __val) 88{ 89 le32p_replace_bits((__pdesc + 2), __val, GENMASK(28, 24)); 90} 91 92static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val) 93{ 94 le32p_replace_bits((__pdesc + 2), __val, BIT(29)); 95} 96 97/* Dword 3 */ 98static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val) 99{ 100 le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16)); 101} 102 103/* Dword 4 */ 104static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val) 105{ 106 le32p_replace_bits((__pdesc + 4), __val, GENMASK(5, 0)); 107} 108 109static inline void set_tx_desc_cts_enable(__le32 *__pdesc, u32 __val) 110{ 111 le32p_replace_bits((__pdesc + 4), __val, BIT(11)); 112} 113 114static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val) 115{ 116 le32p_replace_bits((__pdesc + 4), __val, BIT(12)); 117} 118 119static inline void set_tx_desc_ra_brsr_id(__le32 *__pdesc, u32 __val) 120{ 121 le32p_replace_bits((__pdesc + 4), __val, GENMASK(15, 13)); 122} 123 124static inline void set_tx_desc_txht(__le32 *__pdesc, u32 __val) 125{ 126 le32p_replace_bits((__pdesc + 4), __val, BIT(16)); 127} 128 129static inline void set_tx_desc_tx_short(__le32 *__pdesc, u32 __val) 130{ 131 le32p_replace_bits((__pdesc + 4), __val, BIT(17)); 132} 133 134static inline void set_tx_desc_tx_bandwidth(__le32 *__pdesc, u32 __val) 135{ 136 le32p_replace_bits((__pdesc + 4), __val, BIT(18)); 137} 138 139static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val) 140{ 141 le32p_replace_bits((__pdesc + 4), __val, GENMASK(20, 19)); 142} 143 144static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val) 145{ 146 le32p_replace_bits((__pdesc + 4), __val, BIT(25)); 147} 148 149static inline void set_tx_desc_rts_bandwidth(__le32 *__pdesc, u32 __val) 150{ 151 le32p_replace_bits((__pdesc + 4), __val, BIT(26)); 152} 153 154static inline void set_tx_desc_rts_sub_carrier(__le32 *__pdesc, u32 __val) 155{ 156 le32p_replace_bits((__pdesc + 4), __val, GENMASK(28, 27)); 157} 158 159static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val) 160{ 161 le32p_replace_bits((__pdesc + 4), __val, GENMASK(30, 29)); 162} 163 164static inline void set_tx_desc_user_rate(__le32 *__pdesc, u32 __val) 165{ 166 le32p_replace_bits((__pdesc + 4), __val, BIT(31)); 167} 168 169/* Dword 5 */ 170static inline void set_tx_desc_packet_id(__le32 *__pdesc, u32 __val) 171{ 172 le32p_replace_bits((__pdesc + 5), __val, GENMASK(8, 0)); 173} 174 175static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val) 176{ 177 le32p_replace_bits((__pdesc + 5), __val, GENMASK(14, 9)); 178} 179 180static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val) 181{ 182 le32p_replace_bits((__pdesc + 5), __val, GENMASK(20, 16)); 183} 184 185/* Dword 7 */ 186static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val) 187{ 188 le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0)); 189} 190 191/* Dword 8 */ 192static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val) 193{ 194 *(__pdesc + 8) = cpu_to_le32(__val); 195} 196 197static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc) 198{ 199 return le32_to_cpu(*((__pdesc + 8))); 200} 201 202/* Dword 9 */ 203static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val) 204{ 205 *(__pdesc + 9) = cpu_to_le32(__val); 206} 207 208/* Because the PCI Tx descriptors are chaied at the 209 * initialization and all the NextDescAddresses in 210 * these descriptors cannot not be cleared (,or 211 * driver/HW cannot find the next descriptor), the 212 * offset 36 (NextDescAddresses) is reserved when 213 * the desc is cleared. */ 214#define TX_DESC_NEXT_DESC_OFFSET 36 215#define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size) \ 216 memset(__pdesc, 0, min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET)) 217 218/* Rx Desc */ 219#define RX_STATUS_DESC_SIZE 24 220#define RX_DRV_INFO_SIZE_UNIT 8 221 222/* DWORD 0 */ 223static inline void set_rx_status_desc_pkt_len(__le32 *__pdesc, u32 __val) 224{ 225 le32p_replace_bits(__pdesc, __val, GENMASK(13, 0)); 226} 227 228static inline void set_rx_status_desc_eor(__le32 *__pdesc, u32 __val) 229{ 230 le32p_replace_bits(__pdesc, __val, BIT(30)); 231} 232 233static inline void set_rx_status_desc_own(__le32 *__pdesc, u32 __val) 234{ 235 le32p_replace_bits(__pdesc, __val, BIT(31)); 236} 237 238static inline u32 get_rx_status_desc_pkt_len(__le32 *__pdesc) 239{ 240 return le32_get_bits(*(__pdesc), GENMASK(13, 0)); 241} 242 243static inline u32 get_rx_status_desc_crc32(__le32 *__pdesc) 244{ 245 return le32_get_bits(*(__pdesc), BIT(14)); 246} 247 248static inline u32 get_rx_status_desc_icv(__le32 *__pdesc) 249{ 250 return le32_get_bits(*(__pdesc), BIT(15)); 251} 252 253static inline u32 get_rx_status_desc_drvinfo_size(__le32 *__pdesc) 254{ 255 return le32_get_bits(*(__pdesc), GENMASK(19, 16)); 256} 257 258static inline u32 get_rx_status_desc_shift(__le32 *__pdesc) 259{ 260 return le32_get_bits(*(__pdesc), GENMASK(25, 24)); 261} 262 263static inline u32 get_rx_status_desc_phy_status(__le32 *__pdesc) 264{ 265 return le32_get_bits(*(__pdesc), BIT(26)); 266} 267 268static inline u32 get_rx_status_desc_swdec(__le32 *__pdesc) 269{ 270 return le32_get_bits(*(__pdesc), BIT(27)); 271} 272 273static inline u32 get_rx_status_desc_own(__le32 *__pdesc) 274{ 275 return le32_get_bits(*(__pdesc), BIT(31)); 276} 277 278/* DWORD 1 */ 279static inline u32 get_rx_status_desc_paggr(__le32 *__pdesc) 280{ 281 return le32_get_bits(*(__pdesc + 1), BIT(14)); 282} 283 284static inline u32 get_rx_status_desc_faggr(__le32 *__pdesc) 285{ 286 return le32_get_bits(*(__pdesc + 1), BIT(15)); 287} 288 289/* DWORD 3 */ 290static inline u32 get_rx_status_desc_rx_mcs(__le32 *__pdesc) 291{ 292 return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0)); 293} 294 295static inline u32 get_rx_status_desc_rx_ht(__le32 *__pdesc) 296{ 297 return le32_get_bits(*(__pdesc + 3), BIT(6)); 298} 299 300static inline u32 get_rx_status_desc_splcp(__le32 *__pdesc) 301{ 302 return le32_get_bits(*(__pdesc + 3), BIT(8)); 303} 304 305static inline u32 get_rx_status_desc_bw(__le32 *__pdesc) 306{ 307 return le32_get_bits(*(__pdesc + 3), BIT(9)); 308} 309 310/* DWORD 5 */ 311static inline u32 get_rx_status_desc_tsfl(__le32 *__pdesc) 312{ 313 return le32_to_cpu(*((__pdesc + 5))); 314} 315 316/* DWORD 6 */ 317static inline void set_rx_status__desc_buff_addr(__le32 *__pdesc, u32 __val) 318{ 319 *(__pdesc + 6) = cpu_to_le32(__val); 320} 321 322static inline u32 get_rx_status_desc_buff_addr(__le32 *__pdesc) 323{ 324 return le32_to_cpu(*(__pdesc + 6)); 325} 326 327#define SE_RX_HAL_IS_CCK_RATE(_pdesc)\ 328 (get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE1M || \ 329 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE2M || \ 330 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE5_5M ||\ 331 get_rx_status_desc_rx_mcs(_pdesc) == DESC_RATE11M) 332 333enum rf_optype { 334 RF_OP_BY_SW_3WIRE = 0, 335 RF_OP_BY_FW, 336 RF_OP_MAX 337}; 338 339enum ic_inferiority { 340 IC_INFERIORITY_A = 0, 341 IC_INFERIORITY_B = 1, 342}; 343 344enum fwcmd_iotype { 345 /* For DIG DM */ 346 FW_CMD_DIG_ENABLE = 0, 347 FW_CMD_DIG_DISABLE = 1, 348 FW_CMD_DIG_HALT = 2, 349 FW_CMD_DIG_RESUME = 3, 350 /* For High Power DM */ 351 FW_CMD_HIGH_PWR_ENABLE = 4, 352 FW_CMD_HIGH_PWR_DISABLE = 5, 353 /* For Rate adaptive DM */ 354 FW_CMD_RA_RESET = 6, 355 FW_CMD_RA_ACTIVE = 7, 356 FW_CMD_RA_REFRESH_N = 8, 357 FW_CMD_RA_REFRESH_BG = 9, 358 FW_CMD_RA_INIT = 10, 359 /* For FW supported IQK */ 360 FW_CMD_IQK_INIT = 11, 361 /* Tx power tracking switch, 362 * MP driver only */ 363 FW_CMD_TXPWR_TRACK_ENABLE = 12, 364 /* Tx power tracking switch, 365 * MP driver only */ 366 FW_CMD_TXPWR_TRACK_DISABLE = 13, 367 /* Tx power tracking with thermal 368 * indication, for Normal driver */ 369 FW_CMD_TXPWR_TRACK_THERMAL = 14, 370 FW_CMD_PAUSE_DM_BY_SCAN = 15, 371 FW_CMD_RESUME_DM_BY_SCAN = 16, 372 FW_CMD_RA_REFRESH_N_COMB = 17, 373 FW_CMD_RA_REFRESH_BG_COMB = 18, 374 FW_CMD_ANTENNA_SW_ENABLE = 19, 375 FW_CMD_ANTENNA_SW_DISABLE = 20, 376 /* Tx Status report for CCX from FW */ 377 FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, 378 /* Indifate firmware that driver 379 * enters LPS, For PS-Poll issue */ 380 FW_CMD_LPS_ENTER = 22, 381 /* Indicate firmware that driver 382 * leave LPS*/ 383 FW_CMD_LPS_LEAVE = 23, 384 /* Set DIG mode to signal strength */ 385 FW_CMD_DIG_MODE_SS = 24, 386 /* Set DIG mode to false alarm. */ 387 FW_CMD_DIG_MODE_FA = 25, 388 FW_CMD_ADD_A2_ENTRY = 26, 389 FW_CMD_CTRL_DM_BY_DRIVER = 27, 390 FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28, 391 FW_CMD_PAPE_CONTROL = 29, 392 FW_CMD_IQK_ENABLE = 30, 393}; 394 395/* Driver info contain PHY status 396 * and other variabel size info 397 * PHY Status content as below 398 */ 399struct rx_fwinfo { 400 /* DWORD 0 */ 401 u8 gain_trsw[4]; 402 /* DWORD 1 */ 403 u8 pwdb_all; 404 u8 cfosho[4]; 405 /* DWORD 2 */ 406 u8 cfotail[4]; 407 /* DWORD 3 */ 408 s8 rxevm[2]; 409 s8 rxsnr[4]; 410 /* DWORD 4 */ 411 u8 pdsnr[2]; 412 /* DWORD 5 */ 413 u8 csi_current[2]; 414 u8 csi_target[2]; 415 /* DWORD 6 */ 416 u8 sigevm; 417 u8 max_ex_pwr; 418 u8 ex_intf_flag:1; 419 u8 sgi_en:1; 420 u8 rxsc:2; 421 u8 reserve:4; 422}; 423 424struct phy_sts_cck_8192s_t { 425 u8 adc_pwdb_x[4]; 426 u8 sq_rpt; 427 u8 cck_agc_rpt; 428}; 429 430#endif 431