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};
336
337struct getdatarate_rsp {
338 u8 datarates[NumRates];
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
372
373struct getphy_rsp {
374 u8 rfchannel;
375 u8 modem;
376};
377
378struct readBB_parm {
379 u8 offset;
380};
381
382struct readBB_rsp {
383 u8 value;
384};
385
386struct readTSSI_parm {
387 u8 offset;
388};
389
390struct readTSSI_rsp {
391 u8 value;
392};
393
394struct writeBB_parm {
395 u8 offset;
396 u8 value;
397};
398
399struct writePTM_parm {
400 u8 type;
401};
402
403struct readRF_parm {
404 u8 offset;
405};
406
407struct readRF_rsp {
408 u32 value;
409};
410
411struct writeRF_parm {
412 u32 offset;
413 u32 value;
414};
415
416struct setrfintfs_parm {
417 u8 rfintfs;
418};
419
420struct getrfintfs_parm {
421 u8 rfintfs;
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
475
476
477
478
479struct drvint_cmd_parm {
480 int i_cid;
481 int sz;
482 unsigned char *pbuf;
483};
484
485
486
487struct setantenna_parm {
488 u8 tx_antset;
489 u8 rx_antset;
490 u8 tx_antenna;
491 u8 rx_antenna;
492};
493
494struct enrateadaptive_parm {
495 u32 en;
496};
497
498struct settxagctbl_parm {
499 u32 txagc[MAX_RATES_LENGTH];
500};
501
502struct gettxagctbl_parm {
503 u32 rsvd;
504};
505
506struct gettxagctbl_rsp {
507 u32 txagc[MAX_RATES_LENGTH];
508};
509
510struct setagcctrl_parm {
511 u32 agcctrl;
512};
513
514struct setssup_parm {
515 u32 ss_ForceUp[MAX_RATES_LENGTH];
516};
517
518struct getssup_parm {
519 u32 rsvd;
520};
521
522struct getssup_rsp {
523 u8 ss_ForceUp[MAX_RATES_LENGTH];
524};
525
526struct setssdlevel_parm {
527 u8 ss_DLevel[MAX_RATES_LENGTH];
528};
529
530struct getssdlevel_parm {
531 u32 rsvd;
532};
533
534struct getssdlevel_rsp {
535 u8 ss_DLevel[MAX_RATES_LENGTH];
536};
537
538struct setssulevel_parm {
539 u8 ss_ULevel[MAX_RATES_LENGTH];
540};
541
542struct getssulevel_parm {
543 u32 rsvd;
544};
545
546struct getssulevel_rsp {
547 u8 ss_ULevel[MAX_RATES_LENGTH];
548};
549
550struct setcountjudge_parm {
551 u8 count_judge[MAX_RATES_LENGTH];
552};
553
554struct getcountjudge_parm {
555 u32 rsvd;
556};
557
558struct getcountjudge_rsp {
559 u8 count_judge[MAX_RATES_LENGTH];
560};
561
562struct setpwrmode_parm {
563 u8 mode;
564 u8 flag_low_traffic_en;
565 u8 flag_lpnav_en;
566 u8 flag_rf_low_snr_en;
567 u8 flag_dps_en;
568 u8 bcn_rx_en;
569 u8 bcn_pass_cnt;
570
571
572
573 u8 bcn_to;
574 u16 bcn_itv;
575 u8 app_itv;
576 u8 awake_bcn_itv;
577 u8 smart_ps;
578 u8 bcn_pass_time;
579};
580
581struct setatim_parm {
582 u8 op;
583 u8 txid;
584};
585
586struct setratable_parm {
587 u8 ss_ForceUp[NumRates];
588 u8 ss_ULevel[NumRates];
589 u8 ss_DLevel[NumRates];
590 u8 count_judge[NumRates];
591};
592
593struct getratable_parm {
594 uint rsvd;
595};
596
597struct getratable_rsp {
598 u8 ss_ForceUp[NumRates];
599 u8 ss_ULevel[NumRates];
600 u8 ss_DLevel[NumRates];
601 u8 count_judge[NumRates];
602};
603
604
605struct gettxretrycnt_parm {
606 unsigned int rsvd;
607};
608
609struct gettxretrycnt_rsp {
610 unsigned long tx_retrycnt;
611};
612
613struct getrxretrycnt_parm {
614 unsigned int rsvd;
615};
616
617struct getrxretrycnt_rsp {
618 unsigned long rx_retrycnt;
619};
620
621
622struct getbcnokcnt_parm {
623 unsigned int rsvd;
624};
625
626struct getbcnokcnt_rsp {
627 unsigned long bcnokcnt;
628};
629
630struct getbcnerrcnt_parm {
631 unsigned int rsvd;
632};
633
634struct getbcnerrcnt_rsp {
635 unsigned long bcnerrcnt;
636};
637
638
639struct getcurtxpwrlevel_parm {
640 unsigned int rsvd;
641};
642
643struct getcurtxpwrlevel_rsp {
644 unsigned short tx_power;
645};
646
647
648struct setdig_parm {
649 unsigned char dig_on;
650};
651
652
653struct setra_parm {
654 unsigned char ra_on;
655};
656
657struct setprobereqextraie_parm {
658 unsigned char e_id;
659 unsigned char ie_len;
660 unsigned char ie[0];
661};
662
663struct setassocreqextraie_parm {
664 unsigned char e_id;
665 unsigned char ie_len;
666 unsigned char ie[0];
667};
668
669struct setproberspextraie_parm {
670 unsigned char e_id;
671 unsigned char ie_len;
672 unsigned char ie[0];
673};
674
675struct setassocrspextraie_parm {
676 unsigned char e_id;
677 unsigned char ie_len;
678 unsigned char ie[0];
679};
680
681struct addBaReq_parm {
682 unsigned int tid;
683};
684
685
686struct SetChannel_parm {
687 u32 curr_ch;
688};
689
690
691struct DisconnectCtrlEx_param {
692
693 unsigned char EnableDrvCtrl;
694 unsigned char TryPktCnt;
695 unsigned char TryPktInterval;
696 unsigned char rsvd;
697 unsigned int FirstStageTO;
698};
699
700#define GEN_CMD_CODE(cmd) cmd ## _CMD_
701
702
703
704
705
706
707
708
709
710
711#define H2C_RSP_OFFSET 512
712#define H2C_SUCCESS 0x00
713#define H2C_SUCCESS_RSP 0x01
714#define H2C_DUPLICATED 0x02
715#define H2C_DROPPED 0x03
716#define H2C_PARAMETERS_ERROR 0x04
717#define H2C_REJECTED 0x05
718#define H2C_CMD_OVERFLOW 0x06
719#define H2C_RESERVED 0x07
720
721void r8712_setMacAddr_cmd(struct _adapter *padapter, const u8 *mac_addr);
722u8 r8712_sitesurvey_cmd(struct _adapter *padapter,
723 struct ndis_802_11_ssid *pssid);
724int r8712_createbss_cmd(struct _adapter *padapter);
725void r8712_setstakey_cmd(struct _adapter *padapter, u8 *psta, u8 unicast_key);
726int r8712_joinbss_cmd(struct _adapter *padapter,
727 struct wlan_network *pnetwork);
728void r8712_disassoc_cmd(struct _adapter *padapter);
729void r8712_setopmode_cmd(struct _adapter *padapter,
730 enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
731int r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset);
732void r8712_set_chplan_cmd(struct _adapter *padapter, int chplan);
733int r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 *pval);
734int r8712_setrfreg_cmd(struct _adapter *padapter, u8 offset, u32 val);
735void r8712_addbareq_cmd(struct _adapter *padapter, u8 tid);
736void r8712_wdg_wk_cmd(struct _adapter *padapter);
737void r8712_survey_cmd_callback(struct _adapter *padapter,
738 struct cmd_obj *pcmd);
739void r8712_disassoc_cmd_callback(struct _adapter *padapter,
740 struct cmd_obj *pcmd);
741void r8712_joinbss_cmd_callback(struct _adapter *padapter,
742 struct cmd_obj *pcmd);
743void r8712_createbss_cmd_callback(struct _adapter *padapter,
744 struct cmd_obj *pcmd);
745void r8712_getbbrfreg_cmdrsp_callback(struct _adapter *padapter,
746 struct cmd_obj *pcmd);
747void r8712_readtssi_cmdrsp_callback(struct _adapter *padapter,
748 struct cmd_obj *pcmd);
749void r8712_setstaKey_cmdrsp_callback(struct _adapter *padapter,
750 struct cmd_obj *pcmd);
751void r8712_setassocsta_cmdrsp_callback(struct _adapter *padapter,
752 struct cmd_obj *pcmd);
753void r8712_disconnectCtrlEx_cmd(struct _adapter *adapter, u32 enableDrvCtrl,
754 u32 tryPktCnt, u32 tryPktInterval, u32 firstStageTO);
755
756struct _cmd_callback {
757 u32 cmd_code;
758 void (*callback)(struct _adapter *padapter, struct cmd_obj *cmd);
759};
760
761#include "rtl8712_cmd.h"
762
763#endif
764
765