Lines Matching refs:qmi

9 #include "qmi.h"
1932 req.mem_cfg_mode = ab->qmi.target_mem_mode;
1943 req.cal_done = ab->qmi.cal_done;
1970 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1975 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2003 struct qmi_handle *handle = &ab->qmi.handle;
2038 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2087 if (ab->qmi.target_mem_delayed) {
2089 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi delays mem_request %d\n",
2090 ab->qmi.mem_seg_count);
2094 req->mem_seg_len = ab->qmi.mem_seg_count;
2096 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr;
2097 req->mem_seg[i].size = ab->qmi.target_mem[i].size;
2098 req->mem_seg[i].type = ab->qmi.target_mem[i].type;
2100 "qmi req mem_seg[%d] %pad %u %u\n", i,
2101 &ab->qmi.target_mem[i].paddr,
2102 ab->qmi.target_mem[i].size,
2103 ab->qmi.target_mem[i].type);
2107 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2112 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2117 ath12k_warn(ab, "qmi failed to respond memory request, err = %d\n",
2124 ath12k_warn(ab, "qmi failed memory request, err = %d\n", ret);
2149 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
2150 if (!ab->qmi.target_mem[i].v.addr)
2153 ab->qmi.target_mem[i].size,
2154 ab->qmi.target_mem[i].v.addr,
2155 ab->qmi.target_mem[i].paddr);
2156 ab->qmi.target_mem[i].v.addr = NULL;
2165 ab->qmi.target_mem_delayed = false;
2167 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
2168 chunk = &ab->qmi.target_mem[i];
2185 ab->qmi.target_mem_delayed = true;
2187 "qmi dma allocation failed (%d B type %u), will try later with small size\n",
2221 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2226 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2231 ath12k_warn(ab, "qmi failed to send target cap request, err = %d\n",
2238 ath12k_warn(ab, "qmi failed target cap request %d\n", ret);
2243 ath12k_warn(ab, "qmi targetcap req failed, result: %d, err: %d\n",
2250 ab->qmi.target.chip_id = resp.chip_info.chip_id;
2251 ab->qmi.target.chip_family = resp.chip_info.chip_family;
2255 ab->qmi.target.board_id = resp.board_info.board_id;
2257 ab->qmi.target.board_id = board_id;
2260 ab->qmi.target.soc_id = resp.soc_info.soc_id;
2263 ab->qmi.target.fw_version = resp.fw_version_info.fw_version;
2264 strscpy(ab->qmi.target.fw_build_timestamp,
2266 sizeof(ab->qmi.target.fw_build_timestamp));
2270 strscpy(ab->qmi.target.fw_build_id, resp.fw_build_id,
2271 sizeof(ab->qmi.target.fw_build_id));
2275 ab->qmi.dev_mem[i].start =
2277 ab->qmi.dev_mem[i].size =
2281 ab->qmi.dev_mem[i].start,
2282 ab->qmi.dev_mem[i].size);
2287 ab->qmi.target.eeprom_caldata = resp.eeprom_caldata_read_timeout;
2288 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi cal data supported from eeprom\n");
2292 ab->qmi.target.chip_id, ab->qmi.target.chip_family,
2293 ab->qmi.target.board_id, ab->qmi.target.soc_id);
2296 ab->qmi.target.fw_version,
2297 ab->qmi.target.fw_build_timestamp,
2298 ab->qmi.target.fw_build_id);
2322 req->file_id = ab->qmi.target.board_id;
2347 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2353 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi bdf download req fixed addr type %d\n",
2356 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2370 ath12k_warn(ab, "qmi BDF download failed, result: %d, err: %d\n",
2383 "qmi bdf download request remaining %i\n",
2410 ath12k_warn(ab, "qmi failed to load bdf:\n");
2424 ath12k_warn(ab, "qmi failed to load regdb bin:\n");
2430 if (ab->qmi.target.eeprom_caldata) {
2449 "qmi failed to load CAL data file:%s\n",
2461 ath12k_warn(ab, "qmi failed to load caldata\n");
2465 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi caldata downloaded: type: %u\n",
2469 if (!ab->qmi.target.eeprom_caldata)
2477 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi bdf_type %d\n", type);
2483 ath12k_warn(ab, "qmi failed to load bdf file\n");
2487 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi BDF download sequence completed\n");
2494 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2530 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2542 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2560 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2565 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2570 ath12k_warn(ab, "qmi failed to send M3 information request, err = %d\n",
2577 ath12k_warn(ab, "qmi failed M3 information request %d\n", ret);
2582 ath12k_warn(ab, "qmi M3 info request failed, result: %d, err: %d\n",
2606 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2611 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2616 ath12k_warn(ab, "qmi failed to send mode request, mode: %d, err = %d\n",
2627 ath12k_warn(ab, "qmi failed set mode request, mode: %d, err = %d\n",
2652 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
2653 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;
2667 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len;
2678 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len;
2689 ab->qmi.ce_cfg.shadow_reg_v3_len,
2691 memcpy(&req->shadow_reg_v3, ab->qmi.ce_cfg.shadow_reg_v3,
2697 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2702 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2707 ath12k_warn(ab, "qmi failed to send wlan config request, err = %d\n",
2714 ath12k_warn(ab, "qmi failed wlan config request, err = %d\n", ret);
2719 ath12k_warn(ab, "qmi wlan config request failed, result: %d, err: %d\n",
2736 ath12k_warn(ab, "qmi failed to send wlan mode off\n");
2748 ath12k_warn(ab, "qmi failed to send wlan cfg:%d\n", ret);
2754 ath12k_warn(ab, "qmi failed to send wlan fw mode:%d\n", ret);
2762 ath12k_qmi_driver_event_post(struct ath12k_qmi *qmi,
2775 spin_lock(&qmi->event_lock);
2776 list_add_tail(&event->list, &qmi->event_list);
2777 spin_unlock(&qmi->event_lock);
2779 queue_work(qmi->event_wq, &qmi->event_work);
2784 static int ath12k_qmi_event_server_arrive(struct ath12k_qmi *qmi)
2786 struct ath12k_base *ab = qmi->ab;
2791 ath12k_warn(ab, "qmi failed to send FW indication QMI:%d\n", ret);
2797 ath12k_warn(ab, "qmi failed to send host cap QMI:%d\n", ret);
2804 static int ath12k_qmi_event_mem_request(struct ath12k_qmi *qmi)
2806 struct ath12k_base *ab = qmi->ab;
2811 ath12k_warn(ab, "qmi failed to respond fw mem req:%d\n", ret);
2818 static int ath12k_qmi_event_load_bdf(struct ath12k_qmi *qmi)
2820 struct ath12k_base *ab = qmi->ab;
2825 ath12k_warn(ab, "qmi failed to req target capabilities:%d\n", ret);
2831 ath12k_warn(ab, "qmi failed to load regdb file:%d\n", ret);
2837 ath12k_warn(ab, "qmi failed to load board data file:%d\n", ret);
2844 ath12k_warn(ab, "qmi failed to load calibrated data :%d\n", ret);
2849 ath12k_warn(ab, "qmi failed to send m3 info req:%d\n", ret);
2861 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle);
2862 struct ath12k_base *ab = qmi->ab;
2866 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware request memory request\n");
2873 ab->qmi.mem_seg_count = msg->mem_seg_len;
2875 for (i = 0; i < qmi->mem_seg_count ; i++) {
2876 ab->qmi.target_mem[i].type = msg->mem_seg[i].type;
2877 ab->qmi.target_mem[i].size = msg->mem_seg[i].size;
2878 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi mem seg type %d size %d\n",
2884 ath12k_warn(ab, "qmi failed to alloc target memory: %d\n",
2889 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_REQUEST_MEM, NULL);
2897 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle);
2898 struct ath12k_base *ab = qmi->ab;
2900 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware memory ready indication\n");
2901 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_FW_MEM_READY, NULL);
2909 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle);
2910 struct ath12k_base *ab = qmi->ab;
2912 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi firmware ready\n");
2913 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_FW_READY, NULL);
2943 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle);
2944 struct ath12k_base *ab = qmi->ab;
2945 struct sockaddr_qrtr *sq = &qmi->sq;
2955 ath12k_warn(ab, "qmi failed to connect to remote service %d\n", ret);
2959 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi wifi fw qmi service connected\n");
2960 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_SERVER_ARRIVE, NULL);
2968 struct ath12k_qmi *qmi = container_of(qmi_hdl, struct ath12k_qmi, handle);
2969 struct ath12k_base *ab = qmi->ab;
2971 ath12k_dbg(ab, ATH12K_DBG_QMI, "qmi wifi fw del server\n");
2972 ath12k_qmi_driver_event_post(qmi, ATH12K_QMI_EVENT_SERVER_EXIT, NULL);
2982 struct ath12k_qmi *qmi = container_of(work, struct ath12k_qmi,
2985 struct ath12k_base *ab = qmi->ab;
2988 spin_lock(&qmi->event_lock);
2989 while (!list_empty(&qmi->event_list)) {
2990 event = list_first_entry(&qmi->event_list,
2993 spin_unlock(&qmi->event_lock);
3000 ret = ath12k_qmi_event_server_arrive(qmi);
3009 ret = ath12k_qmi_event_mem_request(qmi);
3014 ret = ath12k_qmi_event_load_bdf(qmi);
3040 spin_lock(&qmi->event_lock);
3042 spin_unlock(&qmi->event_lock);
3049 memset(&ab->qmi.target, 0, sizeof(struct target_info));
3050 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk));
3051 ab->qmi.ab = ab;
3053 ab->qmi.target_mem_mode = ATH12K_QMI_TARGET_MEM_MODE_DEFAULT;
3054 ret = qmi_handle_init(&ab->qmi.handle, ATH12K_QMI_RESP_LEN_MAX,
3057 ath12k_warn(ab, "failed to initialize qmi handle\n");
3061 ab->qmi.event_wq = alloc_ordered_workqueue("ath12k_qmi_driver_event", 0);
3062 if (!ab->qmi.event_wq) {
3067 INIT_LIST_HEAD(&ab->qmi.event_list);
3068 spin_lock_init(&ab->qmi.event_lock);
3069 INIT_WORK(&ab->qmi.event_work, ath12k_qmi_driver_event_work);
3071 ret = qmi_add_lookup(&ab->qmi.handle, ATH12K_QMI_WLFW_SERVICE_ID_V01,
3073 ab->qmi.service_ins_id);
3075 ath12k_warn(ab, "failed to add qmi lookup\n");
3076 destroy_workqueue(ab->qmi.event_wq);
3085 qmi_handle_release(&ab->qmi.handle);
3086 cancel_work_sync(&ab->qmi.event_work);
3087 destroy_workqueue(ab->qmi.event_wq);