parisc: add set_fixmap()/clear_fixmap()
[linux-block.git] / arch / parisc / include / asm / fixmap.h
index f7c3a0905de4fe94d7dfe655a80830db943ad1fb..288da73d4cc0d8c4fcb7121855673b27119919f5 100644 (file)
  * from areas congruently mapped with user space.  It is 8MB large
  * and must be 16MB aligned */
 #define TMPALIAS_MAP_START     ((__PAGE_OFFSET) - 16*1024*1024)
+
+#define FIXMAP_SIZE            (FIX_BITMAP_COUNT << PAGE_SHIFT)
+#define FIXMAP_START           (TMPALIAS_MAP_START - FIXMAP_SIZE)
 /* This is the kernel area for all maps (vmalloc, dma etc.)  most
  * usually, it extends up to TMPALIAS_MAP_START.  Virtual addresses
  * 0..GATEWAY_PAGE_SIZE are reserved for the gateway page */
 #define KERNEL_MAP_START       (GATEWAY_PAGE_SIZE)
-#define KERNEL_MAP_END         (TMPALIAS_MAP_START)
+#define KERNEL_MAP_END         (FIXMAP_START)
 
 #ifndef __ASSEMBLY__
+
+
+enum fixed_addresses {
+       /* Support writing RO kernel text via kprobes, jump labels, etc. */
+       FIX_TEXT_POKE0,
+       FIX_BITMAP_COUNT
+};
+
 extern void *parisc_vmalloc_start;
 #define PCXL_DMA_MAP_SIZE      (8*1024*1024)
 #define VMALLOC_START          ((unsigned long)parisc_vmalloc_start)
 #define VMALLOC_END            (KERNEL_MAP_END)
+
+#define __fix_to_virt(_x) (FIXMAP_START + ((_x) << PAGE_SHIFT))
+
+void set_fixmap(enum fixed_addresses idx, phys_addr_t phys);
+void clear_fixmap(enum fixed_addresses idx);
+
 #endif /*__ASSEMBLY__*/
 
 #endif /*_ASM_FIXMAP_H*/