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