afef7b6fa42bb7064f40d52ce4c82c1ff3919290
[compat-rdma/compat.git] / include / linux / compat-2.6.38.h
1 #ifndef LINUX_26_38_COMPAT_H
2 #define LINUX_26_38_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
7
8 #include <linux/kernel.h>
9 #include <linux/skbuff.h>
10 #include <linux/etherdevice.h>
11 #include <net/sch_generic.h>
12
13 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30))
14 static inline void bstats_update(struct gnet_stats_basic_packed *bstats,
15                                  const struct sk_buff *skb)
16 {
17         bstats->bytes += qdisc_pkt_len((struct sk_buff *) skb);
18         bstats->packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
19 }
20 static inline void qdisc_bstats_update(struct Qdisc *sch,
21                                        const struct sk_buff *skb)
22 {
23         bstats_update(&sch->bstats, skb);
24 }
25 #else
26 /*
27  * kernels <= 2.6.30 do not pass a const skb to qdisc_pkt_len, and
28  * gnet_stats_basic_packed did not exist (see c1a8f1f1c8)
29  */
30 static inline void bstats_update(struct gnet_stats_basic *bstats,
31                                  struct sk_buff *skb)
32 {
33         bstats->bytes += qdisc_pkt_len(skb);
34         bstats->packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
35 }
36 static inline void qdisc_bstats_update(struct Qdisc *sch,
37                                        struct sk_buff *skb)
38 {
39         bstats_update(&sch->bstats, skb);
40 }
41 #endif
42
43
44 /* rename member in struct mmc_host in include/linux/mmc/host.h */
45 #define max_segs        max_hw_segs
46
47
48 /* Exponentially weighted moving average (EWMA) */
49
50 /* For more documentation see lib/average.c */
51
52 struct ewma {
53         unsigned long internal;
54         unsigned long factor;
55         unsigned long weight;
56 };
57
58 extern void ewma_init(struct ewma *avg, unsigned long factor,
59                       unsigned long weight);
60
61 extern struct ewma *ewma_add(struct ewma *avg, unsigned long val);
62
63 /**
64  * ewma_read() - Get average value
65  * @avg: Average structure
66  *
67  * Returns the average value held in @avg.
68  */
69 static inline unsigned long ewma_read(const struct ewma *avg)
70 {
71         return DIV_ROUND_CLOSEST(avg->internal, avg->factor);
72 }
73
74 #define pr_warn pr_warning
75
76 #ifndef CONFIG_COMPAT_RHEL_6_4
77 #define create_freezable_workqueue create_freezeable_workqueue
78
79 static inline int skb_checksum_start_offset(const struct sk_buff *skb)
80 {
81         return skb->csum_start - skb_headroom(skb);
82 }
83 #endif /* CONFIG_COMPAT_RHEL_6_4 */
84
85 /* from include/linux/printk.h */ 
86 #define pr_emerg_once(fmt, ...)                                 \
87         printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
88 #define pr_alert_once(fmt, ...)                                 \
89         printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
90 #define pr_crit_once(fmt, ...)                                  \
91         printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
92 #define pr_err_once(fmt, ...)                                   \
93         printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
94 #define pr_warn_once(fmt, ...)                                  \
95         printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
96 #define pr_notice_once(fmt, ...)                                \
97         printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
98 #define pr_info_once(fmt, ...)                                  \
99         printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
100 #define pr_cont_once(fmt, ...)                                  \
101         printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__)
102 #if defined(DEBUG)
103 #define pr_debug_once(fmt, ...)                                 \
104         printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
105 #else
106 #define pr_debug_once(fmt, ...)                                 \
107         no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
108 #endif
109
110 /* include/linux/netdevice.h */
111 #define alloc_netdev_mqs(sizeof_priv, name, setup, txqs, rxqs) \
112         alloc_netdev_mq(sizeof_priv, name, setup, \
113                         max_t(unsigned int, txqs, rxqs))
114
115 #define ETH_P_LINK_CTL  0x886c          /* HPNA, wlan link local tunnel */
116
117 /**
118  * is_unicast_ether_addr - Determine if the Ethernet address is unicast
119  * @addr: Pointer to a six-byte array containing the Ethernet address
120  *
121  * Return true if the address is a unicast address.
122  */
123 static inline int is_unicast_ether_addr(const u8 *addr)
124 {
125         return !is_multicast_ether_addr(addr);
126 }
127
128 static inline int netdev_queue_numa_node_read(const struct netdev_queue *q)
129 {
130 #if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
131     return q->numa_node;
132 #else
133     return NUMA_NO_NODE;
134 #endif
135 }
136
137 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) */
138
139 #endif /* LINUX_26_38_COMPAT_H */