Lines Matching refs:trans
97 static int iwl_dbg_tlv_alloc_debug_info(struct iwl_trans *trans, in iwl_dbg_tlv_alloc_debug_info() argument
105 IWL_DEBUG_FW(trans, "WRT: Loading debug cfg: %s\n", in iwl_dbg_tlv_alloc_debug_info()
108 return iwl_dbg_tlv_add(tlv, &trans->dbg.debug_info_tlv_list); in iwl_dbg_tlv_alloc_debug_info()
111 static int iwl_dbg_tlv_alloc_buf_alloc(struct iwl_trans *trans, in iwl_dbg_tlv_alloc_buf_alloc() argument
140 trans->dbg.fw_mon_cfg[alloc_id] = *alloc; in iwl_dbg_tlv_alloc_buf_alloc()
144 IWL_ERR(trans, in iwl_dbg_tlv_alloc_buf_alloc()
150 static int iwl_dbg_tlv_alloc_hcmd(struct iwl_trans *trans, in iwl_dbg_tlv_alloc_hcmd() argument
165 IWL_ERR(trans, in iwl_dbg_tlv_alloc_hcmd()
171 return iwl_dbg_tlv_add(tlv, &trans->dbg.time_point[tp].hcmd_list); in iwl_dbg_tlv_alloc_hcmd()
174 static int iwl_dbg_tlv_alloc_region(struct iwl_trans *trans, in iwl_dbg_tlv_alloc_region() argument
194 IWL_DEBUG_FW(trans, "WRT: parsing region: %.*s\n", in iwl_dbg_tlv_alloc_region()
198 IWL_ERR(trans, "WRT: Invalid region id %u\n", id); in iwl_dbg_tlv_alloc_region()
204 IWL_ERR(trans, "WRT: Invalid region type %u\n", type); in iwl_dbg_tlv_alloc_region()
209 !trans->ops->read_config32) { in iwl_dbg_tlv_alloc_region()
210 IWL_ERR(trans, "WRT: Unsupported region type %u\n", type); in iwl_dbg_tlv_alloc_region()
214 active_reg = &trans->dbg.active_regions[id]; in iwl_dbg_tlv_alloc_region()
216 IWL_WARN(trans, "WRT: Overriding region id %u\n", id); in iwl_dbg_tlv_alloc_region()
225 IWL_DEBUG_FW(trans, "WRT: Enabling region id %u type %u\n", id, type); in iwl_dbg_tlv_alloc_region()
230 static int iwl_dbg_tlv_alloc_trigger(struct iwl_trans *trans, in iwl_dbg_tlv_alloc_trigger() argument
244 IWL_ERR(trans, in iwl_dbg_tlv_alloc_trigger()
260 ret = iwl_dbg_tlv_add(tlv, &trans->dbg.time_point[tp].trig_list); in iwl_dbg_tlv_alloc_trigger()
266 static int iwl_dbg_tlv_config_set(struct iwl_trans *trans, in iwl_dbg_tlv_config_set() argument
275 IWL_DEBUG_FW(trans, in iwl_dbg_tlv_config_set()
282 IWL_DEBUG_FW(trans, in iwl_dbg_tlv_config_set()
287 return iwl_dbg_tlv_add(tlv, &trans->dbg.time_point[tp].config_list); in iwl_dbg_tlv_config_set()
290 static int (*dbg_tlv_alloc[])(struct iwl_trans *trans,
300 void iwl_dbg_tlv_alloc(struct iwl_trans *trans, const struct iwl_ucode_tlv *tlv, in iwl_dbg_tlv_alloc() argument
308 &trans->dbg.external_ini_cfg : &trans->dbg.internal_ini_cfg; in iwl_dbg_tlv_alloc()
312 !(domain & trans->dbg.domains_bitmap)) { in iwl_dbg_tlv_alloc()
313 IWL_DEBUG_FW(trans, in iwl_dbg_tlv_alloc()
315 domain, trans->dbg.domains_bitmap); in iwl_dbg_tlv_alloc()
320 IWL_ERR(trans, "WRT: Unsupported TLV type 0x%x\n", type); in iwl_dbg_tlv_alloc()
325 IWL_ERR(trans, "WRT: Unsupported TLV 0x%x version %u\n", type, in iwl_dbg_tlv_alloc()
330 ret = dbg_tlv_alloc[tlv_idx](trans, tlv); in iwl_dbg_tlv_alloc()
332 IWL_ERR(trans, in iwl_dbg_tlv_alloc()
347 void iwl_dbg_tlv_del_timers(struct iwl_trans *trans) in iwl_dbg_tlv_del_timers() argument
349 struct list_head *timer_list = &trans->dbg.periodic_trig_list; in iwl_dbg_tlv_del_timers()
360 static void iwl_dbg_tlv_fragments_free(struct iwl_trans *trans, in iwl_dbg_tlv_fragments_free() argument
370 fw_mon = &trans->dbg.fw_mon_ini[alloc_id]; in iwl_dbg_tlv_fragments_free()
375 dma_free_coherent(trans->dev, frag->size, frag->block, in iwl_dbg_tlv_fragments_free()
388 void iwl_dbg_tlv_free(struct iwl_trans *trans) in iwl_dbg_tlv_free() argument
393 iwl_dbg_tlv_del_timers(trans); in iwl_dbg_tlv_free()
395 for (i = 0; i < ARRAY_SIZE(trans->dbg.active_regions); i++) { in iwl_dbg_tlv_free()
397 &trans->dbg.active_regions[i]; in iwl_dbg_tlv_free()
404 &trans->dbg.debug_info_tlv_list, list) { in iwl_dbg_tlv_free()
409 for (i = 0; i < ARRAY_SIZE(trans->dbg.time_point); i++) { in iwl_dbg_tlv_free()
411 &trans->dbg.time_point[i]; in iwl_dbg_tlv_free()
439 for (i = 0; i < ARRAY_SIZE(trans->dbg.fw_mon_ini); i++) in iwl_dbg_tlv_free()
440 iwl_dbg_tlv_fragments_free(trans, i); in iwl_dbg_tlv_free()
443 static int iwl_dbg_tlv_parse_bin(struct iwl_trans *trans, const u8 *data, in iwl_dbg_tlv_parse_bin() argument
456 IWL_ERR(trans, "invalid TLV len: %zd/%u\n", in iwl_dbg_tlv_parse_bin()
463 iwl_dbg_tlv_alloc(trans, tlv, true); in iwl_dbg_tlv_parse_bin()
469 void iwl_dbg_tlv_load_bin(struct device *dev, struct iwl_trans *trans) in iwl_dbg_tlv_load_bin() argument
476 trans->trans_cfg->device_family <= IWL_DEVICE_FAMILY_9000) in iwl_dbg_tlv_load_bin()
480 IWL_DEBUG_FW(trans, "%s %s\n", res ? "didn't load" : "loaded", yoyo_bin); in iwl_dbg_tlv_load_bin()
485 iwl_dbg_tlv_parse_bin(trans, fw->data, fw->size); in iwl_dbg_tlv_load_bin()
490 void iwl_dbg_tlv_init(struct iwl_trans *trans) in iwl_dbg_tlv_init() argument
494 INIT_LIST_HEAD(&trans->dbg.debug_info_tlv_list); in iwl_dbg_tlv_init()
495 INIT_LIST_HEAD(&trans->dbg.periodic_trig_list); in iwl_dbg_tlv_init()
497 for (i = 0; i < ARRAY_SIZE(trans->dbg.time_point); i++) { in iwl_dbg_tlv_init()
499 &trans->dbg.time_point[i]; in iwl_dbg_tlv_init()
559 fw_mon_cfg = &fwrt->trans->dbg.fw_mon_cfg[alloc_id]; in iwl_dbg_tlv_alloc_fragments()
560 fw_mon = &fwrt->trans->dbg.fw_mon_ini[alloc_id]; in iwl_dbg_tlv_alloc_fragments()
599 iwl_dbg_tlv_fragments_free(fwrt->trans, in iwl_dbg_tlv_alloc_fragments()
628 if (le32_to_cpu(fwrt->trans->dbg.fw_mon_cfg[alloc_id].buf_location) != in iwl_dbg_tlv_apply_buffer()
632 fw_mon = &fwrt->trans->dbg.fw_mon_ini[alloc_id]; in iwl_dbg_tlv_apply_buffer()
674 ret = iwl_trans_send_cmd(fwrt->trans, &hcmd); in iwl_dbg_tlv_apply_buffer()
710 if (le32_to_cpu(fwrt->trans->dbg.fw_mon_cfg[alloc_id].buf_location) != in iwl_dbg_tlv_update_dram()
716 fw_mon = &fwrt->trans->dbg.fw_mon_ini[alloc_id]; in iwl_dbg_tlv_update_dram()
756 &fwrt->trans->dbg.fw_mon_ini[IWL_FW_INI_ALLOCATION_ID_DBGC1].frags[0]; in iwl_dbg_tlv_update_drams()
778 *((int *)fwrt->trans->dbg.fw_mon_ini[1].frags[0].block)); in iwl_dbg_tlv_update_drams()
797 iwl_trans_send_cmd(fwrt->trans, &cmd); in iwl_dbg_tlv_send_hcmds()
815 if (!iwl_trans_grab_nic_access(fwrt->trans)) { in iwl_dbg_tlv_apply_config()
824 iwl_trans_write_prph(fwrt->trans, address + offset, value); in iwl_dbg_tlv_apply_config()
826 iwl_trans_release_nic_access(fwrt->trans); in iwl_dbg_tlv_apply_config()
833 iwl_trans_write_mem32(fwrt->trans, address + offset, value); in iwl_dbg_tlv_apply_config()
843 iwl_write32(fwrt->trans, address + offset, value); in iwl_dbg_tlv_apply_config()
851 struct iwl_dram_data *frags = &fwrt->trans->dbg.fw_mon_ini[1].frags[0]; in iwl_dbg_tlv_apply_config()
868 ret = iwl_trans_write_mem(fwrt->trans, in iwl_dbg_tlv_apply_config()
883 fwrt->trans->dbg.ucode_preset = debug_token_config; in iwl_dbg_tlv_apply_config()
917 &fwrt->trans->dbg.time_point[IWL_FW_INI_TIME_POINT_PERIODIC].active_trig_list; in iwl_dbg_tlv_set_periodic_trigs()
960 &fwrt->trans->dbg.periodic_trig_list); in iwl_dbg_tlv_set_periodic_trigs()
1187 enum iwl_fw_ini_buffer_location *ini_dest = &fwrt->trans->dbg.ini_dest; in iwl_dbg_tlv_init_cfg()
1196 fwrt->trans->dbg.domains_bitmap); in iwl_dbg_tlv_init_cfg()
1198 for (i = 0; i < ARRAY_SIZE(fwrt->trans->dbg.time_point); i++) { in iwl_dbg_tlv_init_cfg()
1200 &fwrt->trans->dbg.time_point[i]; in iwl_dbg_tlv_init_cfg()
1208 &fwrt->trans->dbg.fw_mon_cfg[i]; in iwl_dbg_tlv_init_cfg()
1235 for (i = 0; i < ARRAY_SIZE(fwrt->trans->dbg.active_regions) && failed_alloc; i++) { in iwl_dbg_tlv_init_cfg()
1238 &fwrt->trans->dbg.active_regions[i]; in iwl_dbg_tlv_init_cfg()
1242 fwrt->trans->dbg.unsupported_region_msk |= BIT(i); in iwl_dbg_tlv_init_cfg()
1258 fwrt->trans->dbg.unsupported_region_msk |= BIT(i); in iwl_dbg_tlv_init_cfg()
1272 if (!iwl_trans_dbg_ini_valid(fwrt->trans) || in _iwl_dbg_tlv_time_point()
1277 hcmd_list = &fwrt->trans->dbg.time_point[tp_id].hcmd_list; in _iwl_dbg_tlv_time_point()
1278 trig_list = &fwrt->trans->dbg.time_point[tp_id].active_trig_list; in _iwl_dbg_tlv_time_point()
1279 conf_list = &fwrt->trans->dbg.time_point[tp_id].config_list; in _iwl_dbg_tlv_time_point()