add sdcard to raspi BE kernel
[AROS.git] / arch / armeb-raspi / boot / support.c
blobf6834418123b8ffffa2a26c66dfb57cb4f1d4636
1 /*
2 Copyright � 2013, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include "boot.h"
8 #include <sys/types.h>
10 static unsigned char __tmpspace[BOOT_TMP_SIZE];
11 static unsigned char *first_free;
12 static unsigned long free_memory;
14 void arm_flush_cache(uint32_t addr, uint32_t length)
16 while (length)
18 __asm__ __volatile__("mcr p15, 0, %0, c7, c14, 1"::"r"(addr));
19 addr += 32;
20 length -= 32;
22 __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4"::"r"(addr));
25 void arm_icache_invalidate(uint32_t addr, uint32_t length)
27 while (length)
29 __asm__ __volatile__("mcr p15, 0, %0, c7, c5, 1"::"r"(addr));
30 addr += 32;
31 length -= 32;
33 __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4"::"r"(addr));
36 void arm_dcache_invalidate(uint32_t addr, uint32_t length)
38 while (length)
40 __asm__ __volatile__("mcr p15, 0, %0, c7, c6, 1"::"r"(addr));
41 addr += 32;
42 length -= 32;
44 __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4"::"r"(addr));
47 void *malloc(size_t size)
49 void *ret = NULL;
51 size = (size + 15) & ~15;
53 if (size <= free_memory)
55 ret = first_free;
57 first_free += size;
58 free_memory -= size;
61 if (!ret)
62 kprintf("[BOOT] malloc - OUT OF MEMORY\n");
64 return ret;
67 void mem_init(void)
69 first_free = &__tmpspace[0];
70 free_memory = BOOT_TMP_SIZE;
73 void explicit_mem_init(void *first, unsigned long free)
75 first_free = first;
76 free_memory = free;
79 size_t mem_avail()
81 return free_memory;
84 size_t mem_used()
86 return BOOT_TMP_SIZE - free_memory;
89 int32_t strlen(const char *c)
91 int32_t result = 0;
92 while (*c++)
93 result++;
95 return result;
98 const char *remove_path(const char *in)
100 const char *p = &in[strlen(in)-1];
101 while (p > in && p[-1] != '/' && p[-1] != ':') p--;
102 return p;