blob: fbfb470d13bf451437266f42c430e6e53f80b061 [file] [log] [blame]
#ifndef LINUX_26_23_COMPAT_H
#define LINUX_26_23_COMPAT_H
#include <linux/version.h>
/* Compat work for < 2.6.23 */
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
#include <linux/netdevice.h>
#include <linux/sched.h>
#include <linux/workqueue.h>
#include <linux/genetlink.h>
#include <net/sch_generic.h>
/*
* Tell gcc if a function is cold. The compiler will assume any path
* directly leading to the call is unlikely.
*/
#if !(__GNUC__ == 4 && __GNUC_MINOR__ < 3)
/* Mark functions as cold. gcc will assume any path leading to a call
* to them will be unlikely. This means a lot of manual unlikely()s
* are unnecessary now for any paths leading to the usual suspects
* like BUG(), printk(), panic() etc. [but let's keep them for now for
* older compilers]
*
* Early snapshots of gcc 4.3 don't support this and we can't detect this
* in the preprocessor, but we can live with this because they're unreleased.
* Maketime probing would be overkill here.
*
* gcc also has a __attribute__((__hot__)) to move hot functions into
* a special section, but I don't see any sense in this right now in
* the kernel context */
#define __cold __attribute__((__cold__))
#endif /* gcc 4.3 check */
#ifndef __cold
#define __cold
#endif
/* Added as of 2.6.23 in include/linux/netdevice.h */
#define alloc_netdev_mq(sizeof_priv, name, setup, queue) \
alloc_netdev(sizeof_priv, name, setup)
#define NETIF_F_MULTI_QUEUE 16384
/* Added as of 2.6.23 on include/linux/netdevice.h */
static inline int netif_is_multiqueue(const struct net_device *dev)
{
return (!!(NETIF_F_MULTI_QUEUE & dev->features));
}
/* 2.6.23 fixed a bug in tcf_destroy_chain and the parameter changed */
static inline void tcf_destroy_chain_compat(struct tcf_proto **fl)
{
struct tcf_proto *tp;
while ((tp = *fl) != NULL) {
*fl = tp->next;
tp->ops->destroy(tp);
module_put(tp->ops->owner);
kfree(tp);
}
}
/* dev_mc_list was replaced with dev_addr_list as of 2.6.23,
* only new member added is da_synced. */
#define dev_addr_list dev_mc_list
#define da_addr dmi_addr
#define da_addrlen dmi_addrlen
#define da_users dmi_users
#define da_gusers dmi_gusers
/* dev_set_promiscuity() was moved to __dev_set_promiscuity() on 2.6.23 and
* dev_set_promiscuity() became a wrapper. */
#define __dev_set_promiscuity dev_set_promiscuity
/* Our own 2.6.22 port on compat.c */
extern void dev_mc_unsync(struct net_device *to, struct net_device *from);
extern int dev_mc_sync(struct net_device *to, struct net_device *from);
/* Our own 2.6.22 port on compat.c */
extern void __dev_set_rx_mode(struct net_device *dev);
/* Simple to add this */
extern int cancel_delayed_work_sync(struct delayed_work *work);
#define cancel_delayed_work_sync cancel_rearming_delayed_work
#define debugfs_rename(a, b, c, d) 1
/* nl80211 requires multicast group support which is new and added on
* 2.6.23. We can't add support for it for older kernels to support it
* genl_family structure was changed. Lets just let through the
* genl_register_mc_group call. This means no multicast group suppport */
#define genl_register_mc_group(a, b) 0
/**
* struct genl_multicast_group - generic netlink multicast group
* @name: name of the multicast group, names are per-family
* @id: multicast group ID, assigned by the core, to use with
* genlmsg_multicast().
* @list: list entry for linking
* @family: pointer to family, need not be set before registering
*/
struct genl_multicast_group
{
struct genl_family *family; /* private */
struct list_head list; /* private */
char name[GENL_NAMSIZ];
u32 id;
};
/* Added as of 2.6.23 */
int pci_try_set_mwi(struct pci_dev *dev);
/* Added as of 2.6.23 */
#ifdef CONFIG_PM_SLEEP
/*
* Tell the freezer that the current task should be frozen by it
*/
static inline void set_freezable(void)
{
current->flags &= ~PF_NOFREEZE;
}
#else
static inline void set_freezable(void) {}
#endif /* CONFIG_PM_SLEEP */
#else
#define tcf_destroy_chain_compat tcf_destroy_chain
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) */
#endif /* LINUX_26_23_COMPAT_H */