]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/misc/sgi-xp/xp_uv.c
sgi-xp: add usage of GRU driver by xpc_remote_memcpy()
[linux-2.6-omap-h63xx.git] / drivers / misc / sgi-xp / xp_uv.c
index 382b1b6bcc0bb9e5914559e54c4dac73d9f0ff0e..44f2c2b58c2fae30f9b147bfcd4a310f766cde55 100644 (file)
  *
  */
 
+#include <linux/device.h>
+#include <asm/uv/uv_hub.h>
+#include "../sgi-gru/grukservices.h"
 #include "xp.h"
 
+/*
+ * Convert a virtual memory address to a physical memory address.
+ */
+static unsigned long
+xp_pa_uv(void *addr)
+{
+       return uv_gpa(addr);
+}
+
 static enum xp_retval
-xp_remote_memcpy_uv(void *vdst, const void *psrc, size_t len)
+xp_remote_memcpy_uv(unsigned long dst_gpa, const unsigned long src_gpa,
+                   size_t len)
 {
-       /* !!! this function needs fleshing out */
-       return xpUnsupported;
+       int ret;
+
+       ret = gru_copy_gpa(dst_gpa, src_gpa, len);
+       if (ret == 0)
+               return xpSuccess;
+
+       dev_err(xp, "gru_copy_gpa() failed, dst_gpa=0x%016lx src_gpa=0x%016lx "
+               "len=%ld\n", dst_gpa, src_gpa, len);
+       return xpGruCopyError;
 }
 
 enum xp_retval
@@ -29,6 +49,7 @@ xp_init_uv(void)
 
        xp_max_npartitions = XP_MAX_NPARTITIONS_UV;
 
+       xp_pa = xp_pa_uv;
        xp_remote_memcpy = xp_remote_memcpy_uv;
 
        return xpSuccess;