Lines Matching refs:drv

88 	struct list_head drv;		/* list of devices using this op_mode */  member
109 static void iwl_free_fw_desc(struct iwl_drv *drv, struct fw_desc *desc) in iwl_free_fw_desc() argument
116 static void iwl_free_fw_img(struct iwl_drv *drv, struct fw_img *img) in iwl_free_fw_img() argument
120 iwl_free_fw_desc(drv, &img->sec[i]); in iwl_free_fw_img()
124 static void iwl_dealloc_ucode(struct iwl_drv *drv) in iwl_dealloc_ucode() argument
128 kfree(drv->fw.dbg.dest_tlv); in iwl_dealloc_ucode()
129 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) in iwl_dealloc_ucode()
130 kfree(drv->fw.dbg.conf_tlv[i]); in iwl_dealloc_ucode()
131 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) in iwl_dealloc_ucode()
132 kfree(drv->fw.dbg.trigger_tlv[i]); in iwl_dealloc_ucode()
133 kfree(drv->fw.dbg.mem_tlv); in iwl_dealloc_ucode()
134 kfree(drv->fw.iml); in iwl_dealloc_ucode()
135 kfree(drv->fw.ucode_capa.cmd_versions); in iwl_dealloc_ucode()
136 kfree(drv->fw.phy_integration_ver); in iwl_dealloc_ucode()
137 kfree(drv->trans->dbg.pc_data); in iwl_dealloc_ucode()
138 drv->trans->dbg.pc_data = NULL; in iwl_dealloc_ucode()
139 kvfree(drv->fw.pnvm_data); in iwl_dealloc_ucode()
140 drv->fw.pnvm_data = NULL; in iwl_dealloc_ucode()
141 drv->fw.pnvm_size = 0; in iwl_dealloc_ucode()
144 iwl_free_fw_img(drv, drv->fw.img + i); in iwl_dealloc_ucode()
147 memset(&drv->fw, 0, sizeof(drv->fw)); in iwl_dealloc_ucode()
323 static int iwl_request_firmware(struct iwl_drv *drv, bool first) in iwl_request_firmware() argument
329 iwl_get_ucode_api_versions(drv->trans, &ucode_api_min, &ucode_api_max); in iwl_request_firmware()
331 if (drv->trans->mac_cfg->device_family == IWL_DEVICE_FAMILY_9000 && in iwl_request_firmware()
332 (drv->trans->info.hw_rev_step != SILICON_B_STEP && in iwl_request_firmware()
333 drv->trans->info.hw_rev_step != SILICON_C_STEP)) { in iwl_request_firmware()
334 IWL_ERR(drv, in iwl_request_firmware()
336 drv->trans->info.hw_rev); in iwl_request_firmware()
340 fw_name_pre = iwl_drv_get_fwname_pre(drv->trans, _fw_name_pre); in iwl_request_firmware()
343 drv->fw_index = ucode_api_max; in iwl_request_firmware()
345 drv->fw_index--; in iwl_request_firmware()
347 if (drv->fw_index < ucode_api_min) { in iwl_request_firmware()
348 IWL_ERR(drv, "no suitable firmware found!\n"); in iwl_request_firmware()
351 IWL_ERR(drv, "%s-%d is required\n", fw_name_pre, in iwl_request_firmware()
354 IWL_ERR(drv, "minimum version required: %s-%d\n", in iwl_request_firmware()
356 IWL_ERR(drv, "maximum version supported: %s-%d\n", in iwl_request_firmware()
360 IWL_ERR(drv, in iwl_request_firmware()
365 snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s-%d.ucode", in iwl_request_firmware()
366 fw_name_pre, drv->fw_index); in iwl_request_firmware()
368 IWL_DEBUG_FW_INFO(drv, "attempting to load firmware '%s'\n", in iwl_request_firmware()
369 drv->firmware_name); in iwl_request_firmware()
371 return request_firmware_nowait(THIS_MODULE, 1, drv->firmware_name, in iwl_request_firmware()
372 drv->trans->dev, in iwl_request_firmware()
373 GFP_KERNEL, drv, iwl_req_fw_callback); in iwl_request_firmware()
511 static int iwl_set_default_calib(struct iwl_drv *drv, const u8 *data) in iwl_set_default_calib() argument
517 IWL_ERR(drv, "Wrong ucode_type %u for default calibration.\n", in iwl_set_default_calib()
521 drv->fw.default_calib[ucode_type].flow_trigger = in iwl_set_default_calib()
523 drv->fw.default_calib[ucode_type].event_trigger = in iwl_set_default_calib()
529 static void iwl_set_ucode_api_flags(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_api_flags() argument
538 IWL_WARN(drv, in iwl_set_ucode_api_flags()
550 static void iwl_set_ucode_capabilities(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_capabilities() argument
559 IWL_WARN(drv, in iwl_set_ucode_capabilities()
571 static const char *iwl_reduced_fw_name(struct iwl_drv *drv) in iwl_reduced_fw_name() argument
573 const char *name = drv->firmware_name; in iwl_reduced_fw_name()
581 static int iwl_parse_v1_v2_firmware(struct iwl_drv *drv, in iwl_parse_v1_v2_firmware() argument
590 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_v1_v2_firmware()
591 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_parse_v1_v2_firmware()
597 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
616 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
637 snprintf(drv->fw.fw_version, in iwl_parse_v1_v2_firmware()
638 sizeof(drv->fw.fw_version), in iwl_parse_v1_v2_firmware()
640 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
641 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
642 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
643 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
644 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_v1_v2_firmware()
654 IWL_ERR(drv, in iwl_parse_v1_v2_firmware()
680 static void iwl_drv_set_dump_exclude(struct iwl_drv *drv, in iwl_drv_set_dump_exclude() argument
691 excl = &drv->fw.dump_excl[0]; in iwl_drv_set_dump_exclude()
695 excl = &drv->fw.dump_excl_wowlan[0]; in iwl_drv_set_dump_exclude()
696 } else if (fw_has_capa(&drv->fw.ucode_capa, in iwl_drv_set_dump_exclude()
699 excl = &drv->fw.dump_excl[0]; in iwl_drv_set_dump_exclude()
702 excl = &drv->fw.dump_excl_wowlan[0]; in iwl_drv_set_dump_exclude()
709 IWL_DEBUG_FW_INFO(drv, "found too many excludes in fw file\n"); in iwl_drv_set_dump_exclude()
717 static void iwl_parse_dbg_tlv_assert_tables(struct iwl_drv *drv, in iwl_parse_dbg_tlv_assert_tables() argument
738 drv->trans->dbg.umac_error_event_table = addr; in iwl_parse_dbg_tlv_assert_tables()
739 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
743 drv->trans->dbg.lmac_error_event_table[0] = addr; in iwl_parse_dbg_tlv_assert_tables()
744 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
748 drv->trans->dbg.lmac_error_event_table[1] = addr; in iwl_parse_dbg_tlv_assert_tables()
749 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
753 drv->trans->dbg.tcm_error_event_table[0] = addr; in iwl_parse_dbg_tlv_assert_tables()
754 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
758 drv->trans->dbg.tcm_error_event_table[1] = addr; in iwl_parse_dbg_tlv_assert_tables()
759 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
763 drv->trans->dbg.rcm_error_event_table[0] = addr; in iwl_parse_dbg_tlv_assert_tables()
764 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
768 drv->trans->dbg.rcm_error_event_table[1] = addr; in iwl_parse_dbg_tlv_assert_tables()
769 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_dbg_tlv_assert_tables()
777 static int iwl_parse_tlv_firmware(struct iwl_drv *drv, in iwl_parse_tlv_firmware() argument
797 IWL_ERR(drv, "uCode has invalid length: %zd\n", len); in iwl_parse_tlv_firmware()
802 IWL_ERR(drv, "invalid uCode magic: 0X%x\n", in iwl_parse_tlv_firmware()
807 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_tlv_firmware()
808 memcpy(drv->fw.human_readable, ucode->human_readable, in iwl_parse_tlv_firmware()
809 sizeof(drv->fw.human_readable)); in iwl_parse_tlv_firmware()
817 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
818 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
820 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
821 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
822 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
823 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
824 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
839 IWL_ERR(drv, "invalid TLV len: %zd/%u\n", in iwl_parse_tlv_firmware()
884 IWL_ERR(drv, "Found unexpected BOOT ucode\n"); in iwl_parse_tlv_firmware()
916 iwl_set_ucode_api_flags(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
921 iwl_set_ucode_capabilities(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
962 drv->fw.enhance_sensitivity_table = true; in iwl_parse_tlv_firmware()
991 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
996 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
1001 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
1006 if (iwl_set_default_calib(drv, tlv_data)) in iwl_parse_tlv_firmware()
1012 drv->fw.phy_config = le32_to_cpup((const __le32 *)tlv_data); in iwl_parse_tlv_firmware()
1013 drv->fw.valid_tx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
1016 drv->fw.valid_rx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
1023 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
1028 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
1033 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
1042 drv->fw.img[IWL_UCODE_REGULAR].is_dual_cpus = in iwl_parse_tlv_firmware()
1044 drv->fw.img[IWL_UCODE_INIT].is_dual_cpus = in iwl_parse_tlv_firmware()
1046 drv->fw.img[IWL_UCODE_WOWLAN].is_dual_cpus = in iwl_parse_tlv_firmware()
1049 IWL_ERR(drv, "Driver support up to 2 CPUs\n"); in iwl_parse_tlv_firmware()
1071 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
1072 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
1074 local_comp, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
1088 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1095 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1110 IWL_INFO(drv, "Found debug destination: %s\n", in iwl_parse_tlv_firmware()
1113 drv->fw.dbg.n_dest_reg = (dest_v1) ? in iwl_parse_tlv_firmware()
1121 drv->fw.dbg.n_dest_reg /= in iwl_parse_tlv_firmware()
1122 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]); in iwl_parse_tlv_firmware()
1131 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1137 if (conf->id >= ARRAY_SIZE(drv->fw.dbg.conf_tlv)) { in iwl_parse_tlv_firmware()
1138 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1145 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1154 IWL_INFO(drv, "Found debug configuration: %d\n", in iwl_parse_tlv_firmware()
1166 if (trigger_id >= ARRAY_SIZE(drv->fw.dbg.trigger_tlv)) { in iwl_parse_tlv_firmware()
1167 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1174 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1180 IWL_INFO(drv, "Found debug trigger: %u\n", trigger->id); in iwl_parse_tlv_firmware()
1188 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1193 drv->fw.dbg.dump_mask = in iwl_parse_tlv_firmware()
1207 IWL_DEBUG_FW(drv, in iwl_parse_tlv_firmware()
1212 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1219 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1225 drv->fw.img[IWL_UCODE_REGULAR].paging_mem_size = in iwl_parse_tlv_firmware()
1228 drv->fw.img[usniffer_img].paging_mem_size = in iwl_parse_tlv_firmware()
1243 IWL_DEBUG_INFO(drv, "Found debug memory segment: %u\n", in iwl_parse_tlv_firmware()
1257 drv->fw.iml_len = tlv_len; in iwl_parse_tlv_firmware()
1258 drv->fw.iml = kmemdup(tlv_data, tlv_len, GFP_KERNEL); in iwl_parse_tlv_firmware()
1259 if (!drv->fw.iml) in iwl_parse_tlv_firmware()
1285 IWL_DEBUG_INFO(drv, "TLV_FW_FSEQ_VERSION: %.32s\n", in iwl_parse_tlv_firmware()
1294 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1307 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1327 if (drv->trans->mac_cfg->device_family < in iwl_parse_tlv_firmware()
1330 drv->trans->dbg.umac_error_event_table = in iwl_parse_tlv_firmware()
1333 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1343 if (drv->trans->mac_cfg->device_family < in iwl_parse_tlv_firmware()
1346 drv->trans->dbg.lmac_error_event_table[0] = in iwl_parse_tlv_firmware()
1349 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1354 iwl_parse_dbg_tlv_assert_tables(drv, tlv); in iwl_parse_tlv_firmware()
1362 iwl_dbg_tlv_alloc(drv->trans, tlv, false); in iwl_parse_tlv_firmware()
1366 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1382 if (drv->fw.phy_integration_ver) { in iwl_parse_tlv_firmware()
1383 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1388 drv->fw.phy_integration_ver = in iwl_parse_tlv_firmware()
1390 if (!drv->fw.phy_integration_ver) in iwl_parse_tlv_firmware()
1392 drv->fw.phy_integration_ver_len = tlv_len; in iwl_parse_tlv_firmware()
1396 iwl_drv_set_dump_exclude(drv, tlv_type, in iwl_parse_tlv_firmware()
1402 drv->trans->dbg.pc_data = in iwl_parse_tlv_firmware()
1404 if (!drv->trans->dbg.pc_data) in iwl_parse_tlv_firmware()
1406 drv->trans->dbg.num_pc = in iwl_parse_tlv_firmware()
1410 if (drv->fw.pnvm_data) in iwl_parse_tlv_firmware()
1412 drv->fw.pnvm_data = in iwl_parse_tlv_firmware()
1414 if (!drv->fw.pnvm_data) in iwl_parse_tlv_firmware()
1416 drv->fw.pnvm_size = tlv_len; in iwl_parse_tlv_firmware()
1419 IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type); in iwl_parse_tlv_firmware()
1426 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1432 IWL_ERR(drv, "invalid TLV after parsing: %zd\n", len); in iwl_parse_tlv_firmware()
1433 iwl_print_hex_dump(drv, IWL_DL_FW, data, len); in iwl_parse_tlv_firmware()
1440 IWL_ERR(drv, "TLV %d has invalid size: %u\n", tlv_type, tlv_len); in iwl_parse_tlv_firmware()
1442 iwl_print_hex_dump(drv, IWL_DL_FW, tlv_data, tlv_len); in iwl_parse_tlv_firmware()
1465 static int iwl_alloc_ucode(struct iwl_drv *drv, in iwl_alloc_ucode() argument
1469 return iwl_alloc_ucode_mem(&drv->fw.img[type], &pieces->img[type]); in iwl_alloc_ucode()
1472 static int validate_sec_sizes(struct iwl_drv *drv, in validate_sec_sizes() argument
1476 IWL_DEBUG_INFO(drv, "f/w package hdr runtime inst size = %zd\n", in validate_sec_sizes()
1479 IWL_DEBUG_INFO(drv, "f/w package hdr runtime data size = %zd\n", in validate_sec_sizes()
1482 IWL_DEBUG_INFO(drv, "f/w package hdr init inst size = %zd\n", in validate_sec_sizes()
1484 IWL_DEBUG_INFO(drv, "f/w package hdr init data size = %zd\n", in validate_sec_sizes()
1490 IWL_ERR(drv, "uCode instr len %zd too large to fit in\n", in validate_sec_sizes()
1498 IWL_ERR(drv, "uCode data len %zd too large to fit in\n", in validate_sec_sizes()
1506 IWL_ERR(drv, "uCode init instr len %zd too large to fit in\n", in validate_sec_sizes()
1514 IWL_ERR(drv, "uCode init data len %zd too large to fit in\n", in validate_sec_sizes()
1523 _iwl_op_mode_start(struct iwl_drv *drv, struct iwlwifi_opmode_table *op) in _iwl_op_mode_start() argument
1536 drv->dbgfs_op_mode = debugfs_create_dir(op->name, in _iwl_op_mode_start()
1537 drv->dbgfs_drv); in _iwl_op_mode_start()
1538 dbgfs_dir = drv->dbgfs_op_mode; in _iwl_op_mode_start()
1541 op_mode = ops->start(drv->trans, drv->trans->cfg, in _iwl_op_mode_start()
1542 &drv->fw, dbgfs_dir); in _iwl_op_mode_start()
1547 if (iwl_trans_is_dead(drv->trans)) in _iwl_op_mode_start()
1551 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_start()
1552 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_start()
1558 IWL_ERR(drv, "retry init count %d\n", retry); in _iwl_op_mode_start()
1564 static void _iwl_op_mode_stop(struct iwl_drv *drv) in _iwl_op_mode_stop() argument
1570 if (drv->op_mode) { in _iwl_op_mode_stop()
1571 iwl_op_mode_stop(drv->op_mode); in _iwl_op_mode_stop()
1572 drv->op_mode = NULL; in _iwl_op_mode_stop()
1575 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_stop()
1576 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_stop()
1591 struct iwl_drv *drv = context; in iwl_req_fw_callback() local
1592 struct iwl_fw *fw = &drv->fw; in iwl_req_fw_callback()
1604 iwl_get_ucode_api_versions(drv->trans, &api_min, &api_max); in iwl_req_fw_callback()
1622 IWL_DEBUG_FW_INFO(drv, "Loaded firmware file '%s' (%zd bytes).\n", in iwl_req_fw_callback()
1623 drv->firmware_name, ucode_raw->size); in iwl_req_fw_callback()
1627 IWL_ERR(drv, "File size way too small!\n"); in iwl_req_fw_callback()
1635 err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces); in iwl_req_fw_callback()
1637 err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces, in iwl_req_fw_callback()
1643 if (fw_has_api(&drv->fw.ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION)) in iwl_req_fw_callback()
1644 api_ver = drv->fw.ucode_ver; in iwl_req_fw_callback()
1646 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_req_fw_callback()
1654 IWL_ERR(drv, in iwl_req_fw_callback()
1665 if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, in iwl_req_fw_callback()
1666 drv->trans->cfg)) in iwl_req_fw_callback()
1676 if (iwl_alloc_ucode(drv, pieces, i)) in iwl_req_fw_callback()
1680 size_t dbg_dest_size = sizeof(*drv->fw.dbg.dest_tlv) + in iwl_req_fw_callback()
1681 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1682 drv->fw.dbg.n_dest_reg; in iwl_req_fw_callback()
1684 drv->fw.dbg.dest_tlv = kmalloc(dbg_dest_size, GFP_KERNEL); in iwl_req_fw_callback()
1686 if (!drv->fw.dbg.dest_tlv) in iwl_req_fw_callback()
1690 memcpy(drv->fw.dbg.dest_tlv, pieces->dbg_dest_tlv_v1, in iwl_req_fw_callback()
1694 drv->fw.dbg.dest_tlv; in iwl_req_fw_callback()
1709 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1710 drv->fw.dbg.n_dest_reg); in iwl_req_fw_callback()
1726 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) { in iwl_req_fw_callback()
1728 drv->fw.dbg.conf_tlv[i] = in iwl_req_fw_callback()
1732 if (!drv->fw.dbg.conf_tlv[i]) in iwl_req_fw_callback()
1759 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) { in iwl_req_fw_callback()
1772 drv->fw.dbg.trigger_tlv_len[i] = in iwl_req_fw_callback()
1774 drv->fw.dbg.trigger_tlv[i] = in iwl_req_fw_callback()
1776 drv->fw.dbg.trigger_tlv_len[i], in iwl_req_fw_callback()
1778 if (!drv->fw.dbg.trigger_tlv[i]) in iwl_req_fw_callback()
1785 drv->fw.dbg.mem_tlv = pieces->dbg_mem_tlv; in iwl_req_fw_callback()
1787 drv->fw.dbg.n_mem_tlv = pieces->n_mem_tlv; in iwl_req_fw_callback()
1799 drv->trans->mac_cfg->base->max_event_log_size; in iwl_req_fw_callback()
1806 drv->trans->mac_cfg->base->max_event_log_size; in iwl_req_fw_callback()
1821 iwl_dbg_tlv_load_bin(drv->trans->dev, drv->trans); in iwl_req_fw_callback()
1838 iwl_drv_is_wifi7_supported(drv->trans)) in iwl_req_fw_callback()
1842 iwl_drv_is_wifi7_supported(drv->trans)) { in iwl_req_fw_callback()
1843 IWL_ERR(drv, in iwl_req_fw_callback()
1850 IWL_INFO(drv, "loaded firmware version %s op_mode %s\n", in iwl_req_fw_callback()
1851 drv->fw.fw_version, op->name); in iwl_req_fw_callback()
1854 list_add_tail(&drv->list, &op->drv); in iwl_req_fw_callback()
1857 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_req_fw_callback()
1859 if (!drv->op_mode) { in iwl_req_fw_callback()
1868 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1876 if (iwl_request_firmware(drv, false)) in iwl_req_fw_callback()
1883 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1884 device_release_driver(drv->trans->dev); in iwl_req_fw_callback()
1889 iwl_dealloc_ucode(drv); in iwl_req_fw_callback()
1901 struct iwl_drv *drv; in iwl_drv_start() local
1904 drv = kzalloc(sizeof(*drv), GFP_KERNEL); in iwl_drv_start()
1905 if (!drv) { in iwl_drv_start()
1910 drv->trans = trans; in iwl_drv_start()
1911 drv->dev = trans->dev; in iwl_drv_start()
1913 init_completion(&drv->request_firmware_complete); in iwl_drv_start()
1914 INIT_LIST_HEAD(&drv->list); in iwl_drv_start()
1918 drv->dbgfs_drv = debugfs_create_dir(dev_name(trans->dev), in iwl_drv_start()
1922 drv->trans->dbgfs_dir = debugfs_create_dir("trans", drv->dbgfs_drv); in iwl_drv_start()
1925 drv->trans->dbg.domains_bitmap = IWL_TRANS_FW_DBG_DOMAIN(drv->trans); in iwl_drv_start()
1930 drv->trans->dbg.domains_bitmap &= 0xffff; in iwl_drv_start()
1938 drv->trans->dbg.domains_bitmap = in iwl_drv_start()
1943 ret = iwl_request_firmware(drv, true); in iwl_drv_start()
1949 return drv; in iwl_drv_start()
1953 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_start()
1955 iwl_dbg_tlv_free(drv->trans); in iwl_drv_start()
1956 kfree(drv); in iwl_drv_start()
1961 void iwl_drv_stop(struct iwl_drv *drv) in iwl_drv_stop() argument
1963 wait_for_completion(&drv->request_firmware_complete); in iwl_drv_stop()
1967 _iwl_op_mode_stop(drv); in iwl_drv_stop()
1969 iwl_dealloc_ucode(drv); in iwl_drv_stop()
1976 if (!list_empty(&drv->list)) in iwl_drv_stop()
1977 list_del(&drv->list); in iwl_drv_stop()
1981 iwl_trans_debugfs_cleanup(drv->trans); in iwl_drv_stop()
1983 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_stop()
1986 iwl_dbg_tlv_free(drv->trans); in iwl_drv_stop()
1988 kfree(drv); in iwl_drv_stop()
2005 struct iwl_drv *drv; in iwl_opmode_register() local
2015 list_for_each_entry(drv, &op->drv, list) in iwl_opmode_register()
2016 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_opmode_register()
2029 struct iwl_drv *drv; in iwl_opmode_deregister() local
2038 list_for_each_entry(drv, &iwlwifi_opmode_table[i].drv, list) in iwl_opmode_deregister()
2039 _iwl_op_mode_stop(drv); in iwl_opmode_deregister()
2053 INIT_LIST_HEAD(&iwlwifi_opmode_table[i].drv); in iwl_drv_init()