aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/globals.h3
-rw-r--r--include/lib/ll.h26
-rw-r--r--include/lib/mem.h48
-rw-r--r--include/lib/q.h31
-rw-r--r--src/cpu/irq.c2
-rw-r--r--src/globals.c3
-rw-r--r--src/lib/ll.c57
-rw-r--r--src/lib/mem.c340
-rw-r--r--src/lib/q.c54
-rw-r--r--src/sys/core.c2
-rw-r--r--src/sys/schedule.c5
-rw-r--r--src/util/status.c4
12 files changed, 2 insertions, 573 deletions
diff --git a/include/globals.h b/include/globals.h
index 423425f..ff67315 100644
--- a/include/globals.h
+++ b/include/globals.h
@@ -1,6 +1,5 @@
#ifndef GLOBALS_H
#define GLOBALS_H
-#include <lib/mem.h>
#include <sys/schedule.h>
#ifndef GLOBALS_C
@@ -13,8 +12,6 @@ unsigned char kmem_begin[0x2000000];
unsigned char kmem_lookup[0xD000];
extern unsigned long exe_cnt;
extern struct Mutex exe_cnt_m;
-extern unsigned char rpi_heap[MAX_MM];
-extern void* rpi_heap_top;
extern unsigned long nextpid;
extern unsigned long stimel;
extern unsigned long stimeh;
diff --git a/include/lib/ll.h b/include/lib/ll.h
deleted file mode 100644
index a9c3722..0000000
--- a/include/lib/ll.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef LIB_LL_H
-#define LIB_LL_H
-
-struct LL {
- struct LL* prev;
- struct LL* next;
- void* data;
-} __attribute__((packed));
-
-struct LL* new_ll(void* val);
-void push_ll(struct LL* l, void* val);
-void pop_ll(struct LL* l);
-void remove_ll(struct LL* l, unsigned long idx);
-unsigned long length_ll(struct LL* l);
-
-#define show_ll(L, TYPE) { \
- struct LL* t = L; \
- do { \
- uart_hex(*(TYPE*)t->data); \
- t = t->next; \
- if (t != l) \
- uart_char(' '); \
- } while (t != l); \
-}
-
-#endif
diff --git a/include/lib/mem.h b/include/lib/mem.h
deleted file mode 100644
index 655e648..0000000
--- a/include/lib/mem.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef LIB_MEM_H
-#define LIB_MEM_H
-
-#define MEM_SIZE_OFFSET 0
-#define MEM_USE_OFFSET 1
-#define MEM_BASE_SIZE 2
-#define MEM_META_SIZE 3
-#define NULL 0
-#define MAX_MM 0x100000
-
-struct MemTab {
- unsigned char size;
- unsigned char in_use;
- void* data;
-} __attribute__((packed));
-
-struct RotBuffer {
- void* base;
- unsigned int size;
- unsigned int roffset;
- unsigned int woffset;
-};
-
-void memshow(unsigned char* addr, unsigned int n);
-void memset(unsigned char* dest, unsigned char value, unsigned int n);
-void memcpy(unsigned char* src, unsigned char* dest, unsigned int n);
-unsigned char memcmp(unsigned char* a, unsigned char* b, unsigned int n);
-void memcpyrot(unsigned char* src, struct RotBuffer* rb, unsigned int n);
-
-void memshow32(unsigned long* addr, unsigned int n);
-void memset32(unsigned long* dest, unsigned long value, unsigned int n);
-void memcpy32(unsigned long* src, unsigned long* dest, unsigned int n);
-unsigned char memcmp32(unsigned long* a, unsigned long* b, unsigned int n);
-
-void* realloc(void* old, unsigned char size);
-void* malloc(unsigned char size);
-void* calloc(unsigned char size);
-void* realloca(void* old, unsigned char size, unsigned char amnt);
-void* malloca(unsigned char size, unsigned char amnt);
-void* calloca(unsigned char size, unsigned char amnt);
-void free(void* memloc);
-void* heap_base(void);
-void* heap_top(void);
-void vheap_info(void);
-void heap_info(void);
-void heap_info_u(void);
-
-#endif
diff --git a/include/lib/q.h b/include/lib/q.h
deleted file mode 100644
index 11d7ab7..0000000
--- a/include/lib/q.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef LIB_Q_H
-#define LIB_Q_H
-
-struct Q_base {
- struct Q* next;
- struct Q* last;
-} __attribute__((packed));
-
-struct Q {
- struct Q* next;
- void* data;
-} __attribute__((packed));
-
-struct Q_base* new_q();
-void push_q(struct Q_base* qb, void* val);
-void pop_q(struct Q_base* qb);
-unsigned long length_q(struct Q_base* qb);
-
-#define show_q(QQ, TYPE) { \
- if (QQ->next != 0) { \
- struct Q* t = QQ->next; \
- while (t->next != 0) { \
- uart_hex(*(TYPE*)t->data); \
- t = t->next; \
- uart_char(' '); \
- } \
- uart_hex(*(TYPE*)t->data); \
- } \
-}
-
-#endif
diff --git a/src/cpu/irq.c b/src/cpu/irq.c
index 6be4bc7..9685b0a 100644
--- a/src/cpu/irq.c
+++ b/src/cpu/irq.c
@@ -101,7 +101,5 @@ void handle_data(unsigned char data)
release_mutex(&exe_cnt_m, SYS_PID);
} else if (data == 0x61) {
add_thread(uart_scheduler, 0, 2);
- } else if (data == 0x62) {
- add_thread(heap_info, 0, 2);
}
}
diff --git a/src/globals.c b/src/globals.c
index 5d3369d..8334a60 100644
--- a/src/globals.c
+++ b/src/globals.c
@@ -1,5 +1,4 @@
#define GLOBALS_C
-//#include <lib/mem.h>
#include <lib/kmem.h>
#include <util/mutex.h>
#include <graphics/drawer.h>
@@ -25,6 +24,4 @@ __attribute__((section(".bss"))) unsigned int gwidth;
__attribute__((section(".bss"))) unsigned int gheight;
__attribute__((section(".bss"))) unsigned int gpitch;
__attribute__((section(".bss"))) unsigned int gisrgb;
-__attribute__((section(".bss.mmheap"))) unsigned char rpi_heap[MAX_MM];
-__attribute__((section(".bss.mmheap.base"))) void* rpi_heap_top;
__attribute__((section(".bss"))) unsigned char stacks_table[MAX_THREADS];
diff --git a/src/lib/ll.c b/src/lib/ll.c
deleted file mode 100644
index 4918194..0000000
--- a/src/lib/ll.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <lib/ll.h>
-#include <lib/mem.h>
-
-struct LL* new_ll(void* val)
-{
- struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
- ll->prev = ll;
- ll->next = ll;
- ll->data = val;
- return ll;
-}
-
-void push_ll(struct LL* l, void* val)
-{
- struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
- l->prev->next = ll;
- ll->prev = l->prev;
- ll->next = l;
- l->prev = ll;
- ll->data = val;
-}
-
-void pop_ll(struct LL* l)
-{
- if ((l->prev == l->next) && (l->prev == l))
- l->data = 0;
- else {
- l->prev->next = l->next;
- l->next->prev = l->prev;
- free(l);
- }
-}
-
-void remove_ll(struct LL* l, unsigned long idx)
-{
- struct LL* t = l;
- for(unsigned long i = 0; i < idx; i++) {
- t = t->next;
- }
- t->prev->next = t->next;
- t->next->prev = t->prev;
- free(t);
-}
-
-unsigned long length_ll(struct LL* l)
-{
- struct LL* t = l;
- unsigned long len = 0;
- while (1) {
- if (t->next == l) {
- return len;
- }
- len++;
- t = t->next;
- }
- return len;
-}
diff --git a/src/lib/mem.c b/src/lib/mem.c
deleted file mode 100644
index 2f50d3d..0000000
--- a/src/lib/mem.c
+++ /dev/null
@@ -1,340 +0,0 @@
-#include <drivers/uart.h>
-#include <globals.h>
-#include <graphics/lfb.h>
-#include <lib/mem.h>
-#include <sys/schedule.h>
-
-void memcpyrot(unsigned char* src, struct RotBuffer* rb, unsigned int n)
-{
- if (n > rb->size)
- return;
- unsigned char* base = rb->base;
- unsigned int offset = rb->woffset;
- for (unsigned int i = 0; i < n; i++) {
- if (offset >= rb->size)
- offset = 0;
- base[offset] = src[i];
- offset++;
- }
- rb->woffset = offset;
-}
-
-void memshow(unsigned char* addr, unsigned int n)
-{
- unsigned char temp;
- for(unsigned int i = 0; i < n; i++) {
- temp = addr[i] >> 4;
- temp += 0x30;
- if (temp > 0x39)
- temp += 7;
- uart_char(temp);
- temp = addr[i];
- temp += 0x30;
- if (temp > 0x39)
- temp += 7;
- uart_char(temp);
- if (i+1 != n)
- uart_char(0x20);
- }
- uart_char(0x0a);
-}
-
-void memshow32(unsigned long* addr, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- uart_hex(addr[i]);
- if (i+1 != n)
- uart_char(0x20);
- }
- uart_char(0x0a);
-}
-
-void memset(unsigned char* dest, unsigned char value, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- dest[i] = value;
- }
-}
-
-void memcpy(unsigned char* src, unsigned char* dest, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- dest[i] = src[i];
- }
-}
-
-unsigned char memcmp(unsigned char* a, unsigned char* b, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- if (a[i] != b[i])
- return 0;
- }
- return 1;
-}
-
-void memset32(unsigned long* dest, unsigned long value, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- dest[i] = value;
- }
-}
-
-void memcpy32(unsigned long* src, unsigned long* dest, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- dest[i] = src[i];
- }
-}
-
-unsigned char memcmp32(unsigned long* a, unsigned long* b, unsigned int n)
-{
- for(unsigned int i = 0; i < n; i++) {
- if (a[i] != b[i])
- return 0;
- }
- return 1;
-}
-
-
-void* malloc(unsigned char size)
-{
- unsigned char* mem = (unsigned char*)rpi_heap;
- unsigned long i = 0;
- // TODO: Use Null PID
- while (((void*)(mem + i) < rpi_heap_top) && !(mem[i + MEM_SIZE_OFFSET] == size && mem[i + MEM_USE_OFFSET]==0)) {
- i += mem[i] + MEM_META_SIZE;
- }
- if (mem + i >= (unsigned char*)(rpi_heap_top + MAX_MM))
- return NULL;
- // Update top of heap
- if (mem[i] == 0)
- rpi_heap_top = (void*)&mem[i + MEM_META_SIZE + size];
- mem[i] = size;
- mem[i + MEM_BASE_SIZE + size] = size;
- // Use allocator's PID
- mem[i + MEM_USE_OFFSET] = 1;
- return (void*)&mem[i + MEM_BASE_SIZE];
-}
-
-void* calloc(unsigned char size)
-{
- void* addr = malloc(size);
- if (addr != NULL) {
- memset(addr, 0, size);
- return addr;
- }
- return NULL;
-}
-void* realloc(void* old, unsigned char size)
-{
- unsigned char osize = *(unsigned char*)(old - MEM_BASE_SIZE);
- if (size <= osize)
- return old;
- void* new = malloc(size);
- if (new != NULL) {
- free(old);
- return new;
- }
- return NULL;
-}
-
-void* malloca(unsigned char size, unsigned char amnt)
-{
- // Return malloc if alignment size is 0 or 1 - trivial alignment
- if(amnt == 0 || amnt == 1)
- return malloc(size);
- unsigned char* mem = (unsigned char*)rpi_heap;
- unsigned long i = 0;
- // TODO: Use Null PID
- while(mem + i < rpi_heap + MAX_MM) {
- unsigned long diff = (unsigned long)mem + i + MEM_BASE_SIZE;
- diff %= amnt;
- diff = amnt - diff;
- diff %= amnt;
- if((mem[i + MEM_SIZE_OFFSET] == size) && mem[i + MEM_USE_OFFSET]==0) {
- if(diff == 0) {
- mem[i + MEM_SIZE_OFFSET] = size;
- mem[i + MEM_BASE_SIZE + size] = size;
- mem[i + MEM_USE_OFFSET] = 1;
- return (void*)&mem[i + MEM_BASE_SIZE];
- }
- } else if (mem[i] == 0) {
- if(diff == 0) {
- mem[i + MEM_SIZE_OFFSET] = size;
- mem[i + MEM_BASE_SIZE + size] = size;
- mem[i + MEM_USE_OFFSET] = 1;
- rpi_heap_top = (void*)&mem[i + MEM_META_SIZE + size];
- return (void*)&mem[i + MEM_BASE_SIZE];
- } else {
- while (diff <= MEM_BASE_SIZE) {
- diff += amnt;
- }
- unsigned long empty_size = diff - MEM_META_SIZE;
- if(empty_size == 0) {
- empty_size += amnt;
- diff += amnt;
- }
- mem[i + MEM_SIZE_OFFSET] = empty_size;
- mem[i + MEM_BASE_SIZE + empty_size] = empty_size;
- i += diff;
- mem[i + MEM_SIZE_OFFSET] = size;
- mem[i + MEM_BASE_SIZE + size] = size;
- mem[i + MEM_USE_OFFSET] = 1;
- rpi_heap_top = (void*)&mem[i + MEM_META_SIZE + size];
- return (void*)&mem[i + MEM_BASE_SIZE];
- }
- }
-
- i += mem[i] + MEM_META_SIZE;
- }
- return NULL;
-}
-
-void* calloca(unsigned char size, unsigned char amnt)
-{
- void* addr = malloca(size, amnt);
- if (addr != NULL) {
- memset(addr, 0, size);
- return addr;
- }
- return NULL;
-}
-
-void* realloca(void* old, unsigned char size, unsigned char amnt)
-{
- unsigned char osize = *(unsigned char*)(old - MEM_BASE_SIZE);
- if (size <= osize)
- return old;
- void* new = malloca(size, amnt);
- if (new != NULL) {
- free(old);
- return new;
- }
- return NULL;
-}
-
-void free(void* memloc)
-{
- // Don't try to free memory outside of heap
- if(!(((void*)rpi_heap <= memloc) && (memloc < rpi_heap_top)))
- return;
- unsigned char* base = memloc - MEM_BASE_SIZE;
- unsigned char size = base[MEM_SIZE_OFFSET];
- // TODO: Use Null PID
- base[MEM_USE_OFFSET] = 0;
- // Clear out old memory
- for(unsigned int i = 0; i < size; i++) {
- base[i + MEM_BASE_SIZE] = 0;
- }
- // If it is the last entry, clear it and move the heap top down
- if (base + size + MEM_META_SIZE == rpi_heap_top) {
- while(base[MEM_USE_OFFSET] == 0 && base >= rpi_heap) {
- base[MEM_SIZE_OFFSET] = 0;
- base[MEM_BASE_SIZE + size] = 0;
- rpi_heap_top = base;
- unsigned long psize = *(base - 1);
- base -= psize + MEM_META_SIZE;
- }
- }
-}
-
-void* heap_base(void)
-{
- return (void*)rpi_heap;
-}
-
-void* heap_top(void)
-{
- return rpi_heap_top;
-}
-
-void vheap_info(void)
-{
- unsigned char* base = rpi_heap;
- unsigned long ioff = STACK_DRAW_WIDTH*STACK_DRAW_SIZE;
- unsigned long yoff = STACK_DRAW_YOFF;
- draw_cbox(ioff, yoff, STACK_DRAW_SIZE*STACK_DRAW_WIDTH, STACK_DRAW_SIZE * 8, 0x0);
- while ((void*)base < rpi_heap_top) {
- unsigned char size = base[MEM_SIZE_OFFSET];
- if(base[MEM_USE_OFFSET] == 0) {
- draw_cbox(ioff, yoff, STACK_DRAW_SIZE, STACK_DRAW_SIZE, 0x00FF00);
- } else {
- draw_cbox(ioff, yoff, STACK_DRAW_SIZE, STACK_DRAW_SIZE, 0xFF0000);
- }
- ioff += STACK_DRAW_SIZE;
- if(ioff % STACK_DRAW_WIDTH == 0) {
- yoff += STACK_DRAW_SIZE;
- ioff = STACK_DRAW_WIDTH*STACK_DRAW_SIZE;
- }
- base += size + MEM_META_SIZE;
- }
-}
-
-void heap_info(void)
-{
- unsigned char* base = rpi_heap;
- while ((void*)base < rpi_heap_top) {
- unsigned char size = base[MEM_SIZE_OFFSET];
- if(base[MEM_USE_OFFSET] == 0) {
- uart_char('F');
- uart_char(' ');
- } else {
- }
- uart_hex((unsigned long)(base + MEM_BASE_SIZE));
- uart_string(" Size: ");
- uart_10(size);
- uart_string("\n");
- static char* data = "00 \0";
- static unsigned char temp = 0;
- for(unsigned int i = 0; i < size; i++) {
- temp = (base[MEM_BASE_SIZE + i]>>4)&0xF;
- if(temp > 9)
- temp += 7;
- temp += 0x30;
- data[0] = temp;
- temp = (base[MEM_BASE_SIZE + i])&0xF;
- if(temp > 9)
- temp += 7;
- temp += 0x30;
- data[1] = temp;
- uart_string(data);
- }
- uart_char('\n');
- base += size + MEM_META_SIZE;
- }
- uart_char('\n');
-}
-
-void heap_info_u(void)
-{
- unsigned char* base = rpi_heap;
- while ((void*)base < rpi_heap_top) {
- unsigned char size = base[MEM_SIZE_OFFSET];
- if(base[MEM_USE_OFFSET] == 0) {
- base += size + MEM_META_SIZE;
- continue;
- }
- uart_hex((unsigned long)(base + MEM_BASE_SIZE));
- uart_string(" Size: ");
- uart_10(size);
- uart_string("\n");
- static char* data = "00 \0";
- static unsigned char temp = 0;
- for(unsigned int i = 0; i < size; i++) {
- temp = (base[MEM_BASE_SIZE + i]>>4)&0xF;
- if(temp > 9)
- temp += 7;
- temp += 0x30;
- data[0] = temp;
- temp = (base[MEM_BASE_SIZE + i])&0xF;
- if(temp > 9)
- temp += 7;
- temp += 0x30;
- data[1] = temp;
- uart_string(data);
- }
- uart_char('\n');
- base += size + MEM_META_SIZE;
- }
- uart_char('\n');
-}
diff --git a/src/lib/q.c b/src/lib/q.c
deleted file mode 100644
index 2ade143..0000000
--- a/src/lib/q.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <lib/q.h>
-#include <lib/mem.h>
-
-struct Q_base* new_q()
-{
- struct Q_base* q = (struct Q_base*)malloc(sizeof(struct Q_base));
- q->next = 0;
- q->last = 0;
- return q;
-}
-
-void push_q(struct Q_base* qb, void* val)
-{
- struct Q* n = (struct Q*)malloc(sizeof(struct Q));
- n->next = 0;
- n->data = val;
- if (qb->last != 0)
- qb->last->next = n;
- else {
- qb->next = n;
- }
- qb->last = n;
-}
-
-void pop_q(struct Q_base* qb)
-{
- if (qb->next == 0)
- return;
- if (qb->next == qb->last) {
- free(qb->next->data);
- free(qb->next);
- qb->next = 0;
- qb->last = 0;
- return;
- }
- struct Q* t = qb->next;
- qb->next = qb->next->next;
- free(t->data);
- free(t);
-}
-
-unsigned long length_q(struct Q_base* qb)
-{
- unsigned long length = 0;
- if(qb->next == 0)
- return length;
- length++;
- struct Q* q = qb->next;
- while (q != qb->last) {
- length++;
- q = q->next;
- }
- return length;
-}
diff --git a/src/sys/core.c b/src/sys/core.c
index a42b581..65ee526 100644
--- a/src/sys/core.c
+++ b/src/sys/core.c
@@ -5,7 +5,6 @@
#include <graphics/drawer.h>
#include <graphics/lfb.h>
#include <lib/kmem.h>
-#include <lib/mem.h>
#include <lib/strings.h>
#include <symbols.h>
#include <sys/core.h>
@@ -21,7 +20,6 @@ void sysinit(void)
// Initialize System Globals
exe_cnt_m.addr = &exe_cnt;
exe_cnt_m.pid = NULL_PID;
- rpi_heap_top = &rpi_heap;
stimeh = *(unsigned long*)SYS_TIMER_CHI;
stimel = *(unsigned long*)SYS_TIMER_CLO;
*(unsigned long*) SYS_TIMER_C0 = 60000000 + stimeh; // 60 second trigger
diff --git a/src/sys/schedule.c b/src/sys/schedule.c
index acd6098..7bc86c3 100644
--- a/src/sys/schedule.c
+++ b/src/sys/schedule.c
@@ -110,7 +110,7 @@ void uart_scheduler(void)
uart_string("Scheduler Info\n==============\nCurrent\n");
uart_hex((unsigned long)scheduler.rthread);
uart_char(' ');
- memshow32((void*)scheduler.rthread, 6);
+ //memshow32((void*)scheduler.rthread, 6);
struct ThreadQueues* tq;
for(int p = 0; p < PRIORITIES; p++) {
uart_string("Priority ");
@@ -131,8 +131,7 @@ void uart_scheduler(void)
while (roffset != trb->woffset) {
uart_hex((unsigned long)trb->queue[roffset]);
uart_char(' ');
- memshow32((void*)trb->queue[roffset], 6);
- //memshow32((void*)trb->queue[roffset]->sp, 14);
+ //memshow32((void*)trb->queue[roffset], 6);
roffset++;
roffset %= TQUEUE_MAX;
}
diff --git a/src/util/status.c b/src/util/status.c
index 4959431..9044b1a 100644
--- a/src/util/status.c
+++ b/src/util/status.c
@@ -2,7 +2,6 @@
#include <globals.h>
#include <graphics/drawer.h>
#include <graphics/lfb.h>
-#include <lib/mem.h>
#include <symbols.h>
#include <sys/core.h>
#include <sys/schedule.h>
@@ -180,7 +179,4 @@ void status(void)
g_Drawer.x = x;
g_Drawer.y = y;
-
- draw_stacks();
- vheap_info();
}