allocate_resource — allocate empty slot in the resource tree given range & alignment. The resource will be reallocated with a new size if it was already allocated


int allocate_resource (struct resource * root,
 struct resource * new,
 resource_size_t size,
 resource_size_t min,
 resource_size_t max,
 resource_size_t align,
 resource_size_t (*alignf) (void *, const struct resource *, resource_size_t, resource_size_t),
 void * alignf_data);


struct resource * root

root resource descriptor

struct resource * new

resource descriptor desired by caller

resource_size_t size

requested resource region size

resource_size_t min

minimum boundary to allocate

resource_size_t max

maximum boundary to allocate

resource_size_t align

alignment requested, in bytes

resource_size_t (*)(void *, const struct resource *, resource_size_t, resource_size_t) alignf

alignment function, optional, called if not NULL

void * alignf_data

arbitrary data to pass to the alignf function