Lines Matching refs:drv
85 struct list_head drv; /* list of devices using this op_mode */ member
103 static void iwl_free_fw_desc(struct iwl_drv *drv, struct fw_desc *desc) in iwl_free_fw_desc() argument
110 static void iwl_free_fw_img(struct iwl_drv *drv, struct fw_img *img) in iwl_free_fw_img() argument
114 iwl_free_fw_desc(drv, &img->sec[i]); in iwl_free_fw_img()
118 static void iwl_dealloc_ucode(struct iwl_drv *drv) in iwl_dealloc_ucode() argument
122 kfree(drv->fw.dbg.dest_tlv); in iwl_dealloc_ucode()
123 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) in iwl_dealloc_ucode()
124 kfree(drv->fw.dbg.conf_tlv[i]); in iwl_dealloc_ucode()
125 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) in iwl_dealloc_ucode()
126 kfree(drv->fw.dbg.trigger_tlv[i]); in iwl_dealloc_ucode()
127 kfree(drv->fw.dbg.mem_tlv); in iwl_dealloc_ucode()
128 kfree(drv->fw.iml); in iwl_dealloc_ucode()
129 kfree(drv->fw.ucode_capa.cmd_versions); in iwl_dealloc_ucode()
130 kfree(drv->fw.phy_integration_ver); in iwl_dealloc_ucode()
133 iwl_free_fw_img(drv, drv->fw.img + i); in iwl_dealloc_ucode()
136 memset(&drv->fw, 0, sizeof(drv->fw)); in iwl_dealloc_ucode()
139 static int iwl_alloc_fw_desc(struct iwl_drv *drv, struct fw_desc *desc, in iwl_alloc_fw_desc() argument
164 static int iwl_request_firmware(struct iwl_drv *drv, bool first) in iwl_request_firmware() argument
166 const struct iwl_cfg *cfg = drv->trans->cfg; in iwl_request_firmware()
169 if (drv->trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_9000 && in iwl_request_firmware()
170 (CSR_HW_REV_STEP(drv->trans->hw_rev) != SILICON_B_STEP && in iwl_request_firmware()
171 CSR_HW_REV_STEP(drv->trans->hw_rev) != SILICON_C_STEP)) { in iwl_request_firmware()
172 IWL_ERR(drv, in iwl_request_firmware()
174 drv->trans->hw_rev); in iwl_request_firmware()
179 drv->fw_index = cfg->ucode_api_max; in iwl_request_firmware()
180 sprintf(tag, "%d", drv->fw_index); in iwl_request_firmware()
182 drv->fw_index--; in iwl_request_firmware()
183 sprintf(tag, "%d", drv->fw_index); in iwl_request_firmware()
186 if (drv->fw_index < cfg->ucode_api_min) { in iwl_request_firmware()
187 IWL_ERR(drv, "no suitable firmware found!\n"); in iwl_request_firmware()
190 IWL_ERR(drv, "%s%d is required\n", cfg->fw_name_pre, in iwl_request_firmware()
193 IWL_ERR(drv, "minimum version required: %s%d\n", in iwl_request_firmware()
195 IWL_ERR(drv, "maximum version supported: %s%d\n", in iwl_request_firmware()
199 IWL_ERR(drv, in iwl_request_firmware()
204 snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s%s.ucode", in iwl_request_firmware()
207 IWL_DEBUG_FW_INFO(drv, "attempting to load firmware '%s'\n", in iwl_request_firmware()
208 drv->firmware_name); in iwl_request_firmware()
210 return request_firmware_nowait(THIS_MODULE, 1, drv->firmware_name, in iwl_request_firmware()
211 drv->trans->dev, in iwl_request_firmware()
212 GFP_KERNEL, drv, iwl_req_fw_callback); in iwl_request_firmware()
387 static int iwl_set_default_calib(struct iwl_drv *drv, const u8 *data) in iwl_set_default_calib() argument
393 IWL_ERR(drv, "Wrong ucode_type %u for default calibration.\n", in iwl_set_default_calib()
397 drv->fw.default_calib[ucode_type].flow_trigger = in iwl_set_default_calib()
399 drv->fw.default_calib[ucode_type].event_trigger = in iwl_set_default_calib()
405 static void iwl_set_ucode_api_flags(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_api_flags() argument
414 IWL_WARN(drv, in iwl_set_ucode_api_flags()
426 static void iwl_set_ucode_capabilities(struct iwl_drv *drv, const u8 *data, in iwl_set_ucode_capabilities() argument
435 IWL_WARN(drv, in iwl_set_ucode_capabilities()
447 static const char *iwl_reduced_fw_name(struct iwl_drv *drv) in iwl_reduced_fw_name() argument
449 const char *name = drv->firmware_name; in iwl_reduced_fw_name()
457 static int iwl_parse_v1_v2_firmware(struct iwl_drv *drv, in iwl_parse_v1_v2_firmware() argument
466 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_v1_v2_firmware()
467 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_parse_v1_v2_firmware()
473 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
492 IWL_ERR(drv, "File size too small!\n"); in iwl_parse_v1_v2_firmware()
513 snprintf(drv->fw.fw_version, in iwl_parse_v1_v2_firmware()
514 sizeof(drv->fw.fw_version), in iwl_parse_v1_v2_firmware()
516 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
517 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
518 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
519 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_v1_v2_firmware()
520 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_v1_v2_firmware()
530 IWL_ERR(drv, in iwl_parse_v1_v2_firmware()
556 static int iwl_parse_tlv_firmware(struct iwl_drv *drv, in iwl_parse_tlv_firmware() argument
576 IWL_ERR(drv, "uCode has invalid length: %zd\n", len); in iwl_parse_tlv_firmware()
581 IWL_ERR(drv, "invalid uCode magic: 0X%x\n", in iwl_parse_tlv_firmware()
586 drv->fw.ucode_ver = le32_to_cpu(ucode->ver); in iwl_parse_tlv_firmware()
587 memcpy(drv->fw.human_readable, ucode->human_readable, in iwl_parse_tlv_firmware()
588 sizeof(drv->fw.human_readable)); in iwl_parse_tlv_firmware()
596 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
597 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
599 IWL_UCODE_MAJOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
600 IWL_UCODE_MINOR(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
601 IWL_UCODE_API(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
602 IWL_UCODE_SERIAL(drv->fw.ucode_ver), in iwl_parse_tlv_firmware()
603 buildstr, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
618 IWL_ERR(drv, "invalid TLV len: %zd/%u\n", in iwl_parse_tlv_firmware()
663 IWL_ERR(drv, "Found unexpected BOOT ucode\n"); in iwl_parse_tlv_firmware()
695 iwl_set_ucode_api_flags(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
700 iwl_set_ucode_capabilities(drv, tlv_data, capa); in iwl_parse_tlv_firmware()
741 drv->fw.enhance_sensitivity_table = true; in iwl_parse_tlv_firmware()
770 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
775 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
780 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
785 if (iwl_set_default_calib(drv, tlv_data)) in iwl_parse_tlv_firmware()
791 drv->fw.phy_config = le32_to_cpup((__le32 *)tlv_data); in iwl_parse_tlv_firmware()
792 drv->fw.valid_tx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
795 drv->fw.valid_rx_ant = (drv->fw.phy_config & in iwl_parse_tlv_firmware()
802 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
807 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
812 drv->fw.type = IWL_FW_MVM; in iwl_parse_tlv_firmware()
821 drv->fw.img[IWL_UCODE_REGULAR].is_dual_cpus = in iwl_parse_tlv_firmware()
823 drv->fw.img[IWL_UCODE_INIT].is_dual_cpus = in iwl_parse_tlv_firmware()
825 drv->fw.img[IWL_UCODE_WOWLAN].is_dual_cpus = in iwl_parse_tlv_firmware()
828 IWL_ERR(drv, "Driver support upto 2 CPUs\n"); in iwl_parse_tlv_firmware()
833 if (iwl_store_cscheme(&drv->fw, tlv_data, tlv_len)) in iwl_parse_tlv_firmware()
855 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
856 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
858 local_comp, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
860 snprintf(drv->fw.fw_version, in iwl_parse_tlv_firmware()
861 sizeof(drv->fw.fw_version), in iwl_parse_tlv_firmware()
863 local_comp, iwl_reduced_fw_name(drv)); in iwl_parse_tlv_firmware()
877 IWL_ERR(drv, in iwl_parse_tlv_firmware()
884 IWL_ERR(drv, in iwl_parse_tlv_firmware()
899 IWL_INFO(drv, "Found debug destination: %s\n", in iwl_parse_tlv_firmware()
902 drv->fw.dbg.n_dest_reg = (dest_v1) ? in iwl_parse_tlv_firmware()
910 drv->fw.dbg.n_dest_reg /= in iwl_parse_tlv_firmware()
911 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]); in iwl_parse_tlv_firmware()
919 IWL_ERR(drv, in iwl_parse_tlv_firmware()
925 if (conf->id >= ARRAY_SIZE(drv->fw.dbg.conf_tlv)) { in iwl_parse_tlv_firmware()
926 IWL_ERR(drv, in iwl_parse_tlv_firmware()
933 IWL_ERR(drv, in iwl_parse_tlv_firmware()
942 IWL_INFO(drv, "Found debug configuration: %d\n", in iwl_parse_tlv_firmware()
954 if (trigger_id >= ARRAY_SIZE(drv->fw.dbg.trigger_tlv)) { in iwl_parse_tlv_firmware()
955 IWL_ERR(drv, in iwl_parse_tlv_firmware()
962 IWL_ERR(drv, in iwl_parse_tlv_firmware()
968 IWL_INFO(drv, "Found debug trigger: %u\n", trigger->id); in iwl_parse_tlv_firmware()
976 IWL_ERR(drv, in iwl_parse_tlv_firmware()
981 drv->fw.dbg.dump_mask = in iwl_parse_tlv_firmware()
996 IWL_DEBUG_FW(drv, in iwl_parse_tlv_firmware()
1001 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1008 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1014 drv->fw.img[IWL_UCODE_REGULAR].paging_mem_size = in iwl_parse_tlv_firmware()
1017 drv->fw.img[usniffer_img].paging_mem_size = in iwl_parse_tlv_firmware()
1032 IWL_DEBUG_INFO(drv, "Found debug memory segment: %u\n", in iwl_parse_tlv_firmware()
1046 drv->fw.iml_len = tlv_len; in iwl_parse_tlv_firmware()
1047 drv->fw.iml = kmemdup(tlv_data, tlv_len, GFP_KERNEL); in iwl_parse_tlv_firmware()
1048 if (!drv->fw.iml) in iwl_parse_tlv_firmware()
1074 IWL_INFO(drv, "TLV_FW_FSEQ_VERSION: %s\n", in iwl_parse_tlv_firmware()
1083 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1097 if (drv->trans->trans_cfg->device_family < in iwl_parse_tlv_firmware()
1100 drv->trans->dbg.umac_error_event_table = in iwl_parse_tlv_firmware()
1103 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1113 if (drv->trans->trans_cfg->device_family < in iwl_parse_tlv_firmware()
1116 drv->trans->dbg.lmac_error_event_table[0] = in iwl_parse_tlv_firmware()
1119 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1128 drv->trans->dbg.tcm_error_event_table = in iwl_parse_tlv_firmware()
1130 drv->trans->dbg.error_event_table_tlv_status |= in iwl_parse_tlv_firmware()
1140 iwl_dbg_tlv_alloc(drv->trans, tlv, false); in iwl_parse_tlv_firmware()
1144 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1160 if (drv->fw.phy_integration_ver) { in iwl_parse_tlv_firmware()
1161 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1166 drv->fw.phy_integration_ver = in iwl_parse_tlv_firmware()
1168 if (!drv->fw.phy_integration_ver) in iwl_parse_tlv_firmware()
1170 drv->fw.phy_integration_ver_len = tlv_len; in iwl_parse_tlv_firmware()
1173 IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type); in iwl_parse_tlv_firmware()
1180 IWL_ERR(drv, in iwl_parse_tlv_firmware()
1186 IWL_ERR(drv, "invalid TLV after parsing: %zd\n", len); in iwl_parse_tlv_firmware()
1187 iwl_print_hex_dump(drv, IWL_DL_FW, (u8 *)data, len); in iwl_parse_tlv_firmware()
1194 IWL_ERR(drv, "TLV %d has invalid size: %u\n", tlv_type, tlv_len); in iwl_parse_tlv_firmware()
1196 iwl_print_hex_dump(drv, IWL_DL_FW, tlv_data, tlv_len); in iwl_parse_tlv_firmware()
1201 static int iwl_alloc_ucode(struct iwl_drv *drv, in iwl_alloc_ucode() argument
1211 drv->fw.img[type].sec = sec; in iwl_alloc_ucode()
1212 drv->fw.img[type].num_sec = pieces->img[type].sec_counter; in iwl_alloc_ucode()
1215 if (iwl_alloc_fw_desc(drv, &sec[i], get_sec(pieces, type, i))) in iwl_alloc_ucode()
1221 static int validate_sec_sizes(struct iwl_drv *drv, in validate_sec_sizes() argument
1225 IWL_DEBUG_INFO(drv, "f/w package hdr runtime inst size = %zd\n", in validate_sec_sizes()
1228 IWL_DEBUG_INFO(drv, "f/w package hdr runtime data size = %zd\n", in validate_sec_sizes()
1231 IWL_DEBUG_INFO(drv, "f/w package hdr init inst size = %zd\n", in validate_sec_sizes()
1233 IWL_DEBUG_INFO(drv, "f/w package hdr init data size = %zd\n", in validate_sec_sizes()
1239 IWL_ERR(drv, "uCode instr len %zd too large to fit in\n", in validate_sec_sizes()
1247 IWL_ERR(drv, "uCode data len %zd too large to fit in\n", in validate_sec_sizes()
1255 IWL_ERR(drv, "uCode init instr len %zd too large to fit in\n", in validate_sec_sizes()
1263 IWL_ERR(drv, "uCode init data len %zd too large to fit in\n", in validate_sec_sizes()
1272 _iwl_op_mode_start(struct iwl_drv *drv, struct iwlwifi_opmode_table *op) in _iwl_op_mode_start() argument
1282 drv->dbgfs_op_mode = debugfs_create_dir(op->name, in _iwl_op_mode_start()
1283 drv->dbgfs_drv); in _iwl_op_mode_start()
1284 dbgfs_dir = drv->dbgfs_op_mode; in _iwl_op_mode_start()
1287 op_mode = ops->start(drv->trans, drv->trans->cfg, in _iwl_op_mode_start()
1288 &drv->fw, dbgfs_dir); in _iwl_op_mode_start()
1293 IWL_ERR(drv, "retry init count %d\n", retry); in _iwl_op_mode_start()
1296 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_start()
1297 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_start()
1304 static void _iwl_op_mode_stop(struct iwl_drv *drv) in _iwl_op_mode_stop() argument
1307 if (drv->op_mode) { in _iwl_op_mode_stop()
1308 iwl_op_mode_stop(drv->op_mode); in _iwl_op_mode_stop()
1309 drv->op_mode = NULL; in _iwl_op_mode_stop()
1312 debugfs_remove_recursive(drv->dbgfs_op_mode); in _iwl_op_mode_stop()
1313 drv->dbgfs_op_mode = NULL; in _iwl_op_mode_stop()
1326 struct iwl_drv *drv = context; in iwl_req_fw_callback() local
1327 struct iwl_fw *fw = &drv->fw; in iwl_req_fw_callback()
1332 const unsigned int api_max = drv->trans->cfg->ucode_api_max; in iwl_req_fw_callback()
1333 const unsigned int api_min = drv->trans->cfg->ucode_api_min; in iwl_req_fw_callback()
1356 IWL_DEBUG_FW_INFO(drv, "Loaded firmware file '%s' (%zd bytes).\n", in iwl_req_fw_callback()
1357 drv->firmware_name, ucode_raw->size); in iwl_req_fw_callback()
1361 IWL_ERR(drv, "File size way too small!\n"); in iwl_req_fw_callback()
1369 err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces); in iwl_req_fw_callback()
1371 err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces, in iwl_req_fw_callback()
1377 if (fw_has_api(&drv->fw.ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION)) in iwl_req_fw_callback()
1378 api_ver = drv->fw.ucode_ver; in iwl_req_fw_callback()
1380 api_ver = IWL_UCODE_API(drv->fw.ucode_ver); in iwl_req_fw_callback()
1388 IWL_ERR(drv, in iwl_req_fw_callback()
1399 if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, in iwl_req_fw_callback()
1400 drv->trans->cfg)) in iwl_req_fw_callback()
1410 if (iwl_alloc_ucode(drv, pieces, i)) in iwl_req_fw_callback()
1414 size_t dbg_dest_size = sizeof(*drv->fw.dbg.dest_tlv) + in iwl_req_fw_callback()
1415 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1416 drv->fw.dbg.n_dest_reg; in iwl_req_fw_callback()
1418 drv->fw.dbg.dest_tlv = kmalloc(dbg_dest_size, GFP_KERNEL); in iwl_req_fw_callback()
1420 if (!drv->fw.dbg.dest_tlv) in iwl_req_fw_callback()
1424 memcpy(drv->fw.dbg.dest_tlv, pieces->dbg_dest_tlv_v1, in iwl_req_fw_callback()
1428 drv->fw.dbg.dest_tlv; in iwl_req_fw_callback()
1443 sizeof(drv->fw.dbg.dest_tlv->reg_ops[0]) * in iwl_req_fw_callback()
1444 drv->fw.dbg.n_dest_reg); in iwl_req_fw_callback()
1460 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.conf_tlv); i++) { in iwl_req_fw_callback()
1462 drv->fw.dbg.conf_tlv[i] = in iwl_req_fw_callback()
1466 if (!drv->fw.dbg.conf_tlv[i]) in iwl_req_fw_callback()
1493 for (i = 0; i < ARRAY_SIZE(drv->fw.dbg.trigger_tlv); i++) { in iwl_req_fw_callback()
1506 drv->fw.dbg.trigger_tlv_len[i] = in iwl_req_fw_callback()
1508 drv->fw.dbg.trigger_tlv[i] = in iwl_req_fw_callback()
1510 drv->fw.dbg.trigger_tlv_len[i], in iwl_req_fw_callback()
1512 if (!drv->fw.dbg.trigger_tlv[i]) in iwl_req_fw_callback()
1519 drv->fw.dbg.mem_tlv = pieces->dbg_mem_tlv; in iwl_req_fw_callback()
1521 drv->fw.dbg.n_mem_tlv = pieces->n_mem_tlv; in iwl_req_fw_callback()
1533 drv->trans->trans_cfg->base_params->max_event_log_size; in iwl_req_fw_callback()
1540 drv->trans->trans_cfg->base_params->max_event_log_size; in iwl_req_fw_callback()
1568 IWL_INFO(drv, "loaded firmware version %s op_mode %s\n", in iwl_req_fw_callback()
1569 drv->fw.fw_version, op->name); in iwl_req_fw_callback()
1571 iwl_dbg_tlv_load_bin(drv->trans->dev, drv->trans); in iwl_req_fw_callback()
1574 list_add_tail(&drv->list, &op->drv); in iwl_req_fw_callback()
1577 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_req_fw_callback()
1579 if (!drv->op_mode) { in iwl_req_fw_callback()
1593 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1608 if (iwl_request_firmware(drv, false)) in iwl_req_fw_callback()
1615 complete(&drv->request_firmware_complete); in iwl_req_fw_callback()
1616 device_release_driver(drv->trans->dev); in iwl_req_fw_callback()
1621 iwl_dealloc_ucode(drv); in iwl_req_fw_callback()
1633 struct iwl_drv *drv; in iwl_drv_start() local
1636 drv = kzalloc(sizeof(*drv), GFP_KERNEL); in iwl_drv_start()
1637 if (!drv) { in iwl_drv_start()
1642 drv->trans = trans; in iwl_drv_start()
1643 drv->dev = trans->dev; in iwl_drv_start()
1645 init_completion(&drv->request_firmware_complete); in iwl_drv_start()
1646 INIT_LIST_HEAD(&drv->list); in iwl_drv_start()
1650 drv->dbgfs_drv = debugfs_create_dir(dev_name(trans->dev), in iwl_drv_start()
1654 drv->trans->dbgfs_dir = debugfs_create_dir("trans", drv->dbgfs_drv); in iwl_drv_start()
1657 drv->trans->dbg.domains_bitmap = IWL_TRANS_FW_DBG_DOMAIN(drv->trans); in iwl_drv_start()
1659 ret = iwl_request_firmware(drv, true); in iwl_drv_start()
1665 return drv; in iwl_drv_start()
1669 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_start()
1670 iwl_dbg_tlv_free(drv->trans); in iwl_drv_start()
1672 kfree(drv); in iwl_drv_start()
1677 void iwl_drv_stop(struct iwl_drv *drv) in iwl_drv_stop() argument
1679 wait_for_completion(&drv->request_firmware_complete); in iwl_drv_stop()
1681 _iwl_op_mode_stop(drv); in iwl_drv_stop()
1683 iwl_dealloc_ucode(drv); in iwl_drv_stop()
1691 if (!list_empty(&drv->list)) in iwl_drv_stop()
1692 list_del(&drv->list); in iwl_drv_stop()
1696 drv->trans->ops->debugfs_cleanup(drv->trans); in iwl_drv_stop()
1698 debugfs_remove_recursive(drv->dbgfs_drv); in iwl_drv_stop()
1701 iwl_dbg_tlv_free(drv->trans); in iwl_drv_stop()
1703 kfree(drv); in iwl_drv_stop()
1721 struct iwl_drv *drv; in iwl_opmode_register() local
1731 list_for_each_entry(drv, &op->drv, list) in iwl_opmode_register()
1732 drv->op_mode = _iwl_op_mode_start(drv, op); in iwl_opmode_register()
1745 struct iwl_drv *drv; in iwl_opmode_deregister() local
1754 list_for_each_entry(drv, &iwlwifi_opmode_table[i].drv, list) in iwl_opmode_deregister()
1755 _iwl_op_mode_stop(drv); in iwl_opmode_deregister()
1769 INIT_LIST_HEAD(&iwlwifi_opmode_table[i].drv); in iwl_drv_init()