summaryrefslogtreecommitdiff
path: root/src/liballoc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/liballoc.h')
-rw-r--r--src/liballoc.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/liballoc.h b/src/liballoc.h
new file mode 100644
index 0000000..a8aa5a6
--- /dev/null
+++ b/src/liballoc.h
@@ -0,0 +1,74 @@
+#ifndef _LIBALLOC_H
+#define _LIBALLOC_H
+
+#include <stddef.h>
+
+/** This is a boundary tag which is prepended to the
+ * page or section of a page which we have allocated. It is
+ * used to identify valid memory blocks that the
+ * application is trying to free.
+ */
+struct boundary_tag
+{
+ unsigned int magic; //< It's a kind of ...
+ unsigned int size; //< Requested size.
+ unsigned int real_size; //< Actual size.
+ int index; //< Location in the page table.
+
+ struct boundary_tag *split_left; //< Linked-list info for broken pages.
+ struct boundary_tag *split_right; //< The same.
+
+ struct boundary_tag *next; //< Linked list info.
+ struct boundary_tag *prev; //< Linked list info.
+};
+
+
+
+
+/** This function is supposed to lock the memory data structures. It
+ * could be as simple as disabling interrupts or acquiring a spinlock.
+ * It's up to you to decide.
+ *
+ * \return 0 if the lock was acquired successfully. Anything else is
+ * failure.
+ */
+extern int liballoc_lock();
+
+/** This function unlocks what was previously locked by the liballoc_lock
+ * function. If it disabled interrupts, it enables interrupts. If it
+ * had acquiried a spinlock, it releases the spinlock. etc.
+ *
+ * \return 0 if the lock was successfully released.
+ */
+extern int liballoc_unlock();
+
+/** This is the hook into the local system which allocates pages. It
+ * accepts an integer parameter which is the number of pages
+ * required. The page size was set up in the liballoc_init function.
+ *
+ * \return NULL if the pages were not allocated.
+ * \return A pointer to the allocated memory.
+ */
+extern void* liballoc_alloc(int);
+
+/** This frees previously allocated memory. The void* parameter passed
+ * to the function is the exact same value returned from a previous
+ * liballoc_alloc call.
+ *
+ * The integer value is the number of pages to free.
+ *
+ * \return 0 if the memory was successfully freed.
+ */
+extern int liballoc_free(void*,int);
+
+
+
+void *malloc(size_t); //< The standard function.
+void *realloc(void *, size_t); //< The standard function.
+void *calloc(size_t, size_t); //< The standard function.
+void free(void *); //< The standard function.
+
+
+#endif
+
+