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