Module Name:    src
Committed By:   palle
Date:           Sat Sep  6 20:56:39 UTC 2014

Modified Files:
        src/sys/arch/sparc64/include: sparc64.h
        src/sys/arch/sparc64/sparc64: ofw_machdep.c

Log Message:
sun4v: New function prom_startcpu_by_cpuid() necessary for starting cpus on 
sun4v


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/sparc64/include/sparc64.h
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/sparc64/sparc64/ofw_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc64/include/sparc64.h
diff -u src/sys/arch/sparc64/include/sparc64.h:1.12 src/sys/arch/sparc64/include/sparc64.h:1.13
--- src/sys/arch/sparc64/include/sparc64.h:1.12	Tue Jan  7 20:11:35 2014
+++ src/sys/arch/sparc64/include/sparc64.h	Sat Sep  6 20:56:39 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sparc64.h,v 1.12 2014/01/07 20:11:35 palle Exp $	*/
+/*	$NetBSD: sparc64.h,v 1.13 2014/09/06 20:56:39 palle Exp $	*/
 
 /*
  * Copyright (C) 1996 Wolfgang Solfrank.
@@ -58,5 +58,6 @@ bool prom_has_stopself(void);
 int  prom_stop_other(u_int);
 bool prom_has_stop_other(void);
 void prom_startcpu(u_int, void *, u_long);
+int prom_startcpu_by_cpuid(u_int, void *, u_long arg);
 
 #endif	/* _MACHINE_SPARC64_H_ */

Index: src/sys/arch/sparc64/sparc64/ofw_machdep.c
diff -u src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.42 src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.43
--- src/sys/arch/sparc64/sparc64/ofw_machdep.c:1.42	Sun May  4 09:05:39 2014
+++ src/sys/arch/sparc64/sparc64/ofw_machdep.c	Sat Sep  6 20:56:39 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofw_machdep.c,v 1.42 2014/05/04 09:05:39 martin Exp $	*/
+/*	$NetBSD: ofw_machdep.c,v 1.43 2014/09/06 20:56:39 palle Exp $	*/
 
 /*
  * Copyright (C) 1996 Wolfgang Solfrank.
@@ -34,7 +34,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.42 2014/05/04 09:05:39 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.43 2014/09/06 20:56:39 palle Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -536,7 +536,7 @@ prom_get_msgbuf(int len, int align)
 
 #ifdef MULTIPROCESSOR
 /*
- * Start secondary cpu, arrange 'func' as the entry.
+ * Start secondary cpu identified by node, arrange 'func' as the entry.
  */
 void
 prom_startcpu(u_int cpu, void *func, u_long arg)
@@ -561,6 +561,37 @@ prom_startcpu(u_int cpu, void *func, u_l
 }
 
 /*
+ * Start secondary cpu identified by cpuid, arrange 'func' as the entry.
+ * Returns -1 in case the openfirmware method is not available.
+ * Otherwise the result value from the openfirmware call is returned.
+ */
+int
+prom_startcpu_by_cpuid(u_int cpu, void *func, u_long arg)
+{
+	static struct {
+		cell_t  name;
+		cell_t  nargs;
+		cell_t  nreturns;
+		cell_t  cpu;
+		cell_t  func;
+		cell_t  arg;
+		cell_t	status;
+	} args;
+
+	if (OF_test("SUNW,start-cpu-by-cpuid") != 0)
+		return -1;
+	
+	args.name = ADR2CELL("SUNW,start-cpu-by-cpuid");
+	args.nargs = 3;
+	args.nreturns = 1;
+	args.cpu = cpu;
+	args.func = ADR2CELL(func);
+	args.arg = arg;
+
+	return openfirmware(&args);
+}
+
+/*
  * Stop the calling cpu.
  */
 void

Reply via email to