Lines Matching refs:qmi

8 #include "qmi.h"
1519 req.mem_cfg_mode = ab->qmi.target_mem_mode;
1537 req.cal_done = ab->qmi.cal_done;
1553 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1558 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1586 struct qmi_handle *handle = &ab->qmi.handle;
1621 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1670 if (!ab->bus_params.fixed_mem_region && ab->qmi.target_mem_delayed) {
1672 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi delays mem_request %d\n",
1673 ab->qmi.mem_seg_count);
1677 req->mem_seg_len = ab->qmi.mem_seg_count;
1680 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr;
1681 req->mem_seg[i].size = ab->qmi.target_mem[i].size;
1682 req->mem_seg[i].type = ab->qmi.target_mem[i].type;
1686 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1691 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1696 ath11k_warn(ab, "qmi failed to respond memory request, err = %d\n",
1703 ath11k_warn(ab, "qmi failed memory request, err = %d\n", ret);
1731 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1732 if (!ab->qmi.target_mem[i].vaddr)
1736 ab->qmi.target_mem[i].size,
1737 ab->qmi.target_mem[i].vaddr,
1738 ab->qmi.target_mem[i].paddr);
1739 ab->qmi.target_mem[i].vaddr = NULL;
1748 ab->qmi.target_mem_delayed = false;
1750 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1751 chunk = &ab->qmi.target_mem[i];
1757 if (ab->qmi.mem_seg_count <= 2) {
1759 "qmi dma allocation failed (%d B type %u), will try later with small size\n",
1763 ab->qmi.target_mem_delayed = true;
1780 for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) {
1781 switch (ab->qmi.target_mem[i].type) {
1783 ab->qmi.target_mem[idx].paddr = ab->hw_params.bdf_addr;
1784 ab->qmi.target_mem[idx].vaddr = NULL;
1785 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
1786 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
1790 if (ab->qmi.target_mem[i].size > ATH11K_QMI_CALDB_SIZE) {
1791 ath11k_warn(ab, "qmi mem size is low to load caldata\n");
1795 ab->qmi.target_mem[idx].paddr = 0;
1796 ab->qmi.target_mem[idx].vaddr = NULL;
1797 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
1798 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
1802 ath11k_warn(ab, "qmi ignore invalid mem req type %d\n",
1803 ab->qmi.target_mem[i].type);
1807 ab->qmi.mem_seg_count = idx;
1822 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1827 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1832 ath11k_warn(ab, "qmi failed to send target cap request, err = %d\n",
1839 ath11k_warn(ab, "qmi failed target cap request %d\n", ret);
1844 ath11k_warn(ab, "qmi targetcap req failed, result: %d, err: %d\n",
1851 ab->qmi.target.chip_id = resp.chip_info.chip_id;
1852 ab->qmi.target.chip_family = resp.chip_info.chip_family;
1856 ab->qmi.target.board_id = resp.board_info.board_id;
1858 ab->qmi.target.board_id = 0xFF;
1861 ab->qmi.target.soc_id = resp.soc_info.soc_id;
1864 ab->qmi.target.fw_version = resp.fw_version_info.fw_version;
1865 strlcpy(ab->qmi.target.fw_build_timestamp,
1867 sizeof(ab->qmi.target.fw_build_timestamp));
1871 strlcpy(ab->qmi.target.fw_build_id, resp.fw_build_id,
1872 sizeof(ab->qmi.target.fw_build_id));
1875 ab->qmi.target.chip_id, ab->qmi.target.chip_family,
1876 ab->qmi.target.board_id, ab->qmi.target.soc_id);
1879 ab->qmi.target.fw_version,
1880 ab->qmi.target.fw_build_timestamp,
1881 ab->qmi.target.fw_build_id);
1903 ath11k_warn(ab, "qmi failed to load BDF\n");
1951 ath11k_warn(ab, "qmi ioremap error for BDF\n");
1959 req->file_id = ab->qmi.target.board_id;
1974 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1980 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1994 ath11k_warn(ab, "qmi BDF download failed, result: %d, err: %d\n",
2027 ath11k_warn(ab, "qmi failed to load bdf:\n");
2039 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi bdf_type %d\n", bdf_type);
2044 req->file_id = ab->qmi.target.board_id;
2064 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2070 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2084 ath11k_warn(ab, "qmi BDF download failed, result: %d, err: %d\n",
2104 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2140 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2152 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2175 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2180 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2185 ath11k_warn(ab, "qmi failed to send M3 information request, err = %d\n",
2192 ath11k_warn(ab, "qmi failed M3 information request %d\n", ret);
2197 ath11k_warn(ab, "qmi M3 info request failed, result: %d, err: %d\n",
2221 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2226 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2231 ath11k_warn(ab, "qmi failed to send mode request, mode: %d, err = %d\n",
2242 ath11k_warn(ab, "qmi failed set mode request, mode: %d, err = %d\n",
2267 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
2268 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;
2282 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len;
2293 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len;
2305 ab->qmi.ce_cfg.shadow_reg_v2_len,
2307 memcpy(&req->shadow_reg_v2, ab->qmi.ce_cfg.shadow_reg_v2,
2313 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2318 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2323 ath11k_warn(ab, "qmi failed to send wlan config request, err = %d\n",
2330 ath11k_warn(ab, "qmi failed wlan config request, err = %d\n", ret);
2335 ath11k_warn(ab, "qmi wlan config request failed, result: %d, err: %d\n",
2352 ath11k_warn(ab, "qmi failed to send wlan mode off\n");
2364 ath11k_warn(ab, "qmi failed to send wlan cfg:%d\n", ret);
2370 ath11k_warn(ab, "qmi failed to send wlan fw mode:%d\n", ret);
2378 ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi,
2391 spin_lock(&qmi->event_lock);
2392 list_add_tail(&event->list, &qmi->event_list);
2393 spin_unlock(&qmi->event_lock);
2395 queue_work(qmi->event_wq, &qmi->event_work);
2400 static void ath11k_qmi_event_server_arrive(struct ath11k_qmi *qmi)
2402 struct ath11k_base *ab = qmi->ab;
2407 ath11k_warn(ab, "qmi failed to send FW indication QMI:%d\n", ret);
2413 ath11k_warn(ab, "qmi failed to send host cap QMI:%d\n", ret);
2418 static void ath11k_qmi_event_mem_request(struct ath11k_qmi *qmi)
2420 struct ath11k_base *ab = qmi->ab;
2425 ath11k_warn(ab, "qmi failed to respond fw mem req:%d\n", ret);
2430 static void ath11k_qmi_event_load_bdf(struct ath11k_qmi *qmi)
2432 struct ath11k_base *ab = qmi->ab;
2437 ath11k_warn(ab, "qmi failed to req target capabilities:%d\n", ret);
2446 ath11k_warn(ab, "qmi failed to load board data file:%d\n", ret);
2452 ath11k_warn(ab, "qmi failed to send m3 info req:%d\n", ret);
2462 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2463 struct ath11k_base *ab = qmi->ab;
2467 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi firmware request memory request\n");
2474 ab->qmi.mem_seg_count = msg->mem_seg_len;
2476 for (i = 0; i < qmi->mem_seg_count ; i++) {
2477 ab->qmi.target_mem[i].type = msg->mem_seg[i].type;
2478 ab->qmi.target_mem[i].size = msg->mem_seg[i].size;
2479 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi mem seg type %d size %d\n",
2486 ath11k_warn(ab, "qmi failed to assign target memory: %d\n",
2493 ath11k_warn(ab, "qmi failed to alloc target memory: %d\n",
2499 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_REQUEST_MEM, NULL);
2507 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2508 struct ath11k_base *ab = qmi->ab;
2510 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi firmware memory ready indication\n");
2511 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_MEM_READY, NULL);
2519 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2520 struct ath11k_base *ab = qmi->ab;
2522 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi firmware ready\n");
2523 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_READY, NULL);
2526 static void ath11k_qmi_msg_cold_boot_cal_done_cb(struct qmi_handle *qmi,
2568 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2569 struct ath11k_base *ab = qmi->ab;
2570 struct sockaddr_qrtr *sq = &qmi->sq;
2580 ath11k_warn(ab, "qmi failed to connect to remote service %d\n", ret);
2584 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi wifi fw qmi service connected\n");
2585 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_ARRIVE, NULL);
2593 struct ath11k_qmi *qmi = container_of(qmi_hdl, struct ath11k_qmi, handle);
2594 struct ath11k_base *ab = qmi->ab;
2596 ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi wifi fw del server\n");
2597 ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_SERVER_EXIT, NULL);
2607 struct ath11k_qmi *qmi = container_of(work, struct ath11k_qmi,
2610 struct ath11k_base *ab = qmi->ab;
2612 spin_lock(&qmi->event_lock);
2613 while (!list_empty(&qmi->event_list)) {
2614 event = list_first_entry(&qmi->event_list,
2617 spin_unlock(&qmi->event_lock);
2626 ath11k_qmi_event_server_arrive(qmi);
2633 ath11k_qmi_event_mem_request(qmi);
2636 ath11k_qmi_event_load_bdf(qmi);
2646 ab->qmi.cal_done = 1;
2657 spin_lock(&qmi->event_lock);
2659 spin_unlock(&qmi->event_lock);
2666 memset(&ab->qmi.target, 0, sizeof(struct target_info));
2667 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk));
2668 ab->qmi.ab = ab;
2670 ab->qmi.target_mem_mode = ATH11K_QMI_TARGET_MEM_MODE_DEFAULT;
2671 ret = qmi_handle_init(&ab->qmi.handle, ATH11K_QMI_RESP_LEN_MAX,
2674 ath11k_warn(ab, "failed to initialize qmi handle\n");
2678 ab->qmi.event_wq = alloc_workqueue("ath11k_qmi_driver_event",
2680 if (!ab->qmi.event_wq) {
2685 INIT_LIST_HEAD(&ab->qmi.event_list);
2686 spin_lock_init(&ab->qmi.event_lock);
2687 INIT_WORK(&ab->qmi.event_work, ath11k_qmi_driver_event_work);
2689 ret = qmi_add_lookup(&ab->qmi.handle, ATH11K_QMI_WLFW_SERVICE_ID_V01,
2691 ab->qmi.service_ins_id);
2693 ath11k_warn(ab, "failed to add qmi lookup\n");
2694 destroy_workqueue(ab->qmi.event_wq);
2703 qmi_handle_release(&ab->qmi.handle);
2704 cancel_work_sync(&ab->qmi.event_work);
2705 destroy_workqueue(ab->qmi.event_wq);