1*cb1eb6b5SCezary Rojewski // SPDX-License-Identifier: GPL-2.0-only 2*cb1eb6b5SCezary Rojewski // 3*cb1eb6b5SCezary Rojewski // Copyright(c) 2021-2022 Intel Corporation. All rights reserved. 4*cb1eb6b5SCezary Rojewski // 5*cb1eb6b5SCezary Rojewski // Authors: Cezary Rojewski <cezary.rojewski@intel.com> 6*cb1eb6b5SCezary Rojewski // Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com> 7*cb1eb6b5SCezary Rojewski // 8*cb1eb6b5SCezary Rojewski 9*cb1eb6b5SCezary Rojewski #include "avs.h" 10*cb1eb6b5SCezary Rojewski #include "messages.h" 11*cb1eb6b5SCezary Rojewski 12*cb1eb6b5SCezary Rojewski #define AVS_CL_TIMEOUT_MS 5000 13*cb1eb6b5SCezary Rojewski 14*cb1eb6b5SCezary Rojewski int avs_ipc_load_modules(struct avs_dev *adev, u16 *mod_ids, u32 num_mod_ids) 15*cb1eb6b5SCezary Rojewski { 16*cb1eb6b5SCezary Rojewski union avs_global_msg msg = AVS_GLOBAL_REQUEST(LOAD_MULTIPLE_MODULES); 17*cb1eb6b5SCezary Rojewski struct avs_ipc_msg request; 18*cb1eb6b5SCezary Rojewski int ret; 19*cb1eb6b5SCezary Rojewski 20*cb1eb6b5SCezary Rojewski msg.load_multi_mods.mod_cnt = num_mod_ids; 21*cb1eb6b5SCezary Rojewski request.header = msg.val; 22*cb1eb6b5SCezary Rojewski request.data = mod_ids; 23*cb1eb6b5SCezary Rojewski request.size = sizeof(*mod_ids) * num_mod_ids; 24*cb1eb6b5SCezary Rojewski 25*cb1eb6b5SCezary Rojewski ret = avs_dsp_send_msg_timeout(adev, &request, NULL, AVS_CL_TIMEOUT_MS); 26*cb1eb6b5SCezary Rojewski if (ret) 27*cb1eb6b5SCezary Rojewski avs_ipc_err(adev, &request, "load multiple modules", ret); 28*cb1eb6b5SCezary Rojewski 29*cb1eb6b5SCezary Rojewski return ret; 30*cb1eb6b5SCezary Rojewski } 31*cb1eb6b5SCezary Rojewski 32*cb1eb6b5SCezary Rojewski int avs_ipc_unload_modules(struct avs_dev *adev, u16 *mod_ids, u32 num_mod_ids) 33*cb1eb6b5SCezary Rojewski { 34*cb1eb6b5SCezary Rojewski union avs_global_msg msg = AVS_GLOBAL_REQUEST(UNLOAD_MULTIPLE_MODULES); 35*cb1eb6b5SCezary Rojewski struct avs_ipc_msg request; 36*cb1eb6b5SCezary Rojewski int ret; 37*cb1eb6b5SCezary Rojewski 38*cb1eb6b5SCezary Rojewski msg.load_multi_mods.mod_cnt = num_mod_ids; 39*cb1eb6b5SCezary Rojewski request.header = msg.val; 40*cb1eb6b5SCezary Rojewski request.data = mod_ids; 41*cb1eb6b5SCezary Rojewski request.size = sizeof(*mod_ids) * num_mod_ids; 42*cb1eb6b5SCezary Rojewski 43*cb1eb6b5SCezary Rojewski ret = avs_dsp_send_msg_timeout(adev, &request, NULL, AVS_CL_TIMEOUT_MS); 44*cb1eb6b5SCezary Rojewski if (ret) 45*cb1eb6b5SCezary Rojewski avs_ipc_err(adev, &request, "unload multiple modules", ret); 46*cb1eb6b5SCezary Rojewski 47*cb1eb6b5SCezary Rojewski return ret; 48*cb1eb6b5SCezary Rojewski } 49*cb1eb6b5SCezary Rojewski 50*cb1eb6b5SCezary Rojewski int avs_ipc_load_library(struct avs_dev *adev, u32 dma_id, u32 lib_id) 51*cb1eb6b5SCezary Rojewski { 52*cb1eb6b5SCezary Rojewski union avs_global_msg msg = AVS_GLOBAL_REQUEST(LOAD_LIBRARY); 53*cb1eb6b5SCezary Rojewski struct avs_ipc_msg request = {{0}}; 54*cb1eb6b5SCezary Rojewski int ret; 55*cb1eb6b5SCezary Rojewski 56*cb1eb6b5SCezary Rojewski msg.load_lib.dma_id = dma_id; 57*cb1eb6b5SCezary Rojewski msg.load_lib.lib_id = lib_id; 58*cb1eb6b5SCezary Rojewski request.header = msg.val; 59*cb1eb6b5SCezary Rojewski 60*cb1eb6b5SCezary Rojewski ret = avs_dsp_send_msg_timeout(adev, &request, NULL, AVS_CL_TIMEOUT_MS); 61*cb1eb6b5SCezary Rojewski if (ret) 62*cb1eb6b5SCezary Rojewski avs_ipc_err(adev, &request, "load library", ret); 63*cb1eb6b5SCezary Rojewski 64*cb1eb6b5SCezary Rojewski return ret; 65*cb1eb6b5SCezary Rojewski } 66