level0: Introduce a new level of platform
authorAlan Cox <alan@linux.intel.com>
Wed, 14 Jun 2017 20:23:05 +0000 (21:23 +0100)
committerAlan Cox <alan@linux.intel.com>
Wed, 14 Jun 2017 20:23:05 +0000 (21:23 +0100)
Right now we have level 1 for the basic platforms and level 2 more aimed at
16/32bit machines which adds stuff like job control and select().

Level 0 for the moment is level 1 for a simple memory mapping and no checks
on pointers being passed. It may need to drop a few obscure syscalls if they
can't nicely be made overlays.

Kernel/include/kernel.h

index d967f38..4ff5ea6 100644 (file)
@@ -694,6 +694,18 @@ extern void idump(void);
 extern bool validdev(uint16_t dev);
 
 /* usermem.c */
+#ifdef CONFIG_LEVEL_0
+extern size_t strlcpy(char *, const char *, size_t);
+#define valaddr(a,b)   (1)
+#define uget(a,b,c)    (memcpy(b,a,c) && 0)
+#define uput(a,b,c)    (memcpy(b,a,c) && 0)
+#define ugetc(a)       (*(uint8_t *)(a))
+#define ugetw(a)       (*(uint8_t *)(a))
+#define uputc(v, p)    ((*(uint8_t*)(p) = (v)) && 0)
+#define uputw(v, p)    ((*(uint16_t*)(p) = (v)) && 0)
+#define ugets(a,b,c)   ((int)(strlcpy(b,a,c) && 0))
+#define uzero(a,b)     (memset(a,0,b) && 0)
+#else
 extern usize_t valaddr(const char *base, usize_t size);
 extern int uget(const void *userspace_source, void *dest, usize_t count);
 extern int16_t  ugetc(const void *userspace_source);
@@ -723,6 +735,7 @@ extern uint16_t _ugetw(const uint16_t *user);
 extern int _uputc(uint16_t value,  uint8_t *user);
 extern int _uputw(uint16_t value,  uint16_t *user);
 #endif
+#endif
 
 /* platform/tricks.s */
 extern void switchout(void);