[PATCH] Add the DUMP command interface which can be used contro the FW action
YanBo
dreamfly281 at gmail.com
Sun Jul 7 10:47:10 EDT 2013
On Thu, Jul 4, 2013 at 2:29 PM, Eugene Krasnikov <k.eugene.e at gmail.com> wrote:
> What is the total amount of patches you sent out? Is it 3? It's better
> to send patches as a patch set so we know in which order to review
> them. Just use something like "git format-patch -3 <sha1> <sha2>
> <sha3>".
Will resend them in this way after fixing the issue existed
>
> 2013/7/4 YanBo <dreamfly281 at gmail.com>:
>> On Thu, Jul 4, 2013 at 2:11 AM, Eugene Krasnikov <k.eugene.e at gmail.com> wrote:
>>> This patch is not on top of current master branch so it is rather
>>> difficult to review. Could you please rebase the patch and resend it?
>>
>> Hmm, this patch is regenerated based on the master branch,
>> but it based on the previous patches I have sent"Add the debug
>> filesystem framework".
>>
>>> Also i would appreciate if you send a pull request so that makes
>>> review process even more easier.
>> it OK if that can helpful for review.
>>
>>>
>>> 2013/7/3 <dreamfly281 at gmail.com>:
>>>> From: Yanbo Li <yanbol at qti.qualcomm.com>
>>>>
>>>> The DUMP command can be used to control lots of FW action, currently we
>>>> only use it to dynamic turn on/off some FW module's debug level to get
>>>> more debug info from QXDM. IE;
>>>>
>>>> echo 13 6 3 1 means open all CXM module log
>>>>
>>>> Signed-off-by: Yanbo Li <yanbol at qti.qualcomm.com>
>>>> ---
>>>> debug.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>>>> debug.h | 3 +++
>>>> hal.h | 10 +++++-----
>>>> smd.c | 20 ++++++++++++++++++++
>>>> smd.h | 3 +++
>>>> 5 files changed, 73 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/debug.c b/debug.c
>>>> index edd5a02..352115a 100644
>>>> --- a/debug.c
>>>> +++ b/debug.c
>>>> @@ -79,6 +79,46 @@ static const struct file_operations fops_wcn36xx_bmps = {
>>>> .write = write_file_bool_bmps,
>>>> };
>>>>
>>>> +static ssize_t write_file_bool_dump(struct file *file,
>>>> + const char __user *user_buf,
>>>> + size_t count, loff_t *ppos)
>>>> +{
>>>> + struct wcn36xx *wcn = file->private_data;
>>>> + char buf[255], *tmp;
>>>> + int buf_size;
>>>> + u32 arg[WCN36xx_MAX_DUMP_ARGS];
>>>> + int i;
>>>> +
>>>> + memset(buf, 0, sizeof(buf));
>>>> + memset(arg, 0, sizeof(arg));
>>>> +
>>>> + buf_size = min(count, (sizeof(buf) - 1));
>>>> + if (copy_from_user(buf, user_buf, buf_size))
>>>> + return -EFAULT;
>>>> +
>>>> + tmp = buf;
>>>> + for (i = 0; i < WCN36xx_MAX_DUMP_ARGS; i++) {
>>>> + char *begin;
>>>> + begin = strsep(&tmp, " ");
>>>> + if (begin == NULL)
>>>> + break;
>>>> +
>>>> + if (kstrtoul(begin, 0, (unsigned long *)(arg + i)) != 0)
>>>> + break;
>>>> + }
>>>> +
>>>> + wcn36xx_info("DUMP args is %d %d %d %d %d\n", arg[0], arg[1], arg[2],
>>>> + arg[3], arg[4]);
>>>> + wcn36xx_smd_dump_cmd_req(wcn, arg[0], arg[1], arg[2], arg[3], arg[4]);
>>>> +
>>>> + return count;
>>>> +}
>>>> +
>>>> +static const struct file_operations fops_wcn36xx_dump = {
>>>> + .open = wcn36xx_debugfs_open,
>>>> + .write = write_file_bool_dump,
>>>> +};
>>>> +
>>>> #define ADD_FILE_BOOL(name, mode, fop, priv_data) \
>>>> do { \
>>>> struct dentry *d; \
>>>> @@ -103,12 +143,14 @@ void wcn36xx_debugfs_init(struct wcn36xx *wcn)
>>>> dfs->rootdir = NULL;
>>>> }
>>>> ADD_FILE_BOOL(bmps_switcher, 0600, &fops_wcn36xx_bmps, wcn);
>>>> + ADD_FILE_BOOL(dump, 0200, &fops_wcn36xx_dump, wcn);
>>>> }
>>>>
>>>> void wcn36xx_debugfs_exit(struct wcn36xx *wcn)
>>>> {
>>>> struct wcn36xx_dfs_entry *dfs = &wcn->dfs;
>>>>
>>>> + debugfs_remove(dfs->file_dump.dentry);
>>>> debugfs_remove(dfs->file_bmps_switcher.dentry);
>>>> debugfs_remove(dfs->rootdir);
>>>> }
>>>> diff --git a/debug.h b/debug.h
>>>> index 8afb673..5bafc7e 100644
>>>> --- a/debug.h
>>>> +++ b/debug.h
>>>> @@ -24,6 +24,8 @@
>>>>
>>>> #include <linux/kernel.h>
>>>>
>>>> +#define WCN36xx_MAX_DUMP_ARGS 5
>>>> +
>>>> struct wcn36xx_dfs_file {
>>>> struct dentry *dentry;
>>>> u32 value;
>>>> @@ -32,6 +34,7 @@ struct wcn36xx_dfs_file {
>>>> struct wcn36xx_dfs_entry {
>>>> struct dentry *rootdir;
>>>> struct wcn36xx_dfs_file file_bmps_switcher;
>>>> + struct wcn36xx_dfs_file file_dump;
>>>> };
>>>>
>>>> void wcn36xx_debugfs_init(struct wcn36xx *wcn);
>>>> diff --git a/hal.h b/hal.h
>>>> index 83b9f49..b6a7b26 100644
>>>> --- a/hal.h
>>>> +++ b/hal.h
>>>> @@ -3597,11 +3597,11 @@ struct wcn36xx_hal_configure_apps_cpu_wakeup_state_rsp_msg {
>>>> struct wcn36xx_hal_dump_cmd_req_msg {
>>>> struct wcn36xx_hal_msg_header header;
>>>>
>>>> - u32 argument1;
>>>> - u32 argument2;
>>>> - u32 argument3;
>>>> - u32 argument4;
>>>> - u32 argument5;
>>>> + u32 arg1;
>>>> + u32 arg2;
>>>> + u32 arg3;
>>>> + u32 arg4;
>>>> + u32 arg5;
>>>> };
>>>>
>>>> struct wcn36xx_hal_dump_cmd_rsp_msg {
>>>> diff --git a/smd.c b/smd.c
>>>> index ce09563..8d8cb0a 100644
>>>> --- a/smd.c
>>>> +++ b/smd.c
>>>> @@ -1048,6 +1048,25 @@ int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn)
>>>>
>>>> return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
>>>> }
>>>> +
>>>> +int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
>>>> + u32 arg3, u32 arg4, u32 arg5)
>>>> +{
>>>> + struct wcn36xx_hal_dump_cmd_req_msg msg_body;
>>>> +
>>>> + INIT_HAL_MSG(msg_body, WCN36XX_HAL_DUMP_COMMAND_REQ);
>>>> +
>>>> + msg_body.arg1 = arg1;
>>>> + msg_body.arg2 = arg2;
>>>> + msg_body.arg3 = arg3;
>>>> + msg_body.arg4 = arg4;
>>>> + msg_body.arg5 = arg5;
>>>> +
>>>> + PREPARE_HAL_BUF(wcn->smd_buf, msg_body);
>>>> +
>>>> + return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
>>>> +}
>>>> +
>>>> static void wcn36xx_smd_notify(void *data, unsigned event)
>>>> {
>>>> struct wcn36xx *wcn = (struct wcn36xx *)data;
>>>> @@ -1146,6 +1165,7 @@ static void wcn36xx_smd_rsp_process(struct wcn36xx *wcn, void *buf, size_t len)
>>>> case WCN36XX_HAL_RMV_BSSKEY_RSP:
>>>> case WCN36XX_HAL_ENTER_BMPS_RSP:
>>>> case WCN36XX_HAL_EXIT_BMPS_RSP:
>>>> + case WCN36XX_HAL_DUMP_COMMAND_RSP:
>>>> if (wcn36xx_smd_rsp_status_check(buf, len)) {
>>>> wcn36xx_warn("error response from hal request %d",
>>>> msg_header->msg_type);
>>>> diff --git a/smd.h b/smd.h
>>>> index ad7a31f..fc5c684 100644
>>>> --- a/smd.h
>>>> +++ b/smd.h
>>>> @@ -90,6 +90,9 @@ int wcn36xx_smd_remove_bsskey(struct wcn36xx *wcn,
>>>> int wcn36xx_smd_enter_bmps(struct wcn36xx *wcn, u64 tbtt);
>>>> int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn);
>>>>
>>>> +int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
>>>> + u32 arg3, u32 arg4, u32 arg5);
>>>> +
>>>> /* WCN36XX configuration parameters */
>>>> struct wcn36xx_fw_cfg {
>>>> u16 id;
>>>> --
>>>> 1.7.9.5
>>>>
>>>>
>>>> _______________________________________________
>>>> wcn36xx mailing list
>>>> wcn36xx at lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/wcn36xx
>>>
>>>
>>>
>>> --
>>> Best regards,
>>> Eugene
>
>
>
> --
> Best regards,
> Eugene
More information about the wcn36xx
mailing list