rdma.m4: check if debugfs_create_bool() uses a bool or u32 pointer
[~tnikolova/compat/.git] / compat / compat-3.5.c
1 /*
2  * Copyright 2012 Mellanox Technologies Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * Compatibility file for Linux wireless for kernels 3.4.
9  */
10
11 #include <linux/kernel.h>
12 #include <linux/bitops.h>
13 #include <linux/export.h>
14 #include <linux/types.h>
15 #include <linux/pkt_sched.h>
16
17 #define ECN_OR_COST(class)      TC_PRIO_##class
18
19 #ifndef CONFIG_COMPAT_IS_IP_TOS2PRIO
20 const __u8 ip_tos2prio[16] = {
21         TC_PRIO_BESTEFFORT,
22         ECN_OR_COST(BESTEFFORT),
23         TC_PRIO_BESTEFFORT,
24         ECN_OR_COST(BESTEFFORT),
25         TC_PRIO_BULK,
26         ECN_OR_COST(BULK),
27         TC_PRIO_BULK,
28         ECN_OR_COST(BULK),
29         TC_PRIO_INTERACTIVE,
30         ECN_OR_COST(INTERACTIVE),
31         TC_PRIO_INTERACTIVE,
32         ECN_OR_COST(INTERACTIVE),
33         TC_PRIO_INTERACTIVE_BULK,
34         ECN_OR_COST(INTERACTIVE_BULK),
35         TC_PRIO_INTERACTIVE_BULK,
36         ECN_OR_COST(INTERACTIVE_BULK)
37 };
38 EXPORT_SYMBOL(ip_tos2prio);
39 #endif
40
41 int dev_uc_add_excl(struct net_device *dev, unsigned char *addr)
42 {
43         struct netdev_hw_addr *ha;
44         int err;
45
46         netif_addr_lock_bh(dev);
47         netdev_for_each_uc_addr(ha, dev) {
48                 if (!memcmp(ha->addr, addr, dev->addr_len) &&
49                     ha->type == NETDEV_HW_ADDR_T_UNICAST) {
50                         err = -EEXIST;
51                         goto out;
52                 }
53         }
54         netif_addr_unlock_bh(dev);
55
56 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
57         return dev_uc_add(dev, addr);
58 #else
59         return dev_unicast_add(dev, addr);
60 #endif
61
62 out:
63         netif_addr_unlock_bh(dev);
64         return err;
65 }
66 EXPORT_SYMBOL(dev_uc_add_excl);
67
68 int dev_mc_add_excl(struct net_device *dev, unsigned char *addr)
69 {
70 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
71         struct netdev_hw_addr *ha;
72 #else
73         struct dev_addr_list *ha;
74 #endif
75         int err;
76
77         netif_addr_lock_bh(dev);
78         netdev_for_each_mc_addr(ha, dev) {
79 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
80                 if (!memcmp(ha->addr, addr, dev->addr_len)) {
81 #else
82                 if (!memcmp(ha->da_addr, addr, dev->addr_len)) {
83 #endif
84                         err = -EEXIST;
85                         goto out;
86                 }
87         }
88         netif_addr_unlock_bh(dev);
89
90 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
91         return dev_mc_add(dev, addr);
92 #else
93         return dev_mc_add(dev, addr, ETH_ALEN, true);
94 #endif
95
96 out:
97         netif_addr_unlock_bh(dev);
98         return err;
99 }
100 EXPORT_SYMBOL(dev_mc_add_excl);