Lines Matching refs:qmi

9 #include "qmi.h"
1719 req.mem_cfg_mode = ab->qmi.target_mem_mode;
1737 req.cal_done = ab->qmi.cal_done;
1760 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1765 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1794 struct qmi_handle *handle = &ab->qmi.handle;
1838 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1890 ab->qmi.target_mem_delayed) {
1893 ab->qmi.mem_seg_count);
1897 req->mem_seg_len = ab->qmi.mem_seg_count;
1900 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr;
1901 req->mem_seg[i].size = ab->qmi.target_mem[i].size;
1902 req->mem_seg[i].type = ab->qmi.target_mem[i].type;
1905 &ab->qmi.target_mem[i].paddr,
1906 ab->qmi.target_mem[i].size,
1907 ab->qmi.target_mem[i].type);
1911 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1919 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1925 ath11k_warn(ab, "failed to respond qmi memory request: %d\n",
1932 ath11k_warn(ab, "failed to wait qmi memory request: %d\n", ret);
1943 ath11k_warn(ab, "qmi respond memory request failed: %d %d\n",
1957 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1960 ab->qmi.target_mem[i].iaddr)
1961 iounmap(ab->qmi.target_mem[i].iaddr);
1963 if (!ab->qmi.target_mem[i].vaddr)
1967 ab->qmi.target_mem[i].prev_size,
1968 ab->qmi.target_mem[i].vaddr,
1969 ab->qmi.target_mem[i].paddr);
1970 ab->qmi.target_mem[i].vaddr = NULL;
1979 ab->qmi.target_mem_delayed = false;
1981 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1982 chunk = &ab->qmi.target_mem[i];
2003 if (ab->qmi.mem_seg_count <= ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT) {
2009 ab->qmi.target_mem_delayed = true;
2013 ath11k_err(ab, "failed to allocate dma memory for qmi (%d B type %u)\n",
2033 for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) {
2034 switch (ab->qmi.target_mem[i].type) {
2051 if (res.end - res.start + 1 < ab->qmi.target_mem[i].size) {
2057 ab->qmi.target_mem[idx].paddr = res.start;
2058 ab->qmi.target_mem[idx].iaddr =
2059 ioremap(ab->qmi.target_mem[idx].paddr,
2060 ab->qmi.target_mem[i].size);
2061 if (!ab->qmi.target_mem[idx].iaddr)
2064 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2065 host_ddr_sz = ab->qmi.target_mem[i].size;
2066 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2070 ab->qmi.target_mem[idx].paddr = ab->hw_params.bdf_addr;
2071 ab->qmi.target_mem[idx].vaddr = NULL;
2072 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2073 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2077 if (ab->qmi.target_mem[i].size > ATH11K_QMI_CALDB_SIZE) {
2078 ath11k_warn(ab, "qmi mem size is low to load caldata\n");
2084 ab->qmi.target_mem[idx].paddr =
2086 ab->qmi.target_mem[idx].iaddr =
2087 ioremap(ab->qmi.target_mem[idx].paddr,
2088 ab->qmi.target_mem[i].size);
2089 if (!ab->qmi.target_mem[idx].iaddr)
2092 ab->qmi.target_mem[idx].paddr =
2096 ab->qmi.target_mem[idx].paddr = 0;
2097 ab->qmi.target_mem[idx].vaddr = NULL;
2099 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2100 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2104 ath11k_warn(ab, "qmi ignore invalid mem req type %d\n",
2105 ab->qmi.target_mem[i].type);
2109 ab->qmi.mem_seg_count = idx;
2126 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2131 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2137 ath11k_warn(ab, "failed to send qmi target device info request: %d\n",
2144 ath11k_warn(ab, "failed to wait qmi target device info request: %d\n",
2150 ath11k_warn(ab, "qmi device info request failed: %d %d\n",
2157 ath11k_warn(ab, "qmi device info response invalid: %d %d\n",
2165 ath11k_warn(ab, "qmi device info invalid address and size: %llu %u\n",
2174 ath11k_warn(ab, "qmi device info ioremap failed\n");
2201 ret = qmi_txn_init(&ab->qmi.handle, &txn, qmi_wlanfw_cap_resp_msg_v01_ei,
2208 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2214 ath11k_warn(ab, "failed to send qmi cap request: %d\n",
2221 ath11k_warn(ab, "failed to wait qmi cap request: %d\n", ret);
2226 ath11k_warn(ab, "qmi cap request failed: %d %d\n",
2233 ab->qmi.target.chip_id = resp.chip_info.chip_id;
2234 ab->qmi.target.chip_family = resp.chip_info.chip_family;
2238 ab->qmi.target.board_id = resp.board_info.board_id;
2240 ab->qmi.target.board_id = 0xFF;
2243 ab->qmi.target.soc_id = resp.soc_info.soc_id;
2246 ab->qmi.target.fw_version = resp.fw_version_info.fw_version;
2247 strscpy(ab->qmi.target.fw_build_timestamp,
2249 sizeof(ab->qmi.target.fw_build_timestamp));
2253 strscpy(ab->qmi.target.fw_build_id, resp.fw_build_id,
2254 sizeof(ab->qmi.target.fw_build_id));
2257 ab->qmi.target.eeprom_caldata =
2262 fw_build_id = ab->qmi.target.fw_build_id;
2268 ab->qmi.target.chip_id, ab->qmi.target.chip_family,
2269 ab->qmi.target.board_id, ab->qmi.target.soc_id);
2272 ab->qmi.target.fw_version,
2273 ab->qmi.target.fw_build_timestamp,
2308 ath11k_warn(ab, "qmi ioremap error for bdf_addr\n");
2317 req->file_id = ab->qmi.target.board_id;
2350 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2359 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2422 ath11k_warn(ab, "qmi failed to fetch board file: %d\n", ret);
2441 ath11k_warn(ab, "qmi failed to load bdf file\n");
2449 if (ab->qmi.target.eeprom_caldata) {
2475 "qmi failed to load CAL data file:%s\n",
2486 ath11k_warn(ab, "qmi failed to load caldata\n");
2493 if (!ab->qmi.target.eeprom_caldata)
2504 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2541 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2554 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2577 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2584 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2626 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2633 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2675 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
2676 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;
2690 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len;
2701 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len;
2713 ab->qmi.ce_cfg.shadow_reg_v2_len,
2715 memcpy(&req->shadow_reg_v2, ab->qmi.ce_cfg.shadow_reg_v2,
2721 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2728 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2767 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2772 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2777 ath11k_warn(ab, "qmi failed to send wlan ini request, err = %d\n",
2785 ath11k_warn(ab, "qmi failed wlan ini request, err = %d\n", ret);
2790 ath11k_warn(ab, "qmi wlan ini request failed, result: %d, err: %d\n",
2807 ath11k_warn(ab, "qmi failed to send wlan mode off: %d\n", ret);
2822 ath11k_warn(ab, "qmi failed to send wlan fw ini:%d\n", ret);
2829 ath11k_warn(ab, "qmi failed to send wlan cfg: %d\n", ret);
2835 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret);
2852 timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
2853 (ab->qmi.cal_done == 1),
2876 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret);
2882 timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
2883 (ab->qmi.cal_done == 1),
2896 ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi,
2909 spin_lock(&qmi->event_lock);
2910 list_add_tail(&event->list, &qmi->event_list);
2911 spin_unlock(&qmi->event_lock);
2913 queue_work(qmi->event_wq, &qmi->event_work);
2918 static int ath11k_qmi_event_mem_request(struct ath11k_qmi *qmi)
2920 struct ath11k_base *ab = qmi->ab;
2925 ath11k_warn(ab, "qmi failed to respond fw mem req: %d\n", ret);
2932 static int ath11k_qmi_event_load_bdf(struct ath11k_qmi *qmi)
2934 struct ath11k_base *ab = qmi->ab;
2939 ath11k_warn(ab, "failed to request qmi target capabilities: %d\n",
2946 ath11k_warn(ab, "failed to request qmi device info: %d\n", ret);
2962 static int ath11k_qmi_event_server_arrive(struct ath11k_qmi *qmi)
2964 struct ath11k_base *ab = qmi->ab;
2969 ath11k_warn(ab, "failed to send qmi firmware indication: %d\n",
2976 ath11k_warn(ab, "failed to send qmi host cap: %d\n", ret);
2983 ret = ath11k_qmi_event_load_bdf(qmi);
2985 ath11k_warn(ab, "qmi failed to download BDF:%d\n", ret);
2997 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2998 struct ath11k_base *ab = qmi->ab;
3009 ab->qmi.mem_seg_count = msg->mem_seg_len;
3011 for (i = 0; i < qmi->mem_seg_count ; i++) {
3012 ab->qmi.target_mem[i].type = msg->mem_seg[i].type;
3013 ab->qmi.target_mem[i].size = msg->mem_seg[i].size;
3022 ath11k_warn(ab, "failed to assign qmi target memory: %d\n",
3029 ath11k_warn(ab, "failed to allocate qmi target memory: %d\n",
3035 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_REQUEST_MEM, NULL);
3043 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
3044 struct ath11k_base *ab = qmi->ab;
3047 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_MEM_READY, NULL);
3055 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
3056 struct ath11k_base *ab = qmi->ab;
3060 if (!ab->qmi.cal_done) {
3061 ab->qmi.cal_done = 1;
3062 wake_up(&ab->qmi.cold_boot_waitq);
3065 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_READY, NULL);
3073 struct ath11k_qmi *qmi = container_of(qmi_hdl,
3075 struct ath11k_base *ab = qmi->ab;
3077 ab->qmi.cal_done = 1;
3078 wake_up(&ab->qmi.cold_boot_waitq);
3087 struct ath11k_qmi *qmi = container_of(qmi_hdl,
3089 struct ath11k_base *ab = qmi->ab;
3091 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_INIT_DONE, NULL);
3141 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
3142 struct ath11k_base *ab = qmi->ab;
3143 struct sockaddr_qrtr *sq = &qmi->sq;
3153 ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret);
3157 ath11k_dbg(ab, ATH11K_DBG_QMI, "wifi fw qmi service connected\n");
3158 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_ARRIVE, NULL);
3166 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
3167 struct ath11k_base *ab = qmi->ab;
3170 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_EXIT, NULL);
3180 struct ath11k_qmi *qmi = container_of(work, struct ath11k_qmi,
3183 struct ath11k_base *ab = qmi->ab;
3186 spin_lock(&qmi->event_lock);
3187 while (!list_empty(&qmi->event_list)) {
3188 event = list_first_entry(&qmi->event_list,
3191 spin_unlock(&qmi->event_lock);
3200 ret = ath11k_qmi_event_server_arrive(qmi);
3212 ret = ath11k_qmi_event_mem_request(qmi);
3217 ret = ath11k_qmi_event_load_bdf(qmi);
3226 "failed to send qmi m3 info req: %d\n", ret);
3239 if (ab->qmi.cal_done == 0 &&
3274 ath11k_warn(ab, "invalid qmi event type: %d", event->type);
3278 spin_lock(&qmi->event_lock);
3280 spin_unlock(&qmi->event_lock);
3287 memset(&ab->qmi.target, 0, sizeof(struct target_info));
3288 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk));
3289 ab->qmi.ab = ab;
3291 ab->qmi.target_mem_mode = ab->hw_params.fw_mem_mode;
3292 ret = qmi_handle_init(&ab->qmi.handle, ATH11K_QMI_RESP_LEN_MAX,
3295 ath11k_warn(ab, "failed to initialize qmi handle: %d\n", ret);
3299 ab->qmi.event_wq = alloc_ordered_workqueue("ath11k_qmi_driver_event", 0);
3300 if (!ab->qmi.event_wq) {
3305 INIT_LIST_HEAD(&ab->qmi.event_list);
3306 spin_lock_init(&ab->qmi.event_lock);
3307 INIT_WORK(&ab->qmi.event_work, ath11k_qmi_driver_event_work);
3309 ret = qmi_add_lookup(&ab->qmi.handle, ATH11K_QMI_WLFW_SERVICE_ID_V01,
3311 ab->qmi.service_ins_id);
3313 ath11k_warn(ab, "failed to add qmi lookup: %d\n", ret);
3314 destroy_workqueue(ab->qmi.event_wq);
3323 qmi_handle_release(&ab->qmi.handle);
3324 cancel_work_sync(&ab->qmi.event_work);
3325 destroy_workqueue(ab->qmi.event_wq);