public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/4] x86: Add UV bios call infrastructure v2
@ 2008-09-26 20:02 Russ Anderson
  2008-09-27  1:21 ` Huang Ying
  0 siblings, 1 reply; 10+ messages in thread
From: Russ Anderson @ 2008-09-26 20:02 UTC (permalink / raw)
  To: linux-kernel, mingo, tglx
  Cc: H. Peter Anvin, Huang Ying, Jack Steiner, Russ Anderson

[PATCH 2/4] Add UV bios call infrastructure

Add the EFI callback function and associated wrapper code.
Initialize SAL system table entry info at boot time.

Signed-off-by: Russ Anderson <rja@sgi.com>
Signed-off-by: Paul Jackson <pj@sgi.com>

---
 arch/x86/kernel/bios_uv.c        |  101 ++++++++++++++++++++++++++++++---------
 arch/x86/kernel/genx2apic_uv_x.c |    1 
 include/asm-x86/efi.h            |   14 +++++
 include/asm-x86/uv/bios.h        |   73 +++++++++++++++-------------
 4 files changed, 136 insertions(+), 53 deletions(-)

Index: linux/arch/x86/kernel/bios_uv.c
===================================================================
--- linux.orig/arch/x86/kernel/bios_uv.c	2008-09-26 14:13:24.000000000 -0500
+++ linux/arch/x86/kernel/bios_uv.c	2008-09-26 14:13:36.000000000 -0500
@@ -1,8 +1,6 @@
 /*
  * BIOS run time interface routines.
  *
- *  Copyright (c) 2008 Silicon Graphics, Inc.  All Rights Reserved.
- *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 2 of the License, or
@@ -16,33 +14,94 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ *  Copyright (c) 2008 Silicon Graphics, Inc.  All Rights Reserved.
+ *  Copyright (c) Russ Anderson
  */
 
+#include <linux/efi.h>
+#include <asm/efi.h>
+#include <linux/io.h>
 #include <asm/uv/bios.h>
 
-const char *
-x86_bios_strerror(long status)
+struct uv_systab uv_systab;
+
+s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
 {
-	const char *str;
-	switch (status) {
-	case  0: str = "Call completed without error";	break;
-	case -1: str = "Not implemented";		break;
-	case -2: str = "Invalid argument";		break;
-	case -3: str = "Call completed with error";	break;
-	default: str = "Unknown BIOS status code";	break;
-	}
-	return str;
+	struct uv_systab *tab = &uv_systab;
+
+	if (!tab->function)
+		/*
+		 * BIOS does not support UV systab
+		 */
+		return BIOS_STATUS_UNIMPLEMENTED;
+
+	return efi_call6((void *)__va(tab->function),
+					(u64)which, a1, a2, a3, a4, a5);
 }
 
-long
-x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second,
-		   unsigned long *drift_info)
+s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
+					u64 a4, u64 a5)
 {
-	struct uv_bios_retval isrv;
+	unsigned long bios_flags;
+	s64 ret;
+
+	local_irq_save(bios_flags);
+	ret = uv_bios_call(which, a1, a2, a3, a4, a5);
+	local_irq_restore(bios_flags);
+
+	return ret;
+}
+
+s64 uv_bios_call_reentrant(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
+					u64 a4, u64 a5)
+{
+	s64 ret;
+
+	preempt_disable();
+	ret = uv_bios_call(which, a1, a2, a3, a4, a5);
+	preempt_enable();
 
-	BIOS_CALL(isrv, BIOS_FREQ_BASE, which, 0, 0, 0, 0, 0, 0);
-	*ticks_per_second = isrv.v0;
-	*drift_info = isrv.v1;
-	return isrv.status;
+	return ret;
+}
+
+long
+x86_bios_freq_base(unsigned long clock_type, unsigned long *ticks_per_second,
+					unsigned long *drift_info)
+{
+	return uv_bios_call(UV_BIOS_FREQ_BASE, clock_type,
+				(u64)ticks_per_second, 0, 0, 0);
 }
 EXPORT_SYMBOL_GPL(x86_bios_freq_base);
+
+
+#ifdef CONFIG_EFI
+void uv_bios_init(void)
+{
+	struct uv_systab *tab;
+
+	if ((efi.uv_systab == EFI_INVALID_TABLE_ADDR) ||
+	    (efi.uv_systab == (unsigned long)NULL)) {
+		printk(KERN_CRIT "No EFI UV System Table.\n");
+		uv_systab.function = (unsigned long)NULL;
+		return;
+	}
+
+	tab = (struct uv_systab *)ioremap(efi.uv_systab,
+					sizeof(struct uv_systab));
+	if (strncmp(tab->signature, "UVST", 4) != 0)
+		printk(KERN_ERR "bad signature in UV system table!");
+
+	/*
+	 * Copy table to permanent spot for later use.
+	 */
+	memcpy(&uv_systab, tab, sizeof(struct uv_systab));
+	iounmap(tab);
+
+	printk(KERN_INFO "EFI UV System Table Revision %d\n", tab->revision);
+}
+#else	/* !CONFIG_EFI */
+
+void uv_bios_init(void) { }
+#endif
+
Index: linux/arch/x86/kernel/genx2apic_uv_x.c
===================================================================
--- linux.orig/arch/x86/kernel/genx2apic_uv_x.c	2008-09-26 14:13:24.000000000 -0500
+++ linux/arch/x86/kernel/genx2apic_uv_x.c	2008-09-26 14:13:36.000000000 -0500
@@ -428,6 +428,7 @@ void __init uv_system_init(void)
 	gnode_upper = (((unsigned long)node_id.s.node_id) &
 		       ~((1 << n_val) - 1)) << m_val;
 
+	uv_bios_init();
 	uv_rtc_init();
 
 	for_each_present_cpu(cpu) {
Index: linux/include/asm-x86/uv/bios.h
===================================================================
--- linux.orig/include/asm-x86/uv/bios.h	2008-09-26 14:13:24.000000000 -0500
+++ linux/include/asm-x86/uv/bios.h	2008-09-26 14:13:36.000000000 -0500
@@ -2,9 +2,7 @@
 #define ASM_X86__UV__BIOS_H
 
 /*
- * BIOS layer definitions.
- *
- *  Copyright (c) 2008 Silicon Graphics, Inc.  All Rights Reserved.
+ * UV BIOS layer definitions.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -19,50 +17,61 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ *  Copyright (c) 2008 Silicon Graphics, Inc.  All Rights Reserved.
+ *  Copyright (c) Russ Anderson
  */
 
 #include <linux/rtc.h>
 
-#define BIOS_FREQ_BASE			0x01000001
+/*
+ * Values for the BIOS calls.  It is passed as the first * argument in the
+ * BIOS call.  Passing any other value in the first argument will result
+ * in a BIOS_STATUS_UNIMPLEMENTED return status.
+ */
+enum uv_bios_cmd {
+	UV_BIOS_COMMON,
+	UV_BIOS_GET_SN_INFO,
+	UV_BIOS_FREQ_BASE
+};
 
+/*
+ * Status values returned from a BIOS call.
+ */
 enum {
-	BIOS_FREQ_BASE_PLATFORM = 0,
-	BIOS_FREQ_BASE_INTERVAL_TIMER = 1,
-	BIOS_FREQ_BASE_REALTIME_CLOCK = 2
+	BIOS_STATUS_SUCCESS		=  0,
+	BIOS_STATUS_UNIMPLEMENTED	= -ENOSYS,
+	BIOS_STATUS_EINVAL		= -EINVAL,
+	BIOS_STATUS_UNAVAIL		= -EBUSY
 };
 
-# define BIOS_CALL(result, a0, a1, a2, a3, a4, a5, a6, a7)		\
-	do {								\
-		/* XXX - the real call goes here */			\
-		result.status = BIOS_STATUS_UNIMPLEMENTED;		\
-		isrv.v0 = 0;						\
-		isrv.v1 = 0;						\
-	} while (0)
+/*
+ * The UV system table describes specific firmware
+ * capabilities available to the Linux kernel at runtime.
+ */
+struct uv_systab {
+	char signature[4];	/* must be "UVST" */
+	u32 revision;		/* distinguish different firmware revs */
+	u64 function;		/* BIOS runtime callback function ptr */
+};
 
 enum {
-	BIOS_STATUS_SUCCESS		=  0,
-	BIOS_STATUS_UNIMPLEMENTED	= -1,
-	BIOS_STATUS_EINVAL		= -2,
-	BIOS_STATUS_ERROR		= -3
+	BIOS_FREQ_BASE_PLATFORM = 0,
+	BIOS_FREQ_BASE_INTERVAL_TIMER = 1,
+	BIOS_FREQ_BASE_REALTIME_CLOCK = 2
 };
 
-struct uv_bios_retval {
-	/*
-	 * A zero status value indicates call completed without error.
-	 * A negative status value indicates reason of call failure.
-	 * A positive status value indicates success but an
-	 * informational value should be printed (e.g., "reboot for
-	 * change to take effect").
-	 */
-	s64 status;
-	u64 v0;
-	u64 v1;
-	u64 v2;
-};
+/*
+ * bios calls have 6 parameters
+ */
+extern s64 uv_bios_call(enum uv_bios_cmd, u64, u64, u64, u64, u64);
+extern s64 uv_bios_call_irqsave(enum uv_bios_cmd, u64, u64, u64, u64, u64);
+extern s64 uv_bios_call_reentrant(enum uv_bios_cmd, u64, u64, u64, u64, u64);
+
+extern void uv_bios_init(void);
 
 extern long
 x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second,
 		   unsigned long *drift_info);
-extern const char *x86_bios_strerror(long status);
 
 #endif /* ASM_X86__UV__BIOS_H */
Index: linux/include/asm-x86/efi.h
===================================================================
--- linux.orig/include/asm-x86/efi.h	2008-09-26 14:13:24.000000000 -0500
+++ linux/include/asm-x86/efi.h	2008-09-26 14:13:36.000000000 -0500
@@ -49,6 +49,20 @@ extern u64 efi_call5(void *fp, u64 arg1,
 extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
 		     u64 arg4, u64 arg5, u64 arg6);
 
+
+#ifndef CONFIG_EFI
+/*
+ * IF EFI is not configured, have the EFI calls return -ENOSYS.
+ */
+#define efi_call0(_f)					(-ENOSYS)
+#define efi_call1(_f, _a1)				(-ENOSYS)
+#define efi_call2(_f, _a1, _a2)				(-ENOSYS)
+#define efi_call3(_f, _a1, _a2, _a3)			(-ENOSYS)
+#define efi_call4(_f, _a1, _a2, _a3, _a4)		(-ENOSYS)
+#define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)		(-ENOSYS)
+#define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)	(-ENOSYS)
+#endif /* CONFIG_EFI */
+
 #define efi_call_phys0(f)			\
 	efi_call0((void *)(f))
 #define efi_call_phys1(f, a1)			\
-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          rja@sgi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-26 20:02 [PATCH 2/4] x86: Add UV bios call infrastructure v2 Russ Anderson
@ 2008-09-27  1:21 ` Huang Ying
  2008-09-27 16:10   ` Ingo Molnar
  2008-09-28 15:01   ` Russ Anderson
  0 siblings, 2 replies; 10+ messages in thread
From: Huang Ying @ 2008-09-27  1:21 UTC (permalink / raw)
  To: Russ Anderson; +Cc: linux-kernel, mingo, tglx, H. Peter Anvin, Jack Steiner

[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]

On Fri, 2008-09-26 at 15:02 -0500, Russ Anderson wrote:
> Index: linux/include/asm-x86/efi.h
> ===================================================================
> --- linux.orig/include/asm-x86/efi.h	2008-09-26 14:13:24.000000000 -0500
> +++ linux/include/asm-x86/efi.h	2008-09-26 14:13:36.000000000 -0500
> @@ -49,6 +49,20 @@ extern u64 efi_call5(void *fp, u64 arg1,
>  extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
>  		     u64 arg4, u64 arg5, u64 arg6);
>  
> +
> +#ifndef CONFIG_EFI
> +/*
> + * IF EFI is not configured, have the EFI calls return -ENOSYS.
> + */
> +#define efi_call0(_f)					(-ENOSYS)
> +#define efi_call1(_f, _a1)				(-ENOSYS)
> +#define efi_call2(_f, _a1, _a2)				(-ENOSYS)
> +#define efi_call3(_f, _a1, _a2, _a3)			(-ENOSYS)
> +#define efi_call4(_f, _a1, _a2, _a3, _a4)		(-ENOSYS)
> +#define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)		(-ENOSYS)
> +#define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)	(-ENOSYS)
> +#endif /* CONFIG_EFI */
> +
>  #define efi_call_phys0(f)			\
>  	efi_call0((void *)(f))
>  #define efi_call_phys1(f, a1)			\

efi_call_virt<n> and efi_call_phys<n> is the API instead of efi_call<n>.
And please put the implementation without CONFIG_EFI defined out of

#ifdef CONFIG_X86_32
<...>
#else
<...>
#endif

Best Regards,
Huang Ying


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-27  1:21 ` Huang Ying
@ 2008-09-27 16:10   ` Ingo Molnar
  2008-09-28 15:01   ` Russ Anderson
  1 sibling, 0 replies; 10+ messages in thread
From: Ingo Molnar @ 2008-09-27 16:10 UTC (permalink / raw)
  To: Huang Ying
  Cc: Russ Anderson, linux-kernel, tglx, H. Peter Anvin, Jack Steiner


* Huang Ying <ying.huang@intel.com> wrote:

> efi_call_virt<n> and efi_call_phys<n> is the API instead of efi_call<n>.
> And please put the implementation without CONFIG_EFI defined out of
> 
> #ifdef CONFIG_X86_32
> <...>
> #else
> <...>
> #endif

ok - i'll wait for v3 of this patchset.

	Ingo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-27  1:21 ` Huang Ying
  2008-09-27 16:10   ` Ingo Molnar
@ 2008-09-28 15:01   ` Russ Anderson
  2008-09-29 14:31     ` Russ Anderson
  2008-10-02  8:02     ` huang ying
  1 sibling, 2 replies; 10+ messages in thread
From: Russ Anderson @ 2008-09-28 15:01 UTC (permalink / raw)
  To: Huang Ying; +Cc: linux-kernel, mingo, tglx, H. Peter Anvin, Jack Steiner

On Sat, Sep 27, 2008 at 09:21:35AM +0800, Huang Ying wrote:
> On Fri, 2008-09-26 at 15:02 -0500, Russ Anderson wrote:
> > Index: linux/include/asm-x86/efi.h
> > ===================================================================
> > --- linux.orig/include/asm-x86/efi.h	2008-09-26 14:13:24.000000000 -0500
> > +++ linux/include/asm-x86/efi.h	2008-09-26 14:13:36.000000000 -0500
> > @@ -49,6 +49,20 @@ extern u64 efi_call5(void *fp, u64 arg1,
> >  extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
> >  		     u64 arg4, u64 arg5, u64 arg6);
> >  
> > +
> > +#ifndef CONFIG_EFI
> > +/*
> > + * IF EFI is not configured, have the EFI calls return -ENOSYS.
> > + */
> > +#define efi_call0(_f)					(-ENOSYS)
> > +#define efi_call1(_f, _a1)				(-ENOSYS)
> > +#define efi_call2(_f, _a1, _a2)				(-ENOSYS)
> > +#define efi_call3(_f, _a1, _a2, _a3)			(-ENOSYS)
> > +#define efi_call4(_f, _a1, _a2, _a3, _a4)		(-ENOSYS)
> > +#define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)		(-ENOSYS)
> > +#define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)	(-ENOSYS)
> > +#endif /* CONFIG_EFI */
> > +
> >  #define efi_call_phys0(f)			\
> >  	efi_call0((void *)(f))
> >  #define efi_call_phys1(f, a1)			\
> 
> efi_call_virt<n> and efi_call_phys<n> is the API instead of efi_call<n>.

#define efi_call_virt6(f, a1, a2, a3, a4, a5, a6)                       \
        efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
                  (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))

efi_call_virt6() uses efi.systab->runtime->f.
My call needs to use uv_systab, not efi.systab.

How about something like this?

#define efi_call_uv_virt6(a1, a2, a3, a4, a5, a6)                       \
        efi_call6((void *)(__va(uv_systab.function)), (u64)(a1), (u64)(a2), \
                  (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))


> And please put the implementation without CONFIG_EFI defined out of
> 
> #ifdef CONFIG_X86_32
> <...>
> #else
> <...>
> #endif
> 
> Best Regards,
> Huang Ying


-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          rja@sgi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-28 15:01   ` Russ Anderson
@ 2008-09-29 14:31     ` Russ Anderson
  2008-10-02  8:05       ` huang ying
  2008-10-02  8:02     ` huang ying
  1 sibling, 1 reply; 10+ messages in thread
From: Russ Anderson @ 2008-09-29 14:31 UTC (permalink / raw)
  To: Huang Ying
  Cc: linux-kernel, mingo, tglx, H. Peter Anvin, Jack Steiner,
	Russ Anderson

On Sun, Sep 28, 2008 at 10:01:07AM -0500, Russ Anderson wrote:
> On Sat, Sep 27, 2008 at 09:21:35AM +0800, Huang Ying wrote:
> > On Fri, 2008-09-26 at 15:02 -0500, Russ Anderson wrote:
> > > Index: linux/include/asm-x86/efi.h
> > > ===================================================================
> > > --- linux.orig/include/asm-x86/efi.h	2008-09-26 14:13:24.000000000 -0500
> > > +++ linux/include/asm-x86/efi.h	2008-09-26 14:13:36.000000000 -0500
> > > @@ -49,6 +49,20 @@ extern u64 efi_call5(void *fp, u64 arg1,
> > >  extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
> > >  		     u64 arg4, u64 arg5, u64 arg6);
> > >  
> > > +
> > > +#ifndef CONFIG_EFI
> > > +/*
> > > + * IF EFI is not configured, have the EFI calls return -ENOSYS.
> > > + */
> > > +#define efi_call0(_f)					(-ENOSYS)
> > > +#define efi_call1(_f, _a1)				(-ENOSYS)
> > > +#define efi_call2(_f, _a1, _a2)				(-ENOSYS)
> > > +#define efi_call3(_f, _a1, _a2, _a3)			(-ENOSYS)
> > > +#define efi_call4(_f, _a1, _a2, _a3, _a4)		(-ENOSYS)
> > > +#define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)		(-ENOSYS)
> > > +#define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)	(-ENOSYS)
> > > +#endif /* CONFIG_EFI */
> > > +
> > >  #define efi_call_phys0(f)			\
> > >  	efi_call0((void *)(f))
> > >  #define efi_call_phys1(f, a1)			\
> > 
> > efi_call_virt<n> and efi_call_phys<n> is the API instead of efi_call<n>.
> 
> #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6)                       \
>         efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
>                   (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))
> 
> efi_call_virt6() uses efi.systab->runtime->f.
> My call needs to use uv_systab, not efi.systab.

After thinking about this, if a new runtime call was added to
efi_runtime_services_t, then the existing efi_call_virt<n> could be
used.  This would remove the need to create uv_systab.  I'll post
a patch shortly.



-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          rja@sgi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-28 15:01   ` Russ Anderson
  2008-09-29 14:31     ` Russ Anderson
@ 2008-10-02  8:02     ` huang ying
  2008-10-02 15:34       ` Russ Anderson
  1 sibling, 1 reply; 10+ messages in thread
From: huang ying @ 2008-10-02  8:02 UTC (permalink / raw)
  To: Russ Anderson
  Cc: Huang Ying, linux-kernel, mingo, tglx, H. Peter Anvin,
	Jack Steiner

Hi, Russ,

On Sun, Sep 28, 2008 at 11:01 PM, Russ Anderson <rja@sgi.com> wrote:
> On Sat, Sep 27, 2008 at 09:21:35AM +0800, Huang Ying wrote:
>> On Fri, 2008-09-26 at 15:02 -0500, Russ Anderson wrote:
>> > Index: linux/include/asm-x86/efi.h
>> > ===================================================================
>> > --- linux.orig/include/asm-x86/efi.h        2008-09-26 14:13:24.000000000 -0500
>> > +++ linux/include/asm-x86/efi.h     2008-09-26 14:13:36.000000000 -0500
>> > @@ -49,6 +49,20 @@ extern u64 efi_call5(void *fp, u64 arg1,
>> >  extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
>> >                  u64 arg4, u64 arg5, u64 arg6);
>> >
>> > +
>> > +#ifndef CONFIG_EFI
>> > +/*
>> > + * IF EFI is not configured, have the EFI calls return -ENOSYS.
>> > + */
>> > +#define efi_call0(_f)                                      (-ENOSYS)
>> > +#define efi_call1(_f, _a1)                         (-ENOSYS)
>> > +#define efi_call2(_f, _a1, _a2)                            (-ENOSYS)
>> > +#define efi_call3(_f, _a1, _a2, _a3)                       (-ENOSYS)
>> > +#define efi_call4(_f, _a1, _a2, _a3, _a4)          (-ENOSYS)
>> > +#define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)             (-ENOSYS)
>> > +#define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)        (-ENOSYS)
>> > +#endif /* CONFIG_EFI */
>> > +
>> >  #define efi_call_phys0(f)                  \
>> >     efi_call0((void *)(f))
>> >  #define efi_call_phys1(f, a1)                      \
>>
>> efi_call_virt<n> and efi_call_phys<n> is the API instead of efi_call<n>.
>
> #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6)                       \
>        efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
>                  (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))
>
> efi_call_virt6() uses efi.systab->runtime->f.
> My call needs to use uv_systab, not efi.systab.

Yes. efi_call_virt6() is tied with standard EFI runtime services, so
it may be not suitable for your need. What you need is just to do
calling convention converting, like efi_call6 does. So I think it is
better to just use your current implementation.

Acked-by: Huang Ying <ying.huang@intel.com>

Best Regards,
Huang Ying

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-09-29 14:31     ` Russ Anderson
@ 2008-10-02  8:05       ` huang ying
  0 siblings, 0 replies; 10+ messages in thread
From: huang ying @ 2008-10-02  8:05 UTC (permalink / raw)
  To: Russ Anderson
  Cc: Huang Ying, linux-kernel, mingo, tglx, H. Peter Anvin,
	Jack Steiner

Hi, Russ,

> After thinking about this, if a new runtime call was added to
> efi_runtime_services_t, then the existing efi_call_virt<n> could be
> used.  This would remove the need to create uv_systab.  I'll post
> a patch shortly.

Please don't touch efi_runtime_services_t, if you do not go through
UEFI standard procedure. It can not be extended in a non-standard way.
Thinking about someone else adds another new field to
efi_runtime_services_t in a conflict way.

Best Regards,
Huang Ying

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-10-02  8:02     ` huang ying
@ 2008-10-02 15:34       ` Russ Anderson
  2008-10-03  9:10         ` Ingo Molnar
  0 siblings, 1 reply; 10+ messages in thread
From: Russ Anderson @ 2008-10-02 15:34 UTC (permalink / raw)
  To: huang ying
  Cc: Huang Ying, linux-kernel, mingo, tglx, H. Peter Anvin,
	Jack Steiner, Russ Anderson

On Thu, Oct 02, 2008 at 04:02:00PM +0800, huang ying wrote:
> On Sun, Sep 28, 2008 at 11:01 PM, Russ Anderson <rja@sgi.com> wrote:
> >
> > efi_call_virt6() uses efi.systab->runtime->f.
> > My call needs to use uv_systab, not efi.systab.
> 
> Yes. efi_call_virt6() is tied with standard EFI runtime services, so
> it may be not suitable for your need. What you need is just to do
> calling convention converting, like efi_call6 does. So I think it is
> better to just use your current implementation.
> 
> Acked-by: Huang Ying <ying.huang@intel.com>

Thanks.  Ingo, that is the v2 version of the patchset.

> Best Regards,
> Huang Ying

-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          rja@sgi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-10-02 15:34       ` Russ Anderson
@ 2008-10-03  9:10         ` Ingo Molnar
  2008-10-07 20:57           ` Russ Anderson
  0 siblings, 1 reply; 10+ messages in thread
From: Ingo Molnar @ 2008-10-03  9:10 UTC (permalink / raw)
  To: Russ Anderson
  Cc: huang ying, Huang Ying, linux-kernel, tglx, H. Peter Anvin,
	Jack Steiner


* Russ Anderson <rja@sgi.com> wrote:

> On Thu, Oct 02, 2008 at 04:02:00PM +0800, huang ying wrote:
> > On Sun, Sep 28, 2008 at 11:01 PM, Russ Anderson <rja@sgi.com> wrote:
> > >
> > > efi_call_virt6() uses efi.systab->runtime->f.
> > > My call needs to use uv_systab, not efi.systab.
> > 
> > Yes. efi_call_virt6() is tied with standard EFI runtime services, so
> > it may be not suitable for your need. What you need is just to do
> > calling convention converting, like efi_call6 does. So I think it is
> > better to just use your current implementation.
> > 
> > Acked-by: Huang Ying <ying.huang@intel.com>
> 
> Thanks.  Ingo, that is the v2 version of the patchset.

ok - could you please resend the lot with all the Acked-by's in place? 
(and with all the bits that are being objected left out)

	Ingo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] x86: Add UV bios call infrastructure v2
  2008-10-03  9:10         ` Ingo Molnar
@ 2008-10-07 20:57           ` Russ Anderson
  0 siblings, 0 replies; 10+ messages in thread
From: Russ Anderson @ 2008-10-07 20:57 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: huang ying, Huang Ying, linux-kernel, tglx, H. Peter Anvin,
	Jack Steiner, Russ Anderson

On Fri, Oct 03, 2008 at 11:10:12AM +0200, Ingo Molnar wrote:
> * Russ Anderson <rja@sgi.com> wrote:
> > On Thu, Oct 02, 2008 at 04:02:00PM +0800, huang ying wrote:
> > > On Sun, Sep 28, 2008 at 11:01 PM, Russ Anderson <rja@sgi.com> wrote:
> > > >
> > > > efi_call_virt6() uses efi.systab->runtime->f.
> > > > My call needs to use uv_systab, not efi.systab.
> > > 
> > > Yes. efi_call_virt6() is tied with standard EFI runtime services, so
> > > it may be not suitable for your need. What you need is just to do
> > > calling convention converting, like efi_call6 does. So I think it is
> > > better to just use your current implementation.
> > > 
> > > Acked-by: Huang Ying <ying.huang@intel.com>
> > 
> > Thanks.  Ingo, that is the v2 version of the patchset.
> 
> ok - could you please resend the lot with all the Acked-by's in place? 
> (and with all the bits that are being objected left out)
> 
> 	Ingo

Resent on Friday.  Here are the links.

http://marc.info/?l=linux-kernel&m=122305331422380&w=2
http://marc.info/?l=linux-kernel&m=122305331522386&w=2
http://marc.info/?l=linux-kernel&m=122305331522389&w=2
http://marc.info/?l=linux-kernel&m=122305331622393&w=2
http://marc.info/?l=linux-kernel&m=122305331722396&w=2

Thanks,
-- 
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          rja@sgi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-10-07 20:57 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-26 20:02 [PATCH 2/4] x86: Add UV bios call infrastructure v2 Russ Anderson
2008-09-27  1:21 ` Huang Ying
2008-09-27 16:10   ` Ingo Molnar
2008-09-28 15:01   ` Russ Anderson
2008-09-29 14:31     ` Russ Anderson
2008-10-02  8:05       ` huang ying
2008-10-02  8:02     ` huang ying
2008-10-02 15:34       ` Russ Anderson
2008-10-03  9:10         ` Ingo Molnar
2008-10-07 20:57           ` Russ Anderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox