Loading drivers/net/wireless/cnss2/main.h +17 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #define RECOVERY_TIMEOUT 60000 #define WLAN_WD_TIMEOUT_MS 60000 #define TIME_CLOCK_FREQ_HZ 19200000 #define CNSS_RAMDUMP_MAGIC 0x574C414E #define CNSS_RAMDUMP_VERSION 0 #define CNSS_EVENT_SYNC BIT(0) #define CNSS_EVENT_UNINTERRUPTIBLE BIT(1) Loading Loading @@ -167,6 +169,21 @@ enum cnss_fw_dump_type { CNSS_FW_IMAGE, CNSS_FW_RDDM, CNSS_FW_REMOTE_HEAP, CNSS_FW_DUMP_TYPE_MAX, }; struct cnss_dump_entry { u32 type; u32 entry_start; u32 entry_num; }; struct cnss_dump_meta_info { u32 magic; u32 version; u32 chipset; u32 total_entries; struct cnss_dump_entry entry[CNSS_FW_DUMP_TYPE_MAX]; }; enum cnss_driver_event_type { Loading drivers/net/wireless/cnss2/pci.c +24 −3 Original line number Diff line number Diff line Loading @@ -1881,20 +1881,33 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv) struct cnss_dump_data *dump_data = &info_v2->dump_data; struct cnss_dump_seg *dump_seg = info_v2->dump_data_vaddr; struct ramdump_segment *ramdump_segs, *s; struct cnss_dump_meta_info meta_info = {0}; int i, ret = 0; if (!info_v2->dump_data_valid || dump_data->nentries == 0) return 0; ramdump_segs = kcalloc(dump_data->nentries, ramdump_segs = kcalloc(dump_data->nentries + 1, sizeof(*ramdump_segs), GFP_KERNEL); if (!ramdump_segs) return -ENOMEM; s = ramdump_segs; s = ramdump_segs + 1; for (i = 0; i < dump_data->nentries; i++) { if (dump_seg->type >= CNSS_FW_DUMP_TYPE_MAX) { cnss_pr_err("Unsupported dump type: %d", dump_seg->type); continue; } if (meta_info.entry[dump_seg->type].entry_start == 0) { meta_info.entry[dump_seg->type].type = dump_seg->type; meta_info.entry[dump_seg->type].entry_start = i + 1; } meta_info.entry[dump_seg->type].entry_num++; s->address = dump_seg->address; s->v_address = dump_seg->v_address; s->size = dump_seg->size; Loading @@ -1902,8 +1915,16 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv) dump_seg++; } meta_info.magic = CNSS_RAMDUMP_MAGIC; meta_info.version = CNSS_RAMDUMP_VERSION; meta_info.chipset = pci_priv->device_id; meta_info.total_entries = CNSS_FW_DUMP_TYPE_MAX; ramdump_segs->v_address = &meta_info; ramdump_segs->size = sizeof(meta_info); ret = do_elf_ramdump(info_v2->ramdump_dev, ramdump_segs, dump_data->nentries); dump_data->nentries + 1); kfree(ramdump_segs); cnss_pci_clear_dump_info(pci_priv); Loading Loading
drivers/net/wireless/cnss2/main.h +17 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #define RECOVERY_TIMEOUT 60000 #define WLAN_WD_TIMEOUT_MS 60000 #define TIME_CLOCK_FREQ_HZ 19200000 #define CNSS_RAMDUMP_MAGIC 0x574C414E #define CNSS_RAMDUMP_VERSION 0 #define CNSS_EVENT_SYNC BIT(0) #define CNSS_EVENT_UNINTERRUPTIBLE BIT(1) Loading Loading @@ -167,6 +169,21 @@ enum cnss_fw_dump_type { CNSS_FW_IMAGE, CNSS_FW_RDDM, CNSS_FW_REMOTE_HEAP, CNSS_FW_DUMP_TYPE_MAX, }; struct cnss_dump_entry { u32 type; u32 entry_start; u32 entry_num; }; struct cnss_dump_meta_info { u32 magic; u32 version; u32 chipset; u32 total_entries; struct cnss_dump_entry entry[CNSS_FW_DUMP_TYPE_MAX]; }; enum cnss_driver_event_type { Loading
drivers/net/wireless/cnss2/pci.c +24 −3 Original line number Diff line number Diff line Loading @@ -1881,20 +1881,33 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv) struct cnss_dump_data *dump_data = &info_v2->dump_data; struct cnss_dump_seg *dump_seg = info_v2->dump_data_vaddr; struct ramdump_segment *ramdump_segs, *s; struct cnss_dump_meta_info meta_info = {0}; int i, ret = 0; if (!info_v2->dump_data_valid || dump_data->nentries == 0) return 0; ramdump_segs = kcalloc(dump_data->nentries, ramdump_segs = kcalloc(dump_data->nentries + 1, sizeof(*ramdump_segs), GFP_KERNEL); if (!ramdump_segs) return -ENOMEM; s = ramdump_segs; s = ramdump_segs + 1; for (i = 0; i < dump_data->nentries; i++) { if (dump_seg->type >= CNSS_FW_DUMP_TYPE_MAX) { cnss_pr_err("Unsupported dump type: %d", dump_seg->type); continue; } if (meta_info.entry[dump_seg->type].entry_start == 0) { meta_info.entry[dump_seg->type].type = dump_seg->type; meta_info.entry[dump_seg->type].entry_start = i + 1; } meta_info.entry[dump_seg->type].entry_num++; s->address = dump_seg->address; s->v_address = dump_seg->v_address; s->size = dump_seg->size; Loading @@ -1902,8 +1915,16 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv) dump_seg++; } meta_info.magic = CNSS_RAMDUMP_MAGIC; meta_info.version = CNSS_RAMDUMP_VERSION; meta_info.chipset = pci_priv->device_id; meta_info.total_entries = CNSS_FW_DUMP_TYPE_MAX; ramdump_segs->v_address = &meta_info; ramdump_segs->size = sizeof(meta_info); ret = do_elf_ramdump(info_v2->ramdump_dev, ramdump_segs, dump_data->nentries); dump_data->nentries + 1); kfree(ramdump_segs); cnss_pci_clear_dump_info(pci_priv); Loading