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