Lines Matching refs:drv

84 	struct list_head drv;		/* list of devices using this op_mode */  member
102 static void iwl_free_fw_desc(struct iwl_drv *drv, struct fw_desc *desc) in iwl_free_fw_desc() argument
109 static void iwl_free_fw_img(struct iwl_drv *drv, struct fw_img *img) in iwl_free_fw_img() argument
113 iwl_free_fw_desc(drv, &img->sec[i]); in iwl_free_fw_img()
117 static void iwl_dealloc_ucode(struct iwl_drv *drv) in iwl_dealloc_ucode() argument
121 kfree(drv->fw.dbg.dest_tlv); in iwl_dealloc_ucode()
122 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) in iwl_dealloc_ucode()
123 kfree(drv->fw.dbg.conf_tlv[i]); in iwl_dealloc_ucode()
124 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) in iwl_dealloc_ucode()
125 kfree(drv->fw.dbg.trigger_tlv[i]); in iwl_dealloc_ucode()
126 kfree(drv->fw.dbg.mem_tlv); in iwl_dealloc_ucode()
127 kfree(drv->fw.iml); in iwl_dealloc_ucode()
128 kfree(drv->fw.ucode_capa.cmd_versions); in iwl_dealloc_ucode()
129 kfree(drv->fw.phy_integration_ver); in iwl_dealloc_ucode()
132 iwl_free_fw_img(drv, drv->fw.img + i); in iwl_dealloc_ucode()
135 static int iwl_alloc_fw_desc(struct iwl_drv *drv, struct fw_desc *desc, in iwl_alloc_fw_desc() argument
160 static int iwl_request_firmware(struct iwl_drv *drv, bool first) in iwl_request_firmware() argument
162 const struct iwl_cfg *cfg = drv->trans->cfg; in iwl_request_firmware()
165 if (drv->trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_9000 && in iwl_request_firmware()
166 (CSR_HW_REV_STEP(drv->trans->hw_rev) != SILICON_B_STEP && in iwl_request_firmware()
167 CSR_HW_REV_STEP(drv->trans->hw_rev) != SILICON_C_STEP)) { in iwl_request_firmware()
168 IWL_ERR(drv, in iwl_request_firmware()
170 drv->trans->hw_rev); in iwl_request_firmware()
175 drv->fw_index = cfg->ucode_api_max; in iwl_request_firmware()
176 sprintf(tag, "%d", drv->fw_index); in iwl_request_firmware()
178 drv->fw_index--; in iwl_request_firmware()
179 sprintf(tag, "%d", drv->fw_index); in iwl_request_firmware()
182 if (drv->fw_index < cfg->ucode_api_min) { in iwl_request_firmware()
183 IWL_ERR(drv, "no suitable firmware found!\n"); in iwl_request_firmware()
186 IWL_ERR(drv, "%s%d is required\n", cfg->fw_name_pre, in iwl_request_firmware()
189 IWL_ERR(drv, "minimum version required: %s%d\n", in iwl_request_firmware()
191 IWL_ERR(drv, "maximum version supported: %s%d\n", in iwl_request_firmware()
195 IWL_ERR(drv, in iwl_request_firmware()
200 snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s%s.ucode", in iwl_request_firmware()
203 IWL_DEBUG_FW_INFO(drv, "attempting to load firmware '%s'\n", in iwl_request_firmware()
204 drv->firmware_name); in iwl_request_firmware()
206 return request_firmware_nowait(THIS_MODULE, 1, drv->firmware_name, in iwl_request_firmware()
207 drv->trans->dev, in iwl_request_firmware()
208 GFP_KERNEL, drv, iwl_req_fw_callback); in iwl_request_firmware()
383 static int iwl_set_default_calib(struct iwl_drv *drv, const u8 *data) in iwl_set_default_calib() argument
389 IWL_ERR(drv, "Wrong ucode_type %u for default calibration.\n", in iwl_set_default_calib()
393 drv->fw.default_calib[ucode_type].flow_trigger = in iwl_set_default_calib()
395 drv->fw.default_calib[ucode_type].event_trigger = in iwl_set_default_calib()
401 static void iwl_set_ucode_api_flags(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_api_flags() argument
410 IWL_WARN(drv, in iwl_set_ucode_api_flags()
422 static void iwl_set_ucode_capabilities(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_capabilities() argument
431 IWL_WARN(drv, in iwl_set_ucode_capabilities()
443 static const char *iwl_reduced_fw_name(struct iwl_drv *drv) in iwl_reduced_fw_name() argument
445 const char *name = drv->firmware_name; in iwl_reduced_fw_name()
453 static int iwl_parse_v1_v2_firmware(struct iwl_drv *drv, in iwl_parse_v1_v2_firmware() argument
462 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_v1_v2_firmware()
463 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_parse_v1_v2_firmware()
469 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
488 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
509 snprintf(drv->fw.fw_version, in iwl_parse_v1_v2_firmware()
510 sizeof(drv->fw.fw_version), in iwl_parse_v1_v2_firmware()
512 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
513 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
514 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
515 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
516 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_v1_v2_firmware()
526 IWL_ERR(drv, in iwl_parse_v1_v2_firmware()
552 static void iwl_drv_set_dump_exclude(struct iwl_drv *drv, in iwl_drv_set_dump_exclude() argument
563 excl = &drv->fw.dump_excl[0]; in iwl_drv_set_dump_exclude()
567 excl = &drv->fw.dump_excl_wowlan[0]; in iwl_drv_set_dump_exclude()
568 } else if (fw_has_capa(&drv->fw.ucode_capa, in iwl_drv_set_dump_exclude()
571 excl = &drv->fw.dump_excl[0]; in iwl_drv_set_dump_exclude()
574 excl = &drv->fw.dump_excl_wowlan[0]; in iwl_drv_set_dump_exclude()
581 IWL_DEBUG_FW_INFO(drv, "found too many excludes in fw file\n"); in iwl_drv_set_dump_exclude()
589 static int iwl_parse_tlv_firmware(struct iwl_drv *drv, in iwl_parse_tlv_firmware() argument
609 IWL_ERR(drv, "uCode has invalid length: %zd\n", len); in iwl_parse_tlv_firmware()
614 IWL_ERR(drv, "invalid uCode magic: 0X%x\n", in iwl_parse_tlv_firmware()
619 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_tlv_firmware()
620 memcpy(drv->fw.human_readable, ucode->human_readable, in iwl_parse_tlv_firmware()
621 sizeof(drv->fw.human_readable)); in iwl_parse_tlv_firmware()
629 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
630 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
632 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
633 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
634 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
635 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
636 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
651 IWL_ERR(drv, "invalid TLV len: %zd/%u\n", in iwl_parse_tlv_firmware()
696 IWL_ERR(drv, "Found unexpected BOOT ucode\n"); in iwl_parse_tlv_firmware()
728 iwl_set_ucode_api_flags(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
733 iwl_set_ucode_capabilities(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
774 drv->fw.enhance_sensitivity_table = true; in iwl_parse_tlv_firmware()
803 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
808 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
813 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
818 if (iwl_set_default_calib(drv, tlv_data)) in iwl_parse_tlv_firmware()
824 drv->fw.phy_config = le32_to_cpup((__le32 *)tlv_data); in iwl_parse_tlv_firmware()
825 drv->fw.valid_tx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
828 drv->fw.valid_rx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
835 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
840 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
845 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
854 drv->fw.img[IWL_UCODE_REGULAR].is_dual_cpus = in iwl_parse_tlv_firmware()
856 drv->fw.img[IWL_UCODE_INIT].is_dual_cpus = in iwl_parse_tlv_firmware()
858 drv->fw.img[IWL_UCODE_WOWLAN].is_dual_cpus = in iwl_parse_tlv_firmware()
861 IWL_ERR(drv, "Driver support upto 2 CPUs\n"); in iwl_parse_tlv_firmware()
866 if (iwl_store_cscheme(&drv->fw, tlv_data, tlv_len)) in iwl_parse_tlv_firmware()
888 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
889 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
891 local_comp, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
893 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
894 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
896 local_comp, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
910 IWL_ERR(drv, in iwl_parse_tlv_firmware()
917 IWL_ERR(drv, in iwl_parse_tlv_firmware()
932 IWL_INFO(drv, "Found debug destination: %s\n", in iwl_parse_tlv_firmware()
935 drv->fw.dbg.n_dest_reg = (dest_v1) ? in iwl_parse_tlv_firmware()
943 drv->fw.dbg.n_dest_reg /= in iwl_parse_tlv_firmware()
944 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]); in iwl_parse_tlv_firmware()
952 IWL_ERR(drv, in iwl_parse_tlv_firmware()
958 if (conf->id >= ARRAY_SIZE(drv->fw.dbg.conf_tlv)) { in iwl_parse_tlv_firmware()
959 IWL_ERR(drv, in iwl_parse_tlv_firmware()
966 IWL_ERR(drv, in iwl_parse_tlv_firmware()
975 IWL_INFO(drv, "Found debug configuration: %d\n", in iwl_parse_tlv_firmware()
987 if (trigger_id >= ARRAY_SIZE(drv->fw.dbg.trigger_tlv)) { in iwl_parse_tlv_firmware()
988 IWL_ERR(drv, in iwl_parse_tlv_firmware()
995 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1001 IWL_INFO(drv, "Found debug trigger: %u\n", trigger->id); in iwl_parse_tlv_firmware()
1009 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1014 drv->fw.dbg.dump_mask = in iwl_parse_tlv_firmware()
1029 IWL_DEBUG_FW(drv, in iwl_parse_tlv_firmware()
1034 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1041 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1047 drv->fw.img[IWL_UCODE_REGULAR].paging_mem_size = in iwl_parse_tlv_firmware()
1050 drv->fw.img[usniffer_img].paging_mem_size = in iwl_parse_tlv_firmware()
1065 IWL_DEBUG_INFO(drv, "Found debug memory segment: %u\n", in iwl_parse_tlv_firmware()
1079 drv->fw.iml_len = tlv_len; in iwl_parse_tlv_firmware()
1080 drv->fw.iml = kmemdup(tlv_data, tlv_len, GFP_KERNEL); in iwl_parse_tlv_firmware()
1081 if (!drv->fw.iml) in iwl_parse_tlv_firmware()
1107 IWL_INFO(drv, "TLV_FW_FSEQ_VERSION: %s\n", in iwl_parse_tlv_firmware()
1116 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1130 if (drv->trans->trans_cfg->device_family < in iwl_parse_tlv_firmware()
1133 drv->trans->dbg.umac_error_event_table = in iwl_parse_tlv_firmware()
1136 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1146 if (drv->trans->trans_cfg->device_family < in iwl_parse_tlv_firmware()
1149 drv->trans->dbg.lmac_error_event_table[0] = in iwl_parse_tlv_firmware()
1152 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1161 drv->trans->dbg.tcm_error_event_table = in iwl_parse_tlv_firmware()
1163 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1174 iwl_dbg_tlv_alloc(drv->trans, tlv, false); in iwl_parse_tlv_firmware()
1178 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1194 if (drv->fw.phy_integration_ver) { in iwl_parse_tlv_firmware()
1195 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1200 drv->fw.phy_integration_ver = in iwl_parse_tlv_firmware()
1202 if (!drv->fw.phy_integration_ver) in iwl_parse_tlv_firmware()
1204 drv->fw.phy_integration_ver_len = tlv_len; in iwl_parse_tlv_firmware()
1208 iwl_drv_set_dump_exclude(drv, tlv_type, in iwl_parse_tlv_firmware()
1212 IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type); in iwl_parse_tlv_firmware()
1219 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1225 IWL_ERR(drv, "invalid TLV after parsing: %zd\n", len); in iwl_parse_tlv_firmware()
1226 iwl_print_hex_dump(drv, IWL_DL_FW, (u8 *)data, len); in iwl_parse_tlv_firmware()
1233 IWL_ERR(drv, "TLV %d has invalid size: %u\n", tlv_type, tlv_len); in iwl_parse_tlv_firmware()
1235 iwl_print_hex_dump(drv, IWL_DL_FW, tlv_data, tlv_len); in iwl_parse_tlv_firmware()
1240 static int iwl_alloc_ucode(struct iwl_drv *drv, in iwl_alloc_ucode() argument
1250 drv->fw.img[type].sec = sec; in iwl_alloc_ucode()
1251 drv->fw.img[type].num_sec = pieces->img[type].sec_counter; in iwl_alloc_ucode()
1254 if (iwl_alloc_fw_desc(drv, &sec[i], get_sec(pieces, type, i))) in iwl_alloc_ucode()
1260 static int validate_sec_sizes(struct iwl_drv *drv, in validate_sec_sizes() argument
1264 IWL_DEBUG_INFO(drv, "f/w package hdr runtime inst size = %zd\n", in validate_sec_sizes()
1267 IWL_DEBUG_INFO(drv, "f/w package hdr runtime data size = %zd\n", in validate_sec_sizes()
1270 IWL_DEBUG_INFO(drv, "f/w package hdr init inst size = %zd\n", in validate_sec_sizes()
1272 IWL_DEBUG_INFO(drv, "f/w package hdr init data size = %zd\n", in validate_sec_sizes()
1278 IWL_ERR(drv, "uCode instr len %zd too large to fit in\n", in validate_sec_sizes()
1286 IWL_ERR(drv, "uCode data len %zd too large to fit in\n", in validate_sec_sizes()
1294 IWL_ERR(drv, "uCode init instr len %zd too large to fit in\n", in validate_sec_sizes()
1302 IWL_ERR(drv, "uCode init data len %zd too large to fit in\n", in validate_sec_sizes()
1311 _iwl_op_mode_start(struct iwl_drv *drv, struct iwlwifi_opmode_table *op) in _iwl_op_mode_start() argument
1321 drv->dbgfs_op_mode = debugfs_create_dir(op->name, in _iwl_op_mode_start()
1322 drv->dbgfs_drv); in _iwl_op_mode_start()
1323 dbgfs_dir = drv->dbgfs_op_mode; in _iwl_op_mode_start()
1326 op_mode = ops->start(drv->trans, drv->trans->cfg, in _iwl_op_mode_start()
1327 &drv->fw, dbgfs_dir); in _iwl_op_mode_start()
1332 IWL_ERR(drv, "retry init count %d\n", retry); in _iwl_op_mode_start()
1335 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_start()
1336 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_start()
1343 static void _iwl_op_mode_stop(struct iwl_drv *drv) in _iwl_op_mode_stop() argument
1346 if (drv->op_mode) { in _iwl_op_mode_stop()
1347 iwl_op_mode_stop(drv->op_mode); in _iwl_op_mode_stop()
1348 drv->op_mode = NULL; in _iwl_op_mode_stop()
1351 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_stop()
1352 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_stop()
1365 struct iwl_drv *drv = context; in iwl_req_fw_callback() local
1366 struct iwl_fw *fw = &drv->fw; in iwl_req_fw_callback()
1371 const unsigned int api_max = drv->trans->cfg->ucode_api_max; in iwl_req_fw_callback()
1372 const unsigned int api_min = drv->trans->cfg->ucode_api_min; in iwl_req_fw_callback()
1394 IWL_DEBUG_FW_INFO(drv, "Loaded firmware file '%s' (%zd bytes).\n", in iwl_req_fw_callback()
1395 drv->firmware_name, ucode_raw->size); in iwl_req_fw_callback()
1399 IWL_ERR(drv, "File size way too small!\n"); in iwl_req_fw_callback()
1407 err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces); in iwl_req_fw_callback()
1409 err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces, in iwl_req_fw_callback()
1415 if (fw_has_api(&drv->fw.ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION)) in iwl_req_fw_callback()
1416 api_ver = drv->fw.ucode_ver; in iwl_req_fw_callback()
1418 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_req_fw_callback()
1426 IWL_ERR(drv, in iwl_req_fw_callback()
1437 if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, in iwl_req_fw_callback()
1438 drv->trans->cfg)) in iwl_req_fw_callback()
1448 if (iwl_alloc_ucode(drv, pieces, i)) in iwl_req_fw_callback()
1452 size_t dbg_dest_size = sizeof(*drv->fw.dbg.dest_tlv) + in iwl_req_fw_callback()
1453 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1454 drv->fw.dbg.n_dest_reg; in iwl_req_fw_callback()
1456 drv->fw.dbg.dest_tlv = kmalloc(dbg_dest_size, GFP_KERNEL); in iwl_req_fw_callback()
1458 if (!drv->fw.dbg.dest_tlv) in iwl_req_fw_callback()
1462 memcpy(drv->fw.dbg.dest_tlv, pieces->dbg_dest_tlv_v1, in iwl_req_fw_callback()
1466 drv->fw.dbg.dest_tlv; in iwl_req_fw_callback()
1481 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1482 drv->fw.dbg.n_dest_reg); in iwl_req_fw_callback()
1498 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) { in iwl_req_fw_callback()
1500 drv->fw.dbg.conf_tlv[i] = in iwl_req_fw_callback()
1504 if (!drv->fw.dbg.conf_tlv[i]) in iwl_req_fw_callback()
1531 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) { in iwl_req_fw_callback()
1544 drv->fw.dbg.trigger_tlv_len[i] = in iwl_req_fw_callback()
1546 drv->fw.dbg.trigger_tlv[i] = in iwl_req_fw_callback()
1548 drv->fw.dbg.trigger_tlv_len[i], in iwl_req_fw_callback()
1550 if (!drv->fw.dbg.trigger_tlv[i]) in iwl_req_fw_callback()
1557 drv->fw.dbg.mem_tlv = pieces->dbg_mem_tlv; in iwl_req_fw_callback()
1559 drv->fw.dbg.n_mem_tlv = pieces->n_mem_tlv; in iwl_req_fw_callback()
1571 drv->trans->trans_cfg->base_params->max_event_log_size; in iwl_req_fw_callback()
1578 drv->trans->trans_cfg->base_params->max_event_log_size; in iwl_req_fw_callback()
1606 IWL_INFO(drv, "loaded firmware version %s op_mode %s\n", in iwl_req_fw_callback()
1607 drv->fw.fw_version, op->name); in iwl_req_fw_callback()
1609 iwl_dbg_tlv_load_bin(drv->trans->dev, drv->trans); in iwl_req_fw_callback()
1612 list_add_tail(&drv->list, &op->drv); in iwl_req_fw_callback()
1615 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_req_fw_callback()
1617 if (!drv->op_mode) { in iwl_req_fw_callback()
1631 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1642 IWL_ERR(drv, in iwl_req_fw_callback()
1652 if (iwl_request_firmware(drv, false)) in iwl_req_fw_callback()
1659 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1660 device_release_driver(drv->trans->dev); in iwl_req_fw_callback()
1672 struct iwl_drv *drv; in iwl_drv_start() local
1675 drv = kzalloc(sizeof(*drv), GFP_KERNEL); in iwl_drv_start()
1676 if (!drv) { in iwl_drv_start()
1681 drv->trans = trans; in iwl_drv_start()
1682 drv->dev = trans->dev; in iwl_drv_start()
1684 init_completion(&drv->request_firmware_complete); in iwl_drv_start()
1685 INIT_LIST_HEAD(&drv->list); in iwl_drv_start()
1689 drv->dbgfs_drv = debugfs_create_dir(dev_name(trans->dev), in iwl_drv_start()
1693 drv->trans->dbgfs_dir = debugfs_create_dir("trans", drv->dbgfs_drv); in iwl_drv_start()
1696 drv->trans->dbg.domains_bitmap = IWL_TRANS_FW_DBG_DOMAIN(drv->trans); in iwl_drv_start()
1698 ret = iwl_request_firmware(drv, true); in iwl_drv_start()
1704 return drv; in iwl_drv_start()
1708 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_start()
1709 iwl_dbg_tlv_free(drv->trans); in iwl_drv_start()
1711 kfree(drv); in iwl_drv_start()
1716 void iwl_drv_stop(struct iwl_drv *drv) in iwl_drv_stop() argument
1718 wait_for_completion(&drv->request_firmware_complete); in iwl_drv_stop()
1720 _iwl_op_mode_stop(drv); in iwl_drv_stop()
1722 iwl_dealloc_ucode(drv); in iwl_drv_stop()
1730 if (!list_empty(&drv->list)) in iwl_drv_stop()
1731 list_del(&drv->list); in iwl_drv_stop()
1735 drv->trans->ops->debugfs_cleanup(drv->trans); in iwl_drv_stop()
1737 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_stop()
1740 iwl_dbg_tlv_free(drv->trans); in iwl_drv_stop()
1742 kfree(drv); in iwl_drv_stop()
1760 struct iwl_drv *drv; in iwl_opmode_register() local
1770 list_for_each_entry(drv, &op->drv, list) in iwl_opmode_register()
1771 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_opmode_register()
1784 struct iwl_drv *drv; in iwl_opmode_deregister() local
1793 list_for_each_entry(drv, &iwlwifi_opmode_table[i].drv, list) in iwl_opmode_deregister()
1794 _iwl_op_mode_stop(drv); in iwl_opmode_deregister()
1808 INIT_LIST_HEAD(&iwlwifi_opmode_table[i].drv); in iwl_drv_init()