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

📄 linuxver.h

📁 wi-fi sources for asus wl138g v2 pci card
💻 H
字号:
/* * Linux-specific abstractions to gain some independence from linux kernel versions. * Pave over some 2.2 versus 2.4 versus 2.6 kernel differences. * * Copyright 2005-2006, Broadcom Corporation * All Rights Reserved. *  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. * * $Id$ */#ifndef _linuxver_h_#define _linuxver_h_#include <linux/config.h>#include <linux/version.h>#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0))/* __NO_VERSION__ must be defined for all linkables except one in 2.2 */#ifdef __UNDEF_NO_VERSION__#undef __NO_VERSION__#else#define __NO_VERSION__#endif#endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) */#if defined(MODULE) && defined(MODVERSIONS)#include <linux/modversions.h>#endif#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0)#include <linux/moduleparam.h>#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)#define module_param(_name_, _type_, _perm_)	MODULE_PARM(_name_, "i")#define module_param_string(_name_, _string_, _size_, _perm_) \		MODULE_PARM(_string_, "c" __MODULE_STRING(_size_))#endif/* linux/malloc.h is deprecated, use linux/slab.h instead. */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 9))#include <linux/malloc.h>#else#include <linux/slab.h>#endif#include <linux/types.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/string.h>#include <linux/pci.h>#include <linux/interrupt.h>#include <linux/netdevice.h>#include <asm/io.h>#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 41))#include <linux/workqueue.h>#else#include <linux/tqueue.h>#ifndef work_struct#define work_struct tq_struct#endif#ifndef INIT_WORK#define INIT_WORK(_work, _func, _data) INIT_TQUEUE((_work), (_func), (_data))#endif#ifndef schedule_work#define schedule_work(_work) schedule_task((_work))#endif#ifndef flush_scheduled_work#define flush_scheduled_work() flush_scheduled_tasks()#endif#endif	/* LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 41) */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))/* Some distributions have their own 2.6.x compatibility layers */#ifndef IRQ_NONEtypedef void irqreturn_t;#define IRQ_NONE#define IRQ_HANDLED#define IRQ_RETVAL(x)#endif#elsetypedef irqreturn_t(*FN_ISR) (int irq, void *dev_id, struct pt_regs *ptregs);#endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) */#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)#include <pcmcia/version.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cistpl.h>#include <pcmcia/cisreg.h>#include <pcmcia/ds.h>#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 69))/* In 2.5 (as of 2.5.69 at least) there is a cs_error exported which * does this, but it's not in 2.4 so we do our own for now. */static inline voidcs_error(client_handle_t handle, int func, int ret){	error_info_t err = { func, ret };	CardServices(ReportError, handle, &err);}#endif#endif /* CONFIG_PCMCIA */#ifndef __exit#define __exit#endif#ifndef __devexit#define __devexit#endif#ifndef __devinit#define __devinit	__init#endif#ifndef __devinitdata#define __devinitdata#endif#ifndef __devexit_p#define __devexit_p(x)	x#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0))#define pci_get_drvdata(dev)		(dev)->sysdata#define pci_set_drvdata(dev, value)	(dev)->sysdata = (value)/* * New-style (2.4.x) PCI/hot-pluggable PCI/CardBus registration */struct pci_device_id {	unsigned int vendor, device;		/* Vendor and device ID or PCI_ANY_ID */	unsigned int subvendor, subdevice;	/* Subsystem ID's or PCI_ANY_ID */	unsigned int class, class_mask;		/* (class,subclass,prog-if) triplet */	unsigned long driver_data;		/* Data private to the driver */};struct pci_driver {	struct list_head node;	char *name;	const struct pci_device_id *id_table;	/* NULL if wants all devices */	int (*probe)(struct pci_dev *dev,	             const struct pci_device_id *id); /* New device inserted */	void (*remove)(struct pci_dev *dev);	/* Device removed (NULL if not a hot-plug						 * capable driver)						 */	void (*suspend)(struct pci_dev *dev);	/* Device suspended */	void (*resume)(struct pci_dev *dev);	/* Device woken up */};#define MODULE_DEVICE_TABLE(type, name)#define PCI_ANY_ID (~0)/* compatpci.c */#define pci_module_init pci_register_driverextern int pci_register_driver(struct pci_driver *drv);extern void pci_unregister_driver(struct pci_driver *drv);#endif /* PCI registration */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18))#ifdef MODULE#define module_init(x) int init_module(void) { return x(); }#define module_exit(x) void cleanup_module(void) { x(); }#else#define module_init(x)	__initcall(x);#define module_exit(x)	__exitcall(x);#endif#endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 48))#define list_for_each(pos, head) \	for (pos = (head)->next; pos != (head); pos = pos->next)#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 13))#define pci_resource_start(dev, bar)	((dev)->base_address[(bar)])#elif (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 44))#define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 23))#define pci_enable_device(dev) do { } while (0)#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 14))#define net_device device#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 42))/* * DMA mapping * * See linux/Documentation/DMA-mapping.txt */#ifndef PCI_DMA_TODEVICE#define	PCI_DMA_TODEVICE	1#define	PCI_DMA_FROMDEVICE	2#endiftypedef u32 dma_addr_t;/* Pure 2^n version of get_order */static inline int get_order(unsigned long size){	int order;	size = (size-1) >> (PAGE_SHIFT-1);	order = -1;	do {		size >>= 1;		order++;	} while (size);	return order;}static inline void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,                                         dma_addr_t *dma_handle){	void *ret;	int gfp = GFP_ATOMIC | GFP_DMA;	ret = (void *)__get_free_pages(gfp, get_order(size));	if (ret != NULL) {		memset(ret, 0, size);		*dma_handle = virt_to_bus(ret);	}	return ret;}static inline void pci_free_consistent(struct pci_dev *hwdev, size_t size,                                       void *vaddr, dma_addr_t dma_handle){	free_pages((unsigned long)vaddr, get_order(size));}#ifdef ILSIMextern uint pci_map_single(void *dev, void *va, uint size, int direction);extern void pci_unmap_single(void *dev, uint pa, uint size, int direction);#else#define pci_map_single(cookie, address, size, dir)	virt_to_bus(address)#define pci_unmap_single(cookie, address, size, dir)#endif#endif /* DMA mapping */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 43))#define dev_kfree_skb_any(a)		dev_kfree_skb(a)#define netif_down(dev)			do { (dev)->start = 0; } while (0)/* pcmcia-cs provides its own netdevice compatibility layer */#ifndef _COMPAT_NETDEVICE_H/* * SoftNet * * For pre-softnet kernels we need to tell the upper layer not to * re-enter start_xmit() while we are in there. However softnet * guarantees not to enter while we are in there so there is no need * to do the netif_stop_queue() dance unless the transmit queue really * gets stuck. This should also improve performance according to tests * done by Aman Singla. */#define dev_kfree_skb_irq(a)	dev_kfree_skb(a)#define netif_wake_queue(dev) \		do { clear_bit(0, &(dev)->tbusy); mark_bh(NET_BH); } while (0)#define netif_stop_queue(dev)	set_bit(0, &(dev)->tbusy)static inline void netif_start_queue(struct net_device *dev){	dev->tbusy = 0;	dev->interrupt = 0;	dev->start = 1;}#define netif_queue_stopped(dev)	(dev)->tbusy#define netif_running(dev)		(dev)->start#endif /* _COMPAT_NETDEVICE_H */#define netif_device_attach(dev)	netif_start_queue(dev)#define netif_device_detach(dev)	netif_stop_queue(dev)/* 2.4.x renamed bottom halves to tasklets */#define tasklet_struct				tq_structstatic inline void tasklet_schedule(struct tasklet_struct *tasklet){	queue_task(tasklet, &tq_immediate);	mark_bh(IMMEDIATE_BH);}static inline void tasklet_init(struct tasklet_struct *tasklet,                                void (*func)(unsigned long),                                unsigned long data){	tasklet->next = NULL;	tasklet->sync = 0;	tasklet->routine = (void (*)(void *))func;	tasklet->data = (void *)data;}#define tasklet_kill(tasklet)	{ do{} while (0); }/* 2.4.x introduced del_timer_sync() */#define del_timer_sync(timer) del_timer(timer)#else#define netif_down(dev)#endif /* SoftNet */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 3))/* * Emit code to initialise a tq_struct's routine and data pointers */#define PREPARE_TQUEUE(_tq, _routine, _data)			\	do {							\		(_tq)->routine = _routine;			\		(_tq)->data = _data;				\	} while (0)/* * Emit code to initialise all of a tq_struct */#define INIT_TQUEUE(_tq, _routine, _data)			\	do {							\		INIT_LIST_HEAD(&(_tq)->list);			\		(_tq)->sync = 0;				\		PREPARE_TQUEUE((_tq), (_routine), (_data));	\	} while (0)#endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 3) */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 6))/* Power management related routines */static inline intpci_save_state(struct pci_dev *dev, u32 *buffer){	int i;	if (buffer) {		for (i = 0; i < 16; i++)			pci_read_config_dword(dev, i * 4, &buffer[i]);	}	return 0;}static inline intpci_restore_state(struct pci_dev *dev, u32 *buffer){	int i;	if (buffer) {		for (i = 0; i < 16; i++)			pci_write_config_dword(dev, i * 4, buffer[i]);	}	/*	 * otherwise, write the context information we know from bootup.	 * This works around a problem where warm-booting from Windows	 * combined with a D3(hot)->D0 transition causes PCI config	 * header data to be forgotten.	 */	else {		for (i = 0; i < 6; i ++)			pci_write_config_dword(dev,			                       PCI_BASE_ADDRESS_0 + (i * 4),			                       pci_resource_start(dev, i));		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);	}	return 0;}#endif /* PCI power management *//* Old cp0 access macros deprecated in 2.4.19 */#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 19))#define read_c0_count() read_32bit_cp0_register(CP0_COUNT)#endif/* Module refcount handled internally in 2.6.x */#ifndef SET_MODULE_OWNER#define SET_MODULE_OWNER(dev)		do {} while (0)#define OLD_MOD_INC_USE_COUNT		MOD_INC_USE_COUNT#define OLD_MOD_DEC_USE_COUNT		MOD_DEC_USE_COUNT#else#define OLD_MOD_INC_USE_COUNT		do {} while (0)#define OLD_MOD_DEC_USE_COUNT		do {} while (0)#endif#ifndef SET_NETDEV_DEV#define SET_NETDEV_DEV(net, pdev)	do {} while (0)#endif#ifndef HAVE_FREE_NETDEV#define free_netdev(dev)		kfree(dev)#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))/* struct packet_type redefined in 2.6.x */#define af_packet_priv			data#endif#endif /* _linuxver_h_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -