Lines Matching defs:adev

15 /* Caller responsible for holding adev->modres_mutex. */
16 static int avs_module_entry_index(struct avs_dev *adev, const guid_t *uuid)
20 for (i = 0; i < adev->mods_info->count; i++) {
23 module = &adev->mods_info->entries[i];
31 /* Caller responsible for holding adev->modres_mutex. */
32 static int avs_module_id_entry_index(struct avs_dev *adev, u32 module_id)
36 for (i = 0; i < adev->mods_info->count; i++) {
39 module = &adev->mods_info->entries[i];
47 int avs_get_module_entry(struct avs_dev *adev, const guid_t *uuid, struct avs_module_entry *entry)
51 mutex_lock(&adev->modres_mutex);
53 idx = avs_module_entry_index(adev, uuid);
55 memcpy(entry, &adev->mods_info->entries[idx], sizeof(*entry));
57 mutex_unlock(&adev->modres_mutex);
61 int avs_get_module_id_entry(struct avs_dev *adev, u32 module_id, struct avs_module_entry *entry)
65 mutex_lock(&adev->modres_mutex);
67 idx = avs_module_id_entry_index(adev, module_id);
69 memcpy(entry, &adev->mods_info->entries[idx], sizeof(*entry));
71 mutex_unlock(&adev->modres_mutex);
75 int avs_get_module_id(struct avs_dev *adev, const guid_t *uuid)
80 ret = avs_get_module_entry(adev, uuid, &module);
84 bool avs_is_module_ida_empty(struct avs_dev *adev, u32 module_id)
89 mutex_lock(&adev->modres_mutex);
91 idx = avs_module_id_entry_index(adev, module_id);
93 ret = ida_is_empty(adev->mod_idas[idx]);
95 mutex_unlock(&adev->modres_mutex);
99 /* Caller responsible for holding adev->modres_mutex. */
100 static void avs_module_ida_destroy(struct avs_dev *adev)
102 int i = adev->mods_info ? adev->mods_info->count : 0;
105 ida_destroy(adev->mod_idas[i]);
106 kfree(adev->mod_idas[i]);
108 kfree(adev->mod_idas);
111 /* Caller responsible for holding adev->modres_mutex. */
113 avs_module_ida_alloc(struct avs_dev *adev, struct avs_mods_info *newinfo, bool purge)
115 struct avs_mods_info *oldinfo = adev->mods_info;
122 dev_warn(adev->dev, "refreshing %d modules info with %d\n",
132 memcpy(ida_ptrs, adev->mod_idas, tocopy_count * sizeof(*ida_ptrs));
149 kfree(adev->mod_idas);
151 avs_module_ida_destroy(adev);
153 adev->mod_idas = ida_ptrs;
157 int avs_module_info_init(struct avs_dev *adev, bool purge)
162 ret = avs_ipc_get_modules_info(adev, &info);
166 mutex_lock(&adev->modres_mutex);
168 ret = avs_module_ida_alloc(adev, info, purge);
170 dev_err(adev->dev, "initialize module idas failed: %d\n", ret);
175 kfree(adev->mods_info);
176 adev->mods_info = info;
179 mutex_unlock(&adev->modres_mutex);
183 void avs_module_info_free(struct avs_dev *adev)
185 mutex_lock(&adev->modres_mutex);
187 avs_module_ida_destroy(adev);
188 kfree(adev->mods_info);
189 adev->mods_info = NULL;
191 mutex_unlock(&adev->modres_mutex);
194 int avs_module_id_alloc(struct avs_dev *adev, u16 module_id)
198 mutex_lock(&adev->modres_mutex);
200 idx = avs_module_id_entry_index(adev, module_id);
202 dev_err(adev->dev, "invalid module id: %d", module_id);
206 max_id = adev->mods_info->entries[idx].instance_max_count - 1;
207 ret = ida_alloc_max(adev->mod_idas[idx], max_id, GFP_KERNEL);
209 mutex_unlock(&adev->modres_mutex);
213 void avs_module_id_free(struct avs_dev *adev, u16 module_id, u8 instance_id)
217 mutex_lock(&adev->modres_mutex);
219 idx = avs_module_id_entry_index(adev, module_id);
221 dev_err(adev->dev, "invalid module id: %d", module_id);
225 ida_free(adev->mod_idas[idx], instance_id);
227 mutex_unlock(&adev->modres_mutex);
235 int avs_request_firmware(struct avs_dev *adev, const struct firmware **fw_p, const char *name)
241 list_for_each_entry(entry, &adev->fw_list, node) {
259 ret = request_firmware(&entry->fw, name, adev->dev);
268 list_add_tail(&entry->node, &adev->fw_list);
277 void avs_release_last_firmware(struct avs_dev *adev)
281 entry = list_last_entry(&adev->fw_list, typeof(*entry), node);
292 void avs_release_firmwares(struct avs_dev *adev)
296 list_for_each_entry_safe(entry, tmp, &adev->fw_list, node) {