fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / asm-powerpc / firmware.h
index f804b34..98f7b62 100644 (file)
 
 #ifdef __KERNEL__
 
-#ifndef __ASSEMBLY__
+#include <asm/asm-compat.h>
 
 /* firmware feature bitmask values */
 #define FIRMWARE_MAX_FEATURES 63
 
-#define FW_FEATURE_PFT         (1UL<<0)
-#define FW_FEATURE_TCE         (1UL<<1)
-#define FW_FEATURE_SPRG0       (1UL<<2)
-#define FW_FEATURE_DABR                (1UL<<3)
-#define FW_FEATURE_COPY                (1UL<<4)
-#define FW_FEATURE_ASR         (1UL<<5)
-#define FW_FEATURE_DEBUG       (1UL<<6)
-#define FW_FEATURE_TERM                (1UL<<7)
-#define FW_FEATURE_PERF                (1UL<<8)
-#define FW_FEATURE_DUMP                (1UL<<9)
-#define FW_FEATURE_INTERRUPT   (1UL<<10)
-#define FW_FEATURE_MIGRATE     (1UL<<11)
-#define FW_FEATURE_PERFMON     (1UL<<12)
-#define FW_FEATURE_CRQ         (1UL<<13)
-#define FW_FEATURE_VIO         (1UL<<14)
-#define FW_FEATURE_RDMA                (1UL<<15)
-#define FW_FEATURE_LLAN                (1UL<<16)
-#define FW_FEATURE_BULK                (1UL<<17)
-#define FW_FEATURE_XDABR       (1UL<<18)
-#define FW_FEATURE_MULTITCE    (1UL<<19)
-#define FW_FEATURE_SPLPAR      (1UL<<20)
-#define FW_FEATURE_ISERIES     (1UL<<21)
+#define FW_FEATURE_PFT         ASM_CONST(0x0000000000000001)
+#define FW_FEATURE_TCE         ASM_CONST(0x0000000000000002)
+#define FW_FEATURE_SPRG0       ASM_CONST(0x0000000000000004)
+#define FW_FEATURE_DABR                ASM_CONST(0x0000000000000008)
+#define FW_FEATURE_COPY                ASM_CONST(0x0000000000000010)
+#define FW_FEATURE_ASR         ASM_CONST(0x0000000000000020)
+#define FW_FEATURE_DEBUG       ASM_CONST(0x0000000000000040)
+#define FW_FEATURE_TERM                ASM_CONST(0x0000000000000080)
+#define FW_FEATURE_PERF                ASM_CONST(0x0000000000000100)
+#define FW_FEATURE_DUMP                ASM_CONST(0x0000000000000200)
+#define FW_FEATURE_INTERRUPT   ASM_CONST(0x0000000000000400)
+#define FW_FEATURE_MIGRATE     ASM_CONST(0x0000000000000800)
+#define FW_FEATURE_PERFMON     ASM_CONST(0x0000000000001000)
+#define FW_FEATURE_CRQ         ASM_CONST(0x0000000000002000)
+#define FW_FEATURE_VIO         ASM_CONST(0x0000000000004000)
+#define FW_FEATURE_RDMA                ASM_CONST(0x0000000000008000)
+#define FW_FEATURE_LLAN                ASM_CONST(0x0000000000010000)
+#define FW_FEATURE_BULK                ASM_CONST(0x0000000000020000)
+#define FW_FEATURE_XDABR       ASM_CONST(0x0000000000040000)
+#define FW_FEATURE_MULTITCE    ASM_CONST(0x0000000000080000)
+#define FW_FEATURE_SPLPAR      ASM_CONST(0x0000000000100000)
+#define FW_FEATURE_ISERIES     ASM_CONST(0x0000000000200000)
+#define FW_FEATURE_LPAR                ASM_CONST(0x0000000000400000)
+#define FW_FEATURE_PS3_LV1     ASM_CONST(0x0000000000800000)
+
+#ifndef __ASSEMBLY__
 
 enum {
 #ifdef CONFIG_PPC64
@@ -51,16 +55,26 @@ enum {
                FW_FEATURE_MIGRATE | FW_FEATURE_PERFMON | FW_FEATURE_CRQ |
                FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN |
                FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE |
-               FW_FEATURE_SPLPAR,
+               FW_FEATURE_SPLPAR | FW_FEATURE_LPAR,
        FW_FEATURE_PSERIES_ALWAYS = 0,
-       FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES,
-       FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES,
+       FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
+       FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
+       FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
+       FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
+       FW_FEATURE_NATIVE_POSSIBLE = 0,
+       FW_FEATURE_NATIVE_ALWAYS = 0,
        FW_FEATURE_POSSIBLE =
 #ifdef CONFIG_PPC_PSERIES
                FW_FEATURE_PSERIES_POSSIBLE |
 #endif
 #ifdef CONFIG_PPC_ISERIES
                FW_FEATURE_ISERIES_POSSIBLE |
+#endif
+#ifdef CONFIG_PPC_PS3
+               FW_FEATURE_PS3_POSSIBLE |
+#endif
+#ifdef CONFIG_PPC_NATIVE
+               FW_FEATURE_NATIVE_ALWAYS |
 #endif
                0,
        FW_FEATURE_ALWAYS =
@@ -69,6 +83,12 @@ enum {
 #endif
 #ifdef CONFIG_PPC_ISERIES
                FW_FEATURE_ISERIES_ALWAYS &
+#endif
+#ifdef CONFIG_PPC_PS3
+               FW_FEATURE_PS3_ALWAYS &
+#endif
+#ifdef CONFIG_PPC_NATIVE
+               FW_FEATURE_NATIVE_ALWAYS &
 #endif
                FW_FEATURE_POSSIBLE,
 
@@ -81,22 +101,11 @@ enum {
 /* This is used to identify firmware features which are available
  * to the kernel.
  */
-extern unsigned long   ppc64_firmware_features;
+extern unsigned long   powerpc_firmware_features;
 
-static inline unsigned long firmware_has_feature(unsigned long feature)
-{
-       return (FW_FEATURE_ALWAYS & feature) ||
-               (FW_FEATURE_POSSIBLE & ppc64_firmware_features & feature);
-}
-
-#ifdef CONFIG_PPC_PSERIES
-typedef struct {
-    unsigned long val;
-    char * name;
-} firmware_feature_t;
-
-extern firmware_feature_t firmware_features_table[];
-#endif
+#define firmware_has_feature(feature)                                  \
+       ((FW_FEATURE_ALWAYS & (feature)) ||                             \
+               (FW_FEATURE_POSSIBLE & powerpc_firmware_features & (feature)))
 
 extern void system_reset_fwnmi(void);
 extern void machine_check_fwnmi(void);
@@ -104,6 +113,20 @@ extern void machine_check_fwnmi(void);
 /* This is true if we are using the firmware NMI handler (typically LPAR) */
 extern int fwnmi_active;
 
+extern unsigned int __start___fw_ftr_fixup, __stop___fw_ftr_fixup;
+
+#else /* __ASSEMBLY__ */
+
+#define BEGIN_FW_FTR_SECTION_NESTED(label)     label:
+#define BEGIN_FW_FTR_SECTION                   BEGIN_FW_FTR_SECTION_NESTED(97)
+#define END_FW_FTR_SECTION_NESTED(msk, val, label) \
+       MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup)
+#define END_FW_FTR_SECTION(msk, val)           \
+       END_FW_FTR_SECTION_NESTED(msk, val, 97)
+
+#define END_FW_FTR_SECTION_IFSET(msk)  END_FW_FTR_SECTION((msk), (msk))
+#define END_FW_FTR_SECTION_IFCLR(msk)  END_FW_FTR_SECTION((msk), 0)
+
 #endif /* __ASSEMBLY__ */
 #endif /* __KERNEL__ */
 #endif /* __ASM_POWERPC_FIRMWARE_H */