Lines Matching +full:entry +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-only
3 // Copyright(c) 2021-2022 Intel Corporation
15 /* Caller responsible for holding adev->modres_mutex. */
20 for (i = 0; i < adev->mods_info->count; i++) { in avs_module_entry_index()
23 module = &adev->mods_info->entries[i]; in avs_module_entry_index()
24 if (guid_equal(&module->uuid, uuid)) in avs_module_entry_index()
28 return -ENOENT; in avs_module_entry_index()
31 /* Caller responsible for holding adev->modres_mutex. */
36 for (i = 0; i < adev->mods_info->count; i++) { in avs_module_id_entry_index()
39 module = &adev->mods_info->entries[i]; in avs_module_id_entry_index()
40 if (module->module_id == module_id) in avs_module_id_entry_index()
44 return -ENOENT; in avs_module_id_entry_index()
47 int avs_get_module_entry(struct avs_dev *adev, const guid_t *uuid, struct avs_module_entry *entry) in avs_get_module_entry() argument
51 mutex_lock(&adev->modres_mutex); in avs_get_module_entry()
55 memcpy(entry, &adev->mods_info->entries[idx], sizeof(*entry)); in avs_get_module_entry()
57 mutex_unlock(&adev->modres_mutex); in avs_get_module_entry()
61 int avs_get_module_id_entry(struct avs_dev *adev, u32 module_id, struct avs_module_entry *entry) in avs_get_module_id_entry() argument
65 mutex_lock(&adev->modres_mutex); in avs_get_module_id_entry()
69 memcpy(entry, &adev->mods_info->entries[idx], sizeof(*entry)); in avs_get_module_id_entry()
71 mutex_unlock(&adev->modres_mutex); in avs_get_module_id_entry()
81 return !ret ? module.module_id : -ENOENT; in avs_get_module_id()
89 mutex_lock(&adev->modres_mutex); in avs_is_module_ida_empty()
93 ret = ida_is_empty(adev->mod_idas[idx]); in avs_is_module_ida_empty()
95 mutex_unlock(&adev->modres_mutex); in avs_is_module_ida_empty()
99 /* Caller responsible for holding adev->modres_mutex. */
102 int i = adev->mods_info ? adev->mods_info->count : 0; in avs_module_ida_destroy()
104 while (i--) { in avs_module_ida_destroy()
105 ida_destroy(adev->mod_idas[i]); in avs_module_ida_destroy()
106 kfree(adev->mod_idas[i]); in avs_module_ida_destroy()
108 kfree(adev->mod_idas); in avs_module_ida_destroy()
111 /* Caller responsible for holding adev->modres_mutex. */
115 struct avs_mods_info *oldinfo = adev->mods_info; in avs_module_ida_alloc()
121 if (oldinfo->count >= newinfo->count) in avs_module_ida_alloc()
122 dev_warn(adev->dev, "refreshing %d modules info with %d\n", in avs_module_ida_alloc()
123 oldinfo->count, newinfo->count); in avs_module_ida_alloc()
124 tocopy_count = oldinfo->count; in avs_module_ida_alloc()
127 ida_ptrs = kcalloc(newinfo->count, sizeof(*ida_ptrs), GFP_KERNEL); in avs_module_ida_alloc()
129 return -ENOMEM; in avs_module_ida_alloc()
132 memcpy(ida_ptrs, adev->mod_idas, tocopy_count * sizeof(*ida_ptrs)); in avs_module_ida_alloc()
134 for (i = tocopy_count; i < newinfo->count; i++) { in avs_module_ida_alloc()
137 while (i--) in avs_module_ida_alloc()
141 return -ENOMEM; in avs_module_ida_alloc()
149 kfree(adev->mod_idas); in avs_module_ida_alloc()
153 adev->mod_idas = ida_ptrs; in avs_module_ida_alloc()
166 mutex_lock(&adev->modres_mutex); in avs_module_info_init()
170 dev_err(adev->dev, "initialize module idas failed: %d\n", ret); in avs_module_info_init()
175 kfree(adev->mods_info); in avs_module_info_init()
176 adev->mods_info = info; in avs_module_info_init()
179 mutex_unlock(&adev->modres_mutex); in avs_module_info_init()
185 mutex_lock(&adev->modres_mutex); in avs_module_info_free()
188 kfree(adev->mods_info); in avs_module_info_free()
189 adev->mods_info = NULL; in avs_module_info_free()
191 mutex_unlock(&adev->modres_mutex); in avs_module_info_free()
198 mutex_lock(&adev->modres_mutex); in avs_module_id_alloc()
201 if (idx == -ENOENT) { in avs_module_id_alloc()
202 dev_err(adev->dev, "invalid module id: %d", module_id); in avs_module_id_alloc()
203 ret = -EINVAL; in avs_module_id_alloc()
206 max_id = adev->mods_info->entries[idx].instance_max_count - 1; in avs_module_id_alloc()
207 ret = ida_alloc_max(adev->mod_idas[idx], max_id, GFP_KERNEL); in avs_module_id_alloc()
209 mutex_unlock(&adev->modres_mutex); in avs_module_id_alloc()
217 mutex_lock(&adev->modres_mutex); in avs_module_id_free()
220 if (idx == -ENOENT) { in avs_module_id_free()
221 dev_err(adev->dev, "invalid module id: %d", module_id); in avs_module_id_free()
225 ida_free(adev->mod_idas[idx], instance_id); in avs_module_id_free()
227 mutex_unlock(&adev->modres_mutex); in avs_module_id_free()
235 int avs_request_firmware(struct avs_dev *adev, const struct firmware **fw_p, const char *name) in avs_request_firmware() argument
237 struct avs_fw_entry *entry; in avs_request_firmware() local
241 list_for_each_entry(entry, &adev->fw_list, node) { in avs_request_firmware()
242 if (!strcmp(name, entry->name)) { in avs_request_firmware()
243 *fw_p = entry->fw; in avs_request_firmware()
249 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in avs_request_firmware()
250 if (!entry) in avs_request_firmware()
251 return -ENOMEM; in avs_request_firmware()
253 entry->name = kstrdup_const(name, GFP_KERNEL); in avs_request_firmware()
254 if (!entry->name) { in avs_request_firmware()
255 kfree(entry); in avs_request_firmware()
256 return -ENOMEM; in avs_request_firmware()
259 ret = request_firmware(&entry->fw, name, adev->dev); in avs_request_firmware()
261 kfree_const(entry->name); in avs_request_firmware()
262 kfree(entry); in avs_request_firmware()
266 *fw_p = entry->fw; in avs_request_firmware()
268 list_add_tail(&entry->node, &adev->fw_list); in avs_request_firmware()
274 * Release single FW entry, used to handle errors in functions calling
279 struct avs_fw_entry *entry; in avs_release_last_firmware() local
281 entry = list_last_entry(&adev->fw_list, typeof(*entry), node); in avs_release_last_firmware()
283 list_del(&entry->node); in avs_release_last_firmware()
284 release_firmware(entry->fw); in avs_release_last_firmware()
285 kfree_const(entry->name); in avs_release_last_firmware()
286 kfree(entry); in avs_release_last_firmware()
294 struct avs_fw_entry *entry, *tmp; in avs_release_firmwares() local
296 list_for_each_entry_safe(entry, tmp, &adev->fw_list, node) { in avs_release_firmwares()
297 list_del(&entry->node); in avs_release_firmwares()
298 release_firmware(entry->fw); in avs_release_firmwares()
299 kfree_const(entry->name); in avs_release_firmwares()
300 kfree(entry); in avs_release_firmwares()