]> git.ipfire.org Git - thirdparty/kernel/linux.git/blobdiff - arch/parisc/include/asm/special_insns.h
parisc: Use lpa instruction to load physical addresses in driver code
[thirdparty/kernel/linux.git] / arch / parisc / include / asm / special_insns.h
index 3d4dd68e181b44b2a8c2d089067bdca3ad0ab674..a303ae9a77f41fe8ceef5490ab2be5b394fc199d 100644 (file)
@@ -2,6 +2,30 @@
 #ifndef __PARISC_SPECIAL_INSNS_H
 #define __PARISC_SPECIAL_INSNS_H
 
+#define lpa(va)        ({                      \
+       unsigned long pa;               \
+       __asm__ __volatile__(           \
+               "copy %%r0,%0\n\t"      \
+               "lpa %%r0(%1),%0"       \
+               : "=r" (pa)             \
+               : "r" (va)              \
+               : "memory"              \
+       );                              \
+       pa;                             \
+})
+
+#define lpa_user(va)   ({              \
+       unsigned long pa;               \
+       __asm__ __volatile__(           \
+               "copy %%r0,%0\n\t"      \
+               "lpa %%r0(%%sr3,%1),%0" \
+               : "=r" (pa)             \
+               : "r" (va)              \
+               : "memory"              \
+       );                              \
+       pa;                             \
+})
+
 #define mfctl(reg)     ({              \
        unsigned long cr;               \
        __asm__ __volatile__(           \