Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * generic arrays
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include <sound/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #include <sound/hdaudio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  * snd_array_new - get a new element from the given array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  * @array: the array object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)  * Get a new element from the given array.  If it exceeds the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)  * pre-allocated array size, re-allocate the array.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)  * Returns NULL if allocation failed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) void *snd_array_new(struct snd_array *array)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	if (snd_BUG_ON(!array->elem_size))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 		return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	if (array->used >= array->alloced) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 		int num = array->alloced + array->alloc_align;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 		int oldsize = array->alloced * array->elem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 		int size = (num + 1) * array->elem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 		void *nlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 		if (snd_BUG_ON(num >= 4096))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 			return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		nlist = krealloc(array->list, size, GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 		if (!nlist)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 			return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 		memset(nlist + oldsize, 0, size - oldsize);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		array->list = nlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		array->alloced = num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	return snd_array_elem(array, array->used++);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) EXPORT_SYMBOL_GPL(snd_array_new);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)  * snd_array_free - free the given array elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)  * @array: the array object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) void snd_array_free(struct snd_array *array)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	kfree(array->list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	array->used = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	array->alloced = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	array->list = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) EXPORT_SYMBOL_GPL(snd_array_free);