#include <linux/firmware.h>
#include "iwl-drv.h"
#include "iwl-trans.h"
#include "iwl-dbg-tlv.h"
#include "fw/dbg.h"
#include "fw/runtime.h"
enum iwl_dbg_tlv_type { … };
struct iwl_dbg_tlv_ver_data { … };
struct iwl_dbg_tlv_timer_node { … };
static const struct iwl_dbg_tlv_ver_data
dbg_ver_table[IWL_DBG_TLV_TYPE_NUM] = …;
static struct iwl_ucode_tlv *iwl_dbg_tlv_add(const struct iwl_ucode_tlv *tlv,
struct list_head *list)
{ … }
static bool iwl_dbg_tlv_ver_support(const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_alloc_debug_info(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_alloc_buf_alloc(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_alloc_hcmd(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_alloc_region(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_alloc_trigger(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int iwl_dbg_tlv_config_set(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv)
{ … }
static int (*dbg_tlv_alloc[])(struct iwl_trans *trans,
const struct iwl_ucode_tlv *tlv) = …;
void iwl_dbg_tlv_alloc(struct iwl_trans *trans, const struct iwl_ucode_tlv *tlv,
bool ext)
{ … }
void iwl_dbg_tlv_del_timers(struct iwl_trans *trans)
{ … }
IWL_EXPORT_SYMBOL(iwl_dbg_tlv_del_timers);
static void iwl_dbg_tlv_fragments_free(struct iwl_trans *trans,
enum iwl_fw_ini_allocation_id alloc_id)
{ … }
void iwl_dbg_tlv_free(struct iwl_trans *trans)
{ … }
static int iwl_dbg_tlv_parse_bin(struct iwl_trans *trans, const u8 *data,
size_t len)
{ … }
void iwl_dbg_tlv_load_bin(struct device *dev, struct iwl_trans *trans)
{ … }
void iwl_dbg_tlv_init(struct iwl_trans *trans)
{ … }
static int iwl_dbg_tlv_alloc_fragment(struct iwl_fw_runtime *fwrt,
struct iwl_dram_data *frag, u32 pages)
{ … }
static int iwl_dbg_tlv_alloc_fragments(struct iwl_fw_runtime *fwrt,
enum iwl_fw_ini_allocation_id alloc_id)
{ … }
static int iwl_dbg_tlv_apply_buffer(struct iwl_fw_runtime *fwrt,
enum iwl_fw_ini_allocation_id alloc_id)
{ … }
static void iwl_dbg_tlv_apply_buffers(struct iwl_fw_runtime *fwrt)
{ … }
static int iwl_dbg_tlv_update_dram(struct iwl_fw_runtime *fwrt,
enum iwl_fw_ini_allocation_id alloc_id,
struct iwl_dram_info *dram_info)
{ … }
static void iwl_dbg_tlv_update_drams(struct iwl_fw_runtime *fwrt)
{ … }
static void iwl_dbg_tlv_send_hcmds(struct iwl_fw_runtime *fwrt,
struct list_head *hcmd_list)
{ … }
static void iwl_dbg_tlv_apply_config(struct iwl_fw_runtime *fwrt,
struct list_head *conf_list)
{ … }
static void iwl_dbg_tlv_periodic_trig_handler(struct timer_list *t)
{ … }
static void iwl_dbg_tlv_set_periodic_trigs(struct iwl_fw_runtime *fwrt)
{ … }
static bool is_trig_data_contained(const struct iwl_ucode_tlv *new,
const struct iwl_ucode_tlv *old)
{ … }
static int iwl_dbg_tlv_override_trig_node(struct iwl_fw_runtime *fwrt,
struct iwl_ucode_tlv *trig_tlv,
struct iwl_dbg_tlv_node *node)
{ … }
static int
iwl_dbg_tlv_add_active_trigger(struct iwl_fw_runtime *fwrt,
struct list_head *trig_list,
struct iwl_ucode_tlv *trig_tlv)
{ … }
static void
iwl_dbg_tlv_gen_active_trig_list(struct iwl_fw_runtime *fwrt,
struct iwl_dbg_tlv_time_point_data *tp)
{ … }
static bool iwl_dbg_tlv_check_fw_pkt(struct iwl_fw_runtime *fwrt,
struct iwl_fwrt_dump_data *dump_data,
union iwl_dbg_tlv_tp_data *tp_data,
u32 trig_data)
{ … }
static int
iwl_dbg_tlv_tp_trigger(struct iwl_fw_runtime *fwrt, bool sync,
struct list_head *active_trig_list,
union iwl_dbg_tlv_tp_data *tp_data,
bool (*data_check)(struct iwl_fw_runtime *fwrt,
struct iwl_fwrt_dump_data *dump_data,
union iwl_dbg_tlv_tp_data *tp_data,
u32 trig_data))
{ … }
void iwl_dbg_tlv_init_cfg(struct iwl_fw_runtime *fwrt)
{ … }
void _iwl_dbg_tlv_time_point(struct iwl_fw_runtime *fwrt,
enum iwl_fw_ini_time_point tp_id,
union iwl_dbg_tlv_tp_data *tp_data,
bool sync)
{ … }
IWL_EXPORT_SYMBOL(_iwl_dbg_tlv_time_point);