1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * 19 ******************************************************************************/ 20 #ifndef __RTW_CMD_H_ 21 #define __RTW_CMD_H_ 22 23 24 #define C2H_MEM_SZ (16*1024) 25 26 #ifndef CONFIG_RTL8711FW 27 28 #define FREE_CMDOBJ_SZ 128 29 30 #define MAX_CMDSZ 1024 31 #define MAX_RSPSZ 512 32 #define MAX_EVTSZ 1024 33 34 #ifdef PLATFORM_OS_CE 35 #define CMDBUFF_ALIGN_SZ 4 36 #else 37 #define CMDBUFF_ALIGN_SZ 512 38 #endif 39 40 struct cmd_obj { 41 _adapter *padapter; 42 u16 cmdcode; 43 u8 res; 44 u8 *parmbuf; 45 u32 cmdsz; 46 u8 *rsp; 47 u32 rspsz; 48 struct submit_ctx *sctx; 49 u8 no_io; 50 //_sema cmd_sem; 51 _list list; 52 }; 53 54 /* cmd flags */ 55 enum { 56 RTW_CMDF_DIRECTLY = BIT0, 57 RTW_CMDF_WAIT_ACK = BIT1, 58 }; 59 60 struct cmd_priv { 61 _sema cmd_queue_sema; 62 //_sema cmd_done_sema; 63 _sema terminate_cmdthread_sema; 64 _queue cmd_queue; 65 u8 cmd_seq; 66 u8 *cmd_buf; //shall be non-paged, and 4 bytes aligned 67 u8 *cmd_allocated_buf; 68 u8 *rsp_buf; //shall be non-paged, and 4 bytes aligned 69 u8 *rsp_allocated_buf; 70 u32 cmd_issued_cnt; 71 u32 cmd_done_cnt; 72 u32 rsp_cnt; 73 ATOMIC_T cmdthd_running; 74 //u8 cmdthd_running; 75 u8 stop_req; 76 _adapter *padapter; 77 _mutex sctx_mutex; 78 }; 79 80 #ifdef CONFIG_EVENT_THREAD_MODE 81 struct evt_obj { 82 u16 evtcode; 83 u8 res; 84 u8 *parmbuf; 85 u32 evtsz; 86 _list list; 87 }; 88 #endif 89 90 struct evt_priv { 91 #ifdef CONFIG_EVENT_THREAD_MODE 92 _sema evt_notify; 93 _sema terminate_evtthread_sema; 94 _queue evt_queue; 95 #endif 96 97 #define CONFIG_C2H_WK 98 #ifdef CONFIG_C2H_WK 99 _workitem c2h_wk; 100 bool c2h_wk_alive; 101 struct rtw_cbuf *c2h_queue; 102 #define C2H_QUEUE_MAX_LEN 10 103 #endif 104 105 #ifdef CONFIG_H2CLBK 106 _sema lbkevt_done; 107 u8 lbkevt_limit; 108 u8 lbkevt_num; 109 u8 *cmdevt_parm; 110 #endif 111 ATOMIC_T event_seq; 112 u8 *evt_buf; //shall be non-paged, and 4 bytes aligned 113 u8 *evt_allocated_buf; 114 u32 evt_done_cnt; 115 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) 116 u8 *c2h_mem; 117 u8 *allocated_c2h_mem; 118 #ifdef PLATFORM_OS_XP 119 PMDL pc2h_mdl; 120 #endif 121 #endif 122 123 }; 124 125 #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ 126 do {\ 127 _rtw_init_listhead(&pcmd->list);\ 128 pcmd->cmdcode = code;\ 129 pcmd->parmbuf = (u8 *)(pparm);\ 130 pcmd->cmdsz = sizeof (*pparm);\ 131 pcmd->rsp = NULL;\ 132 pcmd->rspsz = 0;\ 133 } while(0) 134 135 #define init_h2fwcmd_w_parm_no_parm_rsp(pcmd, code) \ 136 do {\ 137 _rtw_init_listhead(&pcmd->list);\ 138 pcmd->cmdcode = code;\ 139 pcmd->parmbuf = NULL;\ 140 pcmd->cmdsz = 0;\ 141 pcmd->rsp = NULL;\ 142 pcmd->rspsz = 0;\ 143 } while(0) 144 145 struct c2h_evt_hdr { 146 u8 id:4; 147 u8 plen:4; 148 u8 seq; 149 u8 payload[0]; 150 }; 151 152 struct c2h_evt_hdr_88xx { 153 u8 id; 154 u8 seq; 155 u8 payload[12]; 156 u8 plen; 157 u8 trigger; 158 }; 159 160 #define c2h_evt_valid(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen) 161 162 struct P2P_PS_Offload_t { 163 u8 Offload_En:1; 164 u8 role:1; // 1: Owner, 0: Client 165 u8 CTWindow_En:1; 166 u8 NoA0_En:1; 167 u8 NoA1_En:1; 168 u8 AllStaSleep:1; // Only valid in Owner 169 u8 discovery:1; 170 u8 rsvd:1; 171 }; 172 173 struct P2P_PS_CTWPeriod_t { 174 u8 CTWPeriod; //TU 175 }; 176 177 #ifdef CONFIG_P2P_WOWLAN 178 179 struct P2P_WoWlan_Offload_t{ 180 u8 Disconnect_Wkup_Drv:1; 181 u8 role:2; 182 u8 Wps_Config[2]; 183 }; 184 185 #endif //CONFIG_P2P_WOWLAN 186 187 extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); 188 extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); 189 extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); 190 191 #ifdef CONFIG_EVENT_THREAD_MODE 192 extern u32 rtw_enqueue_evt(struct evt_priv *pevtpriv, struct evt_obj *obj); 193 extern struct evt_obj *rtw_dequeue_evt(_queue *queue); 194 extern void rtw_free_evt_obj(struct evt_obj *pcmd); 195 #endif 196 197 void rtw_stop_cmd_thread(_adapter *adapter); 198 thread_return rtw_cmd_thread(thread_context context); 199 200 extern u32 rtw_init_cmd_priv (struct cmd_priv *pcmdpriv); 201 extern void rtw_free_cmd_priv (struct cmd_priv *pcmdpriv); 202 203 extern u32 rtw_init_evt_priv (struct evt_priv *pevtpriv); 204 extern void rtw_free_evt_priv (struct evt_priv *pevtpriv); 205 extern void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); 206 extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv); 207 #ifdef CONFIG_P2P 208 u8 p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType ); 209 #endif //CONFIG_P2P 210 211 #else 212 //#include <ieee80211.h> 213 #endif /* CONFIG_RTL8711FW */ 214 215 enum rtw_drvextra_cmd_id 216 { 217 NONE_WK_CID, 218 STA_MSTATUS_RPT_WK_CID, 219 DYNAMIC_CHK_WK_CID, 220 DM_CTRL_WK_CID, 221 PBC_POLLING_WK_CID, 222 POWER_SAVING_CTRL_WK_CID,//IPS,AUTOSuspend 223 LPS_CTRL_WK_CID, 224 ANT_SELECT_WK_CID, 225 P2P_PS_WK_CID, 226 P2P_PROTO_WK_CID, 227 CHECK_HIQ_WK_CID,//for softap mode, check hi queue if empty 228 INTEl_WIDI_WK_CID, 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 DFS_MASTER_WK_CID, 239 SESSION_TRACKER_WK_CID, 240 EN_HW_UPDATE_TSF_WK_CID, 241 MAX_WK_CID 242 }; 243 244 enum LPS_CTRL_TYPE 245 { 246 LPS_CTRL_SCAN=0, 247 LPS_CTRL_JOINBSS=1, 248 LPS_CTRL_CONNECT=2, 249 LPS_CTRL_DISCONNECT=3, 250 LPS_CTRL_SPECIAL_PACKET=4, 251 LPS_CTRL_LEAVE=5, 252 LPS_CTRL_TRAFFIC_BUSY = 6, 253 LPS_CTRL_TX_TRAFFIC_LEAVE = 7, 254 LPS_CTRL_RX_TRAFFIC_LEAVE = 8, 255 LPS_CTRL_ENTER = 9, 256 LPS_CTRL_LEAVE_CFG80211_PWRMGMT = 10, 257 }; 258 259 enum STAKEY_TYPE 260 { 261 GROUP_KEY =0, 262 UNICAST_KEY =1, 263 TDLS_KEY =2, 264 }; 265 266 enum RFINTFS { 267 SWSI, 268 HWSI, 269 HWPI, 270 }; 271 272 /* 273 Caller Mode: Infra, Ad-HoC(C) 274 275 Notes: To enter USB suspend mode 276 277 Command Mode 278 279 */ 280 struct usb_suspend_parm { 281 u32 action;// 1: sleep, 0:resume 282 }; 283 284 /* 285 Caller Mode: Infra, Ad-HoC 286 287 Notes: To join a known BSS. 288 289 Command-Event Mode 290 291 */ 292 293 /* 294 Caller Mode: Infra, Ad-Hoc 295 296 Notes: To join the specified bss 297 298 Command Event Mode 299 300 */ 301 struct joinbss_parm { 302 WLAN_BSSID_EX network; 303 }; 304 305 /* 306 Caller Mode: Infra, Ad-HoC(C) 307 308 Notes: To disconnect the current associated BSS 309 310 Command Mode 311 312 */ 313 struct disconnect_parm { 314 u32 deauth_timeout_ms; 315 }; 316 317 /* 318 Caller Mode: AP, Ad-HoC(M) 319 320 Notes: To create a BSS 321 322 Command Mode 323 */ 324 struct createbss_parm { 325 bool adhoc; 326 327 /* used by AP mode now */ 328 s16 req_ch; 329 u8 req_bw; 330 u8 req_offset; 331 }; 332 333 /* 334 Caller Mode: AP, Ad-HoC, Infra 335 336 Notes: To set the NIC mode of RTL8711 337 338 Command Mode 339 340 The definition of mode: 341 342 #define IW_MODE_AUTO 0 // Let the driver decides which AP to join 343 #define IW_MODE_ADHOC 1 // Single cell network (Ad-Hoc Clients) 344 #define IW_MODE_INFRA 2 // Multi cell network, roaming, .. 345 #define IW_MODE_MASTER 3 // Synchronisation master or Access Point 346 #define IW_MODE_REPEAT 4 // Wireless Repeater (forwarder) 347 #define IW_MODE_SECOND 5 // Secondary master/repeater (backup) 348 #define IW_MODE_MONITOR 6 // Passive monitor (listen only) 349 350 */ 351 struct setopmode_parm { 352 u8 mode; 353 u8 rsvd[3]; 354 }; 355 356 /* 357 Caller Mode: AP, Ad-HoC, Infra 358 359 Notes: To ask RTL8711 performing site-survey 360 361 Command-Event Mode 362 363 */ 364 365 #define RTW_SSID_SCAN_AMOUNT 9 // for WEXT_CSCAN_AMOUNT 9 366 #define RTW_CHANNEL_SCAN_AMOUNT (14+37) 367 struct sitesurvey_parm { 368 sint scan_mode; //active: 1, passive: 0 369 /* sint bsslimit; // 1 ~ 48 */ 370 u8 ssid_num; 371 u8 ch_num; 372 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT]; 373 struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT]; 374 }; 375 376 /* 377 Caller Mode: Any 378 379 Notes: To set the auth type of RTL8711. open/shared/802.1x 380 381 Command Mode 382 383 */ 384 struct setauth_parm { 385 u8 mode; //0: legacy open, 1: legacy shared 2: 802.1x 386 u8 _1x; //0: PSK, 1: TLS 387 u8 rsvd[2]; 388 }; 389 390 /* 391 Caller Mode: Infra 392 393 a. algorithm: wep40, wep104, tkip & aes 394 b. keytype: grp key/unicast key 395 c. key contents 396 397 when shared key ==> keyid is the camid 398 when 802.1x ==> keyid [0:1] ==> grp key 399 when 802.1x ==> keyid > 2 ==> unicast key 400 401 */ 402 struct setkey_parm { 403 u8 algorithm; // encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 404 u8 keyid; 405 u8 grpkey; // 1: this is the grpkey for 802.1x. 0: this is the unicast key for 802.1x 406 u8 set_tx; // 1: main tx key for wep. 0: other key. 407 u8 key[16]; // this could be 40 or 104 408 }; 409 410 /* 411 When in AP or Ad-Hoc mode, this is used to 412 allocate an sw/hw entry for a newly associated sta. 413 414 Command 415 416 when shared key ==> algorithm/keyid 417 418 */ 419 struct set_stakey_parm { 420 u8 addr[ETH_ALEN]; 421 u8 algorithm; 422 u8 keyid; 423 u8 key[16]; 424 }; 425 426 struct set_stakey_rsp { 427 u8 addr[ETH_ALEN]; 428 u8 keyid; 429 u8 rsvd; 430 }; 431 432 /* 433 Caller Ad-Hoc/AP 434 435 Command -Rsp(AID == CAMID) mode 436 437 This is to force fw to add an sta_data entry per driver's request. 438 439 FW will write an cam entry associated with it. 440 441 */ 442 struct set_assocsta_parm { 443 u8 addr[ETH_ALEN]; 444 }; 445 446 struct set_assocsta_rsp { 447 u8 cam_id; 448 u8 rsvd[3]; 449 }; 450 451 /* 452 Caller Ad-Hoc/AP 453 454 Command mode 455 456 This is to force fw to del an sta_data entry per driver's request 457 458 FW will invalidate the cam entry associated with it. 459 460 */ 461 struct del_assocsta_parm { 462 u8 addr[ETH_ALEN]; 463 }; 464 465 /* 466 Caller Mode: AP/Ad-HoC(M) 467 468 Notes: To notify fw that given staid has changed its power state 469 470 Command Mode 471 472 */ 473 struct setstapwrstate_parm { 474 u8 staid; 475 u8 status; 476 u8 hwaddr[6]; 477 }; 478 479 /* 480 Caller Mode: Any 481 482 Notes: To setup the basic rate of RTL8711 483 484 Command Mode 485 486 */ 487 struct setbasicrate_parm { 488 u8 basicrates[NumRates]; 489 }; 490 491 /* 492 Caller Mode: Any 493 494 Notes: To read the current basic rate 495 496 Command-Rsp Mode 497 498 */ 499 struct getbasicrate_parm { 500 u32 rsvd; 501 }; 502 503 struct getbasicrate_rsp { 504 u8 basicrates[NumRates]; 505 }; 506 507 /* 508 Caller Mode: Any 509 510 Notes: To setup the data rate of RTL8711 511 512 Command Mode 513 514 */ 515 struct setdatarate_parm { 516 #ifdef MP_FIRMWARE_OFFLOAD 517 u32 curr_rateidx; 518 #else 519 u8 mac_id; 520 u8 datarates[NumRates]; 521 #endif 522 }; 523 524 /* 525 Caller Mode: Any 526 527 Notes: To read the current data rate 528 529 Command-Rsp Mode 530 531 */ 532 struct getdatarate_parm { 533 u32 rsvd; 534 535 }; 536 struct getdatarate_rsp { 537 u8 datarates[NumRates]; 538 }; 539 540 541 /* 542 Caller Mode: Any 543 AP: AP can use the info for the contents of beacon frame 544 Infra: STA can use the info when sitesurveying 545 Ad-HoC(M): Like AP 546 Ad-HoC(C): Like STA 547 548 549 Notes: To set the phy capability of the NIC 550 551 Command Mode 552 553 */ 554 555 struct setphyinfo_parm { 556 struct regulatory_class class_sets[NUM_REGULATORYS]; 557 u8 status; 558 }; 559 560 struct getphyinfo_parm { 561 u32 rsvd; 562 }; 563 564 struct getphyinfo_rsp { 565 struct regulatory_class class_sets[NUM_REGULATORYS]; 566 u8 status; 567 }; 568 569 /* 570 Caller Mode: Any 571 572 Notes: To set the channel/modem/band 573 This command will be used when channel/modem/band is changed. 574 575 Command Mode 576 577 */ 578 struct setphy_parm { 579 u8 rfchannel; 580 u8 modem; 581 }; 582 583 /* 584 Caller Mode: Any 585 586 Notes: To get the current setting of channel/modem/band 587 588 Command-Rsp Mode 589 590 */ 591 struct getphy_parm { 592 u32 rsvd; 593 594 }; 595 struct getphy_rsp { 596 u8 rfchannel; 597 u8 modem; 598 }; 599 600 struct readBB_parm { 601 u8 offset; 602 }; 603 struct readBB_rsp { 604 u8 value; 605 }; 606 607 struct readTSSI_parm { 608 u8 offset; 609 }; 610 struct readTSSI_rsp { 611 u8 value; 612 }; 613 614 struct readMAC_parm { 615 u8 len; 616 u32 addr; 617 }; 618 619 struct writeBB_parm { 620 u8 offset; 621 u8 value; 622 }; 623 624 struct readRF_parm { 625 u8 offset; 626 }; 627 struct readRF_rsp { 628 u32 value; 629 }; 630 631 struct writeRF_parm { 632 u32 offset; 633 u32 value; 634 }; 635 636 struct getrfintfs_parm { 637 u8 rfintfs; 638 }; 639 640 641 struct Tx_Beacon_param 642 { 643 WLAN_BSSID_EX network; 644 }; 645 646 /* 647 Notes: This command is used for H2C/C2H loopback testing 648 649 mac[0] == 0 650 ==> CMD mode, return H2C_SUCCESS. 651 The following condition must be ture under CMD mode 652 mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; 653 s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; 654 s2 == (b1 << 8 | b0); 655 656 mac[0] == 1 657 ==> CMD_RSP mode, return H2C_SUCCESS_RSP 658 659 The rsp layout shall be: 660 rsp: parm: 661 mac[0] = mac[5]; 662 mac[1] = mac[4]; 663 mac[2] = mac[3]; 664 mac[3] = mac[2]; 665 mac[4] = mac[1]; 666 mac[5] = mac[0]; 667 s0 = s1; 668 s1 = swap16(s0); 669 w0 = swap32(w1); 670 b0 = b1 671 s2 = s0 + s1 672 b1 = b0 673 w1 = w0 674 675 mac[0] == 2 676 ==> CMD_EVENT mode, return H2C_SUCCESS 677 The event layout shall be: 678 event: parm: 679 mac[0] = mac[5]; 680 mac[1] = mac[4]; 681 mac[2] = event's sequence number, starting from 1 to parm's marc[3] 682 mac[3] = mac[2]; 683 mac[4] = mac[1]; 684 mac[5] = mac[0]; 685 s0 = swap16(s0) - event.mac[2]; 686 s1 = s1 + event.mac[2]; 687 w0 = swap32(w0); 688 b0 = b1 689 s2 = s0 + event.mac[2] 690 b1 = b0 691 w1 = swap32(w1) - event.mac[2]; 692 693 parm->mac[3] is the total event counts that host requested. 694 695 696 event will be the same with the cmd's param. 697 698 */ 699 700 #ifdef CONFIG_H2CLBK 701 702 struct seth2clbk_parm { 703 u8 mac[6]; 704 u16 s0; 705 u16 s1; 706 u32 w0; 707 u8 b0; 708 u16 s2; 709 u8 b1; 710 u32 w1; 711 }; 712 713 struct geth2clbk_parm { 714 u32 rsv; 715 }; 716 717 struct geth2clbk_rsp { 718 u8 mac[6]; 719 u16 s0; 720 u16 s1; 721 u32 w0; 722 u8 b0; 723 u16 s2; 724 u8 b1; 725 u32 w1; 726 }; 727 728 #endif /* CONFIG_H2CLBK */ 729 730 // CMD param Formart for driver extra cmd handler 731 struct drvextra_cmd_parm { 732 int ec_id; //extra cmd id 733 int type; // Can use this field as the type id or command size 734 int size; //buffer size 735 unsigned char *pbuf; 736 }; 737 738 /*------------------- Below are used for RF/BB tunning ---------------------*/ 739 740 struct setantenna_parm { 741 u8 tx_antset; 742 u8 rx_antset; 743 u8 tx_antenna; 744 u8 rx_antenna; 745 }; 746 747 struct enrateadaptive_parm { 748 u32 en; 749 }; 750 751 struct settxagctbl_parm { 752 u32 txagc[MAX_RATES_LENGTH]; 753 }; 754 755 struct gettxagctbl_parm { 756 u32 rsvd; 757 }; 758 struct gettxagctbl_rsp { 759 u32 txagc[MAX_RATES_LENGTH]; 760 }; 761 762 struct setagcctrl_parm { 763 u32 agcctrl; // 0: pure hw, 1: fw 764 }; 765 766 767 struct setssup_parm { 768 u32 ss_ForceUp[MAX_RATES_LENGTH]; 769 }; 770 771 struct getssup_parm { 772 u32 rsvd; 773 }; 774 struct getssup_rsp { 775 u8 ss_ForceUp[MAX_RATES_LENGTH]; 776 }; 777 778 779 struct setssdlevel_parm { 780 u8 ss_DLevel[MAX_RATES_LENGTH]; 781 }; 782 783 struct getssdlevel_parm { 784 u32 rsvd; 785 }; 786 struct getssdlevel_rsp { 787 u8 ss_DLevel[MAX_RATES_LENGTH]; 788 }; 789 790 struct setssulevel_parm { 791 u8 ss_ULevel[MAX_RATES_LENGTH]; 792 }; 793 794 struct getssulevel_parm { 795 u32 rsvd; 796 }; 797 struct getssulevel_rsp { 798 u8 ss_ULevel[MAX_RATES_LENGTH]; 799 }; 800 801 802 struct setcountjudge_parm { 803 u8 count_judge[MAX_RATES_LENGTH]; 804 }; 805 806 struct getcountjudge_parm { 807 u32 rsvd; 808 }; 809 struct getcountjudge_rsp { 810 u8 count_judge[MAX_RATES_LENGTH]; 811 }; 812 813 814 struct setratable_parm { 815 u8 ss_ForceUp[NumRates]; 816 u8 ss_ULevel[NumRates]; 817 u8 ss_DLevel[NumRates]; 818 u8 count_judge[NumRates]; 819 }; 820 821 struct getratable_parm { 822 uint rsvd; 823 }; 824 struct getratable_rsp { 825 u8 ss_ForceUp[NumRates]; 826 u8 ss_ULevel[NumRates]; 827 u8 ss_DLevel[NumRates]; 828 u8 count_judge[NumRates]; 829 }; 830 831 832 //to get TX,RX retry count 833 struct gettxretrycnt_parm{ 834 unsigned int rsvd; 835 }; 836 struct gettxretrycnt_rsp{ 837 unsigned long tx_retrycnt; 838 }; 839 840 struct getrxretrycnt_parm{ 841 unsigned int rsvd; 842 }; 843 struct getrxretrycnt_rsp{ 844 unsigned long rx_retrycnt; 845 }; 846 847 //to get BCNOK,BCNERR count 848 struct getbcnokcnt_parm{ 849 unsigned int rsvd; 850 }; 851 struct getbcnokcnt_rsp{ 852 unsigned long bcnokcnt; 853 }; 854 855 struct getbcnerrcnt_parm{ 856 unsigned int rsvd; 857 }; 858 struct getbcnerrcnt_rsp{ 859 unsigned long bcnerrcnt; 860 }; 861 862 // to get current TX power level 863 struct getcurtxpwrlevel_parm{ 864 unsigned int rsvd; 865 }; 866 struct getcurtxpwrlevel_rsp{ 867 unsigned short tx_power; 868 }; 869 870 struct setprobereqextraie_parm { 871 unsigned char e_id; 872 unsigned char ie_len; 873 unsigned char ie[0]; 874 }; 875 876 struct setassocreqextraie_parm { 877 unsigned char e_id; 878 unsigned char ie_len; 879 unsigned char ie[0]; 880 }; 881 882 struct setproberspextraie_parm { 883 unsigned char e_id; 884 unsigned char ie_len; 885 unsigned char ie[0]; 886 }; 887 888 struct setassocrspextraie_parm { 889 unsigned char e_id; 890 unsigned char ie_len; 891 unsigned char ie[0]; 892 }; 893 894 895 struct addBaReq_parm 896 { 897 unsigned int tid; 898 u8 addr[ETH_ALEN]; 899 }; 900 901 struct addBaRsp_parm { 902 unsigned int tid; 903 unsigned int start_seq; 904 u8 addr[ETH_ALEN]; 905 u8 status; 906 u8 size; 907 }; 908 909 /*H2C Handler index: 46 */ 910 struct set_ch_parm { 911 u8 ch; 912 u8 bw; 913 u8 ch_offset; 914 }; 915 916 #ifdef MP_FIRMWARE_OFFLOAD 917 /*H2C Handler index: 47 */ 918 struct SetTxPower_parm 919 { 920 u8 TxPower; 921 }; 922 923 /*H2C Handler index: 48 */ 924 struct SwitchAntenna_parm 925 { 926 u16 antenna_tx; 927 u16 antenna_rx; 928 // R_ANTENNA_SELECT_CCK cck_txrx; 929 u8 cck_txrx; 930 }; 931 932 /*H2C Handler index: 49 */ 933 struct SetCrystalCap_parm 934 { 935 u32 curr_crystalcap; 936 }; 937 938 /*H2C Handler index: 50 */ 939 struct SetSingleCarrierTx_parm 940 { 941 u8 bStart; 942 }; 943 944 /*H2C Handler index: 51 */ 945 struct SetSingleToneTx_parm 946 { 947 u8 bStart; 948 u8 curr_rfpath; 949 }; 950 951 /*H2C Handler index: 52 */ 952 struct SetCarrierSuppressionTx_parm 953 { 954 u8 bStart; 955 u32 curr_rateidx; 956 }; 957 958 /*H2C Handler index: 53 */ 959 struct SetContinuousTx_parm 960 { 961 u8 bStart; 962 u8 CCK_flag; /*1:CCK 2:OFDM*/ 963 u32 curr_rateidx; 964 }; 965 966 /*H2C Handler index: 54 */ 967 struct SwitchBandwidth_parm 968 { 969 u8 curr_bandwidth; 970 }; 971 972 #endif /* MP_FIRMWARE_OFFLOAD */ 973 974 /*H2C Handler index: 59 */ 975 struct SetChannelPlan_param 976 { 977 const struct country_chplan *country_ent; 978 u8 channel_plan; 979 }; 980 981 /*H2C Handler index: 60 */ 982 struct LedBlink_param 983 { 984 PVOID pLed; 985 }; 986 987 /*H2C Handler index: 61 */ 988 struct SetChannelSwitch_param 989 { 990 u8 new_ch_no; 991 }; 992 993 /*H2C Handler index: 62 */ 994 struct TDLSoption_param 995 { 996 u8 addr[ETH_ALEN]; 997 u8 option; 998 }; 999 1000 /*H2C Handler index: 64 */ 1001 struct RunInThread_param 1002 { 1003 void (*func)(void*); 1004 void *context; 1005 }; 1006 1007 1008 #define GEN_CMD_CODE(cmd) cmd ## _CMD_ 1009 1010 1011 /* 1012 1013 Result: 1014 0x00: success 1015 0x01: sucess, and check Response. 1016 0x02: cmd ignored due to duplicated sequcne number 1017 0x03: cmd dropped due to invalid cmd code 1018 0x04: reserved. 1019 1020 */ 1021 1022 #define H2C_RSP_OFFSET 512 1023 1024 #define H2C_SUCCESS 0x00 1025 #define H2C_SUCCESS_RSP 0x01 1026 #define H2C_DUPLICATED 0x02 1027 #define H2C_DROPPED 0x03 1028 #define H2C_PARAMETERS_ERROR 0x04 1029 #define H2C_REJECTED 0x05 1030 #define H2C_CMD_OVERFLOW 0x06 1031 #define H2C_RESERVED 0x07 1032 #define H2C_ENQ_HEAD 0x08 1033 #define H2C_ENQ_HEAD_FAIL 0x09 1034 1035 extern u8 rtw_setassocsta_cmd(_adapter *padapter, u8 *mac_addr); 1036 extern u8 rtw_setstandby_cmd(_adapter *padapter, uint action); 1037 u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num); 1038 1039 u8 rtw_create_ibss_cmd(_adapter *adapter, int flags); 1040 u8 rtw_startbss_cmd(_adapter *adapter, int flags); 1041 u8 rtw_change_bss_chbw_cmd(_adapter *adapter, int flags, u8 req_ch, u8 req_bw, u8 req_offset); 1042 1043 extern u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch); 1044 1045 struct sta_info; 1046 extern u8 rtw_setstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 key_type, bool enqueue); 1047 extern u8 rtw_clearstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 enqueue); 1048 1049 extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork); 1050 u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, bool enqueue); 1051 extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, bool enqueue); 1052 extern u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset); 1053 extern u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset); 1054 extern u8 rtw_getmacreg_cmd(_adapter *padapter, u8 len, u32 addr); 1055 extern void rtw_usb_catc_trigger_cmd(_adapter *padapter, const char *caller); 1056 extern u8 rtw_setbbreg_cmd(_adapter * padapter, u8 offset, u8 val); 1057 extern u8 rtw_setrfreg_cmd(_adapter * padapter, u8 offset, u32 val); 1058 extern u8 rtw_getbbreg_cmd(_adapter * padapter, u8 offset, u8 * pval); 1059 extern u8 rtw_getrfreg_cmd(_adapter * padapter, u8 offset, u8 * pval); 1060 extern u8 rtw_setrfintfs_cmd(_adapter *padapter, u8 mode); 1061 extern u8 rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table); 1062 extern u8 rtw_getrttbl_cmd(_adapter *padapter, struct getratable_rsp *pval); 1063 1064 extern u8 rtw_gettssi_cmd(_adapter *padapter, u8 offset,u8 *pval); 1065 extern u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type); 1066 extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type); 1067 1068 extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr); 1069 extern u8 rtw_addbarsp_cmd(_adapter *padapter, u8 *addr, u16 tid, u8 status, u8 size, u16 start_seq); 1070 // add for CONFIG_IEEE80211W, none 11w also can use 1071 extern u8 rtw_reset_securitypriv_cmd(_adapter*padapter); 1072 extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter); 1073 extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter); 1074 1075 u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue); 1076 u8 rtw_dm_in_lps_wk_cmd(_adapter*padapter); 1077 u8 rtw_lps_change_dtim_cmd(_adapter*padapter, u8 dtim); 1078 1079 #if (RATE_ADAPTIVE_SUPPORT==1) 1080 u8 rtw_rpt_timer_cfg_cmd(_adapter*padapter, u16 minRptTime); 1081 #endif 1082 1083 #ifdef CONFIG_ANTENNA_DIVERSITY 1084 extern u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue); 1085 #endif 1086 1087 u8 rtw_dm_ra_mask_wk_cmd(_adapter*padapter, u8 *psta); 1088 1089 extern u8 rtw_ps_cmd(_adapter*padapter); 1090 1091 #ifdef CONFIG_AP_MODE 1092 u8 rtw_chk_hi_queue_cmd(_adapter*padapter); 1093 #ifdef CONFIG_DFS_MASTER 1094 u8 rtw_dfs_master_cmd(_adapter *adapter, bool enqueue); 1095 void rtw_dfs_master_timer_hdl(RTW_TIMER_HDL_ARGS); 1096 void rtw_dfs_master_enable(_adapter *adapter, u8 ch, u8 bw, u8 offset); 1097 void rtw_dfs_master_disable(_adapter *adapter, bool ld_sta_in_dfs); 1098 enum { 1099 MLME_STA_CONNECTING, 1100 MLME_STA_CONNECTED, 1101 MLME_STA_DISCONNECTED, 1102 MLME_AP_STARTED, 1103 MLME_AP_STOPPED, 1104 }; 1105 void rtw_dfs_master_status_apply(_adapter *adapter, u8 self_action); 1106 #endif /* CONFIG_DFS_MASTER */ 1107 #endif /* CONFIG_AP_MODE */ 1108 1109 #ifdef CONFIG_BT_COEXIST 1110 u8 rtw_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length); 1111 #endif 1112 1113 u8 rtw_enable_hw_update_tsf_cmd(_adapter *padapter); 1114 1115 u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue); 1116 1117 u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 swconfig); 1118 u8 rtw_set_country_cmd(_adapter *adapter, int flags, const char *country_code, u8 swconfig); 1119 1120 extern u8 rtw_led_blink_cmd(_adapter*padapter, PVOID pLed); 1121 extern u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no); 1122 extern u8 rtw_tdls_cmd(_adapter*padapter, const u8 *addr, u8 option); 1123 1124 //#ifdef CONFIG_C2H_PACKET_EN 1125 extern u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length); 1126 //#else 1127 extern u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt); 1128 //#endif 1129 1130 u8 rtw_run_in_thread_cmd(PADAPTER padapter, void (*func)(void*), void* context); 1131 1132 u8 session_tracker_chk_cmd(_adapter *adapter, struct sta_info *sta); 1133 u8 session_tracker_add_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 1134 u8 session_tracker_del_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 1135 1136 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf); 1137 1138 extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 1139 extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 1140 extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 1141 void rtw_create_ibss_post_hdl(_adapter *padapter, int status); 1142 extern void rtw_getbbrfreg_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 1143 extern void rtw_readtssi_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd); 1144 1145 extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 1146 extern void rtw_setassocsta_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 1147 extern void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 1148 extern void rtw_getmacreg_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 1149 1150 1151 struct _cmd_callback { 1152 u32 cmd_code; 1153 void (*callback)(_adapter *padapter, struct cmd_obj *cmd); 1154 }; 1155 1156 enum rtw_h2c_cmd 1157 { 1158 GEN_CMD_CODE(_Read_MACREG) , /*0*/ 1159 GEN_CMD_CODE(_Write_MACREG) , 1160 GEN_CMD_CODE(_Read_BBREG) , 1161 GEN_CMD_CODE(_Write_BBREG) , 1162 GEN_CMD_CODE(_Read_RFREG) , 1163 GEN_CMD_CODE(_Write_RFREG) , /*5*/ 1164 GEN_CMD_CODE(_Read_EEPROM) , 1165 GEN_CMD_CODE(_Write_EEPROM) , 1166 GEN_CMD_CODE(_Read_EFUSE) , 1167 GEN_CMD_CODE(_Write_EFUSE) , 1168 1169 GEN_CMD_CODE(_Read_CAM) , /*10*/ 1170 GEN_CMD_CODE(_Write_CAM) , 1171 GEN_CMD_CODE(_setBCNITV), 1172 GEN_CMD_CODE(_setMBIDCFG), 1173 GEN_CMD_CODE(_JoinBss), /*14*/ 1174 GEN_CMD_CODE(_DisConnect) , /*15*/ 1175 GEN_CMD_CODE(_CreateBss) , 1176 GEN_CMD_CODE(_SetOpMode) , 1177 GEN_CMD_CODE(_SiteSurvey), /*18*/ 1178 GEN_CMD_CODE(_SetAuth) , 1179 1180 GEN_CMD_CODE(_SetKey) , /*20*/ 1181 GEN_CMD_CODE(_SetStaKey) , 1182 GEN_CMD_CODE(_SetAssocSta) , 1183 GEN_CMD_CODE(_DelAssocSta) , 1184 GEN_CMD_CODE(_SetStaPwrState) , 1185 GEN_CMD_CODE(_SetBasicRate) , /*25*/ 1186 GEN_CMD_CODE(_GetBasicRate) , 1187 GEN_CMD_CODE(_SetDataRate) , 1188 GEN_CMD_CODE(_GetDataRate) , 1189 GEN_CMD_CODE(_SetPhyInfo) , 1190 1191 GEN_CMD_CODE(_GetPhyInfo) , /*30*/ 1192 GEN_CMD_CODE(_SetPhy) , 1193 GEN_CMD_CODE(_GetPhy) , 1194 GEN_CMD_CODE(_readRssi) , 1195 GEN_CMD_CODE(_readGain) , 1196 GEN_CMD_CODE(_SetAtim) , /*35*/ 1197 GEN_CMD_CODE(_SetPwrMode) , 1198 GEN_CMD_CODE(_JoinbssRpt), 1199 GEN_CMD_CODE(_SetRaTable) , 1200 GEN_CMD_CODE(_GetRaTable) , 1201 1202 GEN_CMD_CODE(_GetCCXReport), /*40*/ 1203 GEN_CMD_CODE(_GetDTMReport), 1204 GEN_CMD_CODE(_GetTXRateStatistics), 1205 GEN_CMD_CODE(_SetUsbSuspend), 1206 GEN_CMD_CODE(_SetH2cLbk), 1207 GEN_CMD_CODE(_AddBAReq) , /*45*/ 1208 GEN_CMD_CODE(_SetChannel), /*46*/ 1209 GEN_CMD_CODE(_SetTxPower), 1210 GEN_CMD_CODE(_SwitchAntenna), 1211 GEN_CMD_CODE(_SetCrystalCap), 1212 GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/ 1213 1214 GEN_CMD_CODE(_SetSingleToneTx),/*51*/ 1215 GEN_CMD_CODE(_SetCarrierSuppressionTx), 1216 GEN_CMD_CODE(_SetContinuousTx), 1217 GEN_CMD_CODE(_SwitchBandwidth), /*54*/ 1218 GEN_CMD_CODE(_TX_Beacon), /*55*/ 1219 1220 GEN_CMD_CODE(_Set_MLME_EVT), /*56*/ 1221 GEN_CMD_CODE(_Set_Drv_Extra), /*57*/ 1222 GEN_CMD_CODE(_Set_H2C_MSG), /*58*/ 1223 1224 GEN_CMD_CODE(_SetChannelPlan), /*59*/ 1225 GEN_CMD_CODE(_LedBlink), /*60*/ 1226 1227 GEN_CMD_CODE(_SetChannelSwitch), /*61*/ 1228 GEN_CMD_CODE(_TDLS), /*62*/ 1229 GEN_CMD_CODE(_ChkBMCSleepq), /*63*/ 1230 1231 GEN_CMD_CODE(_RunInThreadCMD), /*64*/ 1232 GEN_CMD_CODE(_AddBARsp) , /*65*/ 1233 1234 MAX_H2CCMD 1235 }; 1236 1237 #define _GetMACReg_CMD_ _Read_MACREG_CMD_ 1238 #define _SetMACReg_CMD_ _Write_MACREG_CMD_ 1239 #define _GetBBReg_CMD_ _Read_BBREG_CMD_ 1240 #define _SetBBReg_CMD_ _Write_BBREG_CMD_ 1241 #define _GetRFReg_CMD_ _Read_RFREG_CMD_ 1242 #define _SetRFReg_CMD_ _Write_RFREG_CMD_ 1243 1244 #ifdef _RTW_CMD_C_ 1245 struct _cmd_callback rtw_cmd_callback[] = 1246 { 1247 {GEN_CMD_CODE(_Read_MACREG), &rtw_getmacreg_cmdrsp_callback}, /*0*/ 1248 {GEN_CMD_CODE(_Write_MACREG), NULL}, 1249 {GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback}, 1250 {GEN_CMD_CODE(_Write_BBREG), NULL}, 1251 {GEN_CMD_CODE(_Read_RFREG), &rtw_getbbrfreg_cmdrsp_callback}, 1252 {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/ 1253 {GEN_CMD_CODE(_Read_EEPROM), NULL}, 1254 {GEN_CMD_CODE(_Write_EEPROM), NULL}, 1255 {GEN_CMD_CODE(_Read_EFUSE), NULL}, 1256 {GEN_CMD_CODE(_Write_EFUSE), NULL}, 1257 1258 {GEN_CMD_CODE(_Read_CAM), NULL}, /*10*/ 1259 {GEN_CMD_CODE(_Write_CAM), NULL}, 1260 {GEN_CMD_CODE(_setBCNITV), NULL}, 1261 {GEN_CMD_CODE(_setMBIDCFG), NULL}, 1262 {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd_callback}, /*14*/ 1263 {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd_callback}, /*15*/ 1264 {GEN_CMD_CODE(_CreateBss), NULL}, 1265 {GEN_CMD_CODE(_SetOpMode), NULL}, 1266 {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback}, /*18*/ 1267 {GEN_CMD_CODE(_SetAuth), NULL}, 1268 1269 {GEN_CMD_CODE(_SetKey), NULL}, /*20*/ 1270 {GEN_CMD_CODE(_SetStaKey), &rtw_setstaKey_cmdrsp_callback}, 1271 {GEN_CMD_CODE(_SetAssocSta), &rtw_setassocsta_cmdrsp_callback}, 1272 {GEN_CMD_CODE(_DelAssocSta), NULL}, 1273 {GEN_CMD_CODE(_SetStaPwrState), NULL}, 1274 {GEN_CMD_CODE(_SetBasicRate), NULL}, /*25*/ 1275 {GEN_CMD_CODE(_GetBasicRate), NULL}, 1276 {GEN_CMD_CODE(_SetDataRate), NULL}, 1277 {GEN_CMD_CODE(_GetDataRate), NULL}, 1278 {GEN_CMD_CODE(_SetPhyInfo), NULL}, 1279 1280 {GEN_CMD_CODE(_GetPhyInfo), NULL}, /*30*/ 1281 {GEN_CMD_CODE(_SetPhy), NULL}, 1282 {GEN_CMD_CODE(_GetPhy), NULL}, 1283 {GEN_CMD_CODE(_readRssi), NULL}, 1284 {GEN_CMD_CODE(_readGain), NULL}, 1285 {GEN_CMD_CODE(_SetAtim), NULL}, /*35*/ 1286 {GEN_CMD_CODE(_SetPwrMode), NULL}, 1287 {GEN_CMD_CODE(_JoinbssRpt), NULL}, 1288 {GEN_CMD_CODE(_SetRaTable), NULL}, 1289 {GEN_CMD_CODE(_GetRaTable) , NULL}, 1290 1291 {GEN_CMD_CODE(_GetCCXReport), NULL}, /*40*/ 1292 {GEN_CMD_CODE(_GetDTMReport), NULL}, 1293 {GEN_CMD_CODE(_GetTXRateStatistics), NULL}, 1294 {GEN_CMD_CODE(_SetUsbSuspend), NULL}, 1295 {GEN_CMD_CODE(_SetH2cLbk), NULL}, 1296 {GEN_CMD_CODE(_AddBAReq), NULL}, /*45*/ 1297 {GEN_CMD_CODE(_SetChannel), NULL}, /*46*/ 1298 {GEN_CMD_CODE(_SetTxPower), NULL}, 1299 {GEN_CMD_CODE(_SwitchAntenna), NULL}, 1300 {GEN_CMD_CODE(_SetCrystalCap), NULL}, 1301 {GEN_CMD_CODE(_SetSingleCarrierTx), NULL}, /*50*/ 1302 1303 {GEN_CMD_CODE(_SetSingleToneTx), NULL}, /*51*/ 1304 {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL}, 1305 {GEN_CMD_CODE(_SetContinuousTx), NULL}, 1306 {GEN_CMD_CODE(_SwitchBandwidth), NULL}, /*54*/ 1307 {GEN_CMD_CODE(_TX_Beacon), NULL},/*55*/ 1308 1309 {GEN_CMD_CODE(_Set_MLME_EVT), NULL},/*56*/ 1310 {GEN_CMD_CODE(_Set_Drv_Extra), NULL},/*57*/ 1311 {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/ 1312 {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/ 1313 {GEN_CMD_CODE(_LedBlink), NULL},/*60*/ 1314 1315 {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/ 1316 {GEN_CMD_CODE(_TDLS), NULL},/*62*/ 1317 {GEN_CMD_CODE(_ChkBMCSleepq), NULL}, /*63*/ 1318 1319 {GEN_CMD_CODE(_RunInThreadCMD), NULL},/*64*/ 1320 {GEN_CMD_CODE(_AddBARsp), NULL}, /*65*/ 1321 }; 1322 #endif 1323 1324 #define CMD_FMT "cmd=%d,%d,%d" 1325 #define CMD_ARG(cmd) \ 1326 (cmd)->cmdcode, \ 1327 (cmd)->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra) ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->ec_id : ((cmd)->cmdcode == GEN_CMD_CODE(_Set_MLME_EVT) ? ((struct C2HEvent_Header *)(cmd)->parmbuf)->ID : 0), \ 1328 (cmd)->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra) ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->type : 0 1329 1330 #endif // _CMD_H_ 1331 1332