Revert "Remove unused define"
[fio.git] / arch / arch-ppc.h
... / ...
CommitLineData
1#ifndef ARCH_PPC_H
2#define ARCH_PPH_H
3
4#define ARCH (arch_ppc)
5
6#ifndef __NR_ioprio_set
7#define __NR_ioprio_set 273
8#define __NR_ioprio_get 274
9#endif
10
11#ifndef __NR_fadvise64
12#define __NR_fadvise64 233
13#endif
14
15#ifndef __NR_sys_splice
16#define __NR_sys_splice 283
17#define __NR_sys_tee 284
18#define __NR_sys_vmsplice 285
19#endif
20
21#define nop do { } while (0)
22
23#ifdef __powerpc64__
24#define read_barrier() __asm__ __volatile__ ("lwsync" : : : "memory")
25#else
26#define read_barrier() __asm__ __volatile__ ("sync" : : : "memory")
27#endif
28
29#define write_barrier() __asm__ __volatile__ ("sync" : : : "memory")
30
31static inline int __ilog2(unsigned long bitmask)
32{
33 int lz;
34
35 asm ("cntlzw %0,%1" : "=r" (lz) : "r" (bitmask));
36 return 31 - lz;
37}
38
39static inline int arch_ffz(unsigned long bitmask)
40{
41 if ((bitmask = ~bitmask) == 0)
42 return 32;
43 return __ilog2(bitmask & -bitmask);
44}
45#define ARCH_HAVE_FFZ
46
47typedef struct {
48 volatile unsigned int lock;
49} spinlock_t;
50
51static inline void spin_trylock(spinlock_t *lock)
52{
53 unsigned long tmp;
54
55 __asm__ __volatile__(
56 "1: lwarx %0,0,%2\n\
57 cmpwi 0,%0,0\n\
58 bne- 2f\n\
59 stwcx. 1,0,%2\n\
60 bne- 1b\n\
61 isync\n\
62 2:" : "=&r" (tmp)
63 : (&lock->lock)
64 : "cr0", "memory");
65
66 return tmp;
67}
68
69static inline void spin_lock(spinlock_t *lock)
70{
71 while (spin_trylock(lock))
72 ;
73}
74
75static inline void spin_unlock(spinlock_t *lock)
76{
77 read_barrier();
78 lock->lock = 0;
79}
80
81#endif