From: Alan Cox Date: Fri, 30 Jan 2015 00:24:36 +0000 (+0000) Subject: usermem: support for flat binaries X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=81d6af8a159fb83f97be715bab420ff18f14ab78;p=FUZIX.git usermem: support for flat binaries --- diff --git a/Kernel/usermem.c b/Kernel/usermem.c index 78257d2b..ee9bb9d8 100644 --- a/Kernel/usermem.c +++ b/Kernel/usermem.c @@ -8,6 +8,9 @@ #include #include +/* Flat mode has to use its own valaddr */ +#ifndef CONFIG_FLAT + /* This checks to see if a user-supplied address is legitimate */ usize_t valaddr(const char *base, usize_t size) { @@ -21,6 +24,8 @@ usize_t valaddr(const char *base, usize_t size) udata.u_error = EFAULT; return size; } +#endif + int uget(const void *user, void *dst, usize_t count) { @@ -178,3 +183,60 @@ int _uzero(uint8_t *user, usize_t count) } #endif +#ifdef CONFIG_USERMEM_DIRECT + +/* Systems where all memory is always mapped for live processes and kernel */ + +usize_t _uget(const uint8_t *user, uint8_t *dest, usize_t count) +{ + memcpy(dest, user, count); + return 0; +} + +int16_t _ugetc(const uint8_t *user) +{ + return *user; +} + +uint16_t _ugetw(const uint16_t *user) +{ + return *user; +} + +int _ugets(const uint8_t *user, uint8_t *dest, usize_t count) +{ + while(count--) { + *dest = *user++; + if (*dest == '\0') + return 0; + dest++; + } + /* Ensure terminated */ + dest[-1] = '\0'; + return -1; +} + +int _uput(const uint8_t *source, uint8_t *user, usize_t count) +{ + memcpy(user, source, count); + return 0; +} + +int _uputc(uint16_t value, uint8_t *user) +{ + *user = value; + return 0; +} + +int _uputw(uint16_t value, uint16_t *user) +{ + *user = value; + return 0; +} + +int _uzero(uint8_t *user, usize_t count) +{ + memset(user, 0, count); + return 0; +} +#endif