powerpc: Enable MMU feature sections for inline asm
[pandora-kernel.git] / arch / powerpc / include / asm / feature-fixups.h
index a102996..cbd4dfa 100644 (file)
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG         .llong
 #define FTR_ENTRY_OFFSET       .long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG         .llong
+#define FTR_ENTRY_OFFSET       .llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG         PPC_LONG
-#define FTR_ENTRY_OFFSET       PPC_LONG
+#define FTR_ENTRY_LONG         .long
+#define FTR_ENTRY_OFFSET       .long
 #endif
 
 #define START_FTR_SECTION(label)       label##1:
@@ -81,6 +81,36 @@ label##5:                                            \
 #define ALT_FTR_SECTION_END_IFCLR(msk) \
        ALT_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+/* MMU feature dependent sections */
+#define BEGIN_MMU_FTR_SECTION_NESTED(label)    START_FTR_SECTION(label)
+#define BEGIN_MMU_FTR_SECTION                  START_FTR_SECTION(97)
+
+#define END_MMU_FTR_SECTION_NESTED(msk, val, label)            \
+       FTR_SECTION_ELSE_NESTED(label)                          \
+       MAKE_FTR_SECTION_ENTRY(msk, val, label, __mmu_ftr_fixup)
+
+#define END_MMU_FTR_SECTION(msk, val)          \
+       END_MMU_FTR_SECTION_NESTED(msk, val, 97)
+
+#define END_MMU_FTR_SECTION_IFSET(msk) END_MMU_FTR_SECTION((msk), (msk))
+#define END_MMU_FTR_SECTION_IFCLR(msk) END_MMU_FTR_SECTION((msk), 0)
+
+/* MMU feature sections with alternatives, use BEGIN_FTR_SECTION to start */
+#define MMU_FTR_SECTION_ELSE_NESTED(label)     FTR_SECTION_ELSE_NESTED(label)
+#define MMU_FTR_SECTION_ELSE   MMU_FTR_SECTION_ELSE_NESTED(97)
+#define ALT_MMU_FTR_SECTION_END_NESTED(msk, val, label)        \
+       MAKE_FTR_SECTION_ENTRY(msk, val, label, __mmu_ftr_fixup)
+#define ALT_MMU_FTR_SECTION_END_NESTED_IFSET(msk, label)       \
+       ALT_MMU_FTR_SECTION_END_NESTED(msk, msk, label)
+#define ALT_MMU_FTR_SECTION_END_NESTED_IFCLR(msk, label)       \
+       ALT_MMU_FTR_SECTION_END_NESTED(msk, 0, label)
+#define ALT_MMU_FTR_SECTION_END(msk, val)      \
+       ALT_MMU_FTR_SECTION_END_NESTED(msk, val, 97)
+#define ALT_MMU_FTR_SECTION_END_IFSET(msk)     \
+       ALT_MMU_FTR_SECTION_END_NESTED_IFSET(msk, 97)
+#define ALT_MMU_FTR_SECTION_END_IFCLR(msk)     \
+       ALT_MMU_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
+
 /* Firmware feature dependent sections */
 #define BEGIN_FW_FTR_SECTION_NESTED(label)     START_FTR_SECTION(label)
 #define BEGIN_FW_FTR_SECTION                   START_FTR_SECTION(97)
@@ -111,6 +141,21 @@ label##5:                                          \
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)      \
        ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF(section_if, section_else, msk, val)     \
+       stringify_in_c(BEGIN_MMU_FTR_SECTION)                   \
+       section_if "; "                                         \
+       stringify_in_c(MMU_FTR_SECTION_ELSE)                    \
+       section_else "; "                                       \
+       stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(section_if, section_else, msk)       \
+       ASM_MMU_FTR_IF(section_if, section_else, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(section_if, section_else, msk)       \
+       ASM_MMU_FTR_IF(section_if, section_else, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */