diff options
Diffstat (limited to 'include/asm-ia64/sal.h')
-rw-r--r-- | include/asm-ia64/sal.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/include/asm-ia64/sal.h b/include/asm-ia64/sal.h index 46cadf5aaac5..1f5412d6f9bb 100644 --- a/include/asm-ia64/sal.h +++ b/include/asm-ia64/sal.h | |||
@@ -46,25 +46,28 @@ | |||
46 | extern spinlock_t sal_lock; | 46 | extern spinlock_t sal_lock; |
47 | 47 | ||
48 | /* SAL spec _requires_ eight args for each call. */ | 48 | /* SAL spec _requires_ eight args for each call. */ |
49 | #define __SAL_CALL(result,a0,a1,a2,a3,a4,a5,a6,a7) \ | 49 | #define __IA64_FW_CALL(entry,result,a0,a1,a2,a3,a4,a5,a6,a7) \ |
50 | result = (*ia64_sal)(a0,a1,a2,a3,a4,a5,a6,a7) | 50 | result = (*entry)(a0,a1,a2,a3,a4,a5,a6,a7) |
51 | 51 | ||
52 | # define SAL_CALL(result,args...) do { \ | 52 | # define IA64_FW_CALL(entry,result,args...) do { \ |
53 | unsigned long __ia64_sc_flags; \ | 53 | unsigned long __ia64_sc_flags; \ |
54 | struct ia64_fpreg __ia64_sc_fr[6]; \ | 54 | struct ia64_fpreg __ia64_sc_fr[6]; \ |
55 | ia64_save_scratch_fpregs(__ia64_sc_fr); \ | 55 | ia64_save_scratch_fpregs(__ia64_sc_fr); \ |
56 | spin_lock_irqsave(&sal_lock, __ia64_sc_flags); \ | 56 | spin_lock_irqsave(&sal_lock, __ia64_sc_flags); \ |
57 | __SAL_CALL(result, args); \ | 57 | __IA64_FW_CALL(entry, result, args); \ |
58 | spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags); \ | 58 | spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags); \ |
59 | ia64_load_scratch_fpregs(__ia64_sc_fr); \ | 59 | ia64_load_scratch_fpregs(__ia64_sc_fr); \ |
60 | } while (0) | 60 | } while (0) |
61 | 61 | ||
62 | # define SAL_CALL(result,args...) \ | ||
63 | IA64_FW_CALL(ia64_sal, result, args); | ||
64 | |||
62 | # define SAL_CALL_NOLOCK(result,args...) do { \ | 65 | # define SAL_CALL_NOLOCK(result,args...) do { \ |
63 | unsigned long __ia64_scn_flags; \ | 66 | unsigned long __ia64_scn_flags; \ |
64 | struct ia64_fpreg __ia64_scn_fr[6]; \ | 67 | struct ia64_fpreg __ia64_scn_fr[6]; \ |
65 | ia64_save_scratch_fpregs(__ia64_scn_fr); \ | 68 | ia64_save_scratch_fpregs(__ia64_scn_fr); \ |
66 | local_irq_save(__ia64_scn_flags); \ | 69 | local_irq_save(__ia64_scn_flags); \ |
67 | __SAL_CALL(result, args); \ | 70 | __IA64_FW_CALL(ia64_sal, result, args); \ |
68 | local_irq_restore(__ia64_scn_flags); \ | 71 | local_irq_restore(__ia64_scn_flags); \ |
69 | ia64_load_scratch_fpregs(__ia64_scn_fr); \ | 72 | ia64_load_scratch_fpregs(__ia64_scn_fr); \ |
70 | } while (0) | 73 | } while (0) |
@@ -73,7 +76,7 @@ extern spinlock_t sal_lock; | |||
73 | struct ia64_fpreg __ia64_scs_fr[6]; \ | 76 | struct ia64_fpreg __ia64_scs_fr[6]; \ |
74 | ia64_save_scratch_fpregs(__ia64_scs_fr); \ | 77 | ia64_save_scratch_fpregs(__ia64_scs_fr); \ |
75 | preempt_disable(); \ | 78 | preempt_disable(); \ |
76 | __SAL_CALL(result, args); \ | 79 | __IA64_FW_CALL(ia64_sal, result, args); \ |
77 | preempt_enable(); \ | 80 | preempt_enable(); \ |
78 | ia64_load_scratch_fpregs(__ia64_scs_fr); \ | 81 | ia64_load_scratch_fpregs(__ia64_scs_fr); \ |
79 | } while (0) | 82 | } while (0) |