kernel: allow system call with 64-bit return val

This is subject to the constraint that such system calls must have a
return value which is "u64_t" or "s64_t".

So far all the relevant kernel calls just have zero or one arguments,
we can later add more _syscall_ret64_invokeN() APIs as needed.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/scripts/gen_syscall_header.py b/scripts/gen_syscall_header.py
index bb374e4..ecde6b4 100755
--- a/scripts/gen_syscall_header.py
+++ b/scripts/gen_syscall_header.py
@@ -5,11 +5,23 @@
 # SPDX-License-Identifier: Apache-2.0
 
 import sys
+from enum import Enum
+
+class Retval(Enum):
+    VOID = 0
+    U32 = 1
+    U64 = 2
 
 def gen_macro(ret, argc):
-    sys.stdout.write("K_SYSCALL_DECLARE%d%s(id, name" % (argc,
-        ("" if ret else "_VOID")))
-    if (ret):
+    if ret == Retval.VOID:
+        suffix = "_VOID"
+    elif ret == Retval.U64:
+        suffix = "_RET64"
+    else:
+        suffix = ""
+
+    sys.stdout.write("K_SYSCALL_DECLARE%d%s(id, name" % (argc, suffix))
+    if (ret != Retval.VOID):
         sys.stdout.write(", ret")
     for i in range(argc):
         sys.stdout.write(", t%d, p%d" % (i, i))
@@ -18,7 +30,7 @@
 def gen_fn(ret, argc, name, extern=False):
     sys.stdout.write("\t%s %s %s(" %
             (("extern" if extern else "static inline"),
-             ("ret" if ret else "void"), name))
+             ("ret" if ret != Retval.VOID else "void"), name))
     if argc == 0:
         sys.stdout.write("void");
     else:
@@ -29,17 +41,18 @@
     sys.stdout.write(")")
 
 def gen_make_syscall(ret, argc):
-    if (ret):
+    if (ret != Retval.VOID):
         sys.stdout.write("return (ret)")
-    if (argc <= 6):
+    if (argc <= 6 and ret != Retval.U64):
         sys.stdout.write("_arch")
-    sys.stdout.write("_syscall_invoke%d(" % (argc))
+    sys.stdout.write("_syscall%s_invoke%d(" %
+		     (("_ret64" if ret == Retval.U64 else ""), argc))
     for i in range(argc):
         sys.stdout.write("(u32_t)p%d, " % (i))
     sys.stdout.write("id); \\\n")
 
 def gen_call_impl(ret, argc):
-    if (ret):
+    if (ret != Retval.VOID):
         sys.stdout.write("return ")
     sys.stdout.write("_impl_##name(")
     for i in range(argc):
@@ -89,9 +102,11 @@
 
     sys.stdout.write("\t}\n\n")
 
+
 def gen_defines(argc, kernel_only=False, user_only=False):
-    gen_defines_inner(False, argc, kernel_only, user_only)
-    gen_defines_inner(True, argc, kernel_only, user_only)
+    gen_defines_inner(Retval.VOID, argc, kernel_only, user_only)
+    gen_defines_inner(Retval.U32, argc, kernel_only, user_only)
+    gen_defines_inner(Retval.U64, argc, kernel_only, user_only)
 
 
 sys.stdout.write("/* Auto-generated by gen_syscall_header.py, do not edit! */\n\n")