GNU Linux-libre 4.14.328-gnu1
[releases.git] / drivers / staging / 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  ******************************************************************************/
15 #ifndef __RTW_CMD_H_
16 #define __RTW_CMD_H_
17
18
19 #define C2H_MEM_SZ (16*1024)
20
21         #define FREE_CMDOBJ_SZ  128
22
23         #define MAX_CMDSZ       1024
24         #define MAX_RSPSZ       512
25         #define MAX_EVTSZ       1024
26
27         #define CMDBUFF_ALIGN_SZ 512
28
29         struct cmd_obj {
30                 struct adapter *padapter;
31                 u16 cmdcode;
32                 u8 res;
33                 u8 *parmbuf;
34                 u32 cmdsz;
35                 u8 *rsp;
36                 u32 rspsz;
37                 struct submit_ctx *sctx;
38                 /* _sema                cmd_sem; */
39                 struct list_head        list;
40         };
41
42         /* cmd flags */
43         enum {
44                 RTW_CMDF_DIRECTLY = BIT0,
45                 RTW_CMDF_WAIT_ACK = BIT1,
46         };
47
48         struct cmd_priv {
49                 _sema   cmd_queue_sema;
50                 /* _sema        cmd_done_sema; */
51                 _sema   terminate_cmdthread_sema;
52                 struct __queue  cmd_queue;
53                 u8 cmd_seq;
54                 u8 *cmd_buf;    /* shall be non-paged, and 4 bytes aligned */
55                 u8 *cmd_allocated_buf;
56                 u8 *rsp_buf;    /* shall be non-paged, and 4 bytes aligned */
57                 u8 *rsp_allocated_buf;
58                 u32 cmd_issued_cnt;
59                 u32 cmd_done_cnt;
60                 u32 rsp_cnt;
61                 atomic_t cmdthd_running;
62                 /* u8 cmdthd_running; */
63                 u8 stop_req;
64                 struct adapter *padapter;
65                 _mutex sctx_mutex;
66         };
67
68         struct  evt_priv {
69                 _workitem c2h_wk;
70                 bool c2h_wk_alive;
71                 struct rtw_cbuf *c2h_queue;
72                 #define C2H_QUEUE_MAX_LEN 10
73
74                 atomic_t event_seq;
75                 u8 *evt_buf;    /* shall be non-paged, and 4 bytes aligned */
76                 u8 *evt_allocated_buf;
77                 u32 evt_done_cnt;
78                 u8 *c2h_mem;
79                 u8 *allocated_c2h_mem;
80         };
81
82 #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
83 do {\
84         INIT_LIST_HEAD(&pcmd->list);\
85         pcmd->cmdcode = code;\
86         pcmd->parmbuf = (u8 *)(pparm);\
87         pcmd->cmdsz = sizeof (*pparm);\
88         pcmd->rsp = NULL;\
89         pcmd->rspsz = 0;\
90 } while (0)
91
92 #define init_h2fwcmd_w_parm_no_parm_rsp(pcmd, code) \
93 do {\
94         INIT_LIST_HEAD(&pcmd->list);\
95         pcmd->cmdcode = code;\
96         pcmd->parmbuf = NULL;\
97         pcmd->cmdsz = 0;\
98         pcmd->rsp = NULL;\
99         pcmd->rspsz = 0;\
100 } while (0)
101
102 struct c2h_evt_hdr {
103         u8 id:4;
104         u8 plen:4;
105         u8 seq;
106         u8 payload[0];
107 };
108
109 struct c2h_evt_hdr_88xx {
110         u8 id;
111         u8 seq;
112         u8 payload[12];
113         u8 plen;
114         u8 trigger;
115 };
116
117 #define c2h_evt_valid(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
118
119 struct P2P_PS_Offload_t {
120         u8 Offload_En:1;
121         u8 role:1; /*  1: Owner, 0: Client */
122         u8 CTWindow_En:1;
123         u8 NoA0_En:1;
124         u8 NoA1_En:1;
125         u8 AllStaSleep:1; /*  Only valid in Owner */
126         u8 discovery:1;
127         u8 rsvd:1;
128 };
129
130 struct P2P_PS_CTWPeriod_t {
131         u8 CTWPeriod;   /* TU */
132 };
133
134 extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
135 extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv);
136 extern void rtw_free_cmd_obj(struct cmd_obj *pcmd);
137
138 void rtw_stop_cmd_thread(struct adapter *adapter);
139 int rtw_cmd_thread(void *context);
140
141 extern u32 rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
142 extern void rtw_free_cmd_priv (struct cmd_priv *pcmdpriv);
143
144 extern u32 rtw_init_evt_priv (struct evt_priv *pevtpriv);
145 extern void rtw_free_evt_priv (struct evt_priv *pevtpriv);
146 extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv);
147
148 enum rtw_drvextra_cmd_id
149 {
150         NONE_WK_CID,
151         DYNAMIC_CHK_WK_CID,
152         DM_CTRL_WK_CID,
153         PBC_POLLING_WK_CID,
154         POWER_SAVING_CTRL_WK_CID,/* IPS, AUTOSuspend */
155         LPS_CTRL_WK_CID,
156         ANT_SELECT_WK_CID,
157         P2P_PS_WK_CID,
158         P2P_PROTO_WK_CID,
159         CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */
160         INTEl_WIDI_WK_CID,
161         C2H_WK_CID,
162         RTP_TIMER_CFG_WK_CID,
163         RESET_SECURITYPRIV, /*  add for CONFIG_IEEE80211W, none 11w also can use */
164         FREE_ASSOC_RESOURCES, /*  add for CONFIG_IEEE80211W, none 11w also can use */
165         DM_IN_LPS_WK_CID,
166         DM_RA_MSK_WK_CID, /* add for STA update RAMask when bandwith change. */
167         BEAMFORMING_WK_CID,
168         LPS_CHANGE_DTIM_CID,
169         BTINFO_WK_CID,
170         MAX_WK_CID
171 };
172
173 enum LPS_CTRL_TYPE
174 {
175         LPS_CTRL_SCAN = 0,
176         LPS_CTRL_JOINBSS = 1,
177         LPS_CTRL_CONNECT =2,
178         LPS_CTRL_DISCONNECT =3,
179         LPS_CTRL_SPECIAL_PACKET =4,
180         LPS_CTRL_LEAVE =5,
181         LPS_CTRL_TRAFFIC_BUSY = 6,
182 };
183
184 enum RFINTFS {
185         SWSI,
186         HWSI,
187         HWPI,
188 };
189
190 /*
191 Caller Mode: Infra, Ad-HoC(C)
192
193 Notes: To enter USB suspend mode
194
195 Command Mode
196
197 */
198 struct usb_suspend_parm {
199         u32 action;/*  1: sleep, 0:resume */
200 };
201
202 /*
203 Caller Mode: Infra, Ad-HoC
204
205 Notes: To join a known BSS.
206
207 Command-Event Mode
208
209 */
210
211 /*
212 Caller Mode: Infra, Ad-Hoc
213
214 Notes: To join the specified bss
215
216 Command Event Mode
217
218 */
219 struct joinbss_parm {
220         struct wlan_bssid_ex network;
221 };
222
223 /*
224 Caller Mode: Infra, Ad-HoC(C)
225
226 Notes: To disconnect the current associated BSS
227
228 Command Mode
229
230 */
231 struct disconnect_parm {
232         u32 deauth_timeout_ms;
233 };
234
235 /*
236 Caller Mode: AP, Ad-HoC(M)
237
238 Notes: To create a BSS
239
240 Command Mode
241 */
242 struct createbss_parm {
243         struct wlan_bssid_ex network;
244 };
245
246 /*
247 Caller Mode: AP, Ad-HoC, Infra
248
249 Notes: To set the NIC mode of RTL8711
250
251 Command Mode
252
253 The definition of mode:
254
255 #define IW_MODE_AUTO    0        Let the driver decides which AP to join
256 #define IW_MODE_ADHOC   1        Single cell network (Ad-Hoc Clients)
257 #define IW_MODE_INFRA   2        Multi cell network, roaming, ..
258 #define IW_MODE_MASTER  3        Synchronisation master or Access Point
259 #define IW_MODE_REPEAT  4        Wireless Repeater (forwarder)
260 #define IW_MODE_SECOND  5        Secondary master/repeater (backup)
261 #define IW_MODE_MONITOR 6        Passive monitor (listen only)
262
263 */
264 struct  setopmode_parm {
265         u8 mode;
266         u8 rsvd[3];
267 };
268
269 /*
270 Caller Mode: AP, Ad-HoC, Infra
271
272 Notes: To ask RTL8711 performing site-survey
273
274 Command-Event Mode
275
276 */
277
278 #define RTW_SSID_SCAN_AMOUNT 9 /*  for WEXT_CSCAN_AMOUNT 9 */
279 #define RTW_CHANNEL_SCAN_AMOUNT (14+37)
280 struct sitesurvey_parm {
281         sint scan_mode; /* active: 1, passive: 0 */
282         u8 ssid_num;
283         u8 ch_num;
284         struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
285         struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
286 };
287
288 /*
289 Caller Mode: Any
290
291 Notes: To set the auth type of RTL8711. open/shared/802.1x
292
293 Command Mode
294
295 */
296 struct setauth_parm {
297         u8 mode;  /* 0: legacy open, 1: legacy shared 2: 802.1x */
298         u8 _1x;   /* 0: PSK, 1: TLS */
299         u8 rsvd[2];
300 };
301
302 /*
303 Caller Mode: Infra
304
305 a. algorithm: wep40, wep104, tkip & aes
306 b. keytype: grp key/unicast key
307 c. key contents
308
309 when shared key ==> keyid is the camid
310 when 802.1x ==> keyid [0:1] ==> grp key
311 when 802.1x ==> keyid > 2 ==> unicast key
312
313 */
314 struct setkey_parm {
315         u8 algorithm;   /*  encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 */
316         u8 keyid;
317         u8 grpkey;              /*  1: this is the grpkey for 802.1x. 0: this is the unicast key for 802.1x */
318         u8 set_tx;              /*  1: main tx key for wep. 0: other key. */
319         u8 key[16];     /*  this could be 40 or 104 */
320 };
321
322 /*
323 When in AP or Ad-Hoc mode, this is used to
324 allocate an sw/hw entry for a newly associated sta.
325
326 Command
327
328 when shared key ==> algorithm/keyid
329
330 */
331 struct set_stakey_parm {
332         u8 addr[ETH_ALEN];
333         u8 algorithm;
334         u8 keyid;
335         u8 key[16];
336 };
337
338 struct set_stakey_rsp {
339         u8 addr[ETH_ALEN];
340         u8 keyid;
341         u8 rsvd;
342 };
343
344 /*
345 Caller Ad-Hoc/AP
346
347 Command -Rsp(AID == CAMID) mode
348
349 This is to force fw to add an sta_data entry per driver's request.
350
351 FW will write an cam entry associated with it.
352
353 */
354 struct set_assocsta_parm {
355         u8 addr[ETH_ALEN];
356 };
357
358 struct set_assocsta_rsp {
359         u8 cam_id;
360         u8 rsvd[3];
361 };
362
363 /*
364         Caller Ad-Hoc/AP
365
366         Command mode
367
368         This is to force fw to del an sta_data entry per driver's request
369
370         FW will invalidate the cam entry associated with it.
371
372 */
373 struct del_assocsta_parm {
374         u8 addr[ETH_ALEN];
375 };
376
377 /*
378 Caller Mode: AP/Ad-HoC(M)
379
380 Notes: To notify fw that given staid has changed its power state
381
382 Command Mode
383
384 */
385 struct setstapwrstate_parm {
386         u8 staid;
387         u8 status;
388         u8 hwaddr[6];
389 };
390
391 /*
392 Caller Mode: Any
393
394 Notes: To setup the basic rate of RTL8711
395
396 Command Mode
397
398 */
399 struct  setbasicrate_parm {
400         u8 basicrates[NumRates];
401 };
402
403 /*
404 Caller Mode: Any
405
406 Notes: To read the current basic rate
407
408 Command-Rsp Mode
409
410 */
411 struct getbasicrate_parm {
412         u32 rsvd;
413 };
414
415 struct getbasicrate_rsp {
416         u8 basicrates[NumRates];
417 };
418
419 /*
420 Caller Mode: Any
421
422 Notes: To setup the data rate of RTL8711
423
424 Command Mode
425
426 */
427 struct setdatarate_parm {
428         u8 mac_id;
429         u8 datarates[NumRates];
430 };
431
432 /*
433 Caller Mode: Any
434
435 Notes: To read the current data rate
436
437 Command-Rsp Mode
438
439 */
440 struct getdatarate_parm {
441         u32 rsvd;
442
443 };
444 struct getdatarate_rsp {
445         u8 datarates[NumRates];
446 };
447
448
449 /*
450 Caller Mode: Any
451 AP: AP can use the info for the contents of beacon frame
452 Infra: STA can use the info when sitesurveying
453 Ad-HoC(M): Like AP
454 Ad-HoC(C): Like STA
455
456
457 Notes: To set the phy capability of the NIC
458
459 Command Mode
460
461 */
462
463 struct  setphyinfo_parm {
464         struct regulatory_class class_sets[NUM_REGULATORYS];
465         u8 status;
466 };
467
468 struct  getphyinfo_parm {
469         u32 rsvd;
470 };
471
472 struct  getphyinfo_rsp {
473         struct regulatory_class class_sets[NUM_REGULATORYS];
474         u8 status;
475 };
476
477 /*
478 Caller Mode: Any
479
480 Notes: To set the channel/modem/band
481 This command will be used when channel/modem/band is changed.
482
483 Command Mode
484
485 */
486 struct  setphy_parm {
487         u8 rfchannel;
488         u8 modem;
489 };
490
491 /*
492 Caller Mode: Any
493
494 Notes: To get the current setting of channel/modem/band
495
496 Command-Rsp Mode
497
498 */
499 struct  getphy_parm {
500         u32 rsvd;
501
502 };
503 struct  getphy_rsp {
504         u8 rfchannel;
505         u8 modem;
506 };
507
508 struct readBB_parm {
509         u8 offset;
510 };
511 struct readBB_rsp {
512         u8 value;
513 };
514
515 struct readTSSI_parm {
516         u8 offset;
517 };
518 struct readTSSI_rsp {
519         u8 value;
520 };
521
522 struct writeBB_parm {
523         u8 offset;
524         u8 value;
525 };
526
527 struct readRF_parm {
528         u8 offset;
529 };
530 struct readRF_rsp {
531         u32 value;
532 };
533
534 struct writeRF_parm {
535         u32 offset;
536         u32 value;
537 };
538
539 struct getrfintfs_parm {
540         u8 rfintfs;
541 };
542
543
544 struct Tx_Beacon_param
545 {
546         struct wlan_bssid_ex network;
547 };
548
549 /*
550         Notes: This command is used for H2C/C2H loopback testing
551
552         mac[0] == 0
553         ==> CMD mode, return H2C_SUCCESS.
554         The following condition must be ture under CMD mode
555                 mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0;
556                 s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7;
557                 s2 == (b1 << 8 | b0);
558
559         mac[0] == 1
560         ==> CMD_RSP mode, return H2C_SUCCESS_RSP
561
562         The rsp layout shall be:
563         rsp:                    parm:
564                 mac[0]  =   mac[5];
565                 mac[1]  =   mac[4];
566                 mac[2]  =   mac[3];
567                 mac[3]  =   mac[2];
568                 mac[4]  =   mac[1];
569                 mac[5]  =   mac[0];
570                 s0              =   s1;
571                 s1              =   swap16(s0);
572                 w0              =       swap32(w1);
573                 b0              =       b1
574                 s2              =       s0 + s1
575                 b1              =       b0
576                 w1              =       w0
577
578         mac[0] ==       2
579         ==> CMD_EVENT mode, return      H2C_SUCCESS
580         The event layout shall be:
581         event:                  parm:
582                 mac[0]  =   mac[5];
583                 mac[1]  =   mac[4];
584                 mac[2]  =   event's sequence number, starting from 1 to parm's marc[3]
585                 mac[3]  =   mac[2];
586                 mac[4]  =   mac[1];
587                 mac[5]  =   mac[0];
588                 s0              =   swap16(s0) - event.mac[2];
589                 s1              =   s1 + event.mac[2];
590                 w0              =       swap32(w0);
591                 b0              =       b1
592                 s2              =       s0 + event.mac[2]
593                 b1              =       b0
594                 w1              =       swap32(w1) - event.mac[2];
595
596                 parm->mac[3] is the total event counts that host requested.
597
598
599         event will be the same with the cmd's param.
600
601 */
602
603 /*  CMD param Formart for driver extra cmd handler */
604 struct drvextra_cmd_parm {
605         int ec_id; /* extra cmd id */
606         int type; /*  Can use this field as the type id or command size */
607         int size; /* buffer size */
608         unsigned char *pbuf;
609 };
610
611 /*------------------- Below are used for RF/BB tunning ---------------------*/
612
613 struct  setantenna_parm {
614         u8 tx_antset;
615         u8 rx_antset;
616         u8 tx_antenna;
617         u8 rx_antenna;
618 };
619
620 struct  enrateadaptive_parm {
621         u32 en;
622 };
623
624 struct settxagctbl_parm {
625         u32 txagc[MAX_RATES_LENGTH];
626 };
627
628 struct gettxagctbl_parm {
629         u32 rsvd;
630 };
631 struct gettxagctbl_rsp {
632         u32 txagc[MAX_RATES_LENGTH];
633 };
634
635 struct setagcctrl_parm {
636         u32 agcctrl;            /*  0: pure hw, 1: fw */
637 };
638
639
640 struct setssup_parm     {
641         u32 ss_ForceUp[MAX_RATES_LENGTH];
642 };
643
644 struct getssup_parm     {
645         u32 rsvd;
646 };
647 struct getssup_rsp      {
648         u8 ss_ForceUp[MAX_RATES_LENGTH];
649 };
650
651
652 struct setssdlevel_parm {
653         u8 ss_DLevel[MAX_RATES_LENGTH];
654 };
655
656 struct getssdlevel_parm {
657         u32 rsvd;
658 };
659 struct getssdlevel_rsp  {
660         u8 ss_DLevel[MAX_RATES_LENGTH];
661 };
662
663 struct setssulevel_parm {
664         u8 ss_ULevel[MAX_RATES_LENGTH];
665 };
666
667 struct getssulevel_parm {
668         u32 rsvd;
669 };
670 struct getssulevel_rsp  {
671         u8 ss_ULevel[MAX_RATES_LENGTH];
672 };
673
674
675 struct  setcountjudge_parm {
676         u8 count_judge[MAX_RATES_LENGTH];
677 };
678
679 struct  getcountjudge_parm {
680         u32 rsvd;
681 };
682 struct  getcountjudge_rsp {
683         u8 count_judge[MAX_RATES_LENGTH];
684 };
685
686
687 struct setratable_parm {
688         u8 ss_ForceUp[NumRates];
689         u8 ss_ULevel[NumRates];
690         u8 ss_DLevel[NumRates];
691         u8 count_judge[NumRates];
692 };
693
694 struct getratable_parm {
695                 uint rsvd;
696 };
697 struct getratable_rsp {
698         u8 ss_ForceUp[NumRates];
699         u8 ss_ULevel[NumRates];
700         u8 ss_DLevel[NumRates];
701         u8 count_judge[NumRates];
702 };
703
704
705 /* to get TX, RX retry count */
706 struct gettxretrycnt_parm{
707         unsigned int rsvd;
708 };
709 struct gettxretrycnt_rsp{
710         unsigned long tx_retrycnt;
711 };
712
713 struct getrxretrycnt_parm{
714         unsigned int rsvd;
715 };
716 struct getrxretrycnt_rsp{
717         unsigned long rx_retrycnt;
718 };
719
720 /* to get BCNOK, BCNERR count */
721 struct getbcnokcnt_parm{
722         unsigned int rsvd;
723 };
724 struct getbcnokcnt_rsp{
725         unsigned long  bcnokcnt;
726 };
727
728 struct getbcnerrcnt_parm{
729         unsigned int rsvd;
730 };
731 struct getbcnerrcnt_rsp{
732         unsigned long bcnerrcnt;
733 };
734
735 /*  to get current TX power level */
736 struct getcurtxpwrlevel_parm{
737         unsigned int rsvd;
738 };
739 struct getcurtxpwrlevel_rsp{
740         unsigned short tx_power;
741 };
742
743 struct setprobereqextraie_parm {
744         unsigned char e_id;
745         unsigned char ie_len;
746         unsigned char ie[0];
747 };
748
749 struct setassocreqextraie_parm {
750         unsigned char e_id;
751         unsigned char ie_len;
752         unsigned char ie[0];
753 };
754
755 struct setproberspextraie_parm {
756         unsigned char e_id;
757         unsigned char ie_len;
758         unsigned char ie[0];
759 };
760
761 struct setassocrspextraie_parm {
762         unsigned char e_id;
763         unsigned char ie_len;
764         unsigned char ie[0];
765 };
766
767
768 struct addBaReq_parm
769 {
770         unsigned int tid;
771         u8 addr[ETH_ALEN];
772 };
773
774 /*H2C Handler index: 46 */
775 struct set_ch_parm {
776         u8 ch;
777         u8 bw;
778         u8 ch_offset;
779 };
780
781 /*H2C Handler index: 59 */
782 struct SetChannelPlan_param
783 {
784         u8 channel_plan;
785 };
786
787 /*H2C Handler index: 60 */
788 struct LedBlink_param
789 {
790         void *pLed;
791 };
792
793 /*H2C Handler index: 61 */
794 struct SetChannelSwitch_param
795 {
796         u8 new_ch_no;
797 };
798
799 /*H2C Handler index: 62 */
800 struct TDLSoption_param
801 {
802         u8 addr[ETH_ALEN];
803         u8 option;
804 };
805
806 /*H2C Handler index: 64 */
807 struct RunInThread_param
808 {
809         void (*func)(void*);
810         void *context;
811 };
812
813
814 #define GEN_CMD_CODE(cmd)       cmd ## _CMD_
815
816
817 /*
818
819 Result:
820 0x00: success
821 0x01: sucess, and check Response.
822 0x02: cmd ignored due to duplicated sequcne number
823 0x03: cmd dropped due to invalid cmd code
824 0x04: reserved.
825
826 */
827
828 #define H2C_RSP_OFFSET                  512
829
830 #define H2C_SUCCESS                     0x00
831 #define H2C_SUCCESS_RSP                 0x01
832 #define H2C_DUPLICATED                  0x02
833 #define H2C_DROPPED                     0x03
834 #define H2C_PARAMETERS_ERROR            0x04
835 #define H2C_REJECTED                    0x05
836 #define H2C_CMD_OVERFLOW                0x06
837 #define H2C_RESERVED                    0x07
838
839 u8 rtw_sitesurvey_cmd(struct adapter  *padapter, struct ndis_802_11_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num);
840 extern u8 rtw_createbss_cmd(struct adapter  *padapter);
841 u8 rtw_startbss_cmd(struct adapter  *padapter, int flags);
842
843 struct sta_info;
844 extern u8 rtw_setstakey_cmd(struct adapter  *padapter, struct sta_info *sta, u8 unicast_key, bool enqueue);
845 extern u8 rtw_clearstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 enqueue);
846
847 extern u8 rtw_joinbss_cmd(struct adapter  *padapter, struct wlan_network* pnetwork);
848 u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
849 extern u8 rtw_setopmode_cmd(struct adapter  *padapter, enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, bool enqueue);
850 extern u8 rtw_setdatarate_cmd(struct adapter  *padapter, u8 *rateset);
851 extern u8 rtw_setrfintfs_cmd(struct adapter  *padapter, u8 mode);
852
853 extern u8 rtw_gettssi_cmd(struct adapter  *padapter, u8 offset, u8 *pval);
854 extern u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type);
855 extern u8 rtw_setfwra_cmd(struct adapter *padapter, u8 type);
856
857 extern u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr);
858 /*  add for CONFIG_IEEE80211W, none 11w also can use */
859 extern u8 rtw_reset_securitypriv_cmd(struct adapter *padapter);
860 extern u8 rtw_free_assoc_resources_cmd(struct adapter *padapter);
861 extern u8 rtw_dynamic_chk_wk_cmd(struct adapter *adapter);
862
863 u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue);
864 u8 rtw_dm_in_lps_wk_cmd(struct adapter *padapter);
865
866 u8 rtw_dm_ra_mask_wk_cmd(struct adapter *padapter, u8 *psta);
867
868 extern u8 rtw_ps_cmd(struct adapter *padapter);
869
870 u8 rtw_chk_hi_queue_cmd(struct adapter *padapter);
871
872 extern u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue, u8 swconfig);
873
874 extern u8 rtw_c2h_packet_wk_cmd(struct adapter *padapter, u8 *pbuf, u16 length);
875 extern u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt);
876
877 u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf);
878
879 extern void rtw_survey_cmd_callback(struct adapter  *padapter, struct cmd_obj *pcmd);
880 extern void rtw_disassoc_cmd_callback(struct adapter  *padapter, struct cmd_obj *pcmd);
881 extern void rtw_joinbss_cmd_callback(struct adapter  *padapter, struct cmd_obj *pcmd);
882 extern void rtw_createbss_cmd_callback(struct adapter  *padapter, struct cmd_obj *pcmd);
883 extern void rtw_getbbrfreg_cmdrsp_callback(struct adapter  *padapter, struct cmd_obj *pcmd);
884
885 extern void rtw_setstaKey_cmdrsp_callback(struct adapter  *padapter,  struct cmd_obj *pcmd);
886 extern void rtw_setassocsta_cmdrsp_callback(struct adapter  *padapter,  struct cmd_obj *pcmd);
887 extern void rtw_getrttbl_cmdrsp_callback(struct adapter  *padapter,  struct cmd_obj *pcmd);
888
889
890 struct _cmd_callback {
891         u32 cmd_code;
892         void (*callback)(struct adapter  *padapter, struct cmd_obj *cmd);
893 };
894
895 enum rtw_h2c_cmd
896 {
897         GEN_CMD_CODE(_Read_MACREG) ,    /*0*/
898         GEN_CMD_CODE(_Write_MACREG) ,
899         GEN_CMD_CODE(_Read_BBREG) ,
900         GEN_CMD_CODE(_Write_BBREG) ,
901         GEN_CMD_CODE(_Read_RFREG) ,
902         GEN_CMD_CODE(_Write_RFREG) , /*5*/
903         GEN_CMD_CODE(_Read_EEPROM) ,
904         GEN_CMD_CODE(_Write_EEPROM) ,
905         GEN_CMD_CODE(_Read_EFUSE) ,
906         GEN_CMD_CODE(_Write_EFUSE) ,
907
908         GEN_CMD_CODE(_Read_CAM) ,       /*10*/
909         GEN_CMD_CODE(_Write_CAM) ,
910         GEN_CMD_CODE(_setBCNITV),
911         GEN_CMD_CODE(_setMBIDCFG),
912         GEN_CMD_CODE(_JoinBss),   /*14*/
913         GEN_CMD_CODE(_DisConnect) , /*15*/
914         GEN_CMD_CODE(_CreateBss) ,
915         GEN_CMD_CODE(_SetOpMode) ,
916         GEN_CMD_CODE(_SiteSurvey),  /*18*/
917         GEN_CMD_CODE(_SetAuth) ,
918
919         GEN_CMD_CODE(_SetKey) , /*20*/
920         GEN_CMD_CODE(_SetStaKey) ,
921         GEN_CMD_CODE(_SetAssocSta) ,
922         GEN_CMD_CODE(_DelAssocSta) ,
923         GEN_CMD_CODE(_SetStaPwrState) ,
924         GEN_CMD_CODE(_SetBasicRate) , /*25*/
925         GEN_CMD_CODE(_GetBasicRate) ,
926         GEN_CMD_CODE(_SetDataRate) ,
927         GEN_CMD_CODE(_GetDataRate) ,
928         GEN_CMD_CODE(_SetPhyInfo) ,
929
930         GEN_CMD_CODE(_GetPhyInfo) ,     /*30*/
931         GEN_CMD_CODE(_SetPhy) ,
932         GEN_CMD_CODE(_GetPhy) ,
933         GEN_CMD_CODE(_readRssi) ,
934         GEN_CMD_CODE(_readGain) ,
935         GEN_CMD_CODE(_SetAtim) , /*35*/
936         GEN_CMD_CODE(_SetPwrMode) ,
937         GEN_CMD_CODE(_JoinbssRpt),
938         GEN_CMD_CODE(_SetRaTable) ,
939         GEN_CMD_CODE(_GetRaTable) ,
940
941         GEN_CMD_CODE(_GetCCXReport), /*40*/
942         GEN_CMD_CODE(_GetDTMReport),
943         GEN_CMD_CODE(_GetTXRateStatistics),
944         GEN_CMD_CODE(_SetUsbSuspend),
945         GEN_CMD_CODE(_SetH2cLbk),
946         GEN_CMD_CODE(_AddBAReq) , /*45*/
947         GEN_CMD_CODE(_SetChannel), /*46*/
948         GEN_CMD_CODE(_SetTxPower),
949         GEN_CMD_CODE(_SwitchAntenna),
950         GEN_CMD_CODE(_SetCrystalCap),
951         GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/
952
953         GEN_CMD_CODE(_SetSingleToneTx),/*51*/
954         GEN_CMD_CODE(_SetCarrierSuppressionTx),
955         GEN_CMD_CODE(_SetContinuousTx),
956         GEN_CMD_CODE(_SwitchBandwidth), /*54*/
957         GEN_CMD_CODE(_TX_Beacon), /*55*/
958
959         GEN_CMD_CODE(_Set_MLME_EVT), /*56*/
960         GEN_CMD_CODE(_Set_Drv_Extra), /*57*/
961         GEN_CMD_CODE(_Set_H2C_MSG), /*58*/
962
963         GEN_CMD_CODE(_SetChannelPlan), /*59*/
964         GEN_CMD_CODE(_LedBlink), /*60*/
965
966         GEN_CMD_CODE(_SetChannelSwitch), /*61*/
967         GEN_CMD_CODE(_TDLS), /*62*/
968         GEN_CMD_CODE(_ChkBMCSleepq), /*63*/
969
970         GEN_CMD_CODE(_RunInThreadCMD), /*64*/
971
972         MAX_H2CCMD
973 };
974
975 #define _GetBBReg_CMD_          _Read_BBREG_CMD_
976 #define _SetBBReg_CMD_          _Write_BBREG_CMD_
977 #define _GetRFReg_CMD_          _Read_RFREG_CMD_
978 #define _SetRFReg_CMD_          _Write_RFREG_CMD_
979
980 #endif /*  _CMD_H_ */