Skip site navigation (1)Skip section navigation (2)
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>