Skip to content

Commit

Permalink
wcn36xx: Improve feature caps exchange
Browse files Browse the repository at this point in the history
* Response format is not in the canonical format.
  wcn36xx_smd_rsp_status_check cannot be used.

* Save the FW caps in wcn36xx struct for later use.

Signed-off-by: Pontus Fuchs <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
pof2 authored and linvjw committed Feb 13, 2014
1 parent 0876232 commit c951da4
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 7 deletions.
4 changes: 3 additions & 1 deletion drivers/net/wireless/ath/wcn36xx/hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4384,11 +4384,13 @@ enum place_holder_in_cap_bitmap {
MAX_FEATURE_SUPPORTED = 128,
};

#define WCN36XX_HAL_CAPS_SIZE 4

struct wcn36xx_hal_feat_caps_msg {

struct wcn36xx_hal_msg_header header;

u32 feat_caps[4];
u32 feat_caps[WCN36XX_HAL_CAPS_SIZE];
} __packed;

/* status codes to help debug rekey failures */
Expand Down
15 changes: 9 additions & 6 deletions drivers/net/wireless/ath/wcn36xx/smd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1731,8 +1731,8 @@ static inline void clear_feat_caps(u32 *bitmap,

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);
INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
Expand All @@ -1746,12 +1746,15 @@ int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
wcn36xx_err("Sending hal_feature_caps_exchange failed\n");
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;
}

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:
mutex_unlock(&wcn->hal_mutex);
return ret;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/ath/wcn36xx/wcn36xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ struct wcn36xx {
u8 fw_version;
u8 fw_minor;
u8 fw_major;
u32 fw_feat_caps[WCN36XX_HAL_CAPS_SIZE];

/* extra byte for the NULL termination */
u8 crm_version[WCN36XX_HAL_VERSION_LENGTH + 1];
Expand Down

0 comments on commit c951da4

Please sign in to comment.