Forward declared memrar_allocator structure in memrar_allocator.h and moved the definition to memrar_allocator.c. Implemented memrar_allocator_capacity() and memrar_allocator_largest_free_area(). Signed-off-by: Henri Häkkinen <henuxd@xxxxxxxxx> --- drivers/staging/memrar/memrar_allocator.c | 43 ++++++++++++++++++++++++++ drivers/staging/memrar/memrar_allocator.h | 48 ++++++++++++----------------- 2 files changed, 63 insertions(+), 28 deletions(-) diff --git a/drivers/staging/memrar/memrar_allocator.c b/drivers/staging/memrar/memrar_allocator.c index a4f8c58..cb74e3c 100644 --- a/drivers/staging/memrar/memrar_allocator.c +++ b/drivers/staging/memrar/memrar_allocator.c @@ -41,6 +41,36 @@ #include <linux/kernel.h> +/** + * struct memrar_allocator - encapsulation of the memory allocator state + * @lock: Lock used to synchronize access to the memory + * allocator state. + * @base: Base (start) address of the allocator memory + * space. + * @capacity: Size of the allocator memory space in bytes. + * @block_size: The size in bytes of individual blocks within + * the allocator memory space. + * @largest_free_area: Largest free area of memory in the allocator + * in bytes. + * @allocated_list: List of allocated memory block address + * ranges. + * @free_list: List of free address ranges. + * + * This structure contains all memory allocator state, including the + * base address, capacity, free list, lock, etc. + */ +struct memrar_allocator { +/* private: internal use only */ + struct mutex lock; + unsigned long base; + size_t capacity; + size_t block_size; + size_t largest_free_area; + struct memrar_address_ranges allocated_list; + struct memrar_address_ranges free_list; +}; + + struct memrar_allocator *memrar_create_allocator(unsigned long base, size_t capacity, size_t block_size) @@ -423,6 +453,19 @@ exit_memrar_free: return 0; } +size_t memrar_allocator_largest_free_area(struct memrar_allocator *allocator) +{ + if (allocator == NULL) + return 0; + return allocator->largest_free_area; +} + +size_t memrar_allocator_capacity(struct memrar_allocator *allocator) +{ + if (allocator == NULL) + return 0; + return allocator->capacity; +} /* diff --git a/drivers/staging/memrar/memrar_allocator.h b/drivers/staging/memrar/memrar_allocator.h index 0b80dea..49dbc6e 100644 --- a/drivers/staging/memrar/memrar_allocator.h +++ b/drivers/staging/memrar/memrar_allocator.h @@ -50,34 +50,10 @@ struct memrar_address_ranges { struct memrar_address_range range; }; -/** - * struct memrar_allocator - encapsulation of the memory allocator state - * @lock: Lock used to synchronize access to the memory - * allocator state. - * @base: Base (start) address of the allocator memory - * space. - * @capacity: Size of the allocator memory space in bytes. - * @block_size: The size in bytes of individual blocks within - * the allocator memory space. - * @largest_free_area: Largest free area of memory in the allocator - * in bytes. - * @allocated_list: List of allocated memory block address - * ranges. - * @free_list: List of free address ranges. - * - * This structure contains all memory allocator state, including the - * base address, capacity, free list, lock, etc. - */ -struct memrar_allocator { -/* private: internal use only */ - struct mutex lock; - unsigned long base; - size_t capacity; - size_t block_size; - size_t largest_free_area; - struct memrar_address_ranges allocated_list; - struct memrar_address_ranges free_list; -}; + +/* Forward declaration */ +struct memrar_allocator; + /** * memrar_create_allocator() - create a memory allocator @@ -139,6 +115,22 @@ unsigned long memrar_allocator_alloc(struct memrar_allocator *allocator, long memrar_allocator_free(struct memrar_allocator *allocator, unsigned long address); +/** + * memrar_allocator_largest_area() - largest free area of memory + * @allocator: The allocator instance the free area is returned for. + * + * Return the largest free area of memory in the allocator in bytes. + */ +size_t memrar_allocator_largest_free_area(struct memrar_allocator *allocator); + +/** + * memrar_allocator_capacity() - size of the allocator memory + * @allocator: The allocator instance the capicity is returned for. + * + * Return the size of the allocator memory space in bytes. + */ +size_t memrar_allocator_capacity(struct memrar_allocator *allocator); + #endif /* MEMRAR_ALLOCATOR_H */ -- 1.7.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel