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

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
Loading
Loading
Loading
Loading
+17 −22
Original line number Diff line number Diff line
@@ -60,6 +60,8 @@

#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
 *
@@ -294,6 +296,21 @@ struct iwl_fw_ini_region_tlv {
	__le32 addrs[];
} __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
 *
@@ -380,28 +397,6 @@ struct iwl_fw_ini_trigger_tlv {
	__le32 data[];
} __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
 *
+25 −0
Original line number Diff line number Diff line
@@ -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_error_dump_data *tlv;
	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 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);
	if (!entry)
@@ -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_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));
	memcpy(dump->build_tag, fwrt->fw->human_readable,
	       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
	 * the first TLV in the dump
	 */
+20 −16
Original line number Diff line number Diff line
@@ -379,6 +379,18 @@ struct iwl_fw_ini_error_dump_register {
	__le32 data;
} __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
 * @version: dump version
 * @time_point: time point that caused the dump collection
@@ -396,16 +408,12 @@ struct iwl_fw_ini_error_dump_register {
 * @lmac_minor: lmac minor version
 * @umac_major: umac major 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: build tag string
 * @img_name_len: length of the FW image name
 * @img_name: FW image name
 * @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
 * @num_of_cfg_names: number of configuration name structs
 * @cfg_names: configuration names
 */
struct iwl_fw_ini_dump_info {
	__le32 version;
@@ -424,16 +432,12 @@ struct iwl_fw_ini_dump_info {
	__le32 lmac_minor;
	__le32 umac_major;
	__le32 umac_minor;
	__le32 fw_mon_mode;
	__le64 regions_mask;
	__le32 build_tag_len;
	u8 build_tag[FW_VER_HUMAN_READABLE_SZ];
	__le32 img_name_len;
	u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN];
	__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[];
	__le32 num_of_cfg_names;
	struct iwl_fw_ini_dump_cfg_name cfg_names[];
} __packed;

/**
+0 −4
Original line number Diff line number Diff line
@@ -177,10 +177,6 @@ struct iwl_fw_runtime {

		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 {
			u8 type;
			u8 subtype;
+4 −4
Original line number Diff line number Diff line
@@ -65,11 +65,11 @@
#include <linux/types.h>

/**
 * struct iwl_apply_point_data
 * @list: list to go through the TLVs of the apply point
 * @tlv: a debug TLV
 * struct iwl_dbg_tlv_node - debug TLV node
 * @list: list of &struct iwl_dbg_tlv_node
 * @tlv: debug TLV
 */
struct iwl_apply_point_data {
struct iwl_dbg_tlv_node {
	struct list_head list;
	struct iwl_ucode_tlv tlv;
};
Loading