ipa_qmi
struct ipa_qmi qmi;
static void ipa_qmi_indication(struct ipa_qmi *ipa_qmi)
if (!ipa_qmi->indication_requested)
if (ipa_qmi->indication_sent)
ipa_server_init_complete(ipa_qmi);
static void ipa_qmi_ready(struct ipa_qmi *ipa_qmi)
if (!ipa_qmi->modem_ready || !ipa_qmi->uc_ready)
ipa_qmi_indication(ipa_qmi);
if (ipa_qmi->initial_boot) {
if (!ipa_qmi->indication_sent)
ipa_qmi->initial_boot = false;
ipa = container_of(ipa_qmi, struct ipa, qmi);
struct ipa_qmi *ipa_qmi;
ipa_qmi = container_of(qmi, struct ipa_qmi, server_handle);
memset(&ipa_qmi->modem_sq, 0, sizeof(ipa_qmi->modem_sq));
ipa_qmi->modem_ready = false;
ipa_qmi->indication_requested = false;
ipa_qmi->indication_sent = false;
struct ipa_qmi *ipa_qmi;
ipa_qmi = container_of(qmi, struct ipa_qmi, server_handle);
ipa = container_of(ipa_qmi, struct ipa, qmi);
ipa_qmi->indication_requested = true;
ipa_qmi_ready(ipa_qmi); /* We might be ready now */
struct ipa_qmi *ipa_qmi;
ipa_qmi = container_of(qmi, struct ipa_qmi, server_handle);
ipa = container_of(ipa_qmi, struct ipa, qmi);
ipa_qmi->uc_ready = true;
ipa_qmi_ready(ipa_qmi); /* We might be ready now */
init_modem_driver_req(struct ipa_qmi *ipa_qmi)
struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi);
struct ipa_qmi *ipa_qmi;
ipa_qmi = container_of(work, struct ipa_qmi, init_driver_work);
qmi = &ipa_qmi->client_handle;
ipa = container_of(ipa_qmi, struct ipa, qmi);
req = init_modem_driver_req(ipa_qmi);
ret = qmi_send_request(qmi, &ipa_qmi->modem_sq, &txn,
ipa_qmi->modem_ready = true;
ipa_qmi_ready(ipa_qmi); /* We might be ready now */
struct ipa_qmi *ipa_qmi;
ipa_qmi = container_of(qmi, struct ipa_qmi, client_handle);
ipa_qmi->modem_sq.sq_family = AF_QIPCRTR;
ipa_qmi->modem_sq.sq_node = svc->node;
ipa_qmi->modem_sq.sq_port = svc->port;
schedule_work(&ipa_qmi->init_driver_work);
struct ipa_qmi *ipa_qmi = &ipa->qmi;
ipa_qmi->initial_boot = true;
ret = qmi_handle_init(&ipa_qmi->server_handle,
ret = qmi_add_server(&ipa_qmi->server_handle, IPA_HOST_SERVICE_SVC_ID,
ret = qmi_handle_init(&ipa_qmi->client_handle,
INIT_WORK(&ipa_qmi->init_driver_work, ipa_client_init_driver_work);
ret = qmi_add_lookup(&ipa_qmi->client_handle, IPA_MODEM_SERVICE_SVC_ID,
qmi_handle_release(&ipa_qmi->client_handle);
memset(&ipa_qmi->client_handle, 0, sizeof(ipa_qmi->client_handle));
qmi_handle_release(&ipa_qmi->server_handle);
memset(&ipa_qmi->server_handle, 0, sizeof(ipa_qmi->server_handle));
static void ipa_server_init_complete(struct ipa_qmi *ipa_qmi)
struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi);
struct qmi_handle *qmi = &ipa_qmi->server_handle;
struct sockaddr_qrtr *sq = &ipa_qmi->modem_sq;
ipa_qmi->indication_sent = true;