⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ieee80211_linux.h

📁 Linux下wifi实现
💻 H
📖 第 1 页 / 共 2 页
字号:
};#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 + -