u32 cmdsz;
u8 *rsp;
u32 rspsz;
- //_sema cmd_sem;
- _list list;
+ //struct semaphore cmd_sem;
+ struct list_head list;
};
struct cmd_priv {
- _sema cmd_queue_sema;
- //_sema cmd_done_sema;
- _sema terminate_cmdthread_sema;
+ struct semaphore cmd_queue_sema;
+ //struct semaphore cmd_done_sema;
+ struct semaphore terminate_cmdthread_sema;
_queue cmd_queue;
u8 cmd_seq;
u8 *cmd_buf; //shall be non-paged, and 4 bytes aligned
u8 res;
u8 *parmbuf;
u32 evtsz;
- _list list;
+ struct list_head list;
};
#endif
struct evt_priv {
#ifdef CONFIG_EVENT_THREAD_MODE
- _sema evt_notify;
- _sema terminate_evtthread_sema;
+ struct semaphore evt_notify;
+ struct semaphore terminate_evtthread_sema;
_queue evt_queue;
#endif
+#define CONFIG_C2H_WK
+#ifdef CONFIG_C2H_WK
+ _workitem c2h_wk;
+ bool c2h_wk_alive;
+ struct rtw_cbuf *c2h_queue;
+ #define C2H_QUEUE_MAX_LEN 10
+#endif
+
#ifdef CONFIG_H2CLBK
- _sema lbkevt_done;
+ struct semaphore lbkevt_done;
u8 lbkevt_limit;
u8 lbkevt_num;
u8 *cmdevt_parm;
#endif
- ATOMIC_T event_seq;
+ atomic_t event_seq;
u8 *evt_buf; //shall be non-paged, and 4 bytes aligned
u8 *evt_allocated_buf;
u32 evt_done_cnt;
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- u8 *c2h_mem;
- u8 *allocated_c2h_mem;
-#endif
-
};
#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
do {\
- _rtw_init_listhead(&pcmd->list);\
+ INIT_LIST_HEAD(&pcmd->list);\
pcmd->cmdcode = code;\
pcmd->parmbuf = (u8 *)(pparm);\
pcmd->cmdsz = sizeof (*pparm);\
P2P_PS_WK_CID,
P2P_PROTO_WK_CID,
CHECK_HIQ_WK_CID,//for softap mode, check hi queue if empty
- INTEl_WIDI_WK_CID,
C2H_WK_CID,
RTP_TIMER_CFG_WK_CID,
MAX_WK_CID
*/
struct disconnect_parm {
- u32 rsvd;
+ u32 deauth_timeout_ms;
};
/*
*/
#define RTW_SSID_SCAN_AMOUNT 9 // for WEXT_CSCAN_AMOUNT 9
+#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
struct sitesurvey_parm {
- sint scan_mode; //active: 1, passive: 0
- sint bsslimit; // 1 ~ 48
- // for up to 9 probreq with specific ssid
+ int scan_mode; //active: 1, passive: 0
+ /* int bsslimit; // 1 ~ 48 */
+ u8 ssid_num;
+ u8 ch_num;
NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
+ struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
};
/*
*/
struct getdatarate_parm {
u32 rsvd;
-
};
+
struct getdatarate_rsp {
u8 datarates[NumRates];
};
*/
struct getphy_parm {
u32 rsvd;
-
};
+
struct getphy_rsp {
u8 rfchannel;
u8 modem;
struct readBB_parm {
u8 offset;
};
+
struct readBB_rsp {
u8 value;
};
struct readTSSI_parm {
u8 offset;
};
+
struct readTSSI_rsp {
u8 value;
};
struct readRF_parm {
u8 offset;
};
+
struct readRF_rsp {
u32 value;
};
u8 rfintfs;
};
-
struct Tx_Beacon_param
{
WLAN_BSSID_EX network;
};
-/*
- Notes: This command is used for H2C/C2H loopback testing
-
- mac[0] == 0
- ==> CMD mode, return H2C_SUCCESS.
- The following condition must be ture under CMD mode
- mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0;
- s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7;
- s2 == (b1 << 8 | b0);
-
- mac[0] == 1
- ==> CMD_RSP mode, return H2C_SUCCESS_RSP
-
- The rsp layout shall be:
- rsp: parm:
- mac[0] = mac[5];
- mac[1] = mac[4];
- mac[2] = mac[3];
- mac[3] = mac[2];
- mac[4] = mac[1];
- mac[5] = mac[0];
- s0 = s1;
- s1 = swap16(s0);
- w0 = swap32(w1);
- b0 = b1
- s2 = s0 + s1
- b1 = b0
- w1 = w0
-
- mac[0] == 2
- ==> CMD_EVENT mode, return H2C_SUCCESS
- The event layout shall be:
- event: parm:
- mac[0] = mac[5];
- mac[1] = mac[4];
- mac[2] = event's sequence number, starting from 1 to parm's marc[3]
- mac[3] = mac[2];
- mac[4] = mac[1];
- mac[5] = mac[0];
- s0 = swap16(s0) - event.mac[2];
- s1 = s1 + event.mac[2];
- w0 = swap32(w0);
- b0 = b1
- s2 = s0 + event.mac[2]
- b1 = b0
- w1 = swap32(w1) - event.mac[2];
-
- parm->mac[3] is the total event counts that host requested.
-
-
- event will be the same with the cmd's param.
-
-*/
-
#ifdef CONFIG_H2CLBK
struct seth2clbk_parm {
struct gettxagctbl_parm {
u32 rsvd;
};
+
struct gettxagctbl_rsp {
u32 txagc[MAX_RATES_LENGTH];
};
u32 agcctrl; // 0: pure hw, 1: fw
};
-
struct setssup_parm {
u32 ss_ForceUp[MAX_RATES_LENGTH];
};
struct getssup_parm {
u32 rsvd;
};
+
struct getssup_rsp {
u8 ss_ForceUp[MAX_RATES_LENGTH];
};
-
struct setssdlevel_parm {
u8 ss_DLevel[MAX_RATES_LENGTH];
};
struct getssdlevel_parm {
u32 rsvd;
};
+
struct getssdlevel_rsp {
u8 ss_DLevel[MAX_RATES_LENGTH];
};
struct getssulevel_parm {
u32 rsvd;
};
+
struct getssulevel_rsp {
u8 ss_ULevel[MAX_RATES_LENGTH];
};
-
struct setcountjudge_parm {
u8 count_judge[MAX_RATES_LENGTH];
};
struct getcountjudge_parm {
u32 rsvd;
};
+
struct getcountjudge_rsp {
u8 count_judge[MAX_RATES_LENGTH];
};
-
struct setratable_parm {
u8 ss_ForceUp[NumRates];
u8 ss_ULevel[NumRates];
struct getratable_parm {
uint rsvd;
};
+
struct getratable_rsp {
u8 ss_ForceUp[NumRates];
u8 ss_ULevel[NumRates];
u8 count_judge[NumRates];
};
-
//to get TX,RX retry count
struct gettxretrycnt_parm{
unsigned int rsvd;
struct getcurtxpwrlevel_parm{
unsigned int rsvd;
};
+
struct getcurtxpwrlevel_rsp{
unsigned short tx_power;
};
unsigned char ie[0];
};
-
-struct addBaReq_parm
-{
+struct addBaReq_parm {
unsigned int tid;
u8 addr[ETH_ALEN];
};
/*H2C Handler index: 46 */
-struct SetChannel_parm
-{
- u32 curr_ch;
+struct set_ch_parm {
+ u8 ch;
+ u8 bw;
+ u8 ch_offset;
};
#ifdef MP_FIRMWARE_OFFLOAD
/*H2C Handler index: 47 */
-struct SetTxPower_parm
-{
+struct SetTxPower_parm {
u8 TxPower;
};
/*H2C Handler index: 48 */
-struct SwitchAntenna_parm
-{
+struct SwitchAntenna_parm {
u16 antenna_tx;
u16 antenna_rx;
-// R_ANTENNA_SELECT_CCK cck_txrx;
u8 cck_txrx;
};
/*H2C Handler index: 49 */
-struct SetCrystalCap_parm
-{
+struct SetCrystalCap_parm {
u32 curr_crystalcap;
};
/*H2C Handler index: 50 */
-struct SetSingleCarrierTx_parm
-{
+struct SetSingleCarrierTx_parm {
u8 bStart;
};
/*H2C Handler index: 51 */
-struct SetSingleToneTx_parm
-{
+struct SetSingleToneTx_parm {
u8 bStart;
u8 curr_rfpath;
};
/*H2C Handler index: 52 */
-struct SetCarrierSuppressionTx_parm
-{
+struct SetCarrierSuppressionTx_parm {
u8 bStart;
u32 curr_rateidx;
};
/*H2C Handler index: 53 */
-struct SetContinuousTx_parm
-{
+struct SetContinuousTx_parm {
u8 bStart;
u8 CCK_flag; /*1:CCK 2:OFDM*/
u32 curr_rateidx;
};
/*H2C Handler index: 54 */
-struct SwitchBandwidth_parm
-{
+struct SwitchBandwidth_parm {
u8 curr_bandwidth;
};
#endif /* MP_FIRMWARE_OFFLOAD */
/*H2C Handler index: 59 */
-struct SetChannelPlan_param
-{
+struct SetChannelPlan_param {
u8 channel_plan;
};
/*H2C Handler index: 60 */
-struct LedBlink_param
-{
+struct LedBlink_param {
PLED_871x pLed;
};
/*H2C Handler index: 61 */
-struct SetChannelSwitch_param
-{
+struct SetChannelSwitch_param {
u8 new_ch_no;
};
/*H2C Handler index: 62 */
-struct TDLSoption_param
-{
+struct TDLSoption_param {
u8 addr[ETH_ALEN];
u8 option;
};
#define H2C_CMD_OVERFLOW 0x06
#define H2C_RESERVED 0x07
-extern u8 rtw_setassocsta_cmd(_adapter *padapter, u8 *mac_addr);
-extern u8 rtw_setstandby_cmd(_adapter *padapter, uint action);
-extern u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
-extern u8 rtw_createbss_cmd(_adapter *padapter);
-extern u8 rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz);
-extern u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch);
-extern u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key);
-extern u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
-extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork);
-extern u8 rtw_disassoc_cmd(_adapter *padapter);
-extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
-extern u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset);
-extern u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset);
-extern u8 rtw_setbbreg_cmd(_adapter * padapter, u8 offset, u8 val);
-extern u8 rtw_setrfreg_cmd(_adapter * padapter, u8 offset, u32 val);
-extern u8 rtw_getbbreg_cmd(_adapter * padapter, u8 offset, u8 * pval);
-extern u8 rtw_getrfreg_cmd(_adapter * padapter, u8 offset, u8 * pval);
-extern u8 rtw_setrfintfs_cmd(_adapter *padapter, u8 mode);
-extern u8 rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table);
-extern u8 rtw_getrttbl_cmd(_adapter *padapter, struct getratable_rsp *pval);
-
-extern u8 rtw_gettssi_cmd(_adapter *padapter, u8 offset,u8 *pval);
-extern u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type);
-extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
-
-extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
-
-extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter);
+u8 rtw_setassocsta_cmd(_adapter *padapter, u8 *mac_addr);
+u8 rtw_setstandby_cmd(_adapter *padapter, uint action);
+u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num);
+u8 rtw_createbss_cmd(_adapter *padapter);
+u8 rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz);
+u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch);
+u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key);
+u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
+u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork);
+u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
+u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
+u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset);
+u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset);
+u8 rtw_setbbreg_cmd(_adapter * padapter, u8 offset, u8 val);
+u8 rtw_setrfreg_cmd(_adapter * padapter, u8 offset, u32 val);
+u8 rtw_getbbreg_cmd(_adapter * padapter, u8 offset, u8 * pval);
+u8 rtw_getrfreg_cmd(_adapter * padapter, u8 offset, u8 * pval);
+u8 rtw_setrfintfs_cmd(_adapter *padapter, u8 mode);
+u8 rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table);
+u8 rtw_getrttbl_cmd(_adapter *padapter, struct getratable_rsp *pval);
+
+u8 rtw_gettssi_cmd(_adapter *padapter, u8 offset,u8 *pval);
+u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type);
+u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
+
+u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
+
+u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter);
u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue);
#if (RATE_ADAPTIVE_SUPPORT==1)
#endif
#ifdef CONFIG_ANTENNA_DIVERSITY
-extern u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue);
+u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue);
#endif
extern u8 rtw_ps_cmd(_adapter*padapter);
u8 rtw_chk_hi_queue_cmd(_adapter*padapter);
#endif
-extern u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enaueue);
-extern u8 rtw_led_blink_cmd(_adapter*padapter, PLED_871x pLed);
-extern u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no);
-extern u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
+u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue);
+u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enqueue);
+u8 rtw_led_blink_cmd(_adapter*padapter, PLED_871x pLed);
+u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no);
+u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
-extern u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt);
+u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt);
u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf);
-extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_createbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_getbbrfreg_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_readtssi_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd);
-
-extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_setassocsta_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_createbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_getbbrfreg_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_readtssi_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd);
+void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_setassocsta_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
+void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd);
struct _cmd_callback {
u32 cmd_code;
void (*callback)(_adapter *padapter, struct cmd_obj *cmd);
};
-enum rtw_h2c_cmd
-{
+enum rtw_h2c_cmd {
GEN_CMD_CODE(_Read_MACREG) , /*0*/
GEN_CMD_CODE(_Write_MACREG) ,
GEN_CMD_CODE(_Read_BBREG) ,
#define _SetRFReg_CMD_ _Write_RFREG_CMD_
#ifdef _RTW_CMD_C_
-struct _cmd_callback rtw_cmd_callback[] =
-{
+struct _cmd_callback rtw_cmd_callback[] = {
{GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/
{GEN_CMD_CODE(_Write_MACREG), NULL},
{GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback},
{GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/
{GEN_CMD_CODE(_TDLS), NULL},/*62*/
};
+#else
+extern struct _cmd_callback rtw_cmd_callback[];
#endif
#endif // _CMD_H_