mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 01:31:30 +03:00
* Fixed __user and __iomem pointer types. * Added __poll_t for poll() return type if possible. * Fixed error return from poll(). * Fixed init/shutdown in mods_dma. * Declared internal unit functions as static. * Assign NULL to init pointers instead of 0. Bug 3528414 Change-Id: If39a14a429e2cda5d58edb6ffd60fd13693371e6 Signed-off-by: Chris Dragan <kdragan@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2688314 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Sachin Nikam <snikam@nvidia.com> GVS: Gerrit_Virtual_Submit
97 lines
2.3 KiB
C
97 lines
2.3 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* This file is part of NVIDIA MODS kernel driver.
|
|
*
|
|
* Copyright (c) 2014-2022, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* NVIDIA MODS kernel driver is free software: you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* NVIDIA MODS kernel driver is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with NVIDIA MODS kernel driver.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <linux/uaccess.h>
|
|
#include "mods_internal.h"
|
|
#include <linux/tegra_nvadsp.h>
|
|
|
|
int esc_mods_adsp_load(struct mods_client *client)
|
|
{
|
|
return nvadsp_os_load();
|
|
}
|
|
|
|
int esc_mods_adsp_start(struct mods_client *client)
|
|
{
|
|
return nvadsp_os_start();
|
|
}
|
|
|
|
int esc_mods_adsp_stop(struct mods_client *client)
|
|
{
|
|
return nvadsp_os_suspend();
|
|
}
|
|
|
|
int esc_mods_adsp_run_app(struct mods_client *client,
|
|
struct MODS_ADSP_RUN_APP_INFO *p)
|
|
{
|
|
int rc = -1;
|
|
int max_retry = 3;
|
|
int rcount = 0;
|
|
nvadsp_app_handle_t handle;
|
|
nvadsp_app_info_t *p_app_info;
|
|
nvadsp_app_args_t app_args;
|
|
|
|
handle = nvadsp_app_load(p->app_name, p->app_file_name);
|
|
if (!handle) {
|
|
cl_error("load adsp app fail");
|
|
return -1;
|
|
}
|
|
|
|
if (p->argc > 0 && p->argc <= MODS_ADSP_APP_MAX_PARAM) {
|
|
app_args.argc = p->argc;
|
|
memcpy(app_args.argv, p->argv, p->argc * sizeof(__u32));
|
|
p_app_info = nvadsp_app_init(handle, &app_args);
|
|
} else
|
|
p_app_info = nvadsp_app_init(handle, NULL);
|
|
|
|
if (!p_app_info) {
|
|
cl_error("init adsp app fail");
|
|
nvadsp_app_unload(handle);
|
|
return -1;
|
|
}
|
|
|
|
rc = nvadsp_app_start(p_app_info);
|
|
if (rc) {
|
|
cl_error("start adsp app fail");
|
|
goto failed;
|
|
}
|
|
|
|
while (rcount++ < max_retry) {
|
|
rc = wait_for_nvadsp_app_complete_timeout(p_app_info,
|
|
msecs_to_jiffies(p->timeout));
|
|
if (rc == -ERESTARTSYS)
|
|
continue;
|
|
else if (rc == 0) {
|
|
cl_error("app timeout(%d)", p->timeout);
|
|
rc = -1;
|
|
} else if (rc < 0) {
|
|
cl_error("run app failed, err=%d\n", rc);
|
|
rc = -1;
|
|
} else
|
|
rc = 0;
|
|
break;
|
|
}
|
|
|
|
failed:
|
|
nvadsp_app_deinit(p_app_info);
|
|
nvadsp_app_unload(handle);
|
|
|
|
return rc;
|
|
}
|