|
@@ -1731,8 +1731,8 @@ static inline void clear_feat_caps(u32 *bitmap,
|
|
|
|
|
|
int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
|
|
int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
|
|
{
|
|
{
|
|
- struct wcn36xx_hal_feat_caps_msg msg_body;
|
|
|
|
- int ret = 0;
|
|
|
|
|
|
+ struct wcn36xx_hal_feat_caps_msg msg_body, *rsp;
|
|
|
|
+ int ret = 0, i;
|
|
|
|
|
|
mutex_lock(&wcn->hal_mutex);
|
|
mutex_lock(&wcn->hal_mutex);
|
|
INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
|
|
INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
|
|
@@ -1746,12 +1746,15 @@ int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
|
|
wcn36xx_err("Sending hal_feature_caps_exchange failed\n");
|
|
wcn36xx_err("Sending hal_feature_caps_exchange failed\n");
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
- ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
|
|
|
|
- if (ret) {
|
|
|
|
- wcn36xx_err("hal_feature_caps_exchange response failed err=%d\n",
|
|
|
|
- ret);
|
|
|
|
|
|
+ if (wcn->hal_rsp_len != sizeof(*rsp)) {
|
|
|
|
+ wcn36xx_err("Invalid hal_feature_caps_exchange response");
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ rsp = (struct wcn36xx_hal_feat_caps_msg *) wcn->hal_buf;
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < WCN36XX_HAL_CAPS_SIZE; i++)
|
|
|
|
+ wcn->fw_feat_caps[i] = rsp->feat_caps[i];
|
|
out:
|
|
out:
|
|
mutex_unlock(&wcn->hal_mutex);
|
|
mutex_unlock(&wcn->hal_mutex);
|
|
return ret;
|
|
return ret;
|