[PATCH]Remove the PNO verion bit from the update scan param response to get the correcly response status
YanBo
dreamfly281 at gmail.com
Thu May 23 11:48:28 EDT 2013
The update scan param status always report error cause it contain the PNO mark,
remove it to get the correctly response status
Signed-off-by: Yanbo Li <yanbol at qti.qualcomm.com>
---
smd.c | 35 ++++++++++++++++++++++-------------
smd.h | 4 +++-
2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/smd.c b/smd.c
index af38dcc..460b2da 100644
--- a/smd.c
+++ b/smd.c
@@ -74,6 +74,24 @@ static int wcn36xx_smd_rsp_status_check(void *buf,
size_t len)
return 0;
}
+int wcn36xx_smd_rsp_update_scan_param_status_check(void *buf, size_t len)
+{
+ struct wcn36xx_fw_msg_status_rsp * rsp;
+ if (len < sizeof(struct wcn36xx_hal_msg_header) +
+ sizeof(struct wcn36xx_fw_msg_status_rsp))
+ return -EIO;
+ rsp = (struct wcn36xx_fw_msg_status_rsp *)
+ (buf + sizeof(struct wcn36xx_hal_msg_header));
+
+ /* Remove the PNO version bit */
+ rsp->status &= (~(WCN36XX_FW_MSG_PNO_VERSION_MASK));
+
+ if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status) {
+ return -EIO;
+ }
+ return 0;
+}
+
int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
{
struct nv_data *nv_d;
@@ -298,18 +316,6 @@ int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn){
return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
}
-static int wcn36xx_smd_update_scan_params_rsp(void *buf, size_t len)
-{
- struct wcn36xx_hal_update_scan_params_resp * rsp;
-
- rsp = (struct wcn36xx_hal_update_scan_params_resp *)buf;
-
- wcn36xx_dbg(WCN36XX_DBG_HAL,
- "hal rsp update scan params status %d",
- rsp->status);
-
- return 0;
-}
int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, u8 *addr, u32 status)
{
@@ -901,7 +907,10 @@ static void wcn36xx_smd_rsp_process(struct
wcn36xx *wcn, void *buf, si
ze_t len)
wcn36xx_smd_join_rsp(buf, len);
break;
case WCN36XX_HAL_UPDATE_SCAN_PARAM_RSP:
- wcn36xx_smd_update_scan_params_rsp(buf, len);
+ if(wcn36xx_smd_rsp_update_scan_param_status_check(buf, len)) {
+ wcn36xx_warn("error response from hal request %d",
+ msg_header->msg_type);
+ }
break;
case WCN36XX_HAL_CH_SWITCH_RSP:
wcn36xx_smd_switch_channel_rsp(buf,len);
diff --git a/smd.h b/smd.h
index 47a6645..9703e19 100644
--- a/smd.h
+++ b/smd.h
@@ -27,6 +27,9 @@
#define SMD_MSG_TIMEOUT 200
#define WCN36XX_SMSM_WLAN_TX_ENABLE 0x00000400
#define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200
+/* The PNO version info be contained in the rsp msg */
+#define WCN36XX_FW_MSG_PNO_VERSION_MASK 0X8000
+
enum wcn36xx_fw_msg_result {
WCN36XX_FW_MSG_RESULT_SUCCESS = 0,
@@ -54,7 +57,6 @@ int wcn36xx_smd_init_scan(struct wcn36xx *wcn);
int wcn36xx_smd_start_scan(struct wcn36xx *wcn, int ch);
int wcn36xx_smd_end_scan(struct wcn36xx *wcn, int ch);
int wcn36xx_smd_finish_scan(struct wcn36xx *wcn);
-int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn);
int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, u8 *addr, u32 status);
int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr);
int wcn36xx_smd_delete_sta(struct wcn36xx *wcn);
--
1.7.9.5
yanbo at buildingX:/var/tmp/output/drivers/net/wireless/ath/wcn36xx$
emacs 0001-Remove-the-PNO
-verion-bit-from-the-update-scan-param.patch -nw
[-] = =0001-Remove-the-PNO-verion-bit-from-the-update-scan-param.patch--------------------------------------------------------------------------------------------------
int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, u8 *addr, u32 status)
{
@@ -901,7 +907,10 @@ static void wcn36xx_smd_rsp_process(struct
wcn36xx *wcn, void *buf, size_t len)
wcn36xx_smd_join_rsp(buf, len);
break;
case WCN36XX_HAL_UPDATE_SCAN_PARAM_RSP:
- wcn36xx_smd_update_scan_params_rsp(buf, len);
+ if(wcn36xx_smd_rsp_update_scan_param_status_check(buf, len)) {
+ wcn36xx_warn("error response from hal request %d",
+ msg_header->msg_type);
+ }
break;
case WCN36XX_HAL_CH_SWITCH_RSP:
wcn36xx_smd_switch_channel_rsp(buf,len);
diff --git a/smd.h b/smd.h
index 47a6645..9703e19 100644
--- a/smd.h
+++ b/smd.h
@@ -27,6 +27,9 @@
#define SMD_MSG_TIMEOUT 200
#define WCN36XX_SMSM_WLAN_TX_ENABLE 0x00000400
#define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200
+/* The PNO version info be contained in the rsp msg */
+#define WCN36XX_FW_MSG_PNO_VERSION_MASK 0X8000
+
enum wcn36xx_fw_msg_result {
WCN36XX_FW_MSG_RESULT_SUCCESS = 0,
@@ -54,7 +57,6 @@ int wcn36xx_smd_init_scan(struct wcn36xx *wcn);
int wcn36xx_smd_start_scan(struct wcn36xx *wcn, int ch);
int wcn36xx_smd_end_scan(struct wcn36xx *wcn, int ch);
int wcn36xx_smd_finish_scan(struct wcn36xx *wcn);
-int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn);
int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, u8 *addr, u32 status);
int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr);
int wcn36xx_smd_delete_sta(struct wcn36xx *wcn);
--
1.7.9.5
More information about the wcn36xx
mailing list