32x: drc: mmap dram+rom for direct dereference
[libpicofe.git] / linux / plat.c
index 166b4d6..492007c 100644 (file)
@@ -1,8 +1,10 @@
 #include <stdio.h>
+#include <string.h>
 #include <dirent.h>
 #include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
+#include <sys/mman.h>
 
 #include "../common/plat.h"
 
@@ -17,10 +19,25 @@ int plat_is_dir(const char *path)
        return 0;
 }
 
+int plat_get_root_dir(char *dst, int len)
+{
+       extern char **g_argv;
+       int j;
+
+       strncpy(dst, g_argv[0], len);
+       len -= 32; // reserve
+       if (len < 0) len = 0;
+       dst[len] = 0;
+       for (j = strlen(dst); j > 0; j--)
+               if (dst[j] == '/') { dst[j+1] = 0; break; }
+
+       return j + 1;
+}
+
 #ifdef __GP2X__
 /* Wiz has a borked gettimeofday().. */
-#define plat_get_ticks_ms plat_get_ticks_ms_gtod
-#define plat_get_ticks_us plat_get_ticks_us_gtod
+#define plat_get_ticks_ms plat_get_ticks_ms_good
+#define plat_get_ticks_us plat_get_ticks_us_good
 #endif
 
 unsigned int plat_get_ticks_ms(void)
@@ -92,3 +109,21 @@ int plat_wait_event(int *fds_hnds, int count, int timeout_ms)
        return ret;
 }
 
+void *plat_mmap(unsigned long addr, size_t size)
+{
+       void *req, *ret;
+       req = (void *)addr;
+       ret = mmap(req, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
+       if (ret == MAP_FAILED)
+               return NULL;
+       if (ret != req)
+               printf("warning: mmaped to %p, requested %p\n", ret, req);
+
+       return ret;
+}
+
+void plat_munmap(void *ptr, size_t size)
+{
+       munmap(ptr, size);
+}
+