/* * Copyright (c) 2018 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #define TIME_OUT 100 /** * @brief Create and Initialize a memory pool. */ osPoolId osPoolCreate(const osPoolDef_t *pool_def) { if (k_is_in_isr()) { return NULL; } return (osPoolId)pool_def; } /** * @brief Allocate a memory block from a memory pool. */ void *osPoolAlloc(osPoolId pool_id) { osPoolDef_t *osPool = (osPoolDef_t *)pool_id; void *ptr; if (k_mem_slab_alloc((struct k_mem_slab *)(osPool->pool), &ptr, TIME_OUT) == 0) { return ptr; } else { return NULL; } } /** * @brief Allocate a memory block from a memory pool and set it to zero. */ void *osPoolCAlloc(osPoolId pool_id) { osPoolDef_t *osPool = (osPoolDef_t *)pool_id; void *ptr; if (k_mem_slab_alloc((struct k_mem_slab *)(osPool->pool), &ptr, TIME_OUT) == 0) { (void)memset(ptr, 0, osPool->item_sz); return ptr; } else { return NULL; } } /** * @brief Return an allocated memory block back to a specific memory pool. */ osStatus osPoolFree(osPoolId pool_id, void *block) { osPoolDef_t *osPool = (osPoolDef_t *)pool_id; /* Note: Below 2 error codes are not supported. * osErrorValue: block does not belong to the memory pool. * osErrorParameter: a parameter is invalid or outside of a * permitted range. */ k_mem_slab_free((struct k_mem_slab *)(osPool->pool), (void *)&block); return osOK; }