hrt_vaddress sh_css_refcount_alloc( int32_t id, const size_t size, const uint16_t attribute) { hrt_vaddress ptr; struct sh_css_refcount_entry *entry = NULL; uint32_t i; assert(size > 0); assert(id != FREE_BUF_CACHE); for (i = 0; i < myrefcount.size; i++) { entry = &myrefcount.items[i]; if ((entry->id == FREE_BUF_CACHE) && (entry->size == size)) { entry->id = id; assert(entry->count == 0); entry->count = 1; assert(entry->data != mmgr_NULL); if (attribute & MMGR_ATTRIBUTE_CLEARED) mmgr_clear(entry->data, size); sh_css_dtrace(SH_DBG_TRACE_PRIVATE, "sh_css_refcount_alloc(%x) 0x%x " "reused from cache, refcnt %d\n", id, entry->data, entry->count); return entry->data; } } ptr = mmgr_alloc_attr(size, attribute); assert(ptr != mmgr_NULL); /* This address should not exist in the administration yet */ assert(!find_entry(ptr)); entry = find_free_entry(ptr); assert(entry != NULL); if (entry == NULL) return mmgr_NULL; assert(entry->data == mmgr_NULL); entry->id = id; entry->data = ptr; entry->size = size; entry->count = 1; sh_css_dtrace(SH_DBG_TRACE_PRIVATE, "sh_css_refcount_alloc(%x) 0x%x " "new alloc refcnt %d\n", id, ptr, entry->count); return ptr; }
static enum ia_css_err frame_allocate_buffer_data(struct ia_css_frame *frame) { frame->data = mmgr_alloc_attr(frame->data_bytes, frame->contiguous ? MMGR_ATTRIBUTE_CONTIGUOUS : MMGR_ATTRIBUTE_DEFAULT); if (frame->data == mmgr_NULL) return IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; return IA_CSS_SUCCESS; }
hrt_vaddress mmgr_calloc(const size_t N, const size_t size) { return mmgr_alloc_attr(size * N, MMGR_ATTRIBUTE_CLEARED); }
hrt_vaddress mmgr_malloc(const size_t size) { return mmgr_alloc_attr(size, 0); }