mwifiex: save driver information to file when firmware dump
authorXinming Hu <huxm@marvell.com>
Tue, 23 Dec 2014 13:44:10 +0000 (19:14 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 6 Jan 2015 18:54:25 +0000 (20:54 +0200)
This patch adds support to dump driver information to a file
when firmware dump happens. This information can be used to
root casue FW crash.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Cathy Luo <cluo@marvell.com>
Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mwifiex/ethtool.c
drivers/net/wireless/mwifiex/init.c
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwifiex/main.h
drivers/net/wireless/mwifiex/sdio.c

index 04e56b5..65d8d6d 100644 (file)
@@ -76,7 +76,9 @@ mwifiex_get_dump_flag(struct net_device *dev, struct ethtool_dump *dump)
 
        dump->flag = adapter->curr_mem_idx;
        dump->version = 1;
-       if (adapter->curr_mem_idx != MWIFIEX_FW_DUMP_IDX) {
+       if (adapter->curr_mem_idx == MWIFIEX_DRV_INFO_IDX) {
+               dump->len = adapter->drv_info_size;
+       } else if (adapter->curr_mem_idx != MWIFIEX_FW_DUMP_IDX) {
                entry = &adapter->mem_type_mapping_tbl[adapter->curr_mem_idx];
                dump->len = entry->mem_size;
        } else {
@@ -98,6 +100,13 @@ mwifiex_get_dump_data(struct net_device *dev, struct ethtool_dump *dump,
        if (!adapter->if_ops.fw_dump)
                return -ENOTSUPP;
 
+       if (adapter->curr_mem_idx == MWIFIEX_DRV_INFO_IDX) {
+               if (!adapter->drv_info_dump)
+                       return -EFAULT;
+               memcpy(p, adapter->drv_info_dump, adapter->drv_info_size);
+               return 0;
+       }
+
        if (adapter->curr_mem_idx == MWIFIEX_FW_DUMP_IDX) {
                dev_err(adapter->dev, "firmware dump in progress!!\n");
                return -EBUSY;
@@ -125,6 +134,11 @@ static int mwifiex_set_dump(struct net_device *dev, struct ethtool_dump *val)
        if (!adapter->if_ops.fw_dump)
                return -ENOTSUPP;
 
+       if (val->flag == MWIFIEX_DRV_INFO_IDX) {
+               adapter->curr_mem_idx = MWIFIEX_DRV_INFO_IDX;
+               return 0;
+       }
+
        if (adapter->curr_mem_idx == MWIFIEX_FW_DUMP_IDX) {
                dev_err(adapter->dev, "firmware dump in progress!!\n");
                return -EBUSY;
Simple merge
Simple merge
Simple merge
Simple merge