1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2017 Realtek Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of version 2 of the GNU General Public License as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 *****************************************************************************/ 16 #ifndef __RTW_CMD_H_ 17 #define __RTW_CMD_H_ 18 19 20 #define C2H_MEM_SZ (16*1024) 21 22 #define FREE_CMDOBJ_SZ 128 23 24 #define MAX_CMDSZ 1536 25 #define MAX_RSPSZ 512 26 #define MAX_EVTSZ 1024 27 28 #define CMDBUFF_ALIGN_SZ 512 29 30 struct cmd_obj { 31 _adapter *padapter; 32 u16 cmdcode; 33 u8 res; 34 u8 *parmbuf; 35 u32 cmdsz; 36 u8 *rsp; 37 u32 rspsz; 38 struct submit_ctx *sctx; 39 u8 no_io; 40 /* _sema cmd_sem; */ 41 _list list; 42 }; 43 44 /* cmd flags */ 45 enum { 46 RTW_CMDF_DIRECTLY = BIT0, 47 RTW_CMDF_WAIT_ACK = BIT1, 48 }; 49 50 struct cmd_priv { 51 _sema cmd_queue_sema; 52 /* _sema cmd_done_sema; */ 53 _sema start_cmdthread_sema; 54 55 _queue cmd_queue; 56 u8 cmd_seq; 57 u8 *cmd_buf; /* shall be non-paged, and 4 bytes aligned */ 58 u8 *cmd_allocated_buf; 59 u8 *rsp_buf; /* shall be non-paged, and 4 bytes aligned */ 60 u8 *rsp_allocated_buf; 61 u32 cmd_issued_cnt; 62 u32 cmd_done_cnt; 63 u32 rsp_cnt; 64 ATOMIC_T cmdthd_running; 65 /* u8 cmdthd_running; */ 66 67 _adapter *padapter; 68 _mutex sctx_mutex; 69 }; 70 71 #ifdef CONFIG_EVENT_THREAD_MODE 72 struct evt_obj { 73 u16 evtcode; 74 u8 res; 75 u8 *parmbuf; 76 u32 evtsz; 77 _list list; 78 }; 79 #endif 80 81 struct evt_priv { 82 #ifdef CONFIG_EVENT_THREAD_MODE 83 _sema evt_notify; 84 85 _queue evt_queue; 86 #endif 87 88 #ifdef CONFIG_FW_C2H_REG 89 #define CONFIG_C2H_WK 90 #endif 91 92 #ifdef CONFIG_C2H_WK 93 _workitem c2h_wk; 94 bool c2h_wk_alive; 95 struct rtw_cbuf *c2h_queue; 96 #define C2H_QUEUE_MAX_LEN 10 97 #endif 98 99 #ifdef CONFIG_H2CLBK 100 _sema lbkevt_done; 101 u8 lbkevt_limit; 102 u8 lbkevt_num; 103 u8 *cmdevt_parm; 104 #endif 105 ATOMIC_T event_seq; 106 u8 *evt_buf; /* shall be non-paged, and 4 bytes aligned */ 107 u8 *evt_allocated_buf; 108 u32 evt_done_cnt; 109 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) 110 u8 *c2h_mem; 111 u8 *allocated_c2h_mem; 112 #endif 113 114 }; 115 116 #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ 117 do {\ 118 _rtw_init_listhead(&pcmd->list);\ 119 pcmd->cmdcode = code;\ 120 pcmd->parmbuf = (u8 *)(pparm);\ 121 pcmd->cmdsz = sizeof (*pparm);\ 122 pcmd->rsp = NULL;\ 123 pcmd->rspsz = 0;\ 124 } while (0) 125 126 #define init_h2fwcmd_w_parm_no_parm_rsp(pcmd, code) \ 127 do {\ 128 _rtw_init_listhead(&pcmd->list);\ 129 pcmd->cmdcode = code;\ 130 pcmd->parmbuf = NULL;\ 131 pcmd->cmdsz = 0;\ 132 pcmd->rsp = NULL;\ 133 pcmd->rspsz = 0;\ 134 } while (0) 135 136 struct P2P_PS_Offload_t { 137 u8 Offload_En:1; 138 u8 role:1; /* 1: Owner, 0: Client */ 139 u8 CTWindow_En:1; 140 u8 NoA0_En:1; 141 u8 NoA1_En:1; 142 u8 AllStaSleep:1; /* Only valid in Owner */ 143 u8 discovery:1; 144 u8 rsvd:1; 145 #ifdef CONFIG_P2P_PS_NOA_USE_MACID_SLEEP 146 u8 p2p_macid:7; 147 u8 disable_close_rf:1; /*1: not close RF but just pause p2p_macid when NoA duration*/ 148 #endif /* CONFIG_P2P_PS_NOA_USE_MACID_SLEEP */ 149 }; 150 151 struct P2P_PS_CTWPeriod_t { 152 u8 CTWPeriod; /* TU */ 153 }; 154 155 #ifdef CONFIG_P2P_WOWLAN 156 157 struct P2P_WoWlan_Offload_t { 158 u8 Disconnect_Wkup_Drv:1; 159 u8 role:2; 160 u8 Wps_Config[2]; 161 }; 162 163 #endif /* CONFIG_P2P_WOWLAN */ 164 165 extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); 166 extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); 167 extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); 168 169 #ifdef CONFIG_EVENT_THREAD_MODE 170 extern u32 rtw_enqueue_evt(struct evt_priv *pevtpriv, struct evt_obj *obj); 171 extern struct evt_obj *rtw_dequeue_evt(_queue *queue); 172 extern void rtw_free_evt_obj(struct evt_obj *pcmd); 173 #endif 174 175 void rtw_stop_cmd_thread(_adapter *adapter); 176 thread_return rtw_cmd_thread(thread_context context); 177 178 extern u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); 179 extern void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); 180 181 extern u32 rtw_init_evt_priv(struct evt_priv *pevtpriv); 182 extern void rtw_free_evt_priv(struct evt_priv *pevtpriv); 183 extern void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); 184 extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv); 185 #ifdef CONFIG_P2P 186 u8 p2p_protocol_wk_cmd(_adapter *padapter, int intCmdType); 187 #endif /* CONFIG_P2P */ 188 189 #ifdef CONFIG_IOCTL_CFG80211 190 struct rtw_roch_parm { 191 u64 cookie; 192 struct wireless_dev *wdev; 193 struct ieee80211_channel ch; 194 enum nl80211_channel_type ch_type; 195 unsigned int duration; 196 }; 197 198 u8 rtw_roch_cmd(_adapter *adapter 199 , u64 cookie, struct wireless_dev *wdev 200 , struct ieee80211_channel *ch, enum nl80211_channel_type ch_type 201 , unsigned int duration 202 , u8 flags 203 ); 204 205 u8 rtw_cancel_roch_cmd(_adapter *adapter, u64 cookie, struct wireless_dev *wdev, u8 flags); 206 207 u8 rtw_mgnt_tx_cmd(_adapter *adapter, u8 tx_ch, u8 no_cck, const u8 *buf, size_t len, int wait_ack, u8 flags); 208 struct mgnt_tx_parm { 209 u8 tx_ch; 210 u8 no_cck; 211 const u8 *buf; 212 size_t len; 213 int wait_ack; 214 }; 215 #endif 216 217 enum rtw_drvextra_cmd_id { 218 NONE_WK_CID, 219 STA_MSTATUS_RPT_WK_CID, 220 DYNAMIC_CHK_WK_CID, 221 DM_CTRL_WK_CID, 222 PBC_POLLING_WK_CID, 223 POWER_SAVING_CTRL_WK_CID,/* IPS,AUTOSuspend */ 224 LPS_CTRL_WK_CID, 225 ANT_SELECT_WK_CID, 226 P2P_PS_WK_CID, 227 P2P_PROTO_WK_CID, 228 CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */ 229 C2H_WK_CID, 230 RTP_TIMER_CFG_WK_CID, 231 RESET_SECURITYPRIV, /* add for CONFIG_IEEE80211W, none 11w also can use */ 232 FREE_ASSOC_RESOURCES, /* add for CONFIG_IEEE80211W, none 11w also can use */ 233 DM_IN_LPS_WK_CID, 234 DM_RA_MSK_WK_CID, /* add for STA update RAMask when bandwith change. */ 235 BEAMFORMING_WK_CID, 236 LPS_CHANGE_DTIM_CID, 237 BTINFO_WK_CID, 238 BTC_REDUCE_WL_TXPWR_CID, 239 DFS_RADAR_DETECT_WK_CID, 240 DFS_RADAR_DETECT_EN_DEC_WK_CID, 241 SESSION_TRACKER_WK_CID, 242 EN_HW_UPDATE_TSF_WK_CID, 243 PERIOD_TSF_UPDATE_END_WK_CID, 244 TEST_H2C_CID, 245 MP_CMD_WK_CID, 246 CUSTOMER_STR_WK_CID, 247 #ifdef CONFIG_RTW_REPEATER_SON 248 RSON_SCAN_WK_CID, 249 #endif 250 ROCH_WK_CID, 251 MGNT_TX_WK_CID, 252 REQ_PER_CMD_WK_CID, 253 SSMPS_WK_CID, 254 #ifdef CONFIG_CTRL_TXSS_BY_TP 255 TXSS_WK_CID, 256 #endif 257 AC_PARM_CMD_WK_CID, 258 #ifdef CONFIG_AP_MODE 259 STOP_AP_WK_CID, 260 #endif 261 #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 262 TBTX_CONTROL_TX_WK_CID, 263 #endif 264 MAX_WK_CID 265 }; 266 267 enum LPS_CTRL_TYPE { 268 LPS_CTRL_SCAN = 0, 269 LPS_CTRL_JOINBSS = 1, 270 LPS_CTRL_CONNECT = 2, 271 LPS_CTRL_DISCONNECT = 3, 272 LPS_CTRL_SPECIAL_PACKET = 4, 273 LPS_CTRL_LEAVE = 5, 274 LPS_CTRL_TRAFFIC_BUSY = 6, 275 LPS_CTRL_TX_TRAFFIC_LEAVE = 7, 276 LPS_CTRL_RX_TRAFFIC_LEAVE = 8, 277 LPS_CTRL_ENTER = 9, 278 LPS_CTRL_LEAVE_CFG80211_PWRMGMT = 10, 279 LPS_CTRL_LEAVE_SET_OPTION = 11, 280 }; 281 282 enum STAKEY_TYPE { 283 GROUP_KEY = 0, 284 UNICAST_KEY = 1, 285 TDLS_KEY = 2, 286 }; 287 288 enum RFINTFS { 289 SWSI, 290 HWSI, 291 HWPI, 292 }; 293 294 295 /* 296 Caller Mode: Infra, Ad-Hoc 297 298 Notes: To join the specified bss 299 300 Command Event Mode 301 302 */ 303 struct joinbss_parm { 304 WLAN_BSSID_EX network; 305 }; 306 307 /* 308 Caller Mode: Infra, Ad-HoC(C) 309 310 Notes: To disconnect the current associated BSS 311 312 Command Mode 313 314 */ 315 struct disconnect_parm { 316 u32 deauth_timeout_ms; 317 }; 318 319 /* 320 Caller Mode: AP, Ad-HoC(M) 321 322 Notes: To create a BSS 323 324 Command Mode 325 */ 326 struct createbss_parm { 327 bool adhoc; 328 329 /* used by AP/Mesh mode now */ 330 u8 ifbmp; 331 u8 excl_ifbmp; 332 s16 req_ch; 333 s8 req_bw; 334 s8 req_offset; 335 }; 336 337 338 struct setopmode_parm { 339 u8 mode; 340 u8 rsvd[3]; 341 }; 342 343 /* 344 Caller Mode: AP, Ad-HoC, Infra 345 346 Notes: To ask RTL8711 performing site-survey 347 348 Command-Event Mode 349 350 */ 351 352 #define RTW_SSID_SCAN_AMOUNT 9 /* for WEXT_CSCAN_AMOUNT 9 */ 353 #define RTW_CHANNEL_SCAN_AMOUNT (14+37) 354 struct sitesurvey_parm { 355 sint scan_mode; /* active: 1, passive: 0 */ 356 /* sint bsslimit; // 1 ~ 48 */ 357 u8 ssid_num; 358 u8 ch_num; 359 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT]; 360 struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT]; 361 362 u32 token; /* 80211k use it to identify caller */ 363 u16 duration; /* 0: use default, otherwise: channel scan time */ 364 u8 igi; /* 0: use defalut */ 365 u8 bw; /* 0: use default */ 366 367 bool acs; /* aim to trigger channel selection when scan done */ 368 }; 369 370 /* 371 Caller Mode: Any 372 373 Notes: To set the auth type of RTL8711. open/shared/802.1x 374 375 Command Mode 376 377 */ 378 struct setauth_parm { 379 u8 mode; /* 0: legacy open, 1: legacy shared 2: 802.1x */ 380 u8 _1x; /* 0: PSK, 1: TLS */ 381 u8 rsvd[2]; 382 }; 383 384 /* 385 Caller Mode: Infra 386 387 a. algorithm: wep40, wep104, tkip & aes 388 b. keytype: grp key/unicast key 389 c. key contents 390 391 when shared key ==> keyid is the camid 392 when 802.1x ==> keyid [0:1] ==> grp key 393 when 802.1x ==> keyid > 2 ==> unicast key 394 395 */ 396 struct setkey_parm { 397 u8 algorithm; /* encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 */ 398 u8 keyid; 399 u8 set_tx; /* 1: main tx key for wep. 0: other key. */ 400 u8 key[32]; /* this could be 40 or 104 */ 401 }; 402 403 /* 404 When in AP or Ad-Hoc mode, this is used to 405 allocate an sw/hw entry for a newly associated sta. 406 407 Command 408 409 when shared key ==> algorithm/keyid 410 411 */ 412 struct set_stakey_parm { 413 u8 addr[ETH_ALEN]; 414 u8 algorithm; 415 u8 keyid; 416 u8 key[32]; 417 u8 gk; 418 }; 419 420 struct set_stakey_rsp { 421 u8 addr[ETH_ALEN]; 422 u8 keyid; 423 u8 rsvd; 424 }; 425 426 struct Tx_Beacon_param { 427 WLAN_BSSID_EX network; 428 }; 429 430 /* 431 Notes: This command is used for H2C/C2H loopback testing 432 433 mac[0] == 0 434 ==> CMD mode, return H2C_SUCCESS. 435 The following condition must be ture under CMD mode 436 mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; 437 s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; 438 s2 == (b1 << 8 | b0); 439 440 mac[0] == 1 441 ==> CMD_RSP mode, return H2C_SUCCESS_RSP 442 443 The rsp layout shall be: 444 rsp: parm: 445 mac[0] = mac[5]; 446 mac[1] = mac[4]; 447 mac[2] = mac[3]; 448 mac[3] = mac[2]; 449 mac[4] = mac[1]; 450 mac[5] = mac[0]; 451 s0 = s1; 452 s1 = swap16(s0); 453 w0 = swap32(w1); 454 b0 = b1 455 s2 = s0 + s1 456 b1 = b0 457 w1 = w0 458 459 mac[0] == 2 460 ==> CMD_EVENT mode, return H2C_SUCCESS 461 The event layout shall be: 462 event: parm: 463 mac[0] = mac[5]; 464 mac[1] = mac[4]; 465 mac[2] = event's sequence number, starting from 1 to parm's marc[3] 466 mac[3] = mac[2]; 467 mac[4] = mac[1]; 468 mac[5] = mac[0]; 469 s0 = swap16(s0) - event.mac[2]; 470 s1 = s1 + event.mac[2]; 471 w0 = swap32(w0); 472 b0 = b1 473 s2 = s0 + event.mac[2] 474 b1 = b0 475 w1 = swap32(w1) - event.mac[2]; 476 477 parm->mac[3] is the total event counts that host requested. 478 479 480 event will be the same with the cmd's param. 481 482 */ 483 484 #ifdef CONFIG_H2CLBK 485 486 struct seth2clbk_parm { 487 u8 mac[6]; 488 u16 s0; 489 u16 s1; 490 u32 w0; 491 u8 b0; 492 u16 s2; 493 u8 b1; 494 u32 w1; 495 }; 496 497 struct geth2clbk_parm { 498 u32 rsv; 499 }; 500 501 struct geth2clbk_rsp { 502 u8 mac[6]; 503 u16 s0; 504 u16 s1; 505 u32 w0; 506 u8 b0; 507 u16 s2; 508 u8 b1; 509 u32 w1; 510 }; 511 512 #endif /* CONFIG_H2CLBK */ 513 514 /* CMD param Formart for driver extra cmd handler */ 515 struct drvextra_cmd_parm { 516 int ec_id; /* extra cmd id */ 517 int type; /* Can use this field as the type id or command size */ 518 int size; /* buffer size */ 519 unsigned char *pbuf; 520 }; 521 522 /*------------------- Below are used for RF/BB tunning ---------------------*/ 523 struct addBaReq_parm { 524 unsigned int tid; 525 u8 addr[ETH_ALEN]; 526 }; 527 528 struct addBaRsp_parm { 529 unsigned int tid; 530 unsigned int start_seq; 531 u8 addr[ETH_ALEN]; 532 u8 status; 533 u8 size; 534 }; 535 536 struct set_ch_parm { 537 u8 ch; 538 u8 bw; 539 u8 ch_offset; 540 }; 541 542 struct SetChannelPlan_param { 543 enum regd_src_t regd_src; 544 const struct country_chplan *country_ent; 545 u8 channel_plan; 546 }; 547 548 struct get_channel_plan_param { 549 struct get_chplan_resp **resp; 550 }; 551 552 struct LedBlink_param { 553 void *pLed; 554 }; 555 556 struct TDLSoption_param { 557 u8 addr[ETH_ALEN]; 558 u8 option; 559 }; 560 561 struct RunInThread_param { 562 void (*func)(void *); 563 void *context; 564 }; 565 566 567 #define GEN_CMD_CODE(cmd) cmd ## _CMD_ 568 569 570 /* 571 572 Result: 573 0x00: success 574 0x01: sucess, and check Response. 575 0x02: cmd ignored due to duplicated sequcne number 576 0x03: cmd dropped due to invalid cmd code 577 0x04: reserved. 578 579 */ 580 581 #define H2C_RSP_OFFSET 512 582 583 #define H2C_SUCCESS 0x00 584 #define H2C_SUCCESS_RSP 0x01 585 #define H2C_DUPLICATED 0x02 586 #define H2C_DROPPED 0x03 587 #define H2C_PARAMETERS_ERROR 0x04 588 #define H2C_REJECTED 0x05 589 #define H2C_CMD_OVERFLOW 0x06 590 #define H2C_RESERVED 0x07 591 #define H2C_ENQ_HEAD 0x08 592 #define H2C_ENQ_HEAD_FAIL 0x09 593 #define H2C_CMD_FAIL 0x0A 594 595 void rtw_init_sitesurvey_parm(_adapter *padapter, struct sitesurvey_parm *pparm); 596 u8 rtw_sitesurvey_cmd(_adapter *padapter, struct sitesurvey_parm *pparm); 597 #ifdef CONFIG_AP_MODE 598 u8 rtw_create_ibss_cmd(_adapter *adapter, int flags); 599 u8 rtw_startbss_cmd(_adapter *adapter, int flags); 600 #endif 601 602 #define REQ_CH_NONE -1 603 #define REQ_CH_INT_INFO -2 604 #define REQ_BW_NONE -1 605 #define REQ_BW_ORI -2 606 #define REQ_OFFSET_NONE -1 607 608 struct sta_info; 609 extern u8 rtw_setstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 key_type, bool enqueue); 610 extern u8 rtw_clearstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 enqueue); 611 612 extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network *pnetwork); 613 u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, int flags); 614 #ifdef CONFIG_AP_MODE 615 u8 rtw_change_bss_chbw_cmd(_adapter *adapter, int flags 616 , u8 ifbmp, u8 excl_ifbmp, s16 req_ch, s8 req_bw, s8 req_offset); 617 u8 rtw_stop_ap_cmd(_adapter *adapter, u8 flags); 618 #endif 619 #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 620 u8 rtw_tx_control_cmd(_adapter *adapter); 621 #endif 622 extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, u8 flags); 623 624 extern u8 rtw_addbareq_cmd(_adapter *padapter, u8 tid, u8 *addr); 625 extern u8 rtw_addbarsp_cmd(_adapter *padapter, u8 *addr, u16 tid, u8 status, u8 size, u16 start_seq); 626 /* add for CONFIG_IEEE80211W, none 11w also can use */ 627 extern u8 rtw_reset_securitypriv_cmd(_adapter *padapter); 628 extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter, u8 lock_scanned_queue, int flags); 629 extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter); 630 631 u8 rtw_lps_ctrl_wk_cmd(_adapter *padapter, u8 lps_ctrl_type, u8 flags); 632 u8 rtw_lps_ctrl_leave_set_level_cmd(_adapter *adapter, u8 lps_level, u8 flags); 633 #ifdef CONFIG_LPS_1T1R 634 u8 rtw_lps_ctrl_leave_set_1t1r_cmd(_adapter *adapter, u8 lps_1t1r, u8 flags); 635 #endif 636 u8 rtw_dm_in_lps_wk_cmd(_adapter *padapter); 637 u8 rtw_lps_change_dtim_cmd(_adapter *padapter, u8 dtim); 638 639 #if (RATE_ADAPTIVE_SUPPORT == 1) 640 u8 rtw_rpt_timer_cfg_cmd(_adapter *padapter, u16 minRptTime); 641 #endif 642 643 #ifdef CONFIG_ANTENNA_DIVERSITY 644 extern u8 rtw_antenna_select_cmd(_adapter *padapter, u8 antenna, u8 enqueue); 645 #endif 646 647 u8 rtw_dm_ra_mask_wk_cmd(_adapter *padapter, u8 *psta); 648 649 extern u8 rtw_ps_cmd(_adapter *padapter); 650 651 #if CONFIG_DFS 652 void rtw_dfs_ch_switch_hdl(struct dvobj_priv *dvobj); 653 #endif 654 655 #ifdef CONFIG_AP_MODE 656 u8 rtw_chk_hi_queue_cmd(_adapter *padapter); 657 #ifdef CONFIG_DFS_MASTER 658 u8 rtw_dfs_rd_cmd(_adapter *adapter, bool enqueue); 659 void rtw_dfs_rd_timer_hdl(void *ctx); 660 void rtw_dfs_rd_en_decision(_adapter *adapter, u8 mlme_act, u8 excl_ifbmp); 661 u8 rtw_dfs_rd_en_decision_cmd(_adapter *adapter); 662 #endif /* CONFIG_DFS_MASTER */ 663 #endif /* CONFIG_AP_MODE */ 664 665 #ifdef CONFIG_BT_COEXIST 666 u8 rtw_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length); 667 u8 rtw_btc_reduce_wl_txpwr_cmd(_adapter *adapter, u32 val); 668 #endif 669 670 u8 rtw_test_h2c_cmd(_adapter *adapter, u8 *buf, u8 len); 671 672 u8 rtw_enable_hw_update_tsf_cmd(_adapter *padapter); 673 u8 rtw_periodic_tsf_update_end_cmd(_adapter *adapter); 674 675 u8 rtw_set_chbw_cmd(_adapter *padapter, u8 ch, u8 bw, u8 ch_offset, u8 flags); 676 u8 rtw_iqk_cmd(_adapter *padapter, u8 flags); 677 678 u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 swconfig); 679 u8 rtw_set_country_cmd(_adapter *adapter, int flags, const char *country_code, u8 swconfig); 680 #ifdef CONFIG_REGD_SRC_FROM_OS 681 u8 rtw_sync_os_regd_cmd(_adapter *adapter, int flags, const char *country_code, u8 dfs_region); 682 #endif 683 u8 rtw_get_chplan_cmd(_adapter *adapter, int flags, struct get_chplan_resp **resp); 684 685 extern u8 rtw_led_blink_cmd(_adapter *padapter, void *pLed); 686 extern u8 rtw_set_csa_cmd(_adapter *adapter); 687 extern u8 rtw_tdls_cmd(_adapter *padapter, u8 *addr, u8 option); 688 689 u8 rtw_mp_cmd(_adapter *adapter, u8 mp_cmd_id, u8 flags); 690 691 #ifdef CONFIG_RTW_CUSTOMER_STR 692 u8 rtw_customer_str_req_cmd(_adapter *adapter); 693 u8 rtw_customer_str_write_cmd(_adapter *adapter, const u8 *cstr); 694 #endif 695 696 #ifdef CONFIG_FW_C2H_REG 697 u8 rtw_c2h_reg_wk_cmd(_adapter *adapter, u8 *c2h_evt); 698 #endif 699 #ifdef CONFIG_FW_C2H_PKT 700 u8 rtw_c2h_packet_wk_cmd(_adapter *adapter, u8 *c2h_evt, u16 length); 701 #endif 702 703 #ifdef CONFIG_RTW_REPEATER_SON 704 #define RSON_SCAN_PROCESS 10 705 #define RSON_SCAN_DISABLE 11 706 u8 rtw_rson_scan_wk_cmd(_adapter *adapter, int op); 707 #endif 708 709 u8 rtw_run_in_thread_cmd(_adapter *adapter, void (*func)(void *), void *context); 710 u8 rtw_run_in_thread_cmd_wait(_adapter *adapter, void (*func)(void *), void *context, s32 timeout_ms); 711 712 struct ssmps_cmd_parm { 713 struct sta_info *sta; 714 u8 smps; 715 }; 716 u8 rtw_ssmps_wk_cmd(_adapter *adapter, struct sta_info *sta, u8 smps, u8 enqueue); 717 718 u8 session_tracker_chk_cmd(_adapter *adapter, struct sta_info *sta); 719 u8 session_tracker_add_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 720 u8 session_tracker_del_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 721 722 u8 set_txq_params_cmd(_adapter *adapter, u32 ac_parm, u8 ac_type); 723 724 #if defined(CONFIG_RTW_MESH) && defined(RTW_PER_CMD_SUPPORT_FW) 725 u8 rtw_req_per_cmd(_adapter * adapter); 726 #endif 727 #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 728 u8 rtw_tbtx_chk_cmd(_adapter *adapter); 729 u8 rtw_tbtx_token_dispatch_cmd(_adapter *adapter); 730 #endif 731 #ifdef CONFIG_CTRL_TXSS_BY_TP 732 struct txss_cmd_parm { 733 struct sta_info *sta; 734 bool tx_1ss; 735 }; 736 737 void rtw_ctrl_txss_update_mimo_type(_adapter *adapter, struct sta_info *sta); 738 u8 rtw_ctrl_txss(_adapter *adapter, struct sta_info *sta, bool tx_1ss); 739 void rtw_ctrl_tx_ss_by_tp(_adapter *adapter, u8 from_timer); 740 741 #ifdef DBG_CTRL_TXSS 742 void dbg_ctrl_txss(_adapter *adapter, bool tx_1ss); 743 #endif 744 #endif 745 746 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf); 747 748 extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 749 extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 750 extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 751 void rtw_create_ibss_post_hdl(_adapter *padapter, int status); 752 extern void rtw_readtssi_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 753 754 extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 755 extern void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 756 757 enum rtw_cmd_id { 758 CMD_JOINBSS, /*0*/ 759 CMD_DISCONNECT, /*1*/ 760 CMD_CREATE_BSS,/*2*/ 761 CMD_SET_OPMODE, /*3*/ 762 CMD_SITE_SURVEY, /*4*/ 763 CMD_SET_AUTH, /*5*/ 764 CMD_SET_KEY, /*6*/ 765 CMD_SET_STAKEY, /*7*/ 766 CMD_ADD_BAREQ, /*8*/ 767 CMD_SET_CHANNEL, /*9*/ 768 CMD_TX_BEACON, /*10*/ 769 CMD_SET_MLME_EVT, /*11*/ 770 CMD_SET_DRV_EXTRA, /*12*/ 771 CMD_SET_CHANPLAN, /*13*/ 772 CMD_LEDBLINK, /*14*/ 773 CMD_SET_CHANSWITCH, /*15*/ 774 CMD_TDLS, /*16*/ 775 CMD_CHK_BMCSLEEPQ, /*17*/ 776 CMD_RUN_INTHREAD, /*18*/ 777 CMD_ADD_BARSP, /*19*/ 778 CMD_RM_POST_EVENT, /*20*/ 779 CMD_SET_MESH_PLINK_STATE, /* 21 */ 780 CMD_DO_IQK, /* 22 */ 781 CMD_GET_CHANPLAN, /*23*/ 782 CMD_ID_MAX 783 }; 784 785 #define CMD_FMT "cmd=%d,%d,%d" 786 #define CMD_ARG(cmd) \ 787 (cmd)->cmdcode, \ 788 (cmd)->cmdcode == CMD_SET_DRV_EXTRA ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->ec_id : ((cmd)->cmdcode == CMD_SET_MLME_EVT ? ((struct rtw_evt_header *)(cmd)->parmbuf)->id : 0), \ 789 (cmd)->cmdcode == CMD_SET_DRV_EXTRA ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->type : 0 790 791 #endif /* _CMD_H_ */ 792