[PATCH] 4/4 introduce FW_FEATURE_ISERIES

Stephen Rothwell sfr at canb.auug.org.au
Wed Aug 3 14:43:21 EST 2005


Signed-off-by: Stephen Rothwell <sfr at canb.auug.org.au>
-- 
Cheers,
Stephen Rothwell                    sfr at canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

diff -ruNp linus-firmware.3/arch/ppc64/kernel/iSeries_setup.c linus-firmware.4/arch/ppc64/kernel/iSeries_setup.c
--- linus-firmware.3/arch/ppc64/kernel/iSeries_setup.c	2005-07-15 14:37:43.000000000 +1000
+++ linus-firmware.4/arch/ppc64/kernel/iSeries_setup.c	2005-07-22 18:34:11.000000000 +1000
@@ -39,6 +39,7 @@
 #include <asm/cputable.h>
 #include <asm/sections.h>
 #include <asm/iommu.h>
+#include <asm/firmware.h>
 
 #include <asm/time.h>
 #include "iSeries_setup.h"
@@ -314,6 +315,8 @@ static void __init iSeries_init_early(vo
 
 	DBG(" -> iSeries_init_early()\n");
 
+	ppc64_firmware_features = FW_FEATURE_ISERIES;
+
 	ppcdbg_initialize();
 
 #if defined(CONFIG_BLK_DEV_INITRD)
diff -ruNp linus-firmware.3/arch/ppc64/kernel/pSeries_lpar.c linus-firmware.4/arch/ppc64/kernel/pSeries_lpar.c
--- linus-firmware.3/arch/ppc64/kernel/pSeries_lpar.c	2005-07-15 14:37:43.000000000 +1000
+++ linus-firmware.4/arch/ppc64/kernel/pSeries_lpar.c	2005-07-22 18:17:24.000000000 +1000
@@ -52,7 +52,6 @@ EXPORT_SYMBOL(plpar_hcall_4out);
 EXPORT_SYMBOL(plpar_hcall_norets);
 EXPORT_SYMBOL(plpar_hcall_8arg_2ret);
 
-extern void fw_feature_init(void);
 extern void pSeries_find_serial_port(void);
 
 
diff -ruNp linus-firmware.3/arch/ppc64/kernel/pSeries_setup.c linus-firmware.4/arch/ppc64/kernel/pSeries_setup.c
--- linus-firmware.3/arch/ppc64/kernel/pSeries_setup.c	2005-07-22 17:23:23.000000000 +1000
+++ linus-firmware.4/arch/ppc64/kernel/pSeries_setup.c	2005-07-22 18:20:38.000000000 +1000
@@ -262,7 +262,7 @@ arch_initcall(pSeries_init_panel);
  * using contents of device-tree/ibm,hypertas-functions.
  * Ultimately this functionality may be moved into prom.c prom_init().
  */
-void __init fw_feature_init(void)
+static void __init fw_feature_init(void)
 {
 	struct device_node * dn;
 	char * hypertas;
diff -ruNp linus-firmware.3/include/asm-ppc64/firmware.h linus-firmware.4/include/asm-ppc64/firmware.h
--- linus-firmware.3/include/asm-ppc64/firmware.h	2005-07-22 17:31:12.000000000 +1000
+++ linus-firmware.4/include/asm-ppc64/firmware.h	2005-07-22 18:35:35.000000000 +1000
@@ -44,9 +44,10 @@
 #define FW_FEATURE_XDABR	(1UL<<18)
 #define FW_FEATURE_MULTITCE	(1UL<<19)
 #define FW_FEATURE_SPLPAR	(1UL<<20)
+#define FW_FEATURE_ISERIES	(1UL<<21)
 
 enum {
-	FW_FEATURE_PSERIES = FW_FEATURE_PFT | FW_FEATURE_TCE |
+	FW_FEATURE_PSERIES_POSSIBLE = FW_FEATURE_PFT | FW_FEATURE_TCE |
 		FW_FEATURE_SPRG0 | FW_FEATURE_DABR | FW_FEATURE_COPY |
 		FW_FEATURE_ASR | FW_FEATURE_DEBUG | FW_FEATURE_TERM |
 		FW_FEATURE_PERF | FW_FEATURE_DUMP | FW_FEATURE_INTERRUPT |
@@ -54,11 +55,25 @@ enum {
 		FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN |
 		FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE |
 		FW_FEATURE_SPLPAR,
+	FW_FEATURE_PSERIES_ALWAYS = 0,
+	FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES,
+	FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES,
 	FW_FEATURE_POSSIBLE =
 #ifdef CONFIG_PPC_PSERIES
-		FW_FEATURE_PSERIES |
+		FW_FEATURE_PSERIES_POSSIBLE |
+#endif
+#ifdef CONFIG_PPC_ISERIES
+		FW_FEATURE_ISERIES_POSSIBLE |
 #endif
 		0,
+	FW_FEATURE_ALWAYS =
+#ifdef CONFIG_PPC_PSERIES
+		FW_FEATURE_PSERIES_ALWAYS &
+#endif
+#ifdef CONFIG_PPC_ISERIES
+		FW_FEATURE_ISERIES_ALWAYS &
+#endif
+		FW_FEATURE_POSSIBLE,
 };
 
 /* This is used to identify firmware features which are available
@@ -68,7 +83,8 @@ extern unsigned long	ppc64_firmware_feat
 
 static inline unsigned long firmware_has_feature(unsigned long feature)
 {
-	return ppc64_firmware_features & feature & FW_FEATURE_POSSIBLE;
+	return (FW_FEATURE_ALWAYS & feature) ||
+		(FW_FEATURE_POSSIBLE & ppc64_firmware_features & feature);
 }
 
 #ifdef CONFIG_PPC_PSERIES



More information about the Linuxppc64-dev mailing list