svn commit: r270451 - projects/arm64/sys/arm64/arm64
Andrew Turner
andrew at FreeBSD.org
Sun Aug 24 10:33:55 UTC 2014
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
More information about the svn-src-projects
mailing list