[PATCH 2/7] Move DOWNLOAD_NV command to use hal.h
Eugene Krasnikov
k.eugene.e at gmail.com
Thu May 2 13:00:19 EDT 2013
Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
hal.h | 18 +++++++++---------
smd.c | 49 ++++++++++++++++++-------------------------------
smd.h | 11 -----------
3 files changed, 27 insertions(+), 51 deletions(-)
diff --git a/hal.h b/hal.h
index 009496e..d57faf0 100644
--- a/hal.h
+++ b/hal.h
@@ -2349,7 +2349,7 @@ struct wcn36xx_hal_stats_rsp_msg {
u16 msg_len;
};
-struct set_link_state_req_msg {
+struct wcn36xx_hal_set_link_state_req_msg {
struct wcn36xx_hal_msg_header header;
u8 bssid[ETH_ALEN];
@@ -2693,9 +2693,9 @@ struct set_key_done_msg {
};
struct wcn36xx_hal_nv_img_download_req_msg {
- /* Note: The length specified in tHalNvImgDownloadReqMsg messages
- * should be header.msgLen = sizeof(tHalNvImgDownloadReqMsg) +
- * nvImgBufferSize */
+ /* Note: The length specified in wcn36xx_hal_nv_img_download_req_msg messages
+ * should be header.len = sizeof(wcn36xx_hal_nv_img_download_req_msg) +
+ * nv_img_buffer_size */
struct wcn36xx_hal_msg_header header;
/* Fragment sequence number of the NV Image. Note that NV Image
@@ -2718,10 +2718,10 @@ struct wcn36xx_hal_nv_img_download_req_msg {
/* NV Image size (number of bytes) */
u32 nv_img_buffer_size;
- /* Following the 'nvImageBufferSize', there should be
- * nvImageBufferSize bytes of NV Image i.e.
- * u8[nvImageBufferSize] */
-};
+ /* Following the 'nv_img_buffer_size', there should be
+ * nv_img_buffer_size bytes of NV Image i.e.
+ * u8[nv_img_buffer_size] */
+} __packed;
struct wcn36xx_hal_nv_img_download_rsp_msg {
struct wcn36xx_hal_msg_header header;
@@ -2729,7 +2729,7 @@ struct wcn36xx_hal_nv_img_download_rsp_msg {
/* Success or Failure. HAL would generate a
* WCN36XX_HAL_DOWNLOAD_NV_RSP after each fragment */
u32 status;
-};
+} __packed;
struct wcn36xx_hal_nv_store_ind {
/* Note: The length specified in tHalNvStoreInd messages should be
diff --git a/smd.c b/smd.c
index 081082d..b146a1c 100644
--- a/smd.c
+++ b/smd.c
@@ -91,64 +91,51 @@ int wcn36xx_smd_rsp_status_check(void *buf, size_t len)
int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
{
struct nv_data *nv_d;
- struct wcn36xx_fw_msg_header msg_header;
- struct wcn36xx_fw_msg_nv_load_header msg_body;
+ struct wcn36xx_hal_nv_img_download_req_msg msg_body;
int fw_bytes_left;
int ret = 0, fw_size, i = 0;
-
u16 fm_offset = 0;
- u16 send_buf_offset = 0;
-
i = 0;
nv_d = (struct nv_data *)wcn->nv->data;
fw_size = wcn->nv->size;
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DOWNLOAD_NV_REQ)
- INIT_MSG(msg_header, &msg_body, WCN36XX_FW_MSG_TYPE_LOAD_NV_REQ)
- msg_header.msg_len += WCN36XX_NV_FRAGMENT_SIZE;
+ msg_body.header.len += WCN36XX_NV_FRAGMENT_SIZE;
- // First add message header
- memcpy(wcn->smd_buf, &msg_header, sizeof(msg_header));
- msg_body.frag_num = 0;
+ msg_body.frag_number = 0;
do {
- // Do not forget that we already copied general msg header
- send_buf_offset = sizeof(msg_header);
-
fw_bytes_left = wcn->nv->size - fm_offset - 4;
if (fw_bytes_left > WCN36XX_NV_FRAGMENT_SIZE) {
- msg_body.is_last = 0;
- msg_body.msg_len = WCN36XX_NV_FRAGMENT_SIZE;
+ msg_body.last_fragment = 0;
+ msg_body.nv_img_buffer_size = WCN36XX_NV_FRAGMENT_SIZE;
} else {
- msg_body.is_last = 1;
- msg_body.msg_len = fw_bytes_left;
+ msg_body.last_fragment = 1;
+ msg_body.nv_img_buffer_size = fw_bytes_left;
// Do not forget update general message len
- msg_header.msg_len = sizeof(msg_header)
- + sizeof(msg_body) + fw_bytes_left;
- memcpy(wcn->smd_buf, &msg_header, sizeof(msg_header));
+ msg_body.header.len = sizeof(msg_body) + fw_bytes_left;
+
}
// Add load NV request message header
- memcpy((void*)(wcn->smd_buf + send_buf_offset), &msg_body,
+ memcpy((void*)(wcn->smd_buf), &msg_body,
sizeof(msg_body));
- send_buf_offset += sizeof(msg_body);
-
// Add NV body itself
// Rework me
- memcpy((void*)(wcn->smd_buf + send_buf_offset),
- (void*)((void*)(&nv_d->table) + fm_offset), msg_body.msg_len);
+ memcpy((void*)(wcn->smd_buf + sizeof(msg_body)),
+ (void*)((void*)(&nv_d->table) + fm_offset), msg_body.nv_img_buffer_size);
- ret = wcn36xx_smd_send_and_wait(wcn, msg_header.msg_len);
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
if(ret) return ret;
- msg_body.frag_num++;
+ msg_body.frag_number++;
fm_offset += WCN36XX_NV_FRAGMENT_SIZE;
- } while(msg_body.is_last != 1);
+ } while(msg_body.last_fragment != 1);
return ret;
-
}
int wcn36xx_smd_start(struct wcn36xx *wcn)
@@ -310,7 +297,7 @@ int wcn36xx_smd_join(struct wcn36xx *wcn, u8 *bssid, u8 *vif, u8 ch)
}
int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, u8 *bssid, u8 *sta_mac, enum wcn36xx_hal_link_state state)
{
- struct set_link_state_req_msg msg_body;
+ struct wcn36xx_hal_set_link_state_req_msg msg_body;
INIT_HAL_MSG(msg_body, WCN36XX_HAL_SET_LINK_ST_REQ)
@@ -526,7 +513,7 @@ static void wcn36xx_smd_rsp_process (void *buf, size_t len)
case WCN36XX_HAL_START_SCAN_RSP:
case WCN36XX_HAL_END_SCAN_RSP:
case WCN36XX_HAL_FINISH_SCAN_RSP:
- case WCN36XX_FW_MSG_TYPE_LOAD_NV_RSP:
+ case WCN36XX_HAL_DOWNLOAD_NV_RSP:
case WCN36XX_FW_MSG_TYPE_ENTER_IMPS_RSP:
case WCN36XX_FW_MSG_TYPE_EXIT_IMPS_RSP:
case WCN36XX_FW_MSG_TYPE_CONFIG_BSS_RSP:
diff --git a/smd.h b/smd.h
index f1fdf89..55ba413 100644
--- a/smd.h
+++ b/smd.h
@@ -39,9 +39,6 @@ enum wcn36xx_fw_msg_type {
WCN36XX_FW_MSG_TYPE_UPDATE_CFG_REQ = 48,
WCN36XX_FW_MSG_TYPE_UPDATE_CFG_RSP = 49,
- WCN36XX_FW_MSG_TYPE_LOAD_NV_REQ = 55,
- WCN36XX_FW_MSG_TYPE_LOAD_NV_RSP = 56,
-
WCN36XX_FW_MSG_TYPE_SEND_BEACON_REQ = 63,
WCN36XX_FW_MSG_TYPE_SEND_BEACON_RSP = 64,
@@ -112,18 +109,10 @@ struct wcn36xx_fw_msg_status_rsp {
u32 status;
} __packed;
-#define wcn36xx_fw_msg_nv_load_rsp wcn36xx_fw_msg_status_rsp
#define wcn36xx_fw_msg_enter_imps_rsp wcn36xx_fw_msg_status_rsp
#define wcn36xx_fw_msg_exit_imps_rsp wcn36xx_fw_msg_status_rsp
#define wcn36xx_fw_msg_ex_caps_rsp wcn36xx_fw_msg_ex_caps_req
-/* WCN36XX_FW_MSG_TYPE_LOAD_NV_REQ */
-struct wcn36xx_fw_msg_nv_load_header {
- u16 frag_num;
- u16 is_last;
- u32 msg_len;
-} __packed;
-
/* WCN36XX_FW_MSG_TYPE_UPDATE_CFG_REQ */
struct wcn36xx_fw_msg_update_cfg_req {
u32 conf_len;
--
1.7.11.3
More information about the wcn36xx
mailing list