Date: Sun, 24 Aug 2014 10:33:55 +0000 (UTC) From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r270451 - projects/arm64/sys/arm64/arm64 Message-ID: <201408241033.s7OAXtrR026320@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: andrew Date: Sun Aug 24 10:33:54 2014 New Revision: 270451 URL: http://svnweb.freebsd.org/changeset/base/270451 Log: Start to implement the copy{in,out} and su*/fu* functions. These only return success as a failure would result in a kernel panic. The exception handlers need to be updated for the failure case to work. Modified: projects/arm64/sys/arm64/arm64/copyinout.c projects/arm64/sys/arm64/arm64/support.c Modified: projects/arm64/sys/arm64/arm64/copyinout.c ============================================================================== --- projects/arm64/sys/arm64/arm64/copyinout.c Sun Aug 24 10:33:51 2014 (r270450) +++ projects/arm64/sys/arm64/arm64/copyinout.c Sun Aug 24 10:33:54 2014 (r270451) @@ -28,26 +28,53 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); -#include <sys/types.h> +#include <sys/param.h> #include <sys/systm.h> int copyout(const void *kaddr, void *udaddr, size_t len) { + const uint8_t *k; + uint8_t *u; + size_t i; + + k = kaddr; + u = udaddr; + + for (i = 0; i < len; i++) { + u[i] = k[i]; + } - panic("copyout"); + return (0); } int copyin(const void *udaddr, void *kaddr, size_t len) { + memcpy(kaddr, udaddr, len); panic("copyin"); } int copyinstr(const void *udaddr, void *kaddr, size_t len, size_t *done) { + const uint8_t *u; + uint8_t *k; + size_t i; + + u = udaddr; + k = kaddr; + + for (i = 0; i < len; i++) { + k[i] = u[i]; + if (u[i] == '\0') + break; + } - panic("copyinstr"); + if (done != NULL) + *done = i + 1; + + return 0; } + Modified: projects/arm64/sys/arm64/arm64/support.c ============================================================================== --- projects/arm64/sys/arm64/arm64/support.c Sun Aug 24 10:33:51 2014 (r270450) +++ projects/arm64/sys/arm64/arm64/support.c Sun Aug 24 10:33:54 2014 (r270451) @@ -36,14 +36,14 @@ int fubyte(const void *base) { - panic("fubyte"); + return *(uint8_t *)base; } long fuword(const void *base) { - panic("fuword"); + return *(long *)base; } int @@ -78,14 +78,18 @@ int subyte(void *base, int byte) { - panic("subyte"); + *(uint8_t *)base = byte; + + return 0; } int suword(void *base, long word) { - panic("suword"); + *(long *)base = word; + + return 0; } int @@ -99,14 +103,18 @@ int suword32(void *base, int32_t word) { - panic("suword32"); + *(int32_t *)base = word; + + return 0; } int suword64(void *base, int64_t word) { - panic("suword64"); + *(int64_t *)base = word; + + return 0; } int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408241033.s7OAXtrR026320>