* @IWL_FW_ERROR_DUMP_PRPH: range of periphery registers - there can be several
  *     sections like this in a single file.
  * @IWL_FW_ERROR_DUMP_FH_REGS: range of FH registers
- * @IWL_FW_ERROR_DUMP_SMEM:
+ * @IWL_FW_ERROR_DUMP_MEM: chunk of memory
  */
 enum iwl_fw_error_dump_type {
        IWL_FW_ERROR_DUMP_SRAM = 0,
        IWL_FW_ERROR_DUMP_PRPH = 6,
        IWL_FW_ERROR_DUMP_TXF = 7,
        IWL_FW_ERROR_DUMP_FH_REGS = 8,
-       IWL_FW_ERROR_DUMP_SMEM = 9,
+       IWL_FW_ERROR_DUMP_MEM = 9,
 
        IWL_FW_ERROR_DUMP_MAX,
 };
        __le32 data[];
 };
 
+enum iwl_fw_error_dump_mem_type {
+       IWL_FW_ERROR_DUMP_MEM_SRAM,
+       IWL_FW_ERROR_DUMP_MEM_SMEM,
+};
+
+/**
+ * struct iwl_fw_error_dump_mem - chunk of memory
+ * @type: %enum iwl_fw_error_dump_mem_type
+ * @offset: the offset from which the memory was read
+ * @data: the content of the memory
+ */
+struct iwl_fw_error_dump_mem {
+       __le32 type;
+       __le32 offset;
+       u8 data[];
+};
+
 /**
  * iwl_fw_error_next_data - advance fw error dump data pointer
  * @data: previous data block
 
 
        /* Make room for the SMEM, if it exists */
        if (smem_len)
-               file_len += sizeof(*dump_data) + smem_len;
+               file_len += sizeof(*dump_data) +
+                       sizeof(struct iwl_fw_error_dump_mem) + smem_len;
 
        dump_file = vzalloc(file_len);
        if (!dump_file) {
                                 sram_len);
 
        if (smem_len) {
+               struct iwl_fw_error_dump_mem *dump_mem;
+
                dump_data = iwl_fw_error_next_data(dump_data);
-               dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_SMEM);
-               dump_data->len = cpu_to_le32(smem_len);
+               dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_MEM);
+               dump_data->len = cpu_to_le32(smem_len + sizeof(*dump_mem));
+               dump_mem = (void *)dump_data->data;
+               dump_mem->type = cpu_to_le32(IWL_FW_ERROR_DUMP_MEM_SMEM);
+               dump_mem->offset = cpu_to_le32(mvm->cfg->smem_offset);
                iwl_trans_read_mem_bytes(mvm->trans, mvm->cfg->smem_offset,
-                                        dump_data->data, smem_len);
+                                        dump_mem->data, smem_len);
        }
 
        fw_error_dump->trans_ptr = iwl_trans_dump_data(mvm->trans);