badf7d666703126696513cdce3d3997aabf86442
[compat-rdma/compat.git] / include / linux / compat-3.5.h
1 #ifndef LINUX_3_5_COMPAT_H
2 #define LINUX_3_5_COMPAT_H
3
4 #include <linux/version.h>
5 #include <linux/fs.h>
6 #include <linux/etherdevice.h>
7 #include <linux/net.h>
8
9 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0))
10
11 /*
12  * This backports:
13  *
14  * commit f56f821feb7b36223f309e0ec05986bb137ce418
15  * Author: Daniel Vetter <daniel.vetter@ffwll.ch>
16  * Date:   Sun Mar 25 19:47:41 2012 +0200
17  *
18  *     mm: extend prefault helpers to fault in more than PAGE_SIZE
19  *
20  * The new functions are used by drm/i915 driver.
21  *
22  */
23
24 static inline int fault_in_multipages_writeable(char __user *uaddr, int size)
25 {
26         int ret = 0;
27         char __user *end = uaddr + size - 1;
28
29         if (unlikely(size == 0))
30                 return ret;
31
32         /*
33          * Writing zeroes into userspace here is OK, because we know that if
34          * the zero gets there, we'll be overwriting it.
35          */
36         while (uaddr <= end) {
37                 ret = __put_user(0, uaddr);
38                 if (ret != 0)
39                         return ret;
40                 uaddr += PAGE_SIZE;
41         }
42
43         /* Check whether the range spilled into the next page. */
44         if (((unsigned long)uaddr & PAGE_MASK) ==
45                         ((unsigned long)end & PAGE_MASK))
46                 ret = __put_user(0, end);
47
48         return ret;
49 }
50
51 static inline int fault_in_multipages_readable(const char __user *uaddr,
52                                                int size)
53 {
54         volatile char c;
55         int ret = 0;
56         const char __user *end = uaddr + size - 1;
57
58         if (unlikely(size == 0))
59                 return ret;
60
61         while (uaddr <= end) {
62                 ret = __get_user(c, uaddr);
63                 if (ret != 0)
64                         return ret;
65                 uaddr += PAGE_SIZE;
66         }
67
68         /* Check whether the range spilled into the next page. */
69         if (((unsigned long)uaddr & PAGE_MASK) ==
70                         ((unsigned long)end & PAGE_MASK)) {
71                 ret = __get_user(c, end);
72                 (void)c;
73         }
74
75         return ret;
76 }
77
78 /* switcheroo is available on >= 2.6.34 */
79 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
80 #include <linux/vga_switcheroo.h>
81 /*
82  * This backports:
83  *
84  *   From 26ec685ff9d9c16525d8ec4c97e52fcdb187b302 Mon Sep 17 00:00:00 2001
85  *   From: Takashi Iwai <tiwai@suse.de>
86  *   Date: Fri, 11 May 2012 07:51:17 +0200
87  *   Subject: [PATCH] vga_switcheroo: Introduce struct vga_switcheroo_client_ops
88  *
89  */
90
91 struct vga_switcheroo_client_ops {
92     void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
93     void (*reprobe)(struct pci_dev *dev);
94     bool (*can_switch)(struct pci_dev *dev);
95 };
96 #endif
97
98 /*
99  * This backports:
100  *
101  *   From a3860c1c5dd1137db23d7786d284939c5761d517 Mon Sep 17 00:00:00 2001
102  *   From: Xi Wang <xi.wang@gmail.com>
103  *   Date: Thu, 31 May 2012 16:26:04 -0700
104  *   Subject: [PATCH] introduce SIZE_MAX
105  */
106
107 #define SIZE_MAX    (~(size_t)0)
108
109
110 #include <linux/pkt_sched.h>
111
112 /*
113  * This backports:
114  *
115  *   From 76e3cc126bb223013a6b9a0e2a51238d1ef2e409 Mon Sep 17 00:00:00 2001
116  *   From: Eric Dumazet <edumazet@google.com>
117  *   Date: Thu, 10 May 2012 07:51:25 +0000
118  *   Subject: [PATCH] codel: Controlled Delay AQM
119  */
120
121 /* CODEL */
122
123 enum {
124         TCA_CODEL_UNSPEC,
125         TCA_CODEL_TARGET,
126         TCA_CODEL_LIMIT,
127         TCA_CODEL_INTERVAL,
128         TCA_CODEL_ECN,
129         __TCA_CODEL_MAX
130 };
131
132 #define TCA_CODEL_MAX   (__TCA_CODEL_MAX - 1)
133
134 struct tc_codel_xstats {
135         __u32   maxpacket; /* largest packet we've seen so far */
136         __u32   count;     /* how many drops we've done since the last time we
137                             * entered dropping state
138                             */
139         __u32   lastcount; /* count at entry to dropping state */
140         __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
141         __s32   drop_next; /* time to drop next packet */
142         __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
143         __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
144         __u32   dropping;  /* are we in dropping state ? */
145 };
146
147 /* This backports:
148  *
149  * commit 4b549a2ef4bef9965d97cbd992ba67930cd3e0fe
150  * Author: Eric Dumazet <edumazet@google.com>
151  * Date:   Fri May 11 09:30:50 2012 +0000
152  *    fq_codel: Fair Queue Codel AQM
153  */
154
155 /* FQ_CODEL */
156
157 enum {
158         TCA_FQ_CODEL_UNSPEC,
159         TCA_FQ_CODEL_TARGET,
160         TCA_FQ_CODEL_LIMIT,
161         TCA_FQ_CODEL_INTERVAL,
162         TCA_FQ_CODEL_ECN,
163         TCA_FQ_CODEL_FLOWS,
164         TCA_FQ_CODEL_QUANTUM,
165         __TCA_FQ_CODEL_MAX
166 };
167
168 #define TCA_FQ_CODEL_MAX        (__TCA_FQ_CODEL_MAX - 1)
169
170 enum {
171         TCA_FQ_CODEL_XSTATS_QDISC,
172         TCA_FQ_CODEL_XSTATS_CLASS,
173 };
174
175 struct tc_fq_codel_qd_stats {
176         __u32   maxpacket;      /* largest packet we've seen so far */
177         __u32   drop_overlimit; /* number of time max qdisc
178                                  * packet limit was hit
179                                  */
180         __u32   ecn_mark;       /* number of packets we ECN marked
181                                  * instead of being dropped
182                                  */
183         __u32   new_flow_count; /* number of time packets
184                                  * created a 'new flow'
185                                  */
186         __u32   new_flows_len;  /* count of flows in new list */
187         __u32   old_flows_len;  /* count of flows in old list */
188 };
189
190 struct tc_fq_codel_cl_stats {
191         __s32   deficit;
192         __u32   ldelay;         /* in-queue delay seen by most recently
193                                  * dequeued packet
194                                  */
195         __u32   count;
196         __u32   lastcount;
197         __u32   dropping;
198         __s32   drop_next;
199 };
200
201 struct tc_fq_codel_xstats {
202         __u32   type;
203         union {
204                 struct tc_fq_codel_qd_stats qdisc_stats;
205                 struct tc_fq_codel_cl_stats class_stats;
206         };
207 };
208
209
210 /* Backports tty_lock: Localise the lock */
211 #define tty_lock(__tty) tty_lock()
212 #define tty_unlock(__tty) tty_unlock()
213
214 /* Backport ether_addr_equal */
215 static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
216 {
217     return !compare_ether_addr(addr1, addr2);
218 }
219
220 #define net_ratelimited_function(function, ...)                 \
221 do {                                                            \
222         if (net_ratelimit())                                    \
223                 function(__VA_ARGS__);                          \
224 } while (0)
225
226 #define net_emerg_ratelimited(fmt, ...)                         \
227         net_ratelimited_function(pr_emerg, fmt, ##__VA_ARGS__)
228 #define net_alert_ratelimited(fmt, ...)                         \
229         net_ratelimited_function(pr_alert, fmt, ##__VA_ARGS__)
230 #define net_crit_ratelimited(fmt, ...)                          \
231         net_ratelimited_function(pr_crit, fmt, ##__VA_ARGS__)
232 #define net_err_ratelimited(fmt, ...)                           \
233         net_ratelimited_function(pr_err, fmt, ##__VA_ARGS__)
234 #define net_notice_ratelimited(fmt, ...)                        \
235         net_ratelimited_function(pr_notice, fmt, ##__VA_ARGS__)
236 #define net_warn_ratelimited(fmt, ...)                          \
237         net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
238 #define net_info_ratelimited(fmt, ...)                          \
239         net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
240 #define net_dbg_ratelimited(fmt, ...)                           \
241         net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
242
243 static inline int net_sysctl_init(void) { return 0; }
244 static inline struct ctl_table_header *register_net_sysctl(struct net *net,
245         const char *path, struct ctl_table *table)
246 {
247         return NULL;
248 }
249 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) */
250
251 #endif /* LINUX_3_5_COMPAT_H */