|
@@ -1247,20 +1247,26 @@ int mwifiex_ret_802_11_ad_hoc(struct mwifiex_private *priv,
|
|
{
|
|
{
|
|
int ret = 0;
|
|
int ret = 0;
|
|
struct mwifiex_adapter *adapter = priv->adapter;
|
|
struct mwifiex_adapter *adapter = priv->adapter;
|
|
- struct host_cmd_ds_802_11_ad_hoc_result *adhoc_result;
|
|
|
|
|
|
+ struct host_cmd_ds_802_11_ad_hoc_start_result *start_result =
|
|
|
|
+ &resp->params.start_result;
|
|
|
|
+ struct host_cmd_ds_802_11_ad_hoc_join_result *join_result =
|
|
|
|
+ &resp->params.join_result;
|
|
struct mwifiex_bssdescriptor *bss_desc;
|
|
struct mwifiex_bssdescriptor *bss_desc;
|
|
- u16 reason_code;
|
|
|
|
|
|
+ u16 cmd = le16_to_cpu(resp->command);
|
|
|
|
+ u8 result;
|
|
|
|
|
|
- adhoc_result = &resp->params.adhoc_result;
|
|
|
|
|
|
+ if (cmd == HostCmd_CMD_802_11_AD_HOC_START)
|
|
|
|
+ result = start_result->result;
|
|
|
|
+ else
|
|
|
|
+ result = join_result->result;
|
|
|
|
|
|
bss_desc = priv->attempted_bss_desc;
|
|
bss_desc = priv->attempted_bss_desc;
|
|
|
|
|
|
/* Join result code 0 --> SUCCESS */
|
|
/* Join result code 0 --> SUCCESS */
|
|
- reason_code = le16_to_cpu(resp->result);
|
|
|
|
- if (reason_code) {
|
|
|
|
|
|
+ if (result) {
|
|
mwifiex_dbg(priv->adapter, ERROR, "ADHOC_RESP: failed\n");
|
|
mwifiex_dbg(priv->adapter, ERROR, "ADHOC_RESP: failed\n");
|
|
if (priv->media_connected)
|
|
if (priv->media_connected)
|
|
- mwifiex_reset_connect_state(priv, reason_code);
|
|
|
|
|
|
+ mwifiex_reset_connect_state(priv, result);
|
|
|
|
|
|
memset(&priv->curr_bss_params.bss_descriptor,
|
|
memset(&priv->curr_bss_params.bss_descriptor,
|
|
0x00, sizeof(struct mwifiex_bssdescriptor));
|
|
0x00, sizeof(struct mwifiex_bssdescriptor));
|
|
@@ -1278,7 +1284,7 @@ int mwifiex_ret_802_11_ad_hoc(struct mwifiex_private *priv,
|
|
|
|
|
|
/* Update the created network descriptor with the new BSSID */
|
|
/* Update the created network descriptor with the new BSSID */
|
|
memcpy(bss_desc->mac_address,
|
|
memcpy(bss_desc->mac_address,
|
|
- adhoc_result->bssid, ETH_ALEN);
|
|
|
|
|
|
+ start_result->bssid, ETH_ALEN);
|
|
|
|
|
|
priv->adhoc_state = ADHOC_STARTED;
|
|
priv->adhoc_state = ADHOC_STARTED;
|
|
} else {
|
|
} else {
|