Lines Matching full:ipa
13 #include "ipa.h"
28 * complete, the AP and modem may begin IPA operation. This occurs
29 * only when the AP IPA driver, modem IPA driver, and IPA microcontroller
36 * contains a success result, the AP knows the modem IPA driver is ready.
38 * The modem is responsible for loading firmware on the IPA microcontroller.
53 * - Whenever the AP learns the modem has booted and its IPA QMI service
56 * - On the initial boot, the modem sets up the IPA microcontroller, and
86 struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_server_init_complete() local
99 dev_err(&ipa->pdev->dev, in ipa_server_init_complete()
118 * We know everything (else) is ready when we know the IPA driver on
128 struct ipa *ipa; in ipa_qmi_ready() local
148 ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_qmi_ready()
149 ret = ipa_modem_start(ipa); in ipa_qmi_ready()
151 dev_err(&ipa->pdev->dev, "error %d starting modem\n", ret); in ipa_qmi_ready()
186 struct ipa *ipa; in ipa_server_indication_register() local
190 ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_server_indication_register()
202 dev_err(&ipa->pdev->dev, in ipa_server_indication_register()
215 struct ipa *ipa; in ipa_server_driver_init_complete() local
219 ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_server_driver_init_complete()
231 dev_err(&ipa->pdev->dev, in ipa_server_driver_init_complete()
286 struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi); in init_modem_driver_req() local
287 u32 modem_route_count = ipa->modem_route_count; in init_modem_driver_req()
293 req.skip_uc_load = ipa->uc_loaded ? 1 : 0; in init_modem_driver_req()
302 mem = ipa_mem_find(ipa, IPA_MEM_MODEM_HEADER); in init_modem_driver_req()
305 req.hdr_tbl_info.start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
309 mem = ipa_mem_find(ipa, IPA_MEM_V4_ROUTE); in init_modem_driver_req()
311 req.v4_route_tbl_info.start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
314 mem = ipa_mem_find(ipa, IPA_MEM_V6_ROUTE); in init_modem_driver_req()
316 req.v6_route_tbl_info.start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
319 mem = ipa_mem_find(ipa, IPA_MEM_V4_FILTER); in init_modem_driver_req()
321 req.v4_filter_tbl_start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
323 mem = ipa_mem_find(ipa, IPA_MEM_V6_FILTER); in init_modem_driver_req()
325 req.v6_filter_tbl_start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
327 mem = ipa_mem_find(ipa, IPA_MEM_MODEM); in init_modem_driver_req()
330 req.modem_mem_info.start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
336 ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]->endpoint_id; in init_modem_driver_req()
340 mem = ipa_mem_find(ipa, IPA_MEM_MODEM_PROC_CTX); in init_modem_driver_req()
344 ipa->mem_offset + mem->offset; in init_modem_driver_req()
351 mem = ipa_mem_find(ipa, IPA_MEM_V4_ROUTE_HASHED); in init_modem_driver_req()
355 ipa->mem_offset + mem->offset; in init_modem_driver_req()
359 mem = ipa_mem_find(ipa, IPA_MEM_V6_ROUTE_HASHED); in init_modem_driver_req()
363 ipa->mem_offset + mem->offset; in init_modem_driver_req()
367 mem = ipa_mem_find(ipa, IPA_MEM_V4_FILTER_HASHED); in init_modem_driver_req()
370 req.v4_hash_filter_tbl_start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
373 mem = ipa_mem_find(ipa, IPA_MEM_V6_FILTER_HASHED); in init_modem_driver_req()
376 req.v6_hash_filter_tbl_start = ipa->mem_offset + mem->offset; in init_modem_driver_req()
379 /* The stats fields are only valid for IPA v4.0+ */ in init_modem_driver_req()
380 if (ipa->version >= IPA_VERSION_4_0) { in init_modem_driver_req()
381 mem = ipa_mem_find(ipa, IPA_MEM_STATS_QUOTA_MODEM); in init_modem_driver_req()
385 ipa->mem_offset + mem->offset; in init_modem_driver_req()
387 req.hw_stats_quota_size = ipa->mem_offset + mem->size; in init_modem_driver_req()
391 mem = ipa_mem_find(ipa, IPA_MEM_STATS_DROP); in init_modem_driver_req()
395 ipa->mem_offset + mem->offset; in init_modem_driver_req()
397 req.hw_stats_drop_size = ipa->mem_offset + mem->size; in init_modem_driver_req()
413 struct ipa *ipa; in ipa_client_init_driver_work() local
419 ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_client_init_driver_work()
420 dev = &ipa->pdev->dev; in ipa_client_init_driver_work()
472 int ipa_qmi_setup(struct ipa *ipa) in ipa_qmi_setup() argument
474 struct ipa_qmi *ipa_qmi = &ipa->qmi; in ipa_qmi_setup()
527 /* Tear down IPA QMI handles */
528 void ipa_qmi_teardown(struct ipa *ipa) in ipa_qmi_teardown() argument
530 cancel_work_sync(&ipa->qmi.init_driver_work); in ipa_qmi_teardown()
532 qmi_handle_release(&ipa->qmi.client_handle); in ipa_qmi_teardown()
533 memset(&ipa->qmi.client_handle, 0, sizeof(ipa->qmi.client_handle)); in ipa_qmi_teardown()
535 qmi_handle_release(&ipa->qmi.server_handle); in ipa_qmi_teardown()
536 memset(&ipa->qmi.server_handle, 0, sizeof(ipa->qmi.server_handle)); in ipa_qmi_teardown()