mirror of https://gitee.com/openkylin/linux.git
wcn36xx: Implement print_reg indication
Some firmware versions sends a "print register indication", handle this by printing out the content. Cc: Nicolas Dechesne <ndec@linaro.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
886039036c
commit
43efa3c0f2
|
@ -350,6 +350,8 @@ enum wcn36xx_hal_host_msg_type {
|
||||||
|
|
||||||
WCN36XX_HAL_AVOID_FREQ_RANGE_IND = 233,
|
WCN36XX_HAL_AVOID_FREQ_RANGE_IND = 233,
|
||||||
|
|
||||||
|
WCN36XX_HAL_PRINT_REG_INFO_IND = 259,
|
||||||
|
|
||||||
WCN36XX_HAL_MSG_MAX = WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE
|
WCN36XX_HAL_MSG_MAX = WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4703,4 +4705,18 @@ struct stats_class_b_ind {
|
||||||
u32 rx_time_total;
|
u32 rx_time_total;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* WCN36XX_HAL_PRINT_REG_INFO_IND */
|
||||||
|
struct wcn36xx_hal_print_reg_info_ind {
|
||||||
|
struct wcn36xx_hal_msg_header header;
|
||||||
|
|
||||||
|
u32 count;
|
||||||
|
u32 scenario;
|
||||||
|
u32 reason;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
u32 addr;
|
||||||
|
u32 value;
|
||||||
|
} regs[];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
#endif /* _HAL_H_ */
|
#endif /* _HAL_H_ */
|
||||||
|
|
|
@ -2109,6 +2109,30 @@ static int wcn36xx_smd_delete_sta_context_ind(struct wcn36xx *wcn,
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wcn36xx_smd_print_reg_info_ind(struct wcn36xx *wcn,
|
||||||
|
void *buf,
|
||||||
|
size_t len)
|
||||||
|
{
|
||||||
|
struct wcn36xx_hal_print_reg_info_ind *rsp = buf;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (len < sizeof(*rsp)) {
|
||||||
|
wcn36xx_warn("Corrupted print reg info indication\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
wcn36xx_dbg(WCN36XX_DBG_HAL,
|
||||||
|
"reginfo indication, scenario: 0x%x reason: 0x%x\n",
|
||||||
|
rsp->scenario, rsp->reason);
|
||||||
|
|
||||||
|
for (i = 0; i < rsp->count; i++) {
|
||||||
|
wcn36xx_dbg(WCN36XX_DBG_HAL, "\t0x%x: 0x%x\n",
|
||||||
|
rsp->regs[i].addr, rsp->regs[i].value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value)
|
int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value)
|
||||||
{
|
{
|
||||||
struct wcn36xx_hal_update_cfg_req_msg msg_body, *body;
|
struct wcn36xx_hal_update_cfg_req_msg msg_body, *body;
|
||||||
|
@ -2237,6 +2261,7 @@ int wcn36xx_smd_rsp_process(struct qcom_smd_channel *channel,
|
||||||
case WCN36XX_HAL_OTA_TX_COMPL_IND:
|
case WCN36XX_HAL_OTA_TX_COMPL_IND:
|
||||||
case WCN36XX_HAL_MISSED_BEACON_IND:
|
case WCN36XX_HAL_MISSED_BEACON_IND:
|
||||||
case WCN36XX_HAL_DELETE_STA_CONTEXT_IND:
|
case WCN36XX_HAL_DELETE_STA_CONTEXT_IND:
|
||||||
|
case WCN36XX_HAL_PRINT_REG_INFO_IND:
|
||||||
msg_ind = kmalloc(sizeof(*msg_ind) + len, GFP_ATOMIC);
|
msg_ind = kmalloc(sizeof(*msg_ind) + len, GFP_ATOMIC);
|
||||||
if (!msg_ind) {
|
if (!msg_ind) {
|
||||||
wcn36xx_err("Run out of memory while handling SMD_EVENT (%d)\n",
|
wcn36xx_err("Run out of memory while handling SMD_EVENT (%d)\n",
|
||||||
|
@ -2296,6 +2321,11 @@ static void wcn36xx_ind_smd_work(struct work_struct *work)
|
||||||
hal_ind_msg->msg,
|
hal_ind_msg->msg,
|
||||||
hal_ind_msg->msg_len);
|
hal_ind_msg->msg_len);
|
||||||
break;
|
break;
|
||||||
|
case WCN36XX_HAL_PRINT_REG_INFO_IND:
|
||||||
|
wcn36xx_smd_print_reg_info_ind(wcn,
|
||||||
|
hal_ind_msg->msg,
|
||||||
|
hal_ind_msg->msg_len);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
wcn36xx_err("SMD_EVENT (%d) not supported\n",
|
wcn36xx_err("SMD_EVENT (%d) not supported\n",
|
||||||
msg_header->msg_type);
|
msg_header->msg_type);
|
||||||
|
|
Loading…
Reference in New Issue