summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/bump.h10
-rw-r--r--include/common.h19
-rw-r--r--include/dtb.h46
-rw-r--r--include/mem.h7
-rw-r--r--include/wdt.h18
5 files changed, 80 insertions, 20 deletions
diff --git a/include/bump.h b/include/bump.h
new file mode 100644
index 0000000..81cd571
--- /dev/null
+++ b/include/bump.h
@@ -0,0 +1,10 @@
+#pragma once
+#include <types.h>
+#include <dtb.h>
+#include <mem.h>
+#define EHEAP_SIZE (512 * 1024)
+
+
+void* kemalloc(size_t size);
+struct mem_info *km_find_memory(struct dt_node *head);
+
diff --git a/include/common.h b/include/common.h
new file mode 100644
index 0000000..86f1f9c
--- /dev/null
+++ b/include/common.h
@@ -0,0 +1,19 @@
+#pragma once
+#include <types.h>
+
+static inline size_t strlen(const char *s) {
+ size_t len = 0;
+ while (*s++) {
+ ++len;
+ }
+ return len;
+}
+static inline int strcmp(const char *str1, const char* str2) {
+ while (*str1 && (*str1 == *str2)) {
+ ++str1;
+ ++str2;
+ }
+ return *(const unsigned char *)str1 - *(const unsigned char *)str2;
+}
+
+
diff --git a/include/dtb.h b/include/dtb.h
new file mode 100644
index 0000000..1f8f14f
--- /dev/null
+++ b/include/dtb.h
@@ -0,0 +1,46 @@
+#pragma once
+#include <types.h>
+
+#define FDT_MAGIC 0xEDFE0DD0
+#define FDT_BEGIN_NODE 1
+#define FDT_END_NODE 2
+#define FDT_PROP 3
+#define FDT_NOP 4
+#define FDT_END 9
+
+#define DTB_MAX_NODES 16
+
+struct dt_node {
+ char *name;
+ struct dt_prop *props;
+ struct dt_node *children;
+ struct dt_node *next;
+};
+
+struct dt_prop {
+ char *name;
+ char *value;
+ size_t len;
+ struct dt_prop *next;
+};
+
+struct fdt_header {
+ uint32_t magic;
+ uint32_t totalsize;
+ uint32_t off_dt_struct;
+ uint32_t off_dt_strings;
+ uint32_t off_mem_rsvmap;
+ uint32_t version;
+ uint32_t last_comp_version;
+ uint32_t boot_cpuid_phys;
+ uint32_t size_dt_strings;
+ uint32_t size_dt_struct;
+};
+
+struct dt_node *dt_parse(void *fdt);
+void *dt_get_prop(struct dt_node *node, char *name, size_t *len);
+uint32_t dt_read_u32(struct dt_node *node, char *name, uint32_t *out);
+
+
+struct dt_node *dt_node_alloc(char *name);
+struct dt_prop *dt_prop_alloc(char *name, void *value, size_t len);
diff --git a/include/mem.h b/include/mem.h
index 12976df..6135786 100644
--- a/include/mem.h
+++ b/include/mem.h
@@ -1,8 +1,6 @@
#pragma once
#include <types.h>
-#define EHEAP_SIZE (512 * 1024)
-
typedef enum {
PAGE_FREE,
PAGE_ALLOCATED
@@ -14,6 +12,11 @@ struct page {
struct page* next;
};
+struct mem_info {
+ void* start;
+ size_t size;
+};
+
void* kmalloc(size_t size);
void* memcpy(void* to, const void* from,size_t size);
diff --git a/include/wdt.h b/include/wdt.h
deleted file mode 100644
index 31739ab..0000000
--- a/include/wdt.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma once
-#include <types.h>
-
-#define WDT_MAGIC 0x67674141
-
-struct wdt_device {
- uint32_t type;
- uint32_t driver_id;
- uint32_t start;
- uint32_t size;
-};
-
-struct wdt_root {
- uint32_t magic;
- uint32_t count;
- struct wdt_device devices[];
-};
-