1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __RTL871X_CMD_H_
15#define __RTL871X_CMD_H_
16
17#include "wlan_bssdef.h"
18#include "rtl871x_rf.h"
19#define C2H_MEM_SZ (16*1024)
20
21#include "osdep_service.h"
22#include "ieee80211.h"
23
24#define FREE_CMDOBJ_SZ 128
25#define MAX_CMDSZ 512
26#define MAX_RSPSZ 512
27#define MAX_EVTSZ 1024
28#define CMDBUFF_ALIGN_SZ 512
29
30struct cmd_obj {
31 u16 cmdcode;
32 u8 res;
33 u8 *parmbuf;
34 u32 cmdsz;
35 u8 *rsp;
36 u32 rspsz;
37 struct list_head list;
38};
39
40struct cmd_priv {
41 struct completion cmd_queue_comp;
42 struct completion terminate_cmdthread_comp;
43 struct __queue cmd_queue;
44 u8 cmd_seq;
45 u8 *cmd_buf;
46 u8 *cmd_allocated_buf;
47 u8 *rsp_buf;
48 u8 *rsp_allocated_buf;
49 u32 cmd_issued_cnt;
50 u32 cmd_done_cnt;
51 u32 rsp_cnt;
52 struct _adapter *padapter;
53};
54
55struct evt_obj {
56 u16 evtcode;
57 u8 res;
58 u8 *parmbuf;
59 u32 evtsz;
60 struct list_head list;
61};
62
63struct evt_priv {
64 struct __queue evt_queue;
65 u8 event_seq;
66 u8 *evt_buf;
67 u8 *evt_allocated_buf;
68 u32 evt_done_cnt;
69 struct tasklet_struct event_tasklet;
70};
71
72#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
73do {\
74 INIT_LIST_HEAD(&pcmd->list);\
75 pcmd->cmdcode = code;\
76 pcmd->parmbuf = (u8 *)(pparm);\
77 pcmd->cmdsz = sizeof(*pparm);\
78 pcmd->rsp = NULL;\
79 pcmd->rspsz = 0;\
80} while (0)
81
82void r8712_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
83void r8712_enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
84struct cmd_obj *r8712_dequeue_cmd(struct __queue *queue);
85void r8712_free_cmd_obj(struct cmd_obj *pcmd);
86int r8712_cmd_thread(void *context);
87int r8712_init_cmd_priv(struct cmd_priv *pcmdpriv);
88void r8712_free_cmd_priv(struct cmd_priv *pcmdpriv);
89int r8712_init_evt_priv(struct evt_priv *pevtpriv);
90void r8712_free_evt_priv(struct evt_priv *pevtpriv);
91
92enum rtl871x_drvint_cid {
93 NONE_WK_CID,
94 WDG_WK_CID,
95 MAX_WK_CID
96};
97
98enum RFINTFS {
99 SWSI,
100 HWSI,
101 HWPI,
102};
103
104
105
106
107
108
109struct usb_suspend_parm {
110 u32 action;
111};
112
113
114
115
116
117
118struct disconnect_parm {
119 u32 rsvd;
120};
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136struct setopmode_parm {
137 u8 mode;
138 u8 rsvd[3];
139};
140
141
142
143
144
145
146struct sitesurvey_parm {
147 __le32 passive_mode;
148 __le32 bsslimit;
149 __le32 ss_ssidlen;
150 u8 ss_ssid[IW_ESSID_MAX_SIZE + 1];
151};
152
153
154
155
156
157
158struct setauth_parm {
159 u8 mode;
160 u8 _1x;
161 u8 rsvd[2];
162};
163
164
165
166
167
168
169
170
171
172
173
174struct setkey_parm {
175 u8 algorithm;
176
177
178 u8 keyid;
179 u8 grpkey;
180
181
182 u8 key[16];
183};
184
185
186
187
188
189
190
191struct set_stakey_parm {
192 u8 addr[ETH_ALEN];
193 u8 algorithm;
194 u8 key[16];
195};
196
197struct set_stakey_rsp {
198 u8 addr[ETH_ALEN];
199 u8 keyid;
200 u8 rsvd;
201};
202
203struct SetMacAddr_param {
204 u8 MacAddr[ETH_ALEN];
205};
206
207
208
209
210
211
212
213
214
215
216
217struct set_assocsta_parm {
218 u8 addr[ETH_ALEN];
219};
220
221struct set_assocsta_rsp {
222 u8 cam_id;
223 u8 rsvd[3];
224};
225
226
227
228
229
230
231
232
233
234
235
236struct del_assocsta_parm {
237 u8 addr[ETH_ALEN];
238};
239
240
241
242
243
244
245
246
247
248struct setstapwrstate_parm {
249 u8 staid;
250 u8 status;
251 u8 hwaddr[6];
252};
253
254
255
256
257
258
259
260
261
262struct setbasicrate_parm {
263 u8 basicrates[NumRates];
264};
265
266
267
268
269
270
271
272
273
274struct getbasicrate_parm {
275 u32 rsvd;
276};
277
278struct getbasicrate_rsp {
279 u8 basicrates[NumRates];
280};
281
282
283
284
285
286
287
288
289
290struct setdatarate_parm {
291 u8 mac_id;
292 u8 datarates[NumRates];
293};
294
295enum _RT_CHANNEL_DOMAIN {
296 RT_CHANNEL_DOMAIN_FCC = 0,
297 RT_CHANNEL_DOMAIN_IC = 1,
298 RT_CHANNEL_DOMAIN_ETSI = 2,
299 RT_CHANNEL_DOMAIN_SPAIN = 3,
300 RT_CHANNEL_DOMAIN_FRANCE = 4,
301 RT_CHANNEL_DOMAIN_MKK = 5,
302 RT_CHANNEL_DOMAIN_MKK1 = 6,
303 RT_CHANNEL_DOMAIN_ISRAEL = 7,
304 RT_CHANNEL_DOMAIN_TELEC = 8,
305
306
307 RT_CHANNEL_DOMAIN_MIC = 9,
308 RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 10,
309 RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 11,
310 RT_CHANNEL_DOMAIN_TELEC_NETGEAR = 12,
311
312 RT_CHANNEL_DOMAIN_NCC = 13,
313 RT_CHANNEL_DOMAIN_5G = 14,
314 RT_CHANNEL_DOMAIN_5G_40M = 15,
315
316 RT_CHANNEL_DOMAIN_MAX,
317};
318
319
320struct SetChannelPlan_param {
321 enum _RT_CHANNEL_DOMAIN ChannelPlan;
322};
323
324
325
326
327
328
329
330
331
332struct getdatarate_parm {
333 u32 rsvd;
334
335};
336struct getdatarate_rsp {
337 u8 datarates[NumRates];
338};
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372struct getphy_rsp {
373 u8 rfchannel;
374 u8 modem;
375};
376
377struct readBB_parm {
378 u8 offset;
379};
380struct readBB_rsp {
381 u8 value;
382};
383
384struct readTSSI_parm {
385 u8 offset;
386};
387struct readTSSI_rsp {
388 u8 value;
389};
390
391struct writeBB_parm {
392 u8 offset;
393 u8 value;
394};
395
396struct writePTM_parm {
397 u8 type;
398};
399
400struct readRF_parm {
401 u8 offset;
402};
403struct readRF_rsp {
404 u32 value;
405};
406
407struct writeRF_parm {
408 u32 offset;
409 u32 value;
410};
411
412struct setrfintfs_parm {
413 u8 rfintfs;
414};
415
416struct getrfintfs_parm {
417 u8 rfintfs;
418};
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475struct drvint_cmd_parm {
476 int i_cid;
477 int sz;
478 unsigned char *pbuf;
479};
480
481
482
483struct setantenna_parm {
484 u8 tx_antset;
485 u8 rx_antset;
486 u8 tx_antenna;
487 u8 rx_antenna;
488};
489
490struct enrateadaptive_parm {
491 u32 en;
492};
493
494struct settxagctbl_parm {
495 u32 txagc[MAX_RATES_LENGTH];
496};
497
498struct gettxagctbl_parm {
499 u32 rsvd;
500};
501struct gettxagctbl_rsp {
502 u32 txagc[MAX_RATES_LENGTH];
503};
504
505struct setagcctrl_parm {
506 u32 agcctrl;
507};
508
509struct setssup_parm {
510 u32 ss_ForceUp[MAX_RATES_LENGTH];
511};
512
513struct getssup_parm {
514 u32 rsvd;
515};
516struct getssup_rsp {
517 u8 ss_ForceUp[MAX_RATES_LENGTH];
518};
519
520struct setssdlevel_parm {
521 u8 ss_DLevel[MAX_RATES_LENGTH];
522};
523
524struct getssdlevel_parm {
525 u32 rsvd;
526};
527struct getssdlevel_rsp {
528 u8 ss_DLevel[MAX_RATES_LENGTH];
529};
530
531struct setssulevel_parm {
532 u8 ss_ULevel[MAX_RATES_LENGTH];
533};
534
535struct getssulevel_parm {
536 u32 rsvd;
537};
538struct getssulevel_rsp {
539 u8 ss_ULevel[MAX_RATES_LENGTH];
540};
541
542struct setcountjudge_parm {
543 u8 count_judge[MAX_RATES_LENGTH];
544};
545
546struct getcountjudge_parm {
547 u32 rsvd;
548};
549
550struct getcountjudge_rsp {
551 u8 count_judge[MAX_RATES_LENGTH];
552};
553
554struct setpwrmode_parm {
555 u8 mode;
556 u8 flag_low_traffic_en;
557 u8 flag_lpnav_en;
558 u8 flag_rf_low_snr_en;
559 u8 flag_dps_en;
560 u8 bcn_rx_en;
561 u8 bcn_pass_cnt;
562
563
564
565 u8 bcn_to;
566 u16 bcn_itv;
567 u8 app_itv;
568 u8 awake_bcn_itv;
569 u8 smart_ps;
570 u8 bcn_pass_time;
571};
572
573struct setatim_parm {
574 u8 op;
575 u8 txid;
576};
577
578struct setratable_parm {
579 u8 ss_ForceUp[NumRates];
580 u8 ss_ULevel[NumRates];
581 u8 ss_DLevel[NumRates];
582 u8 count_judge[NumRates];
583};
584
585struct getratable_parm {
586 uint rsvd;
587};
588struct getratable_rsp {
589 u8 ss_ForceUp[NumRates];
590 u8 ss_ULevel[NumRates];
591 u8 ss_DLevel[NumRates];
592 u8 count_judge[NumRates];
593};
594
595
596struct gettxretrycnt_parm {
597 unsigned int rsvd;
598};
599
600struct gettxretrycnt_rsp {
601 unsigned long tx_retrycnt;
602};
603
604struct getrxretrycnt_parm {
605 unsigned int rsvd;
606};
607
608struct getrxretrycnt_rsp {
609 unsigned long rx_retrycnt;
610};
611
612
613struct getbcnokcnt_parm {
614 unsigned int rsvd;
615};
616
617struct getbcnokcnt_rsp {
618 unsigned long bcnokcnt;
619};
620
621struct getbcnerrcnt_parm {
622 unsigned int rsvd;
623};
624struct getbcnerrcnt_rsp {
625 unsigned long bcnerrcnt;
626};
627
628
629struct getcurtxpwrlevel_parm {
630 unsigned int rsvd;
631};
632
633struct getcurtxpwrlevel_rsp {
634 unsigned short tx_power;
635};
636
637
638struct setdig_parm {
639 unsigned char dig_on;
640};
641
642
643struct setra_parm {
644 unsigned char ra_on;
645};
646
647struct setprobereqextraie_parm {
648 unsigned char e_id;
649 unsigned char ie_len;
650 unsigned char ie[0];
651};
652
653struct setassocreqextraie_parm {
654 unsigned char e_id;
655 unsigned char ie_len;
656 unsigned char ie[0];
657};
658
659struct setproberspextraie_parm {
660 unsigned char e_id;
661 unsigned char ie_len;
662 unsigned char ie[0];
663};
664
665struct setassocrspextraie_parm {
666 unsigned char e_id;
667 unsigned char ie_len;
668 unsigned char ie[0];
669};
670
671struct addBaReq_parm {
672 unsigned int tid;
673};
674
675
676struct SetChannel_parm {
677 u32 curr_ch;
678};
679
680
681struct DisconnectCtrlEx_param {
682
683 unsigned char EnableDrvCtrl;
684 unsigned char TryPktCnt;
685 unsigned char TryPktInterval;
686 unsigned char rsvd;
687 unsigned int FirstStageTO;
688};
689
690#define GEN_CMD_CODE(cmd) cmd ## _CMD_
691
692
693
694
695
696
697
698
699
700
701#define H2C_RSP_OFFSET 512
702#define H2C_SUCCESS 0x00
703#define H2C_SUCCESS_RSP 0x01
704#define H2C_DUPLICATED 0x02
705#define H2C_DROPPED 0x03
706#define H2C_PARAMETERS_ERROR 0x04
707#define H2C_REJECTED 0x05
708#define H2C_CMD_OVERFLOW 0x06
709#define H2C_RESERVED 0x07
710
711void r8712_setMacAddr_cmd(struct _adapter *padapter, u8 *mac_addr);
712u8 r8712_sitesurvey_cmd(struct _adapter *padapter,
713 struct ndis_802_11_ssid *pssid);
714int r8712_createbss_cmd(struct _adapter *padapter);
715void r8712_setstakey_cmd(struct _adapter *padapter, u8 *psta, u8 unicast_key);
716int r8712_joinbss_cmd(struct _adapter *padapter,
717 struct wlan_network *pnetwork);
718void r8712_disassoc_cmd(struct _adapter *padapter);
719void r8712_setopmode_cmd(struct _adapter *padapter,
720 enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
721int r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset);
722void r8712_set_chplan_cmd(struct _adapter *padapter, int chplan);
723int r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 *pval);
724int r8712_setrfreg_cmd(struct _adapter *padapter, u8 offset, u32 val);
725void r8712_addbareq_cmd(struct _adapter *padapter, u8 tid);
726void r8712_wdg_wk_cmd(struct _adapter *padapter);
727void r8712_survey_cmd_callback(struct _adapter *padapter,
728 struct cmd_obj *pcmd);
729void r8712_disassoc_cmd_callback(struct _adapter *padapter,
730 struct cmd_obj *pcmd);
731void r8712_joinbss_cmd_callback(struct _adapter *padapter,
732 struct cmd_obj *pcmd);
733void r8712_createbss_cmd_callback(struct _adapter *padapter,
734 struct cmd_obj *pcmd);
735void r8712_getbbrfreg_cmdrsp_callback(struct _adapter *padapter,
736 struct cmd_obj *pcmd);
737void r8712_readtssi_cmdrsp_callback(struct _adapter *padapter,
738 struct cmd_obj *pcmd);
739void r8712_setstaKey_cmdrsp_callback(struct _adapter *padapter,
740 struct cmd_obj *pcmd);
741void r8712_setassocsta_cmdrsp_callback(struct _adapter *padapter,
742 struct cmd_obj *pcmd);
743void r8712_disconnectCtrlEx_cmd(struct _adapter *adapter, u32 enableDrvCtrl,
744 u32 tryPktCnt, u32 tryPktInterval, u32 firstStageTO);
745
746struct _cmd_callback {
747 u32 cmd_code;
748 void (*callback)(struct _adapter *padapter, struct cmd_obj *cmd);
749};
750
751#include "rtl8712_cmd.h"
752
753#endif
754
755