net: wireless: rockchip_wlan: add rtl8723bs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / include / rtw_cmd.h
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