1/****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2010 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 * Modifications for inclusion into the Linux staging tree are 19 * Copyright(c) 2010 Larry Finger. All rights reserved. 20 * 21 * Contact information: 22 * WLAN FAE <wlanfae@realtek.com> 23 * Larry Finger <Larry.Finger@lwfinger.net> 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; /*shall be non-paged, and 4 bytes aligned*/ 58 u8 *cmd_allocated_buf; 59 u8 *rsp_buf; /*shall be non-paged, and 4 bytes aligned*/ 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; /*shall be non-paged, and 4 bytes aligned*/ 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 * Caller Mode: Infra, Ad-HoC(C) 118 * Notes: To enter USB suspend mode 119 * Command Mode 120 */ 121struct usb_suspend_parm { 122 u32 action; /* 1: sleep, 0:resume */ 123}; 124 125/* 126 * Caller Mode: Infra, Ad-Hoc 127 * Notes: To join the specified bss 128 * Command Event Mode 129 */ 130struct joinbss_parm { 131 struct ndis_wlan_bssid_ex network; 132}; 133 134/* 135 * Caller Mode: Infra, Ad-HoC(C) 136 * Notes: To disconnect the current associated BSS 137 * Command Mode 138 */ 139struct disconnect_parm { 140 u32 rsvd; 141}; 142 143/* 144 * Caller Mode: AP, Ad-HoC(M) 145 * Notes: To create a BSS 146 * Command Mode 147 */ 148struct createbss_parm { 149 struct ndis_wlan_bssid_ex network; 150}; 151 152/* 153 * Caller Mode: AP, Ad-HoC, Infra 154 * Notes: To set the NIC mode of RTL8711 155 * Command Mode 156 * The definition of mode: 157 * 158 * #define IW_MODE_AUTO 0 // Let the driver decides which AP to join 159 * #define IW_MODE_ADHOC 1 // Single cell network (Ad-Hoc Clients) 160 * #define IW_MODE_INFRA 2 // Multi cell network, roaming, .. 161 * #define IW_MODE_MASTER 3 // Synchronisation master or AP 162 * #define IW_MODE_REPEAT 4 // Wireless Repeater (forwarder) 163 * #define IW_MODE_SECOND 5 // Secondary master/repeater (backup) 164 * #define IW_MODE_MONITOR 6 // Passive monitor (listen only) 165*/ 166struct setopmode_parm { 167 u8 mode; 168 u8 rsvd[3]; 169}; 170 171/* 172 * Caller Mode: AP, Ad-HoC, Infra 173 * Notes: To ask RTL8711 performing site-survey 174 * Command-Event Mode 175 */ 176struct sitesurvey_parm { 177 sint passive_mode; /*active: 1, passive: 0 */ 178 sint bsslimit; /* 1 ~ 48 */ 179 sint ss_ssidlen; 180 u8 ss_ssid[IW_ESSID_MAX_SIZE + 1]; 181}; 182 183/* 184 * Caller Mode: Any 185 * Notes: To set the auth type of RTL8711. open/shared/802.1x 186 * Command Mode 187 */ 188struct setauth_parm { 189 u8 mode; /*0: legacy open, 1: legacy shared 2: 802.1x*/ 190 u8 _1x; /*0: PSK, 1: TLS*/ 191 u8 rsvd[2]; 192}; 193 194/* 195 * Caller Mode: Infra 196 * a. algorithm: wep40, wep104, tkip & aes 197 * b. keytype: grp key/unicast key 198 * c. key contents 199 * 200 * when shared key ==> keyid is the camid 201 * when 802.1x ==> keyid [0:1] ==> grp key 202 * when 802.1x ==> keyid > 2 ==> unicast key 203 */ 204struct setkey_parm { 205 u8 algorithm; /* encryption algorithm, could be none, wep40, 206 * TKIP, CCMP, wep104 */ 207 u8 keyid; 208 u8 grpkey; /* 1: this is the grpkey for 802.1x. 209 * 0: this is the unicast key for 802.1x */ 210 u8 key[16]; /* this could be 40 or 104 */ 211}; 212 213/* 214 * When in AP or Ad-Hoc mode, this is used to 215 * allocate an sw/hw entry for a newly associated sta. 216 * Command 217 * when shared key ==> algorithm/keyid 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/* 236Caller Ad-Hoc/AP 237 238Command -Rsp(AID == CAMID) mode 239 240This is to force fw to add an sta_data entry per driver's request. 241 242FW will write an cam entry associated with it. 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 Caller Ad-Hoc/AP 256 257 Command mode 258 259 This is to force fw to del an sta_data entry per driver's request 260 261 FW will invalidate the cam entry associated with it. 262 263*/ 264struct del_assocsta_parm { 265 u8 addr[ETH_ALEN]; 266}; 267 268/* 269Caller Mode: AP/Ad-HoC(M) 270 271Notes: To notify fw that given staid has changed its power state 272 273Command Mode 274 275*/ 276struct setstapwrstate_parm { 277 u8 staid; 278 u8 status; 279 u8 hwaddr[6]; 280}; 281 282/* 283Caller Mode: Any 284 285Notes: To setup the basic rate of RTL8711 286 287Command Mode 288 289*/ 290struct setbasicrate_parm { 291 u8 basicrates[NumRates]; 292}; 293 294/* 295Caller Mode: Any 296 297Notes: To read the current basic rate 298 299Command-Rsp Mode 300 301*/ 302struct getbasicrate_parm { 303 u32 rsvd; 304}; 305 306struct getbasicrate_rsp { 307 u8 basicrates[NumRates]; 308}; 309 310/* 311Caller Mode: Any 312 313Notes: To setup the data rate of RTL8711 314 315Command Mode 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 /* Be compatible with old channel plan. No good! */ 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 /*===== Add new channel plan above this line===============*/ 344 RT_CHANNEL_DOMAIN_MAX, 345}; 346 347 348struct SetChannelPlan_param { 349 enum _RT_CHANNEL_DOMAIN ChannelPlan; 350}; 351 352/* 353Caller Mode: Any 354 355Notes: To read the current data rate 356 357Command-Rsp Mode 358 359*/ 360struct getdatarate_parm { 361 u32 rsvd; 362 363}; 364struct getdatarate_rsp { 365 u8 datarates[NumRates]; 366}; 367 368 369/* 370Caller Mode: Any 371AP: AP can use the info for the contents of beacon frame 372Infra: STA can use the info when sitesurveying 373Ad-HoC(M): Like AP 374Ad-HoC(C): Like STA 375 376 377Notes: To set the phy capability of the NIC 378 379Command Mode 380 381*/ 382 383/* 384Caller Mode: Any 385 386Notes: To set the channel/modem/band 387This command will be used when channel/modem/band is changed. 388 389Command Mode 390 391*/ 392/* 393Caller Mode: Any 394 395Notes: To get the current setting of channel/modem/band 396 397Command-Rsp Mode 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 Notes: This command is used for H2C/C2H loopback testing 450 451 mac[0] == 0 452 ==> CMD mode, return H2C_SUCCESS. 453 The following condition must be ture under CMD mode 454 mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; 455 s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; 456 s2 == (b1 << 8 | b0); 457 458 mac[0] == 1 459 ==> CMD_RSP mode, return H2C_SUCCESS_RSP 460 461 The rsp layout shall be: 462 rsp: parm: 463 mac[0] = mac[5]; 464 mac[1] = mac[4]; 465 mac[2] = mac[3]; 466 mac[3] = mac[2]; 467 mac[4] = mac[1]; 468 mac[5] = mac[0]; 469 s0 = s1; 470 s1 = swap16(s0); 471 w0 = swap32(w1); 472 b0 = b1 473 s2 = s0 + s1 474 b1 = b0 475 w1 = w0 476 477 mac[0] == 2 478 ==> CMD_EVENT mode, return H2C_SUCCESS 479 The event layout shall be: 480 event: parm: 481 mac[0] = mac[5]; 482 mac[1] = mac[4]; 483 mac[2] = event's sequence number, starting from 1 to parm's marc[3] 484 mac[3] = mac[2]; 485 mac[4] = mac[1]; 486 mac[5] = mac[0]; 487 s0 = swap16(s0) - event.mac[2]; 488 s1 = s1 + event.mac[2]; 489 w0 = swap32(w0); 490 b0 = b1 491 s2 = s0 + event.mac[2] 492 b1 = b0 493 w1 = swap32(w1) - event.mac[2]; 494 495 parm->mac[3] is the total event counts that host requested. 496 497 498 event will be the same with the cmd's param. 499 500*/ 501 502/* CMD param Formart for DRV INTERNAL CMD HDL*/ 503struct drvint_cmd_parm { 504 int i_cid; /*internal cmd id*/ 505 int sz; /* buf sz*/ 506 unsigned char *pbuf; 507}; 508 509/*------------------- Below are used for RF/BB tunning ---------------------*/ 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; /* 0: pure hw, 1: fw */ 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; /* 1: dps, 0: 32k */ 588 u8 bcn_rx_en; 589 u8 bcn_pass_cnt; /* fw report one beacon information to 590 * driver when it receives bcn_pass_cnt 591 * beacons. */ 592 u8 bcn_to; /* beacon TO (ms). ¡§=0¡¨ no limit.*/ 593 u16 bcn_itv; 594 u8 app_itv; /* only for VOIP mode. */ 595 u8 awake_bcn_itv; 596 u8 smart_ps; 597 u8 bcn_pass_time; /* unit: 100ms */ 598}; 599 600struct setatim_parm { 601 u8 op; /*0: add, 1:del*/ 602 u8 txid; /* id of dest station.*/ 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/*to get TX,RX retry count*/ 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/*to get BCNOK,BCNERR count*/ 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/* to get current TX power level*/ 656struct getcurtxpwrlevel_parm { 657 unsigned int rsvd; 658}; 659 660struct getcurtxpwrlevel_rsp { 661 unsigned short tx_power; 662}; 663 664/*dynamic on/off DIG*/ 665struct setdig_parm { 666 unsigned char dig_on; /* 1:on , 0:off */ 667}; 668 669/*dynamic on/off RA*/ 670struct setra_parm { 671 unsigned char ra_on; /* 1:on , 0:off */ 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/*H2C Handler index: 46 */ 703struct SetChannel_parm { 704 u32 curr_ch; 705}; 706 707/*H2C Handler index: 61 */ 708struct DisconnectCtrlEx_param { 709 /* MAXTIME = (2 * FirstStageTO) + (TryPktCnt * TryPktInterval) */ 710 unsigned char EnableDrvCtrl; 711 unsigned char TryPktCnt; 712 unsigned char TryPktInterval; /* Unit: ms */ 713 unsigned char rsvd; 714 unsigned int FirstStageTO; /* Unit: ms */ 715}; 716 717#define GEN_CMD_CODE(cmd) cmd ## _CMD_ 718 719/* 720 * Result: 721 * 0x00: success 722 * 0x01: success, and check Response. 723 * 0x02: cmd ignored due to duplicated sequcne number 724 * 0x03: cmd dropped due to invalid cmd code 725 * 0x04: reserved. 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 /* _CMD_H_ */ 790 791