Commit 677d25b2 authored by Shahar S Matityahu's avatar Shahar S Matityahu Committed by Luca Coelho

iwlwifi: dbg_ini: use new API in dump info

Make dump info region use new API.
debug_info_tlv_list list will be initialize in a future patch once the
driver will start using it.
Signed-off-by: default avatarShahar S Matityahu <shahar.s.matityahu@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent a77e3d28
...@@ -60,6 +60,8 @@ ...@@ -60,6 +60,8 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#define IWL_FW_INI_MAX_CFG_NAME 64
/** /**
* struct iwl_fw_ini_header: Common Header for all debug group TLV's structures * struct iwl_fw_ini_header: Common Header for all debug group TLV's structures
* *
...@@ -294,6 +296,21 @@ struct iwl_fw_ini_region_tlv { ...@@ -294,6 +296,21 @@ struct iwl_fw_ini_region_tlv {
__le32 addrs[]; __le32 addrs[];
} __packed; /* FW_TLV_DEBUG_REGION_API_S_VER_1 */ } __packed; /* FW_TLV_DEBUG_REGION_API_S_VER_1 */
/**
* struct iwl_fw_ini_debug_info_tlv
*
* debug configuration name for a specific image
*
* @hdr: debug header
* @image_type: image type
* @debug_cfg_name: debug configuration name
*/
struct iwl_fw_ini_debug_info_tlv {
struct iwl_fw_ini_header hdr;
__le32 image_type;
u8 debug_cfg_name[IWL_FW_INI_MAX_CFG_NAME];
} __packed; /* FW_TLV_DEBUG_INFO_API_S_VER_1 */
/** /**
* struct iwl_fw_ini_trigger * struct iwl_fw_ini_trigger
* *
...@@ -380,28 +397,6 @@ struct iwl_fw_ini_trigger_tlv { ...@@ -380,28 +397,6 @@ struct iwl_fw_ini_trigger_tlv {
__le32 data[]; __le32 data[];
} __packed; /* FW_TLV_DEBUG_TRIGGER_API_S_VER_1 */ } __packed; /* FW_TLV_DEBUG_TRIGGER_API_S_VER_1 */
#define IWL_FW_INI_MAX_IMG_NAME_LEN 32
#define IWL_FW_INI_MAX_DBG_CFG_NAME_LEN 64
/**
* struct iwl_fw_ini_debug_info_tlv - (IWL_UCODE_TLV_TYPE_DEBUG_INFO)
*
* holds image name and debug configuration name
*
* @header: header
* @img_name_len: length of the image name string
* @img_name: image name string
* @dbg_cfg_name_len : length of the debug configuration name string
* @dbg_cfg_name: debug configuration name string
*/
struct iwl_fw_ini_debug_info_tlv {
struct iwl_fw_ini_header header;
__le32 img_name_len;
u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN];
__le32 dbg_cfg_name_len;
u8 dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
} __packed; /* FW_DEBUG_TLV_INFO_API_S_VER_1 */
/** /**
* enum iwl_fw_ini_trigger_id * enum iwl_fw_ini_trigger_id
* *
......
...@@ -1864,7 +1864,15 @@ static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt, ...@@ -1864,7 +1864,15 @@ static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt,
struct iwl_fw_ini_dump_entry *entry; struct iwl_fw_ini_dump_entry *entry;
struct iwl_fw_error_dump_data *tlv; struct iwl_fw_error_dump_data *tlv;
struct iwl_fw_ini_dump_info *dump; struct iwl_fw_ini_dump_info *dump;
struct iwl_dbg_tlv_node *node;
struct iwl_fw_ini_dump_cfg_name *cfg_name;
u32 size = sizeof(*tlv) + sizeof(*dump); u32 size = sizeof(*tlv) + sizeof(*dump);
u32 num_of_cfg_names = 0;
list_for_each_entry(node, &fwrt->trans->dbg.debug_info_tlv_list, list) {
size += sizeof(*cfg_name);
num_of_cfg_names++;
}
entry = kmalloc(sizeof(*entry) + size, GFP_KERNEL); entry = kmalloc(sizeof(*entry) + size, GFP_KERNEL);
if (!entry) if (!entry)
...@@ -1901,10 +1909,27 @@ static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt, ...@@ -1901,10 +1909,27 @@ static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt,
dump->umac_major = cpu_to_le32(fwrt->dump.fw_ver.umac_major); dump->umac_major = cpu_to_le32(fwrt->dump.fw_ver.umac_major);
dump->umac_minor = cpu_to_le32(fwrt->dump.fw_ver.umac_minor); dump->umac_minor = cpu_to_le32(fwrt->dump.fw_ver.umac_minor);
dump->fw_mon_mode = cpu_to_le32(fwrt->trans->dbg.ini_dest);
dump->regions_mask = trigger->regions_mask;
dump->build_tag_len = cpu_to_le32(sizeof(dump->build_tag)); dump->build_tag_len = cpu_to_le32(sizeof(dump->build_tag));
memcpy(dump->build_tag, fwrt->fw->human_readable, memcpy(dump->build_tag, fwrt->fw->human_readable,
sizeof(dump->build_tag)); sizeof(dump->build_tag));
cfg_name = dump->cfg_names;
dump->num_of_cfg_names = cpu_to_le32(num_of_cfg_names);
list_for_each_entry(node, &fwrt->trans->dbg.debug_info_tlv_list, list) {
struct iwl_fw_ini_debug_info_tlv *debug_info =
(void *)node->tlv.data;
cfg_name->image_type = debug_info->image_type;
cfg_name->cfg_name_len =
cpu_to_le32(IWL_FW_INI_MAX_CFG_NAME);
memcpy(cfg_name->cfg_name, debug_info->debug_cfg_name,
sizeof(cfg_name->cfg_name));
cfg_name++;
}
/* add dump info TLV to the beginning of the list since it needs to be /* add dump info TLV to the beginning of the list since it needs to be
* the first TLV in the dump * the first TLV in the dump
*/ */
......
...@@ -379,6 +379,18 @@ struct iwl_fw_ini_error_dump_register { ...@@ -379,6 +379,18 @@ struct iwl_fw_ini_error_dump_register {
__le32 data; __le32 data;
} __packed; } __packed;
/**
* struct iwl_fw_ini_dump_cfg_name - configuration name
* @image_type: image type the configuration is related to
* @cfg_name_len: length of the configuration name
* @cfg_name: name of the configuraiton
*/
struct iwl_fw_ini_dump_cfg_name {
__le32 image_type;
__le32 cfg_name_len;
u8 cfg_name[IWL_FW_INI_MAX_CFG_NAME];
} __packed;
/* struct iwl_fw_ini_dump_info - ini dump information /* struct iwl_fw_ini_dump_info - ini dump information
* @version: dump version * @version: dump version
* @time_point: time point that caused the dump collection * @time_point: time point that caused the dump collection
...@@ -396,16 +408,12 @@ struct iwl_fw_ini_error_dump_register { ...@@ -396,16 +408,12 @@ struct iwl_fw_ini_error_dump_register {
* @lmac_minor: lmac minor version * @lmac_minor: lmac minor version
* @umac_major: umac major version * @umac_major: umac major version
* @umac_minor: umac minor version * @umac_minor: umac minor version
* @fw_mon_mode: FW monitor mode &enum iwl_fw_ini_buffer_location
* @regions_mask: bitmap mask of regions ids in the dump
* @build_tag_len: length of the build tag * @build_tag_len: length of the build tag
* @build_tag: build tag string * @build_tag: build tag string
* @img_name_len: length of the FW image name * @num_of_cfg_names: number of configuration name structs
* @img_name: FW image name * @cfg_names: configuration names
* @internal_dbg_cfg_name_len: length of the internal debug configuration name
* @internal_dbg_cfg_name: internal debug configuration name
* @external_dbg_cfg_name_len: length of the external debug configuration name
* @external_dbg_cfg_name: external debug configuration name
* @regions_num: number of region ids
* @region_ids: region ids the trigger configured to collect
*/ */
struct iwl_fw_ini_dump_info { struct iwl_fw_ini_dump_info {
__le32 version; __le32 version;
...@@ -424,16 +432,12 @@ struct iwl_fw_ini_dump_info { ...@@ -424,16 +432,12 @@ struct iwl_fw_ini_dump_info {
__le32 lmac_minor; __le32 lmac_minor;
__le32 umac_major; __le32 umac_major;
__le32 umac_minor; __le32 umac_minor;
__le32 fw_mon_mode;
__le64 regions_mask;
__le32 build_tag_len; __le32 build_tag_len;
u8 build_tag[FW_VER_HUMAN_READABLE_SZ]; u8 build_tag[FW_VER_HUMAN_READABLE_SZ];
__le32 img_name_len; __le32 num_of_cfg_names;
u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN]; struct iwl_fw_ini_dump_cfg_name cfg_names[];
__le32 internal_dbg_cfg_name_len;
u8 internal_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
__le32 external_dbg_cfg_name_len;
u8 external_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
__le32 regions_num;
__le32 region_ids[];
} __packed; } __packed;
/** /**
......
...@@ -177,10 +177,6 @@ struct iwl_fw_runtime { ...@@ -177,10 +177,6 @@ struct iwl_fw_runtime {
struct iwl_txf_iter_data txf_iter_data; struct iwl_txf_iter_data txf_iter_data;
u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN];
u8 internal_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
u8 external_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
struct { struct {
u8 type; u8 type;
u8 subtype; u8 subtype;
......
...@@ -65,11 +65,11 @@ ...@@ -65,11 +65,11 @@
#include <linux/types.h> #include <linux/types.h>
/** /**
* struct iwl_apply_point_data * struct iwl_dbg_tlv_node - debug TLV node
* @list: list to go through the TLVs of the apply point * @list: list of &struct iwl_dbg_tlv_node
* @tlv: a debug TLV * @tlv: debug TLV
*/ */
struct iwl_apply_point_data { struct iwl_dbg_tlv_node {
struct list_head list; struct list_head list;
struct iwl_ucode_tlv tlv; struct iwl_ucode_tlv tlv;
}; };
......
...@@ -722,6 +722,7 @@ struct iwl_self_init_dram { ...@@ -722,6 +722,7 @@ struct iwl_self_init_dram {
* @hw_error: equals true if hw error interrupt was received from the FW * @hw_error: equals true if hw error interrupt was received from the FW
* @ini_dest: debug monitor destination uses &enum iwl_fw_ini_buffer_location * @ini_dest: debug monitor destination uses &enum iwl_fw_ini_buffer_location
* @active_regions: active regions * @active_regions: active regions
* @debug_info_tlv_list: list of debug info TLVs
*/ */
struct iwl_trans_debug { struct iwl_trans_debug {
u8 n_dest_reg; u8 n_dest_reg;
...@@ -747,6 +748,7 @@ struct iwl_trans_debug { ...@@ -747,6 +748,7 @@ struct iwl_trans_debug {
enum iwl_fw_ini_buffer_location ini_dest; enum iwl_fw_ini_buffer_location ini_dest;
struct iwl_ucode_tlv *active_regions[IWL_FW_INI_MAX_REGION_ID]; struct iwl_ucode_tlv *active_regions[IWL_FW_INI_MAX_REGION_ID];
struct list_head debug_info_tlv_list;
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment