Lines Matching full:qmi
9 #include "qmi.h"
2034 hw_id_base += partner_ab->qmi.num_radios; in ath12k_host_cap_hw_link_id_init()
2054 "MLO is disabled hence skip QMI MLO cap"); in ath12k_host_cap_parse_mlo()
2058 if (!ab->qmi.num_radios || ab->qmi.num_radios == U8_MAX) { in ath12k_host_cap_parse_mlo()
2061 "skip QMI MLO cap due to invalid num_radio %d\n", in ath12k_host_cap_parse_mlo()
2062 ab->qmi.num_radios); in ath12k_host_cap_parse_mlo()
2104 info->num_local_links = partner_ab->qmi.num_radios; in ath12k_host_cap_parse_mlo()
2166 req.mem_cfg_mode = ab->qmi.target_mem_mode; in ath12k_qmi_host_cap_send()
2177 req.cal_done = ab->qmi.cal_done; in ath12k_qmi_host_cap_send()
2206 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_host_cap_send()
2211 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_host_cap_send()
2243 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_phy_cap_send()
2248 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_phy_cap_send()
2272 ab->qmi.num_radios = resp.num_phy; in ath12k_qmi_phy_cap_send()
2283 ab->qmi.num_radios = ab->hw_params->def_num_link; in ath12k_qmi_phy_cap_send()
2287 ab->qmi.num_radios); in ath12k_qmi_phy_cap_send()
2294 struct qmi_handle *handle = &ab->qmi.handle; in ath12k_qmi_fw_ind_register_send()
2329 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_fw_ind_register_send()
2379 if (ab->qmi.target_mem_delayed) { in ath12k_qmi_respond_fw_mem_request()
2381 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi delays mem_request %d\n", in ath12k_qmi_respond_fw_mem_request()
2382 ab->qmi.mem_seg_count); in ath12k_qmi_respond_fw_mem_request()
2385 req->mem_seg_len = ab->qmi.mem_seg_count; in ath12k_qmi_respond_fw_mem_request()
2387 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr; in ath12k_qmi_respond_fw_mem_request()
2388 req->mem_seg[i].size = ab->qmi.target_mem[i].size; in ath12k_qmi_respond_fw_mem_request()
2389 req->mem_seg[i].type = ab->qmi.target_mem[i].type; in ath12k_qmi_respond_fw_mem_request()
2391 "qmi req mem_seg[%d] %pad %u %u\n", i, in ath12k_qmi_respond_fw_mem_request()
2392 &ab->qmi.target_mem[i].paddr, in ath12k_qmi_respond_fw_mem_request()
2393 ab->qmi.target_mem[i].size, in ath12k_qmi_respond_fw_mem_request()
2394 ab->qmi.target_mem[i].type); in ath12k_qmi_respond_fw_mem_request()
2398 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_respond_fw_mem_request()
2403 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_respond_fw_mem_request()
2409 ath12k_warn(ab, "qmi failed to respond memory request, err = %d\n", in ath12k_qmi_respond_fw_mem_request()
2416 ath12k_warn(ab, "qmi failed memory request, err = %d\n", ret); in ath12k_qmi_respond_fw_mem_request()
2475 for (i = 0, mlo_idx = 0; i < ab->qmi.mem_seg_count; i++) { in ath12k_qmi_free_target_mem_chunk()
2476 if (!ab->qmi.target_mem[i].v.addr) in ath12k_qmi_free_target_mem_chunk()
2479 if (ab->qmi.target_mem[i].type == MLO_GLOBAL_MEM_REGION_TYPE) { in ath12k_qmi_free_target_mem_chunk()
2481 &ab->qmi.target_mem[i], in ath12k_qmi_free_target_mem_chunk()
2485 ab->qmi.target_mem[i].prev_size, in ath12k_qmi_free_target_mem_chunk()
2486 ab->qmi.target_mem[i].v.addr, in ath12k_qmi_free_target_mem_chunk()
2487 ab->qmi.target_mem[i].paddr); in ath12k_qmi_free_target_mem_chunk()
2488 ab->qmi.target_mem[i].v.addr = NULL; in ath12k_qmi_free_target_mem_chunk()
2521 ab->qmi.target_mem_delayed = true; in ath12k_qmi_alloc_chunk()
2523 "qmi dma allocation failed (%d B type %u), will try later with small size\n", in ath12k_qmi_alloc_chunk()
2553 ab->qmi.target_mem_delayed = false; in ath12k_qmi_alloc_target_mem_chunk()
2555 for (i = 0, mlo_idx = 0; i < ab->qmi.mem_seg_count; i++) { in ath12k_qmi_alloc_target_mem_chunk()
2556 chunk = &ab->qmi.target_mem[i]; in ath12k_qmi_alloc_target_mem_chunk()
2575 …ath12k_err(ab, "QMI MLO memory allocation failure, requested size %d is more than allocated size %… in ath12k_qmi_alloc_target_mem_chunk()
2584 …ath12k_err(ab, "QMI MLO chunk memory allocation failure for index %d, requested size %d is more th… in ath12k_qmi_alloc_target_mem_chunk()
2615 ath12k_err(ab, "QMI MLO memory size error, expected size is %d but requested size is %d", in ath12k_qmi_alloc_target_mem_chunk()
2653 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_request_target_cap()
2658 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_request_target_cap()
2664 ath12k_warn(ab, "qmi failed to send target cap request, err = %d\n", in ath12k_qmi_request_target_cap()
2671 ath12k_warn(ab, "qmi failed target cap request %d\n", ret); in ath12k_qmi_request_target_cap()
2676 ath12k_warn(ab, "qmi targetcap req failed, result: %d, err: %d\n", in ath12k_qmi_request_target_cap()
2683 ab->qmi.target.chip_id = resp.chip_info.chip_id; in ath12k_qmi_request_target_cap()
2684 ab->qmi.target.chip_family = resp.chip_info.chip_family; in ath12k_qmi_request_target_cap()
2688 ab->qmi.target.board_id = resp.board_info.board_id; in ath12k_qmi_request_target_cap()
2690 ab->qmi.target.board_id = board_id; in ath12k_qmi_request_target_cap()
2693 ab->qmi.target.soc_id = resp.soc_info.soc_id; in ath12k_qmi_request_target_cap()
2696 ab->qmi.target.fw_version = resp.fw_version_info.fw_version; in ath12k_qmi_request_target_cap()
2697 strscpy(ab->qmi.target.fw_build_timestamp, in ath12k_qmi_request_target_cap()
2699 sizeof(ab->qmi.target.fw_build_timestamp)); in ath12k_qmi_request_target_cap()
2703 strscpy(ab->qmi.target.fw_build_id, resp.fw_build_id, in ath12k_qmi_request_target_cap()
2704 sizeof(ab->qmi.target.fw_build_id)); in ath12k_qmi_request_target_cap()
2708 ab->qmi.dev_mem[i].start = in ath12k_qmi_request_target_cap()
2710 ab->qmi.dev_mem[i].size = in ath12k_qmi_request_target_cap()
2714 ab->qmi.dev_mem[i].start, in ath12k_qmi_request_target_cap()
2715 ab->qmi.dev_mem[i].size); in ath12k_qmi_request_target_cap()
2720 ab->qmi.target.eeprom_caldata = resp.eeprom_caldata_read_timeout; in ath12k_qmi_request_target_cap()
2721 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi cal data supported from eeprom\n"); in ath12k_qmi_request_target_cap()
2725 ab->qmi.target.chip_id, ab->qmi.target.chip_family, in ath12k_qmi_request_target_cap()
2726 ab->qmi.target.board_id, ab->qmi.target.soc_id); in ath12k_qmi_request_target_cap()
2729 ab->qmi.target.fw_version, in ath12k_qmi_request_target_cap()
2730 ab->qmi.target.fw_build_timestamp, in ath12k_qmi_request_target_cap()
2731 ab->qmi.target.fw_build_id); in ath12k_qmi_request_target_cap()
2767 req->file_id = ab->qmi.target.board_id; in ath12k_qmi_load_file_target_mem()
2792 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_load_file_target_mem()
2798 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi bdf download req fixed addr type %d\n", in ath12k_qmi_load_file_target_mem()
2801 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_load_file_target_mem()
2815 ath12k_warn(ab, "qmi BDF download failed, result: %d, err: %d\n", in ath12k_qmi_load_file_target_mem()
2828 "qmi bdf download request remaining %i\n", in ath12k_qmi_load_file_target_mem()
2857 ath12k_warn(ab, "qmi failed to load bdf:\n"); in ath12k_qmi_load_bdf_qmi()
2870 ath12k_warn(ab, "qmi failed to load regdb bin:\n"); in ath12k_qmi_load_bdf_qmi()
2876 if (ab->qmi.target.eeprom_caldata) { in ath12k_qmi_load_bdf_qmi()
2895 "qmi failed to load CAL data file:%s\n", in ath12k_qmi_load_bdf_qmi()
2907 ath12k_warn(ab, "qmi failed to load caldata\n"); in ath12k_qmi_load_bdf_qmi()
2911 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi caldata downloaded: type: %u\n", in ath12k_qmi_load_bdf_qmi()
2915 if (!ab->qmi.target.eeprom_caldata) in ath12k_qmi_load_bdf_qmi()
2923 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi bdf_type %d\n", type); in ath12k_qmi_load_bdf_qmi()
2929 ath12k_warn(ab, "qmi failed to load bdf file\n"); in ath12k_qmi_load_bdf_qmi()
2933 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi BDF download sequence completed\n"); in ath12k_qmi_load_bdf_qmi()
2940 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath12k_qmi_m3_free()
2953 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath12k_qmi_m3_load()
3016 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath12k_qmi_wlanfw_m3_info_send()
3031 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_wlanfw_m3_info_send()
3036 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_wlanfw_m3_info_send()
3042 ath12k_warn(ab, "qmi failed to send M3 information request, err = %d\n", in ath12k_qmi_wlanfw_m3_info_send()
3049 ath12k_warn(ab, "qmi failed M3 information request %d\n", ret); in ath12k_qmi_wlanfw_m3_info_send()
3054 ath12k_warn(ab, "qmi M3 info request failed, result: %d, err: %d\n", in ath12k_qmi_wlanfw_m3_info_send()
3075 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_wlanfw_mode_send()
3080 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_wlanfw_mode_send()
3086 ath12k_warn(ab, "qmi failed to send mode request, mode: %d, err = %d\n", in ath12k_qmi_wlanfw_mode_send()
3097 ath12k_warn(ab, "qmi failed set mode request, mode: %d, err = %d\n", in ath12k_qmi_wlanfw_mode_send()
3122 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce; in ath12k_qmi_wlanfw_wlan_cfg_send()
3123 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map; in ath12k_qmi_wlanfw_wlan_cfg_send()
3135 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len; in ath12k_qmi_wlanfw_wlan_cfg_send()
3146 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len; in ath12k_qmi_wlanfw_wlan_cfg_send()
3157 ab->qmi.ce_cfg.shadow_reg_v3_len, in ath12k_qmi_wlanfw_wlan_cfg_send()
3159 memcpy(&req->shadow_reg_v3, ab->qmi.ce_cfg.shadow_reg_v3, in ath12k_qmi_wlanfw_wlan_cfg_send()
3165 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_wlanfw_wlan_cfg_send()
3170 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_wlanfw_wlan_cfg_send()
3176 ath12k_warn(ab, "qmi failed to send wlan config request, err = %d\n", in ath12k_qmi_wlanfw_wlan_cfg_send()
3183 ath12k_warn(ab, "qmi failed wlan config request, err = %d\n", ret); in ath12k_qmi_wlanfw_wlan_cfg_send()
3188 ath12k_warn(ab, "qmi wlan config request failed, result: %d, err: %d\n", in ath12k_qmi_wlanfw_wlan_cfg_send()
3209 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath12k_qmi_wlanfw_wlan_ini_send()
3214 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath12k_qmi_wlanfw_wlan_ini_send()
3220 ath12k_warn(ab, "failed to send QMI wlan ini request: %d\n", in ath12k_qmi_wlanfw_wlan_ini_send()
3227 ath12k_warn(ab, "failed to receive QMI wlan ini request: %d\n", ret); in ath12k_qmi_wlanfw_wlan_ini_send()
3232 ath12k_warn(ab, "QMI wlan ini response failure: %d %d\n", in ath12k_qmi_wlanfw_wlan_ini_send()
3250 ath12k_warn(ab, "qmi failed to send wlan mode off\n"); in ath12k_qmi_firmware_stop()
3262 ath12k_warn(ab, "qmi failed to send wlan fw ini: %d\n", ret); in ath12k_qmi_firmware_start()
3268 ath12k_warn(ab, "qmi failed to send wlan cfg:%d\n", ret); in ath12k_qmi_firmware_start()
3274 ath12k_warn(ab, "qmi failed to send wlan fw mode:%d\n", ret); in ath12k_qmi_firmware_start()
3282 ath12k_qmi_driver_event_post(struct ath12k_qmi *qmi, in ath12k_qmi_driver_event_post() argument
3295 spin_lock(&qmi->event_lock); in ath12k_qmi_driver_event_post()
3296 list_add_tail(&event->list, &qmi->event_list); in ath12k_qmi_driver_event_post()
3297 spin_unlock(&qmi->event_lock); in ath12k_qmi_driver_event_post()
3299 queue_work(qmi->event_wq, &qmi->event_work); in ath12k_qmi_driver_event_post()
3306 struct ath12k_qmi *qmi = &ab->qmi; in ath12k_qmi_trigger_host_cap() local
3308 spin_lock(&qmi->event_lock); in ath12k_qmi_trigger_host_cap()
3310 if (ath12k_qmi_get_event_block(qmi)) in ath12k_qmi_trigger_host_cap()
3311 ath12k_qmi_set_event_block(qmi, false); in ath12k_qmi_trigger_host_cap()
3313 spin_unlock(&qmi->event_lock); in ath12k_qmi_trigger_host_cap()
3318 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_HOST_CAP, NULL); in ath12k_qmi_trigger_host_cap()
3329 if (!(ab && ab->qmi.num_radios != U8_MAX)) in ath12k_qmi_hw_group_host_cap_ready()
3348 spin_lock(&ab->qmi.event_lock); in ath12k_qmi_hw_group_find_blocked()
3350 if (ath12k_qmi_get_event_block(&ab->qmi)) { in ath12k_qmi_hw_group_find_blocked()
3351 spin_unlock(&ab->qmi.event_lock); in ath12k_qmi_hw_group_find_blocked()
3355 spin_unlock(&ab->qmi.event_lock); in ath12k_qmi_hw_group_find_blocked()
3363 int ath12k_qmi_event_server_arrive(struct ath12k_qmi *qmi) in ath12k_qmi_event_server_arrive() argument
3365 struct ath12k_base *ab = qmi->ab, *block_ab; in ath12k_qmi_event_server_arrive()
3373 ath12k_warn(ab, "qmi failed to send FW indication QMI:%d\n", ret); in ath12k_qmi_event_server_arrive()
3377 spin_lock(&qmi->event_lock); in ath12k_qmi_event_server_arrive()
3379 ath12k_qmi_set_event_block(qmi, true); in ath12k_qmi_event_server_arrive()
3381 spin_unlock(&qmi->event_lock); in ath12k_qmi_event_server_arrive()
3400 int ath12k_qmi_event_mem_request(struct ath12k_qmi *qmi) in ath12k_qmi_event_mem_request() argument
3402 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_event_mem_request()
3407 ath12k_warn(ab, "qmi failed to respond fw mem req:%d\n", ret); in ath12k_qmi_event_mem_request()
3416 int ath12k_qmi_event_load_bdf(struct ath12k_qmi *qmi) in ath12k_qmi_event_load_bdf() argument
3418 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_event_load_bdf()
3423 ath12k_warn(ab, "qmi failed to req target capabilities:%d\n", ret); in ath12k_qmi_event_load_bdf()
3429 ath12k_warn(ab, "qmi failed to load regdb file:%d\n", ret); in ath12k_qmi_event_load_bdf()
3435 ath12k_warn(ab, "qmi failed to load board data file:%d\n", ret); in ath12k_qmi_event_load_bdf()
3442 ath12k_warn(ab, "qmi failed to load calibrated data :%d\n", ret); in ath12k_qmi_event_load_bdf()
3447 ath12k_warn(ab, "qmi failed to send m3 info req:%d\n", ret); in ath12k_qmi_event_load_bdf()
3459 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle); in ath12k_qmi_msg_mem_request_cb() local
3460 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_msg_mem_request_cb()
3464 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware request memory request\n"); in ath12k_qmi_msg_mem_request_cb()
3471 ab->qmi.mem_seg_count = msg->mem_seg_len; in ath12k_qmi_msg_mem_request_cb()
3473 for (i = 0; i < qmi->mem_seg_count ; i++) { in ath12k_qmi_msg_mem_request_cb()
3474 ab->qmi.target_mem[i].type = msg->mem_seg[i].type; in ath12k_qmi_msg_mem_request_cb()
3475 ab->qmi.target_mem[i].size = msg->mem_seg[i].size; in ath12k_qmi_msg_mem_request_cb()
3476 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi mem seg type %d size %d\n", in ath12k_qmi_msg_mem_request_cb()
3482 ath12k_warn(ab, "qmi failed to alloc target memory: %d\n", in ath12k_qmi_msg_mem_request_cb()
3487 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_REQUEST_MEM, NULL); in ath12k_qmi_msg_mem_request_cb()
3495 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle); in ath12k_qmi_msg_mem_ready_cb() local
3496 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_msg_mem_ready_cb()
3498 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware memory ready indication\n"); in ath12k_qmi_msg_mem_ready_cb()
3499 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_FW_MEM_READY, NULL); in ath12k_qmi_msg_mem_ready_cb()
3507 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle); in ath12k_qmi_msg_fw_ready_cb() local
3508 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_msg_fw_ready_cb()
3510 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware ready\n"); in ath12k_qmi_msg_fw_ready_cb()
3511 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_FW_READY, NULL); in ath12k_qmi_msg_fw_ready_cb()
3544 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle); in ath12k_qmi_ops_new_server() local
3545 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_ops_new_server()
3546 struct sockaddr_qrtr *sq = &qmi->sq; in ath12k_qmi_ops_new_server()
3556 ath12k_warn(ab, "qmi failed to connect to remote service %d\n", ret); in ath12k_qmi_ops_new_server()
3560 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi wifi fw qmi service connected\n"); in ath12k_qmi_ops_new_server()
3561 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_SERVER_ARRIVE, NULL); in ath12k_qmi_ops_new_server()
3569 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle); in ath12k_qmi_ops_del_server() local
3570 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_ops_del_server()
3572 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi wifi fw del server\n"); in ath12k_qmi_ops_del_server()
3573 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_SERVER_EXIT, NULL); in ath12k_qmi_ops_del_server()
3581 static int ath12k_qmi_event_host_cap(struct ath12k_qmi *qmi) in ath12k_qmi_event_host_cap() argument
3583 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_event_host_cap()
3588 ath12k_warn(ab, "failed to send qmi host cap for device id %d: %d\n", in ath12k_qmi_event_host_cap()
3598 struct ath12k_qmi *qmi = container_of(work, struct ath12k_qmi, in ath12k_qmi_driver_event_work() local
3601 struct ath12k_base *ab = qmi->ab; in ath12k_qmi_driver_event_work()
3604 spin_lock(&qmi->event_lock); in ath12k_qmi_driver_event_work()
3605 while (!list_empty(&qmi->event_list)) { in ath12k_qmi_driver_event_work()
3606 event = list_first_entry(&qmi->event_list, in ath12k_qmi_driver_event_work()
3609 spin_unlock(&qmi->event_lock); in ath12k_qmi_driver_event_work()
3616 ret = ath12k_qmi_event_server_arrive(qmi); in ath12k_qmi_driver_event_work()
3624 ret = ath12k_qmi_event_mem_request(qmi); in ath12k_qmi_driver_event_work()
3629 ret = ath12k_qmi_event_load_bdf(qmi); in ath12k_qmi_driver_event_work()
3653 ret = ath12k_qmi_event_host_cap(qmi); in ath12k_qmi_driver_event_work()
3664 spin_lock(&qmi->event_lock); in ath12k_qmi_driver_event_work()
3666 spin_unlock(&qmi->event_lock); in ath12k_qmi_driver_event_work()
3673 memset(&ab->qmi.target, 0, sizeof(struct target_info)); in ath12k_qmi_init_service()
3674 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk)); in ath12k_qmi_init_service()
3675 ab->qmi.ab = ab; in ath12k_qmi_init_service()
3677 ab->qmi.target_mem_mode = ATH12K_QMI_TARGET_MEM_MODE_DEFAULT; in ath12k_qmi_init_service()
3678 ret = qmi_handle_init(&ab->qmi.handle, ATH12K_QMI_RESP_LEN_MAX, in ath12k_qmi_init_service()
3681 ath12k_warn(ab, "failed to initialize qmi handle\n"); in ath12k_qmi_init_service()
3685 ab->qmi.event_wq = alloc_ordered_workqueue("ath12k_qmi_driver_event", 0); in ath12k_qmi_init_service()
3686 if (!ab->qmi.event_wq) { in ath12k_qmi_init_service()
3691 INIT_LIST_HEAD(&ab->qmi.event_list); in ath12k_qmi_init_service()
3692 spin_lock_init(&ab->qmi.event_lock); in ath12k_qmi_init_service()
3693 INIT_WORK(&ab->qmi.event_work, ath12k_qmi_driver_event_work); in ath12k_qmi_init_service()
3695 ret = qmi_add_lookup(&ab->qmi.handle, ATH12K_QMI_WLFW_SERVICE_ID_V01, in ath12k_qmi_init_service()
3697 ab->qmi.service_ins_id); in ath12k_qmi_init_service()
3699 ath12k_warn(ab, "failed to add qmi lookup\n"); in ath12k_qmi_init_service()
3700 destroy_workqueue(ab->qmi.event_wq); in ath12k_qmi_init_service()
3709 if (!ab->qmi.ab) in ath12k_qmi_deinit_service()
3712 qmi_handle_release(&ab->qmi.handle); in ath12k_qmi_deinit_service()
3713 cancel_work_sync(&ab->qmi.event_work); in ath12k_qmi_deinit_service()
3714 destroy_workqueue(ab->qmi.event_wq); in ath12k_qmi_deinit_service()
3717 ab->qmi.ab = NULL; in ath12k_qmi_deinit_service()