Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

Need help to get security updates for your Linux BSP?
Loading...
v3.5.6
  1#ifndef __ASM_SH_BITOPS_GRB_H
  2#define __ASM_SH_BITOPS_GRB_H
  3
  4static inline void set_bit(int nr, volatile void * addr)
  5{
  6	int	mask;
  7	volatile unsigned int *a = addr;
  8	unsigned long tmp;
  9
 10	a += nr >> 5;
 11	mask = 1 << (nr & 0x1f);
 12
 13        __asm__ __volatile__ (
 14                "   .align 2              \n\t"
 15                "   mova    1f,   r0      \n\t" /* r0 = end point */
 16                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 17                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 18                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 19                "   or      %2,   %0      \n\t" /* or */
 20                "   mov.l   %0,   @%1     \n\t" /* store new value */
 21                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 22                : "=&r" (tmp),
 23                  "+r"  (a)
 24                : "r"   (mask)
 25                : "memory" , "r0", "r1");
 26}
 27
 28static inline void clear_bit(int nr, volatile void * addr)
 29{
 30	int	mask;
 31	volatile unsigned int *a = addr;
 32        unsigned long tmp;
 33
 34	a += nr >> 5;
 35        mask = ~(1 << (nr & 0x1f));
 36        __asm__ __volatile__ (
 37                "   .align 2              \n\t"
 38                "   mova    1f,   r0      \n\t" /* r0 = end point */
 39                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 40                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 41                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 42                "   and     %2,   %0      \n\t" /* and */
 43                "   mov.l   %0,   @%1     \n\t" /* store new value */
 44                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 45                : "=&r" (tmp),
 46                  "+r"  (a)
 47                : "r"   (mask)
 48                : "memory" , "r0", "r1");
 49}
 50
 51static inline void change_bit(int nr, volatile void * addr)
 52{
 53        int     mask;
 54        volatile unsigned int *a = addr;
 55        unsigned long tmp;
 56
 57        a += nr >> 5;
 58        mask = 1 << (nr & 0x1f);
 59        __asm__ __volatile__ (
 60                "   .align 2              \n\t"
 61                "   mova    1f,   r0      \n\t" /* r0 = end point */
 62                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 63                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 64                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 65                "   xor     %2,   %0      \n\t" /* xor */
 66                "   mov.l   %0,   @%1     \n\t" /* store new value */
 67                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 68                : "=&r" (tmp),
 69                  "+r"  (a)
 70                : "r"   (mask)
 71                : "memory" , "r0", "r1");
 72}
 73
 74static inline int test_and_set_bit(int nr, volatile void * addr)
 75{
 76        int     mask, retval;
 77	volatile unsigned int *a = addr;
 78        unsigned long tmp;
 79
 80	a += nr >> 5;
 81	mask = 1 << (nr & 0x1f);
 82
 83        __asm__ __volatile__ (
 84                "   .align 2              \n\t"
 85                "   mova    1f,   r0      \n\t" /* r0 = end point */
 86                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 87                "   mov   #-14,   r15     \n\t" /* LOGIN: r15 = size */
 88                "   mov.l  @%2,   %0      \n\t" /* load old value */
 89                "   mov     %0,   %1      \n\t"
 90                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
 91                "   mov    #-1,   %1      \n\t" /* retvat = -1 */
 92                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
 93                "   or      %3,   %0      \n\t"
 94                "   mov.l   %0,  @%2      \n\t" /* store new value */
 95                "1: mov     r1,  r15      \n\t" /* LOGOUT */
 96                : "=&r" (tmp),
 97                  "=&r" (retval),
 98                  "+r"  (a)
 99                : "r"   (mask)
100                : "memory" , "r0", "r1" ,"t");
101
102        return retval;
103}
104
105static inline int test_and_clear_bit(int nr, volatile void * addr)
106{
107        int     mask, retval,not_mask;
108        volatile unsigned int *a = addr;
109        unsigned long tmp;
110
111        a += nr >> 5;
112        mask = 1 << (nr & 0x1f);
113
114	not_mask = ~mask;
115
116        __asm__ __volatile__ (
117                "   .align 2              \n\t"
118		"   mova    1f,   r0      \n\t" /* r0 = end point */
119                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
120		"   mov   #-14,   r15     \n\t" /* LOGIN */
121		"   mov.l  @%2,   %0      \n\t" /* load old value */
122                "   mov     %0,   %1      \n\t" /* %1 = *a */
123                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
124		"   mov    #-1,   %1      \n\t" /* retvat = -1 */
125                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
126                "   and     %4,   %0      \n\t"
127                "   mov.l   %0,  @%2      \n\t" /* store new value */
128		"1: mov     r1,   r15     \n\t" /* LOGOUT */
129		: "=&r" (tmp),
130		  "=&r" (retval),
131		  "+r"  (a)
132		: "r"   (mask),
133		  "r"   (not_mask)
134		: "memory" , "r0", "r1", "t");
135
136        return retval;
137}
138
139static inline int test_and_change_bit(int nr, volatile void * addr)
140{
141        int     mask, retval;
142        volatile unsigned int *a = addr;
143        unsigned long tmp;
144
145        a += nr >> 5;
146        mask = 1 << (nr & 0x1f);
147
148        __asm__ __volatile__ (
149                "   .align 2              \n\t"
150                "   mova    1f,   r0      \n\t" /* r0 = end point */
151                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
152                "   mov   #-14,   r15     \n\t" /* LOGIN */
153                "   mov.l  @%2,   %0      \n\t" /* load old value */
154                "   mov     %0,   %1      \n\t" /* %1 = *a */
155                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
156                "   mov    #-1,   %1      \n\t" /* retvat = -1 */
157                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
158                "   xor     %3,   %0      \n\t"
159                "   mov.l   %0,  @%2      \n\t" /* store new value */
160                "1: mov     r1,   r15     \n\t" /* LOGOUT */
161                : "=&r" (tmp),
162                  "=&r" (retval),
163                  "+r"  (a)
164                : "r"   (mask)
165                : "memory" , "r0", "r1", "t");
166
167        return retval;
168}
169
170#include <asm-generic/bitops/non-atomic.h>
171
172#endif /* __ASM_SH_BITOPS_GRB_H */
v3.1
  1#ifndef __ASM_SH_BITOPS_GRB_H
  2#define __ASM_SH_BITOPS_GRB_H
  3
  4static inline void set_bit(int nr, volatile void * addr)
  5{
  6	int	mask;
  7	volatile unsigned int *a = addr;
  8	unsigned long tmp;
  9
 10	a += nr >> 5;
 11	mask = 1 << (nr & 0x1f);
 12
 13        __asm__ __volatile__ (
 14                "   .align 2              \n\t"
 15                "   mova    1f,   r0      \n\t" /* r0 = end point */
 16                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 17                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 18                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 19                "   or      %2,   %0      \n\t" /* or */
 20                "   mov.l   %0,   @%1     \n\t" /* store new value */
 21                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 22                : "=&r" (tmp),
 23                  "+r"  (a)
 24                : "r"   (mask)
 25                : "memory" , "r0", "r1");
 26}
 27
 28static inline void clear_bit(int nr, volatile void * addr)
 29{
 30	int	mask;
 31	volatile unsigned int *a = addr;
 32        unsigned long tmp;
 33
 34	a += nr >> 5;
 35        mask = ~(1 << (nr & 0x1f));
 36        __asm__ __volatile__ (
 37                "   .align 2              \n\t"
 38                "   mova    1f,   r0      \n\t" /* r0 = end point */
 39                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 40                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 41                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 42                "   and     %2,   %0      \n\t" /* and */
 43                "   mov.l   %0,   @%1     \n\t" /* store new value */
 44                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 45                : "=&r" (tmp),
 46                  "+r"  (a)
 47                : "r"   (mask)
 48                : "memory" , "r0", "r1");
 49}
 50
 51static inline void change_bit(int nr, volatile void * addr)
 52{
 53        int     mask;
 54        volatile unsigned int *a = addr;
 55        unsigned long tmp;
 56
 57        a += nr >> 5;
 58        mask = 1 << (nr & 0x1f);
 59        __asm__ __volatile__ (
 60                "   .align 2              \n\t"
 61                "   mova    1f,   r0      \n\t" /* r0 = end point */
 62                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 63                "   mov    #-6,   r15     \n\t" /* LOGIN: r15 = size */
 64                "   mov.l  @%1,   %0      \n\t" /* load  old value */
 65                "   xor     %2,   %0      \n\t" /* xor */
 66                "   mov.l   %0,   @%1     \n\t" /* store new value */
 67                "1: mov     r1,   r15     \n\t" /* LOGOUT */
 68                : "=&r" (tmp),
 69                  "+r"  (a)
 70                : "r"   (mask)
 71                : "memory" , "r0", "r1");
 72}
 73
 74static inline int test_and_set_bit(int nr, volatile void * addr)
 75{
 76        int     mask, retval;
 77	volatile unsigned int *a = addr;
 78        unsigned long tmp;
 79
 80	a += nr >> 5;
 81	mask = 1 << (nr & 0x1f);
 82
 83        __asm__ __volatile__ (
 84                "   .align 2              \n\t"
 85                "   mova    1f,   r0      \n\t" /* r0 = end point */
 86                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
 87                "   mov   #-14,   r15     \n\t" /* LOGIN: r15 = size */
 88                "   mov.l  @%2,   %0      \n\t" /* load old value */
 89                "   mov     %0,   %1      \n\t"
 90                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
 91                "   mov    #-1,   %1      \n\t" /* retvat = -1 */
 92                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
 93                "   or      %3,   %0      \n\t"
 94                "   mov.l   %0,  @%2      \n\t" /* store new value */
 95                "1: mov     r1,  r15      \n\t" /* LOGOUT */
 96                : "=&r" (tmp),
 97                  "=&r" (retval),
 98                  "+r"  (a)
 99                : "r"   (mask)
100                : "memory" , "r0", "r1" ,"t");
101
102        return retval;
103}
104
105static inline int test_and_clear_bit(int nr, volatile void * addr)
106{
107        int     mask, retval,not_mask;
108        volatile unsigned int *a = addr;
109        unsigned long tmp;
110
111        a += nr >> 5;
112        mask = 1 << (nr & 0x1f);
113
114	not_mask = ~mask;
115
116        __asm__ __volatile__ (
117                "   .align 2              \n\t"
118		"   mova    1f,   r0      \n\t" /* r0 = end point */
119                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
120		"   mov   #-14,   r15     \n\t" /* LOGIN */
121		"   mov.l  @%2,   %0      \n\t" /* load old value */
122                "   mov     %0,   %1      \n\t" /* %1 = *a */
123                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
124		"   mov    #-1,   %1      \n\t" /* retvat = -1 */
125                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
126                "   and     %4,   %0      \n\t"
127                "   mov.l   %0,  @%2      \n\t" /* store new value */
128		"1: mov     r1,   r15     \n\t" /* LOGOUT */
129		: "=&r" (tmp),
130		  "=&r" (retval),
131		  "+r"  (a)
132		: "r"   (mask),
133		  "r"   (not_mask)
134		: "memory" , "r0", "r1", "t");
135
136        return retval;
137}
138
139static inline int test_and_change_bit(int nr, volatile void * addr)
140{
141        int     mask, retval;
142        volatile unsigned int *a = addr;
143        unsigned long tmp;
144
145        a += nr >> 5;
146        mask = 1 << (nr & 0x1f);
147
148        __asm__ __volatile__ (
149                "   .align 2              \n\t"
150                "   mova    1f,   r0      \n\t" /* r0 = end point */
151                "   mov    r15,   r1      \n\t" /* r1 = saved sp */
152                "   mov   #-14,   r15     \n\t" /* LOGIN */
153                "   mov.l  @%2,   %0      \n\t" /* load old value */
154                "   mov     %0,   %1      \n\t" /* %1 = *a */
155                "   tst     %1,   %3      \n\t" /* T = ((*a & mask) == 0) */
156                "   mov    #-1,   %1      \n\t" /* retvat = -1 */
157                "   negc    %1,   %1      \n\t" /* retval = (mask & *a) != 0 */
158                "   xor     %3,   %0      \n\t"
159                "   mov.l   %0,  @%2      \n\t" /* store new value */
160                "1: mov     r1,   r15     \n\t" /* LOGOUT */
161                : "=&r" (tmp),
162                  "=&r" (retval),
163                  "+r"  (a)
164                : "r"   (mask)
165                : "memory" , "r0", "r1", "t");
166
167        return retval;
168}
169
170#include <asm-generic/bitops/non-atomic.h>
171
172#endif /* __ASM_SH_BITOPS_GRB_H */