Lines Matching +full:apr +full:- +full:v2

1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
13 #include <linux/soc/qcom/apr.h>
15 #include "q6dsp-errno.h"
72 struct q6core *core = dev_get_drvdata(&adev->dev); in q6core_callback()
74 struct apr_hdr *hdr = &data->hdr; in q6core_callback()
76 result = data->payload; in q6core_callback()
77 switch (hdr->opcode) { in q6core_callback()
79 result = data->payload; in q6core_callback()
80 switch (result->opcode) { in q6core_callback()
82 if (result->status == ADSP_EUNSUPPORTED) in q6core_callback()
83 core->get_version_supported = false; in q6core_callback()
84 core->resp_received = true; in q6core_callback()
87 if (result->status == ADSP_EUNSUPPORTED) in q6core_callback()
88 core->fwk_version_supported = false; in q6core_callback()
89 core->resp_received = true; in q6core_callback()
92 if (result->status == ADSP_EUNSUPPORTED) in q6core_callback()
93 core->get_state_supported = false; in q6core_callback()
94 core->resp_received = true; in q6core_callback()
102 fwk = data->payload; in q6core_callback()
104 core->fwk_version = kmemdup(data->payload, in q6core_callback()
106 fwk->num_services), in q6core_callback()
108 if (!core->fwk_version) in q6core_callback()
109 return -ENOMEM; in q6core_callback()
111 core->fwk_version_supported = true; in q6core_callback()
112 core->resp_received = true; in q6core_callback()
119 v = data->payload; in q6core_callback()
121 core->svc_version = kmemdup(data->payload, in q6core_callback()
123 v->num_services), in q6core_callback()
125 if (!core->svc_version) in q6core_callback()
126 return -ENOMEM; in q6core_callback()
128 core->get_version_supported = true; in q6core_callback()
129 core->resp_received = true; in q6core_callback()
134 core->get_state_supported = true; in q6core_callback()
135 core->avcs_state = result->opcode; in q6core_callback()
137 core->resp_received = true; in q6core_callback()
140 dev_err(&adev->dev, "Message id from adsp core svc: 0x%x\n", in q6core_callback()
141 hdr->opcode); in q6core_callback()
145 if (core->resp_received) in q6core_callback()
146 wake_up(&core->wait); in q6core_callback()
153 struct apr_device *adev = core->adev; in q6core_get_fwk_versions()
166 rc = wait_event_timeout(core->wait, (core->resp_received), in q6core_get_fwk_versions()
168 if (rc > 0 && core->resp_received) { in q6core_get_fwk_versions()
169 core->resp_received = false; in q6core_get_fwk_versions()
171 if (!core->fwk_version_supported) in q6core_get_fwk_versions()
172 return -ENOTSUPP; in q6core_get_fwk_versions()
183 struct apr_device *adev = core->adev; in q6core_get_svc_versions()
196 rc = wait_event_timeout(core->wait, (core->resp_received), in q6core_get_svc_versions()
198 if (rc > 0 && core->resp_received) { in q6core_get_svc_versions()
199 core->resp_received = false; in q6core_get_svc_versions()
208 struct apr_device *adev = core->adev; in __q6core_is_adsp_ready()
212 core->get_state_supported = false; in __q6core_is_adsp_ready()
223 rc = wait_event_timeout(core->wait, (core->resp_received), in __q6core_is_adsp_ready()
225 if (rc > 0 && core->resp_received) { in __q6core_is_adsp_ready()
226 core->resp_received = false; in __q6core_is_adsp_ready()
228 if (core->avcs_state) in __q6core_is_adsp_ready()
233 if (!core->get_state_supported) in __q6core_is_adsp_ready()
240 * q6core_get_svc_api_info() - Get version number of a service.
250 int ret = -ENOTSUPP; in q6core_get_svc_api_info()
255 mutex_lock(&g_core->lock); in q6core_get_svc_api_info()
256 if (!g_core->is_version_requested) { in q6core_get_svc_api_info()
257 if (q6core_get_fwk_versions(g_core) == -ENOTSUPP) in q6core_get_svc_api_info()
259 g_core->is_version_requested = true; in q6core_get_svc_api_info()
262 if (g_core->fwk_version_supported) { in q6core_get_svc_api_info()
263 for (i = 0; i < g_core->fwk_version->num_services; i++) { in q6core_get_svc_api_info()
266 info = &g_core->fwk_version->svc_api_info[i]; in q6core_get_svc_api_info()
267 if (svc_id != info->service_id) in q6core_get_svc_api_info()
270 ainfo->api_version = info->api_version; in q6core_get_svc_api_info()
271 ainfo->api_branch_version = info->api_branch_version; in q6core_get_svc_api_info()
275 } else if (g_core->get_version_supported) { in q6core_get_svc_api_info()
276 for (i = 0; i < g_core->svc_version->num_services; i++) { in q6core_get_svc_api_info()
279 info = &g_core->svc_version->svc_api_info[i]; in q6core_get_svc_api_info()
280 if (svc_id != info->service_id) in q6core_get_svc_api_info()
283 ainfo->api_version = info->version; in q6core_get_svc_api_info()
284 ainfo->api_branch_version = 0; in q6core_get_svc_api_info()
290 mutex_unlock(&g_core->lock); in q6core_get_svc_api_info()
297 * q6core_is_adsp_ready() - Get status of adsp
309 mutex_lock(&g_core->lock); in q6core_is_adsp_ready()
323 mutex_unlock(&g_core->lock); in q6core_is_adsp_ready()
332 return -ENOMEM; in q6core_probe()
334 dev_set_drvdata(&adev->dev, g_core); in q6core_probe()
336 mutex_init(&g_core->lock); in q6core_probe()
337 g_core->adev = adev; in q6core_probe()
338 init_waitqueue_head(&g_core->wait); in q6core_probe()
344 struct q6core *core = dev_get_drvdata(&adev->dev); in q6core_exit()
346 if (core->fwk_version_supported) in q6core_exit()
347 kfree(core->fwk_version); in q6core_exit()
348 if (core->get_version_supported) in q6core_exit()
349 kfree(core->svc_version); in q6core_exit()
368 .name = "qcom-q6core",
375 MODULE_LICENSE("GPL v2");