basecmd: Move low-level alloc code into basecmd.c

Implement new dynmem_start() and dynmem_end() functions instead of
alloc_chunk() and alloc_chunks() in the board code.  This simplifies
the board code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2017-07-19 23:10:08 -04:00
parent 2ee42997e4
commit 649d26e093
6 changed files with 74 additions and 90 deletions

View File

@@ -1,37 +1,23 @@
// Dummy implementation for alloc commands
// Generic implementation of dynamic memory pool
//
// Copyright (C) 2016,2017 Kevin O'Connor <kevin@koconnor.net>
//
// This file may be distributed under the terms of the GNU GPLv3 license.
#include <stdlib.h> // malloc
#include <string.h> // memset
#include "command.h" // shutdown
#include "misc.h" // alloc_chunk
#include "sched.h" // sched_shutdown
#include "misc.h" // dynmem_start
// Return the maximum allocation size that can succeed up to 'reqsize'
size_t
alloc_chunk_maxsize(size_t reqsize)
{
return reqsize;
}
static char dynmem_pool[20 * 1024];
// Allocate an area of memory
// Return the start of memory available for dynamic allocations
void *
alloc_chunk(size_t size)
dynmem_start(void)
{
void *data = malloc(size);
if (!data)
shutdown("alloc_chunk failed");
memset(data, 0, size);
return data;
return dynmem_pool;
}
// Allocate an array of chunks
// Return the end of memory available for dynamic allocations
void *
alloc_chunks(size_t size, size_t count, size_t *avail)
dynmem_end(void)
{
*avail = count;
return alloc_chunk(size * count);
return &dynmem_pool[sizeof(dynmem_pool)];
}