📄 ieee80211_linux.h
字号:
};#define M_FLAG_SET(_skb, _flag) \ (((struct ieee80211_cb *)(_skb)->cb)->flags |= (_flag))#define M_FLAG_CLR(_skb, _flag) \ (((struct ieee80211_cb *)(_skb)->cb)->flags &= ~(_flag))#define M_FLAG_GET(_skb, _flag) \ (((struct ieee80211_cb *)(_skb)->cb)->flags & (_flag))#define M_FLAG_KEEP_ONLY(_skb, _flag) \ (((struct ieee80211_cb *)(_skb)->cb)->flags &= (_flag))#define M_PWR_SAV_SET(skb) M_FLAG_SET((skb), M_PWR_SAV)#define M_PWR_SAV_CLR(skb) M_FLAG_CLR((skb), M_PWR_SAV)#define M_PWR_SAV_GET(skb) M_FLAG_GET((skb), M_PWR_SAV)/* * Skbufs on the power save queue are tagged with an age and * timed out. We reuse the hardware checksum field in the * mbuf packet header to store this data. * XXX use private cb area */#define M_AGE_SET(skb,v) (skb->csum = v)#define M_AGE_GET(skb) (skb->csum)#define M_AGE_SUB(skb,adj) (skb->csum -= adj)struct ieee80211com;struct ieee80211vap;int ieee80211_load_module(const char *);/* * Node reference counting definitions. * * ieee80211_node_initref initialize the reference count to 1 * ieee80211_node_incref add a reference * ieee80211_node_decref remove a reference * ieee80211_node_dectestref remove a reference and return 1 if this * is the last reference, otherwise 0 * ieee80211_node_refcnt reference count for printing (only) */#define ieee80211_node_initref(_ni) atomic_set(&(_ni)->ni_refcnt, 1)#define ieee80211_node_incref(_ni) atomic_inc(&(_ni)->ni_refcnt)#define ieee80211_node_decref(_ni) atomic_dec(&(_ni)->ni_refcnt)#define ieee80211_node_dectestref(_ni) atomic_dec_and_test(&(_ni)->ni_refcnt)#define ieee80211_node_refcnt(_ni) (_ni)->ni_refcnt.counter#define le16toh(_x) le16_to_cpu(_x)#define htole16(_x) cpu_to_le16(_x)#define le32toh(_x) le32_to_cpu(_x)#define htole32(_x) cpu_to_le32(_x)#define be32toh(_x) be32_to_cpu(_x)#define htobe32(_x) cpu_to_be32(_x)/* * Linux has no equivalents to malloc types so null these out. */#define MALLOC_DEFINE(type, shortdesc, longdesc)#define MALLOC_DECLARE(type)/* * flags to malloc. */#define M_NOWAIT 0x0001 /* do not block */#define M_WAITOK 0x0002 /* ok to block */#define M_ZERO 0x0100 /* bzero the allocation */static __inline void *ieee80211_malloc(size_t size, int flags){ void *p = kmalloc(size, flags & M_NOWAIT ? GFP_ATOMIC : GFP_KERNEL); if (p && (flags & M_ZERO)) memset(p, 0, size); return p;}#define MALLOC(_ptr, cast, _size, _type, _flags) \ ((_ptr) = (cast)ieee80211_malloc(_size, _flags))#define FREE(addr, type) kfree((addr))/* * This unlikely to be popular but it dramatically reduces diffs. */#define printf(...) printk(__VA_ARGS__)struct ieee80211com;extern void if_printf(struct net_device *, const char *, ...);extern const char *ether_sprintf(const u_int8_t *);/* * Queue write-arounds and support routines. */extern struct sk_buff *ieee80211_getmgtframe(u_int8_t **frm, u_int pktlen);#define IF_ENQUEUE(_q,_skb) skb_queue_tail(_q,_skb)#define IF_DEQUEUE(_q,_skb) (_skb = skb_dequeue(_q))#define _IF_QLEN(_q) skb_queue_len(_q)#define IF_DRAIN(_q) skb_queue_drain(_q)extern void skb_queue_drain(struct sk_buff_head *q);#ifndef __MOD_INC_USE_COUNT#define _MOD_INC_USE(_m, _err) \ if (!try_module_get(_m)) { \ printk(KERN_WARNING "%s: try_module_get failed\n", \ __func__); \ _err; \ }#define _MOD_DEC_USE(_m) module_put(_m)#else#define _MOD_INC_USE(_m, _err) MOD_INC_USE_COUNT#define _MOD_DEC_USE(_m) MOD_DEC_USE_COUNT#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)static __inline u_int64_tget_jiffies_64(void){ return (u_int64_t) jiffies; /* XXX not right */}#endif/* msecs_to_jiffies appeared in 2.6.7 and 2.4.29 */#include <linux/delay.h>#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) && \ LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7)) || \ LINUX_VERSION_CODE < KERNEL_VERSION(2,4,29)/* The following definitions and inline functions are * copied from the kernel src, include/linux/jiffies.h */#ifndef MSEC_PER_SEC#define MSEC_PER_SEC (1000L)#endif#ifndef MAX_JIFFY_OFFSET#define MAX_JIFFY_OFFSET ((~0UL >> 1)-1)#endifstatic __inline unsigned int jiffies_to_msecs(const unsigned long j){#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ) return (MSEC_PER_SEC / HZ) * j;#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC) return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);#else return (j * MSEC_PER_SEC) / HZ;#endif}static __inline unsigned long msecs_to_jiffies(const unsigned int m){ if (m > jiffies_to_msecs(MAX_JIFFY_OFFSET)) return MAX_JIFFY_OFFSET;#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ) return (m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ);#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC) return m * (HZ / MSEC_PER_SEC);#else return (m * HZ + MSEC_PER_SEC - 1) / MSEC_PER_SEC;#endif}#endif#ifndef CLONE_KERNEL/* * List of flags we want to share for kernel threads, * if only because they are not used by them anyway. */#define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)#endif#ifndef offset_in_page#define offset_in_page(p) ((unsigned long) (p) & ~PAGE_MASK)#endif#ifndef module_put_and_exit#define module_put_and_exit(code) do { \ _MOD_DEC_USE(THIS_MODULE); \ do_exit(code); \} while (0)#endif/* * Linux uses __BIG_ENDIAN and __LITTLE_ENDIAN while BSD uses _foo * and an explicit _BYTE_ORDER. Sorry, BSD got there first--define * things in the BSD way... */#undef _LITTLE_ENDIAN#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */#undef _BIG_ENDIAN#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */#include <asm/byteorder.h>#if defined(__LITTLE_ENDIAN)#define _BYTE_ORDER _LITTLE_ENDIAN#elif defined(__BIG_ENDIAN)#define _BYTE_ORDER _BIG_ENDIAN#else#error "Please fix asm/byteorder.h"#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)#define __user#define __kernel#define __iomem#endif#ifdef CONFIG_SYSCTL/* * Deal with the sysctl handler api changing. */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,8)#define IEEE80211_SYSCTL_DECL(f, ctl, write, filp, buffer, lenp, ppos) \ f(ctl_table *ctl, int write, struct file *filp, \ void __user *buffer, size_t *lenp)#define IEEE80211_SYSCTL_PROC_DOINTVEC(ctl, write, filp, buffer, lenp, ppos) \ proc_dointvec(ctl, write, filp, buffer, lenp)#else#define IEEE80211_SYSCTL_DECL(f, ctl, write, filp, buffer, lenp, ppos) \ f(ctl_table *ctl, int write, struct file *filp, \ void __user *buffer, size_t *lenp, loff_t *ppos)#define IEEE80211_SYSCTL_PROC_DOINTVEC(ctl, write, filp, buffer, lenp, ppos) \ proc_dointvec(ctl, write, filp, buffer, lenp, ppos)#endifvoid ieee80211_sysctl_vattach(struct ieee80211vap *);void ieee80211_sysctl_vdetach(struct ieee80211vap *);int ieee80211_proc_vcreate(struct ieee80211vap *, struct file_operations *, char *);void ieee80211_proc_cleanup(struct ieee80211vap *);#endif /* CONFIG_SYSCTL */#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)#define IEEE80211_VLAN_TAG_USED 1#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,20)#define vlan_hwaccel_receive_skb(skb, grp, tag) vlan_hwaccel_rx(skb, grp, tag)#endif#else#define IEEE80211_VLAN_TAG_USED 0#endifvoid ieee80211_vlan_vattach(struct ieee80211vap *);void ieee80211_vlan_vdetach(struct ieee80211vap *);#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)#define free_netdev(dev) kfree(dev)#endifvoid ieee80211_ioctl_vattach(struct ieee80211vap *);void ieee80211_ioctl_vdetach(struct ieee80211vap *);struct ifreq;int ieee80211_ioctl_create_vap(struct ieee80211com *, struct ifreq *, struct net_device *);int ieee80211_create_vap(struct ieee80211com *, char *, struct net_device *, int, int);#endif /* _NET80211_IEEE80211_LINUX_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -