Skip to content

Commit

Permalink
staging: r8712u: Merging Realtek's latest (v2.6.6). Various fixes.
Browse files Browse the repository at this point in the history
passive_mode added to private ioctls.
New private ioctls added for RSSI, link speed, mac address, scan type,
and DCE-D.
In r8711_wx_get_scan(), we now sleep only 100 times, instead of 1000.
In r8711_wx_set_essid(), added a check for Ad-Hoc state.
In r8711_wx_get_rate(), added a check for RTL8712_RF_2T2R RF type.
Added Set chplan.
In r871x_get_wireless_stats(), updated the mechanism for displaying
link quality.
Added SetDIG and SetRA commands.
r8712_joinbss_cmd() no longer checks for Ad-Hoc mode.

Signed-off-by: Ali Bahar <ali@internetDog.org>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Ali Bahar authored and Greg Kroah-Hartman committed Sep 7, 2011
1 parent f15abb8 commit c6dc001
Show file tree
Hide file tree
Showing 4 changed files with 283 additions and 23 deletions.
111 changes: 99 additions & 12 deletions drivers/staging/rtl8712/rtl871x_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,28 @@ u8 r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset)
return _SUCCESS;
}

u8 r8712_set_chplan_cmd(struct _adapter *padapter, int chplan)
{
struct cmd_obj *ph2c;
struct SetChannelPlan_param *psetchplanpara;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

ph2c = (struct cmd_obj *)_malloc(sizeof(struct cmd_obj));
if (ph2c == NULL)
return _FAIL;
psetchplanpara = (struct SetChannelPlan_param *)
_malloc(sizeof(struct SetChannelPlan_param));
if (psetchplanpara == NULL) {
kfree((u8 *) ph2c);
return _FAIL;
}
init_h2fwcmd_w_parm_no_rsp(ph2c, psetchplanpara,
GEN_CMD_CODE(_SetChannelPlan));
psetchplanpara->ChannelPlan = chplan;
r8712_enqueue_cmd(pcmdpriv, ph2c);
return _SUCCESS;
}

u8 r8712_setbasicrate_cmd(struct _adapter *padapter, u8 *rateset)
{
struct cmd_obj *ph2c;
Expand All @@ -303,20 +325,62 @@ u8 r8712_setbasicrate_cmd(struct _adapter *padapter, u8 *rateset)
u8 r8712_setptm_cmd(struct _adapter *padapter, u8 type)
{
struct cmd_obj *ph2c;
struct PT_param *pptparm;
struct writePTM_parm *pwriteptmparm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

ph2c = (struct cmd_obj *)_malloc(sizeof(struct cmd_obj));
if (ph2c == NULL)
return _FAIL;
pptparm = (struct PT_param *)_malloc(sizeof(struct PT_param));
if (pptparm == NULL) {
pwriteptmparm = (struct writePTM_parm *)
_malloc(sizeof(struct writePTM_parm));
if (pwriteptmparm == NULL) {
kfree((u8 *) ph2c);
return _FAIL;
}
init_h2fwcmd_w_parm_no_rsp(ph2c, pptparm,
GEN_CMD_CODE(_SetPowerTracking));
pptparm->PT_En = type;
init_h2fwcmd_w_parm_no_rsp(ph2c, pwriteptmparm, GEN_CMD_CODE(_SetPT));
pwriteptmparm->type = type;
r8712_enqueue_cmd(pcmdpriv, ph2c);
return _SUCCESS;
}

u8 r8712_setfwdig_cmd(struct _adapter *padapter, u8 type)
{
struct cmd_obj *ph2c;
struct writePTM_parm *pwriteptmparm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

ph2c = (struct cmd_obj *)_malloc(sizeof(struct cmd_obj));
if (ph2c == NULL)
return _FAIL;
pwriteptmparm = (struct writePTM_parm *)
_malloc(sizeof(struct setdig_parm));
if (pwriteptmparm == NULL) {
kfree((u8 *) ph2c);
return _FAIL;
}
init_h2fwcmd_w_parm_no_rsp(ph2c, pwriteptmparm, GEN_CMD_CODE(_SetDIG));
pwriteptmparm->type = type;
r8712_enqueue_cmd(pcmdpriv, ph2c);
return _SUCCESS;
}

u8 r8712_setfwra_cmd(struct _adapter *padapter, u8 type)
{
struct cmd_obj *ph2c;
struct writePTM_parm *pwriteptmparm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

ph2c = (struct cmd_obj *)_malloc(sizeof(struct cmd_obj));
if (ph2c == NULL)
return _FAIL;
pwriteptmparm = (struct writePTM_parm *)
_malloc(sizeof(struct setra_parm));
if (pwriteptmparm == NULL) {
kfree((u8 *) ph2c);
return _FAIL;
}
init_h2fwcmd_w_parm_no_rsp(ph2c, pwriteptmparm, GEN_CMD_CODE(_SetRA));
pwriteptmparm->type = type;
r8712_enqueue_cmd(pcmdpriv, ph2c);
return _SUCCESS;
}
Expand Down Expand Up @@ -512,12 +576,6 @@ u8 r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork)
&psecnetwork->IEs[0],
pnetwork->network.IELength,
&psecnetwork->IELength);
if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
r8712_add_ht_addt_info(padapter,
&pnetwork->network.IEs[0],
&psecnetwork->IEs[0],
pnetwork->network.IELength,
&psecnetwork->IELength);
}
}
psecuritypriv->supplicant_ie[0] = (u8)psecnetwork->IELength;
Expand Down Expand Up @@ -950,3 +1008,32 @@ void r8712_setassocsta_cmdrsp_callback(struct _adapter *padapter,
spin_unlock_irqrestore(&pmlmepriv->lock, irqL);
r8712_free_cmd_obj(pcmd);
}

u8 r8712_disconnectCtrlEx_cmd(struct _adapter *adapter, u32 enableDrvCtrl,
u32 tryPktCnt, u32 tryPktInterval, u32 firstStageTO)
{
struct cmd_obj *ph2c;
struct DisconnectCtrlEx_param *param;
struct cmd_priv *pcmdpriv = &adapter->cmdpriv;

ph2c = (struct cmd_obj *)_malloc(sizeof(struct cmd_obj));
if (ph2c == NULL)
return _FAIL;
param = (struct DisconnectCtrlEx_param *)
_malloc(sizeof(struct DisconnectCtrlEx_param));
if (param == NULL) {
kfree((unsigned char *) ph2c);
return _FAIL;
}
memset(param, 0, sizeof(struct DisconnectCtrlEx_param));

param->EnableDrvCtrl = (unsigned char)enableDrvCtrl;
param->TryPktCnt = (unsigned char)tryPktCnt;
param->TryPktInterval = (unsigned char)tryPktInterval;
param->FirstStageTO = (unsigned int)firstStageTO;

init_h2fwcmd_w_parm_no_rsp(ph2c, param,
GEN_CMD_CODE(_DisconnectCtrlEx));
r8712_enqueue_cmd(pcmdpriv, ph2c);
return _SUCCESS;
}
48 changes: 45 additions & 3 deletions drivers/staging/rtl8712/rtl871x_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,35 @@ struct setdatarate_parm {
u8 datarates[NumRates];
};

enum _RT_CHANNEL_DOMAIN {
RT_CHANNEL_DOMAIN_FCC = 0,
RT_CHANNEL_DOMAIN_IC = 1,
RT_CHANNEL_DOMAIN_ETSI = 2,
RT_CHANNEL_DOMAIN_SPAIN = 3,
RT_CHANNEL_DOMAIN_FRANCE = 4,
RT_CHANNEL_DOMAIN_MKK = 5,
RT_CHANNEL_DOMAIN_MKK1 = 6,
RT_CHANNEL_DOMAIN_ISRAEL = 7,
RT_CHANNEL_DOMAIN_TELEC = 8,

/* Be compatible with old channel plan. No good! */
RT_CHANNEL_DOMAIN_MIC = 9,
RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 10,
RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 11,
RT_CHANNEL_DOMAIN_TELEC_NETGEAR = 12,

RT_CHANNEL_DOMAIN_NCC = 13,
RT_CHANNEL_DOMAIN_5G = 14,
RT_CHANNEL_DOMAIN_5G_40M = 15,
/*===== Add new channel plan above this line===============*/
RT_CHANNEL_DOMAIN_MAX,
};


struct SetChannelPlan_param {
enum _RT_CHANNEL_DOMAIN ChannelPlan;
};

/*
Caller Mode: Any
Expand Down Expand Up @@ -392,6 +421,10 @@ struct writeBB_parm {
u8 value;
};

struct writePTM_parm {
u8 type;
};

struct readRF_parm {
u8 offset;
};
Expand Down Expand Up @@ -671,9 +704,14 @@ struct SetChannel_parm {
u32 curr_ch;
};

/*H2C Handler index: 56 */
struct PT_param {
u8 PT_En;
/*H2C Handler index: 61 */
struct DisconnectCtrlEx_param {
/* MAXTIME = (2 * FirstStageTO) + (TryPktCnt * TryPktInterval) */
unsigned char EnableDrvCtrl;
unsigned char TryPktCnt;
unsigned char TryPktInterval; /* Unit: ms */
unsigned char rsvd;
unsigned int FirstStageTO; /* Unit: ms */
};

#define GEN_CMD_CODE(cmd) cmd ## _CMD_
Expand Down Expand Up @@ -709,13 +747,17 @@ u8 r8712_disassoc_cmd(struct _adapter *padapter);
u8 r8712_setopmode_cmd(struct _adapter *padapter,
enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
u8 r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset);
u8 r8712_set_chplan_cmd(struct _adapter *padapter, int chplan);
u8 r8712_setbasicrate_cmd(struct _adapter *padapter, u8 *rateset);
u8 r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 * pval);
u8 r8712_setrfintfs_cmd(struct _adapter *padapter, u8 mode);
u8 r8712_setrfreg_cmd(struct _adapter *padapter, u8 offset, u32 val);
u8 r8712_setrttbl_cmd(struct _adapter *padapter,
struct setratable_parm *prate_table);
u8 r8712_gettssi_cmd(struct _adapter *padapter, u8 offset, u8 *pval);
u8 r8712_setptm_cmd(struct _adapter *padapter, u8 type);
u8 r8712_setfwdig_cmd(struct _adapter *padapter, u8 type);
u8 r8712_setfwra_cmd(struct _adapter *padapter, u8 type);
u8 r8712_addbareq_cmd(struct _adapter *padapter, u8 tid);
u8 r8712_wdg_wk_cmd(struct _adapter *padapter);
void r8712_survey_cmd_callback(struct _adapter *padapter,
Expand Down
Loading

0 comments on commit c6dc001

Please sign in to comment.