OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [include/] [l4/] [lib/] [memcache.h] - Rev 6

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 * Bitmap-based link-listable fixed-size memory cache.
 *
 * Copyright (C) 2007 Bahadir Balban
 */
 
#ifndef __MEMCACHE_H__
#define __MEMCACHE_H__
 
#include <l4/config.h>
#include <l4/macros.h>
#include <l4/types.h>
#include <l4/lib/list.h>
#include <l4/lib/mutex.h>
 
/*
 * Very basic cache structure. All it does is, keep an internal bitmap of
 * items of struct_size. (Note bitmap is fairly efficient and simple for a
 * fixed-size memory cache) Keeps track of free/occupied items within its
 * start/end boundaries. Does not grow/shrink but you can link-list it.
 */
struct mem_cache {
	struct link list;
	struct mutex mutex;
	int total;
	int free;
	unsigned int start;
	unsigned int end;
	unsigned int struct_size;
	unsigned int *bitmap;
};
 
int mem_cache_bufsize(void *start, int struct_size, int nstructs, int aligned);
void *mem_cache_zalloc(struct mem_cache *cache);
void *mem_cache_alloc(struct mem_cache *cache);
int mem_cache_free(struct mem_cache *cache, void *addr);
struct mem_cache *mem_cache_init(void *start, int cache_size,
				 int struct_size, unsigned int alignment);
static inline int mem_cache_is_full(struct mem_cache *cache)
{
	return cache->free == 0;
}
static inline int mem_cache_is_empty(struct mem_cache *cache)
{
	return cache->free == cache->total;
}
static inline int mem_cache_is_last_free(struct mem_cache *cache)
{
	return cache->free == 1;
}
static inline int mem_cache_total_empty(struct mem_cache *cache)
{
	return cache->free;
}
#endif /* __MEMCACHE_H__ */
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.