| .. | .. |
|---|
| 31 | 31 | MODULE_LICENSE("GPL"); |
|---|
| 32 | 32 | |
|---|
| 33 | 33 | static inline int do_siga_sync(unsigned long schid, |
|---|
| 34 | | - unsigned int out_mask, unsigned int in_mask, |
|---|
| 34 | + unsigned long out_mask, unsigned long in_mask, |
|---|
| 35 | 35 | unsigned int fc) |
|---|
| 36 | 36 | { |
|---|
| 37 | | - register unsigned long __fc asm ("0") = fc; |
|---|
| 38 | | - register unsigned long __schid asm ("1") = schid; |
|---|
| 39 | | - register unsigned long out asm ("2") = out_mask; |
|---|
| 40 | | - register unsigned long in asm ("3") = in_mask; |
|---|
| 41 | 37 | int cc; |
|---|
| 42 | 38 | |
|---|
| 43 | 39 | asm volatile( |
|---|
| 40 | + " lgr 0,%[fc]\n" |
|---|
| 41 | + " lgr 1,%[schid]\n" |
|---|
| 42 | + " lgr 2,%[out]\n" |
|---|
| 43 | + " lgr 3,%[in]\n" |
|---|
| 44 | 44 | " siga 0\n" |
|---|
| 45 | | - " ipm %0\n" |
|---|
| 46 | | - " srl %0,28\n" |
|---|
| 47 | | - : "=d" (cc) |
|---|
| 48 | | - : "d" (__fc), "d" (__schid), "d" (out), "d" (in) : "cc"); |
|---|
| 45 | + " ipm %[cc]\n" |
|---|
| 46 | + " srl %[cc],28\n" |
|---|
| 47 | + : [cc] "=&d" (cc) |
|---|
| 48 | + : [fc] "d" (fc), [schid] "d" (schid), |
|---|
| 49 | + [out] "d" (out_mask), [in] "d" (in_mask) |
|---|
| 50 | + : "cc", "0", "1", "2", "3"); |
|---|
| 49 | 51 | return cc; |
|---|
| 50 | 52 | } |
|---|
| 51 | 53 | |
|---|
| 52 | | -static inline int do_siga_input(unsigned long schid, unsigned int mask, |
|---|
| 53 | | - unsigned int fc) |
|---|
| 54 | +static inline int do_siga_input(unsigned long schid, unsigned long mask, |
|---|
| 55 | + unsigned long fc) |
|---|
| 54 | 56 | { |
|---|
| 55 | | - register unsigned long __fc asm ("0") = fc; |
|---|
| 56 | | - register unsigned long __schid asm ("1") = schid; |
|---|
| 57 | | - register unsigned long __mask asm ("2") = mask; |
|---|
| 58 | 57 | int cc; |
|---|
| 59 | 58 | |
|---|
| 60 | 59 | asm volatile( |
|---|
| 60 | + " lgr 0,%[fc]\n" |
|---|
| 61 | + " lgr 1,%[schid]\n" |
|---|
| 62 | + " lgr 2,%[mask]\n" |
|---|
| 61 | 63 | " siga 0\n" |
|---|
| 62 | | - " ipm %0\n" |
|---|
| 63 | | - " srl %0,28\n" |
|---|
| 64 | | - : "=d" (cc) |
|---|
| 65 | | - : "d" (__fc), "d" (__schid), "d" (__mask) : "cc"); |
|---|
| 64 | + " ipm %[cc]\n" |
|---|
| 65 | + " srl %[cc],28\n" |
|---|
| 66 | + : [cc] "=&d" (cc) |
|---|
| 67 | + : [fc] "d" (fc), [schid] "d" (schid), [mask] "d" (mask) |
|---|
| 68 | + : "cc", "0", "1", "2"); |
|---|
| 66 | 69 | return cc; |
|---|
| 67 | 70 | } |
|---|
| 68 | 71 | |
|---|
| .. | .. |
|---|
| 78 | 81 | * Note: For IQDC unicast queues only the highest priority queue is processed. |
|---|
| 79 | 82 | */ |
|---|
| 80 | 83 | static inline int do_siga_output(unsigned long schid, unsigned long mask, |
|---|
| 81 | | - unsigned int *bb, unsigned int fc, |
|---|
| 84 | + unsigned int *bb, unsigned long fc, |
|---|
| 82 | 85 | unsigned long aob) |
|---|
| 83 | 86 | { |
|---|
| 84 | | - register unsigned long __fc asm("0") = fc; |
|---|
| 85 | | - register unsigned long __schid asm("1") = schid; |
|---|
| 86 | | - register unsigned long __mask asm("2") = mask; |
|---|
| 87 | | - register unsigned long __aob asm("3") = aob; |
|---|
| 88 | 87 | int cc; |
|---|
| 89 | 88 | |
|---|
| 90 | 89 | asm volatile( |
|---|
| 90 | + " lgr 0,%[fc]\n" |
|---|
| 91 | + " lgr 1,%[schid]\n" |
|---|
| 92 | + " lgr 2,%[mask]\n" |
|---|
| 93 | + " lgr 3,%[aob]\n" |
|---|
| 91 | 94 | " siga 0\n" |
|---|
| 92 | | - " ipm %0\n" |
|---|
| 93 | | - " srl %0,28\n" |
|---|
| 94 | | - : "=d" (cc), "+d" (__fc), "+d" (__aob) |
|---|
| 95 | | - : "d" (__schid), "d" (__mask) |
|---|
| 96 | | - : "cc"); |
|---|
| 97 | | - *bb = __fc >> 31; |
|---|
| 95 | + " lgr %[fc],0\n" |
|---|
| 96 | + " ipm %[cc]\n" |
|---|
| 97 | + " srl %[cc],28\n" |
|---|
| 98 | + : [cc] "=&d" (cc), [fc] "+&d" (fc) |
|---|
| 99 | + : [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob) |
|---|
| 100 | + : "cc", "0", "1", "2", "3"); |
|---|
| 101 | + *bb = fc >> 31; |
|---|
| 98 | 102 | return cc; |
|---|
| 99 | 103 | } |
|---|
| 100 | 104 | |
|---|