This source file includes following definitions.
- mthca_write64_raw
- mthca_write64
- mthca_write_db_rec
- mthca_write64_raw
- mthca_write64
- mthca_write_db_rec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <linux/types.h>
36
37 #define MTHCA_RD_DOORBELL 0x00
38 #define MTHCA_SEND_DOORBELL 0x10
39 #define MTHCA_RECEIVE_DOORBELL 0x18
40 #define MTHCA_CQ_DOORBELL 0x20
41 #define MTHCA_EQ_DOORBELL 0x28
42
43 #if BITS_PER_LONG == 64
44
45
46
47
48
49
50 #define MTHCA_DECLARE_DOORBELL_LOCK(name)
51 #define MTHCA_INIT_DOORBELL_LOCK(ptr) do { } while (0)
52 #define MTHCA_GET_DOORBELL_LOCK(ptr) (NULL)
53
54 static inline void mthca_write64_raw(__be64 val, void __iomem *dest)
55 {
56 __raw_writeq((__force u64) val, dest);
57 }
58
59 static inline void mthca_write64(u32 hi, u32 lo, void __iomem *dest,
60 spinlock_t *doorbell_lock)
61 {
62 __raw_writeq((__force u64) cpu_to_be64((u64) hi << 32 | lo), dest);
63 }
64
65 static inline void mthca_write_db_rec(__be32 val[2], __be32 *db)
66 {
67 *(u64 *) db = *(u64 *) val;
68 }
69
70 #else
71
72
73
74
75
76
77
78 #define MTHCA_DECLARE_DOORBELL_LOCK(name) spinlock_t name;
79 #define MTHCA_INIT_DOORBELL_LOCK(ptr) spin_lock_init(ptr)
80 #define MTHCA_GET_DOORBELL_LOCK(ptr) (ptr)
81
82 static inline void mthca_write64_raw(__be64 val, void __iomem *dest)
83 {
84 __raw_writel(((__force u32 *) &val)[0], dest);
85 __raw_writel(((__force u32 *) &val)[1], dest + 4);
86 }
87
88 static inline void mthca_write64(u32 hi, u32 lo, void __iomem *dest,
89 spinlock_t *doorbell_lock)
90 {
91 unsigned long flags;
92
93 hi = (__force u32) cpu_to_be32(hi);
94 lo = (__force u32) cpu_to_be32(lo);
95
96 spin_lock_irqsave(doorbell_lock, flags);
97 __raw_writel(hi, dest);
98 __raw_writel(lo, dest + 4);
99 spin_unlock_irqrestore(doorbell_lock, flags);
100 }
101
102 static inline void mthca_write_db_rec(__be32 val[2], __be32 *db)
103 {
104 db[0] = val[0];
105 wmb();
106 db[1] = val[1];
107 }
108
109 #endif