Lines Matching full:qmi
9 #include "qmi.h"
1721 req.mem_cfg_mode = ab->qmi.target_mem_mode; in ath11k_qmi_host_cap_send()
1739 req.cal_done = ab->qmi.cal_done; in ath11k_qmi_host_cap_send()
1762 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_host_cap_send()
1767 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_host_cap_send()
1796 struct qmi_handle *handle = &ab->qmi.handle; in ath11k_qmi_fw_ind_register_send()
1822 /* WCN6750 doesn't request for DDR memory via QMI, in ath11k_qmi_fw_ind_register_send()
1840 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_fw_ind_register_send()
1892 ab->qmi.target_mem_delayed) { in ath11k_qmi_respond_fw_mem_request()
1895 ab->qmi.mem_seg_count); in ath11k_qmi_respond_fw_mem_request()
1899 req->mem_seg_len = ab->qmi.mem_seg_count; in ath11k_qmi_respond_fw_mem_request()
1902 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr; in ath11k_qmi_respond_fw_mem_request()
1903 req->mem_seg[i].size = ab->qmi.target_mem[i].size; in ath11k_qmi_respond_fw_mem_request()
1904 req->mem_seg[i].type = ab->qmi.target_mem[i].type; in ath11k_qmi_respond_fw_mem_request()
1907 &ab->qmi.target_mem[i].paddr, in ath11k_qmi_respond_fw_mem_request()
1908 ab->qmi.target_mem[i].size, in ath11k_qmi_respond_fw_mem_request()
1909 ab->qmi.target_mem[i].type); in ath11k_qmi_respond_fw_mem_request()
1913 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_respond_fw_mem_request()
1921 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_respond_fw_mem_request()
1927 ath11k_warn(ab, "failed to respond qmi memory request: %d\n", in ath11k_qmi_respond_fw_mem_request()
1934 ath11k_warn(ab, "failed to wait qmi memory request: %d\n", ret); in ath11k_qmi_respond_fw_mem_request()
1945 ath11k_warn(ab, "qmi respond memory request failed: %d %d\n", in ath11k_qmi_respond_fw_mem_request()
1959 for (i = 0; i < ab->qmi.mem_seg_count; i++) { in ath11k_qmi_free_target_mem_chunk()
1960 if (!ab->qmi.target_mem[i].anyaddr) in ath11k_qmi_free_target_mem_chunk()
1965 iounmap(ab->qmi.target_mem[i].iaddr); in ath11k_qmi_free_target_mem_chunk()
1966 ab->qmi.target_mem[i].iaddr = NULL; in ath11k_qmi_free_target_mem_chunk()
1971 ab->qmi.target_mem[i].prev_size, in ath11k_qmi_free_target_mem_chunk()
1972 ab->qmi.target_mem[i].vaddr, in ath11k_qmi_free_target_mem_chunk()
1973 ab->qmi.target_mem[i].paddr); in ath11k_qmi_free_target_mem_chunk()
1974 ab->qmi.target_mem[i].vaddr = NULL; in ath11k_qmi_free_target_mem_chunk()
1983 ab->qmi.target_mem_delayed = false; in ath11k_qmi_alloc_target_mem_chunk()
1985 for (i = 0; i < ab->qmi.mem_seg_count; i++) { in ath11k_qmi_alloc_target_mem_chunk()
1986 chunk = &ab->qmi.target_mem[i]; in ath11k_qmi_alloc_target_mem_chunk()
2007 if (ab->qmi.mem_seg_count <= ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT) { in ath11k_qmi_alloc_target_mem_chunk()
2013 ab->qmi.target_mem_delayed = true; in ath11k_qmi_alloc_target_mem_chunk()
2017 ath11k_err(ab, "failed to allocate dma memory for qmi (%d B type %u)\n", in ath11k_qmi_alloc_target_mem_chunk()
2037 for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) { in ath11k_qmi_assign_target_mem_chunk()
2038 switch (ab->qmi.target_mem[i].type) { in ath11k_qmi_assign_target_mem_chunk()
2055 if (res.end - res.start + 1 < ab->qmi.target_mem[i].size) { in ath11k_qmi_assign_target_mem_chunk()
2061 ab->qmi.target_mem[idx].paddr = res.start; in ath11k_qmi_assign_target_mem_chunk()
2062 ab->qmi.target_mem[idx].iaddr = in ath11k_qmi_assign_target_mem_chunk()
2063 ioremap(ab->qmi.target_mem[idx].paddr, in ath11k_qmi_assign_target_mem_chunk()
2064 ab->qmi.target_mem[i].size); in ath11k_qmi_assign_target_mem_chunk()
2065 if (!ab->qmi.target_mem[idx].iaddr) in ath11k_qmi_assign_target_mem_chunk()
2068 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size; in ath11k_qmi_assign_target_mem_chunk()
2069 host_ddr_sz = ab->qmi.target_mem[i].size; in ath11k_qmi_assign_target_mem_chunk()
2070 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type; in ath11k_qmi_assign_target_mem_chunk()
2074 ab->qmi.target_mem[idx].paddr = ab->hw_params.bdf_addr; in ath11k_qmi_assign_target_mem_chunk()
2075 ab->qmi.target_mem[idx].iaddr = NULL; in ath11k_qmi_assign_target_mem_chunk()
2076 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size; in ath11k_qmi_assign_target_mem_chunk()
2077 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type; in ath11k_qmi_assign_target_mem_chunk()
2081 if (ab->qmi.target_mem[i].size > ATH11K_QMI_CALDB_SIZE) { in ath11k_qmi_assign_target_mem_chunk()
2082 ath11k_warn(ab, "qmi mem size is low to load caldata\n"); in ath11k_qmi_assign_target_mem_chunk()
2088 ab->qmi.target_mem[idx].paddr = in ath11k_qmi_assign_target_mem_chunk()
2090 ab->qmi.target_mem[idx].iaddr = in ath11k_qmi_assign_target_mem_chunk()
2091 ioremap(ab->qmi.target_mem[idx].paddr, in ath11k_qmi_assign_target_mem_chunk()
2092 ab->qmi.target_mem[i].size); in ath11k_qmi_assign_target_mem_chunk()
2093 if (!ab->qmi.target_mem[idx].iaddr) in ath11k_qmi_assign_target_mem_chunk()
2096 ab->qmi.target_mem[idx].paddr = in ath11k_qmi_assign_target_mem_chunk()
2098 ab->qmi.target_mem[idx].iaddr = NULL; in ath11k_qmi_assign_target_mem_chunk()
2101 ab->qmi.target_mem[idx].paddr = 0; in ath11k_qmi_assign_target_mem_chunk()
2102 ab->qmi.target_mem[idx].iaddr = NULL; in ath11k_qmi_assign_target_mem_chunk()
2104 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size; in ath11k_qmi_assign_target_mem_chunk()
2105 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type; in ath11k_qmi_assign_target_mem_chunk()
2109 ath11k_warn(ab, "qmi ignore invalid mem req type %d\n", in ath11k_qmi_assign_target_mem_chunk()
2110 ab->qmi.target_mem[i].type); in ath11k_qmi_assign_target_mem_chunk()
2114 ab->qmi.mem_seg_count = idx; in ath11k_qmi_assign_target_mem_chunk()
2131 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_request_device_info()
2136 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_request_device_info()
2142 ath11k_warn(ab, "failed to send qmi target device info request: %d\n", in ath11k_qmi_request_device_info()
2149 ath11k_warn(ab, "failed to wait qmi target device info request: %d\n", in ath11k_qmi_request_device_info()
2155 ath11k_warn(ab, "qmi device info request failed: %d %d\n", in ath11k_qmi_request_device_info()
2162 ath11k_warn(ab, "qmi device info response invalid: %d %d\n", in ath11k_qmi_request_device_info()
2170 ath11k_warn(ab, "qmi device info invalid address and size: %llu %u\n", in ath11k_qmi_request_device_info()
2179 ath11k_warn(ab, "qmi device info ioremap failed\n"); in ath11k_qmi_request_device_info()
2209 ret = qmi_txn_init(&ab->qmi.handle, &txn, qmi_wlanfw_cap_resp_msg_v01_ei, in ath11k_qmi_request_target_cap()
2216 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_request_target_cap()
2222 ath11k_warn(ab, "failed to send qmi cap request: %d\n", in ath11k_qmi_request_target_cap()
2229 ath11k_warn(ab, "failed to wait qmi cap request: %d\n", ret); in ath11k_qmi_request_target_cap()
2234 ath11k_warn(ab, "qmi cap request failed: %d %d\n", in ath11k_qmi_request_target_cap()
2241 ab->qmi.target.chip_id = resp.chip_info.chip_id; in ath11k_qmi_request_target_cap()
2242 ab->qmi.target.chip_family = resp.chip_info.chip_family; in ath11k_qmi_request_target_cap()
2246 ab->qmi.target.board_id = resp.board_info.board_id; in ath11k_qmi_request_target_cap()
2248 ab->qmi.target.board_id = 0xFF; in ath11k_qmi_request_target_cap()
2251 ab->qmi.target.soc_id = resp.soc_info.soc_id; in ath11k_qmi_request_target_cap()
2254 ab->qmi.target.fw_version = resp.fw_version_info.fw_version; in ath11k_qmi_request_target_cap()
2255 strscpy(ab->qmi.target.fw_build_timestamp, in ath11k_qmi_request_target_cap()
2257 sizeof(ab->qmi.target.fw_build_timestamp)); in ath11k_qmi_request_target_cap()
2261 strscpy(ab->qmi.target.fw_build_id, resp.fw_build_id, in ath11k_qmi_request_target_cap()
2262 sizeof(ab->qmi.target.fw_build_id)); in ath11k_qmi_request_target_cap()
2265 ab->qmi.target.eeprom_caldata = in ath11k_qmi_request_target_cap()
2270 fw_build_id = ab->qmi.target.fw_build_id; in ath11k_qmi_request_target_cap()
2276 ab->qmi.target.chip_id, ab->qmi.target.chip_family, in ath11k_qmi_request_target_cap()
2277 ab->qmi.target.board_id, ab->qmi.target.soc_id); in ath11k_qmi_request_target_cap()
2280 ab->qmi.target.fw_version, in ath11k_qmi_request_target_cap()
2281 ab->qmi.target.fw_build_timestamp, in ath11k_qmi_request_target_cap()
2316 ath11k_warn(ab, "qmi ioremap error for bdf_addr\n"); in ath11k_qmi_load_file_target_mem()
2325 req->file_id = ab->qmi.target.board_id; in ath11k_qmi_load_file_target_mem()
2358 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_load_file_target_mem()
2367 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_load_file_target_mem()
2430 ath11k_warn(ab, "qmi failed to fetch board file: %d\n", ret); in ath11k_qmi_load_bdf_qmi()
2449 ath11k_warn(ab, "qmi failed to load bdf file\n"); in ath11k_qmi_load_bdf_qmi()
2457 if (ab->qmi.target.eeprom_caldata) { in ath11k_qmi_load_bdf_qmi()
2483 "qmi failed to load CAL data file:%s\n", in ath11k_qmi_load_bdf_qmi()
2494 ath11k_warn(ab, "qmi failed to load caldata\n"); in ath11k_qmi_load_bdf_qmi()
2501 if (!ab->qmi.target.eeprom_caldata) in ath11k_qmi_load_bdf_qmi()
2512 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath11k_qmi_m3_load()
2567 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath11k_qmi_m3_free()
2582 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; in ath11k_qmi_wlanfw_m3_info_send()
2605 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_wlanfw_m3_info_send()
2612 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_wlanfw_m3_info_send()
2654 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_wlanfw_mode_send()
2661 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_wlanfw_mode_send()
2703 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce; in ath11k_qmi_wlanfw_wlan_cfg_send()
2704 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map; in ath11k_qmi_wlanfw_wlan_cfg_send()
2718 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len; in ath11k_qmi_wlanfw_wlan_cfg_send()
2729 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len; in ath11k_qmi_wlanfw_wlan_cfg_send()
2741 ab->qmi.ce_cfg.shadow_reg_v2_len, in ath11k_qmi_wlanfw_wlan_cfg_send()
2743 memcpy(&req->shadow_reg_v2, ab->qmi.ce_cfg.shadow_reg_v2, in ath11k_qmi_wlanfw_wlan_cfg_send()
2749 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_wlanfw_wlan_cfg_send()
2756 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_wlanfw_wlan_cfg_send()
2795 ret = qmi_txn_init(&ab->qmi.handle, &txn, in ath11k_qmi_wlanfw_wlan_ini_send()
2800 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn, in ath11k_qmi_wlanfw_wlan_ini_send()
2805 ath11k_warn(ab, "qmi failed to send wlan ini request, err = %d\n", in ath11k_qmi_wlanfw_wlan_ini_send()
2813 ath11k_warn(ab, "qmi failed wlan ini request, err = %d\n", ret); in ath11k_qmi_wlanfw_wlan_ini_send()
2818 ath11k_warn(ab, "qmi wlan ini request failed, result: %d, err: %d\n", in ath11k_qmi_wlanfw_wlan_ini_send()
2835 ath11k_warn(ab, "qmi failed to send wlan mode off: %d\n", ret); in ath11k_qmi_firmware_stop()
2850 ath11k_warn(ab, "qmi failed to send wlan fw ini:%d\n", ret); in ath11k_qmi_firmware_start()
2857 ath11k_warn(ab, "qmi failed to send wlan cfg: %d\n", ret); in ath11k_qmi_firmware_start()
2863 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret); in ath11k_qmi_firmware_start()
2880 time_left = wait_event_timeout(ab->qmi.cold_boot_waitq, in ath11k_qmi_fwreset_from_cold_boot()
2881 (ab->qmi.cal_done == 1), in ath11k_qmi_fwreset_from_cold_boot()
2904 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret); in ath11k_qmi_process_coldboot_calibration()
2910 time_left = wait_event_timeout(ab->qmi.cold_boot_waitq, in ath11k_qmi_process_coldboot_calibration()
2911 (ab->qmi.cal_done == 1), in ath11k_qmi_process_coldboot_calibration()
2924 ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi, in ath11k_qmi_driver_event_post() argument
2937 spin_lock(&qmi->event_lock); in ath11k_qmi_driver_event_post()
2938 list_add_tail(&event->list, &qmi->event_list); in ath11k_qmi_driver_event_post()
2939 spin_unlock(&qmi->event_lock); in ath11k_qmi_driver_event_post()
2941 queue_work(qmi->event_wq, &qmi->event_work); in ath11k_qmi_driver_event_post()
2946 static int ath11k_qmi_event_mem_request(struct ath11k_qmi *qmi) in ath11k_qmi_event_mem_request() argument
2948 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_event_mem_request()
2953 ath11k_warn(ab, "qmi failed to respond fw mem req: %d\n", ret); in ath11k_qmi_event_mem_request()
2960 static int ath11k_qmi_event_load_bdf(struct ath11k_qmi *qmi) in ath11k_qmi_event_load_bdf() argument
2962 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_event_load_bdf()
2967 ath11k_warn(ab, "failed to request qmi target capabilities: %d\n", in ath11k_qmi_event_load_bdf()
2974 ath11k_warn(ab, "failed to request qmi device info: %d\n", ret); in ath11k_qmi_event_load_bdf()
2990 static int ath11k_qmi_event_server_arrive(struct ath11k_qmi *qmi) in ath11k_qmi_event_server_arrive() argument
2992 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_event_server_arrive()
2997 ath11k_warn(ab, "failed to send qmi firmware indication: %d\n", in ath11k_qmi_event_server_arrive()
3004 ath11k_warn(ab, "failed to send qmi host cap: %d\n", ret); in ath11k_qmi_event_server_arrive()
3011 ret = ath11k_qmi_event_load_bdf(qmi); in ath11k_qmi_event_server_arrive()
3013 ath11k_warn(ab, "qmi failed to download BDF:%d\n", ret); in ath11k_qmi_event_server_arrive()
3025 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle); in ath11k_qmi_msg_mem_request_cb() local
3026 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_msg_mem_request_cb()
3037 ab->qmi.mem_seg_count = msg->mem_seg_len; in ath11k_qmi_msg_mem_request_cb()
3039 for (i = 0; i < qmi->mem_seg_count ; i++) { in ath11k_qmi_msg_mem_request_cb()
3040 ab->qmi.target_mem[i].type = msg->mem_seg[i].type; in ath11k_qmi_msg_mem_request_cb()
3041 ab->qmi.target_mem[i].size = msg->mem_seg[i].size; in ath11k_qmi_msg_mem_request_cb()
3050 ath11k_warn(ab, "failed to assign qmi target memory: %d\n", in ath11k_qmi_msg_mem_request_cb()
3057 ath11k_warn(ab, "failed to allocate qmi target memory: %d\n", in ath11k_qmi_msg_mem_request_cb()
3063 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_REQUEST_MEM, NULL); in ath11k_qmi_msg_mem_request_cb()
3071 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle); in ath11k_qmi_msg_mem_ready_cb() local
3072 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_msg_mem_ready_cb()
3075 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_MEM_READY, NULL); in ath11k_qmi_msg_mem_ready_cb()
3083 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle); in ath11k_qmi_msg_fw_ready_cb() local
3084 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_msg_fw_ready_cb()
3088 if (!ab->qmi.cal_done) { in ath11k_qmi_msg_fw_ready_cb()
3089 ab->qmi.cal_done = 1; in ath11k_qmi_msg_fw_ready_cb()
3090 wake_up(&ab->qmi.cold_boot_waitq); in ath11k_qmi_msg_fw_ready_cb()
3093 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_READY, NULL); in ath11k_qmi_msg_fw_ready_cb()
3101 struct ath11k_qmi *qmi = container_of(qmi_hdl, in ath11k_qmi_msg_cold_boot_cal_done_cb() local
3103 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_msg_cold_boot_cal_done_cb()
3105 ab->qmi.cal_done = 1; in ath11k_qmi_msg_cold_boot_cal_done_cb()
3106 wake_up(&ab->qmi.cold_boot_waitq); in ath11k_qmi_msg_cold_boot_cal_done_cb()
3115 struct ath11k_qmi *qmi = container_of(qmi_hdl, in ath11k_qmi_msg_fw_init_done_cb() local
3117 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_msg_fw_init_done_cb()
3119 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_INIT_DONE, NULL); in ath11k_qmi_msg_fw_init_done_cb()
3169 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle); in ath11k_qmi_ops_new_server() local
3170 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_ops_new_server()
3171 struct sockaddr_qrtr *sq = &qmi->sq; in ath11k_qmi_ops_new_server()
3181 ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret); in ath11k_qmi_ops_new_server()
3185 ath11k_dbg(ab, ATH11K_DBG_QMI, "wifi fw qmi service connected\n"); in ath11k_qmi_ops_new_server()
3186 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_ARRIVE, NULL); in ath11k_qmi_ops_new_server()
3194 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle); in ath11k_qmi_ops_del_server() local
3195 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_ops_del_server()
3198 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_EXIT, NULL); in ath11k_qmi_ops_del_server()
3208 struct ath11k_qmi *qmi = container_of(work, struct ath11k_qmi, in ath11k_qmi_driver_event_work() local
3211 struct ath11k_base *ab = qmi->ab; in ath11k_qmi_driver_event_work()
3214 spin_lock(&qmi->event_lock); in ath11k_qmi_driver_event_work()
3215 while (!list_empty(&qmi->event_list)) { in ath11k_qmi_driver_event_work()
3216 event = list_first_entry(&qmi->event_list, in ath11k_qmi_driver_event_work()
3219 spin_unlock(&qmi->event_lock); in ath11k_qmi_driver_event_work()
3228 ret = ath11k_qmi_event_server_arrive(qmi); in ath11k_qmi_driver_event_work()
3240 ret = ath11k_qmi_event_mem_request(qmi); in ath11k_qmi_driver_event_work()
3245 ret = ath11k_qmi_event_load_bdf(qmi); in ath11k_qmi_driver_event_work()
3254 "failed to send qmi m3 info req: %d\n", ret); in ath11k_qmi_driver_event_work()
3268 if (ab->qmi.cal_done == 0 && in ath11k_qmi_driver_event_work()
3303 ath11k_warn(ab, "invalid qmi event type: %d", event->type); in ath11k_qmi_driver_event_work()
3307 spin_lock(&qmi->event_lock); in ath11k_qmi_driver_event_work()
3309 spin_unlock(&qmi->event_lock); in ath11k_qmi_driver_event_work()
3316 memset(&ab->qmi.target, 0, sizeof(struct target_info)); in ath11k_qmi_init_service()
3317 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk)); in ath11k_qmi_init_service()
3318 ab->qmi.ab = ab; in ath11k_qmi_init_service()
3320 ab->qmi.target_mem_mode = ab->hw_params.fw_mem_mode; in ath11k_qmi_init_service()
3321 ret = qmi_handle_init(&ab->qmi.handle, ATH11K_QMI_RESP_LEN_MAX, in ath11k_qmi_init_service()
3324 ath11k_warn(ab, "failed to initialize qmi handle: %d\n", ret); in ath11k_qmi_init_service()
3328 ab->qmi.event_wq = alloc_ordered_workqueue("ath11k_qmi_driver_event", 0); in ath11k_qmi_init_service()
3329 if (!ab->qmi.event_wq) { in ath11k_qmi_init_service()
3334 INIT_LIST_HEAD(&ab->qmi.event_list); in ath11k_qmi_init_service()
3335 spin_lock_init(&ab->qmi.event_lock); in ath11k_qmi_init_service()
3336 INIT_WORK(&ab->qmi.event_work, ath11k_qmi_driver_event_work); in ath11k_qmi_init_service()
3338 ret = qmi_add_lookup(&ab->qmi.handle, ATH11K_QMI_WLFW_SERVICE_ID_V01, in ath11k_qmi_init_service()
3340 ab->qmi.service_ins_id); in ath11k_qmi_init_service()
3342 ath11k_warn(ab, "failed to add qmi lookup: %d\n", ret); in ath11k_qmi_init_service()
3343 destroy_workqueue(ab->qmi.event_wq); in ath11k_qmi_init_service()
3352 qmi_handle_release(&ab->qmi.handle); in ath11k_qmi_deinit_service()
3353 cancel_work_sync(&ab->qmi.event_work); in ath11k_qmi_deinit_service()
3354 destroy_workqueue(ab->qmi.event_wq); in ath11k_qmi_deinit_service()