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

📄 pci.h

📁 最新rtlinux内核源码
💻 H
字号:
/* * linux/pci.h compatibility header */#ifndef _COMPAT_PCI_H#define _COMPAT_PCI_H#include <linux/version.h>#if LINUX_VERSION_CODE < 0x020155#include <linux/bios32.h>#define PCI_SUPPORT_VER1#else#include_next <linux/pci.h>#define PCI_SUPPORT_VER2#if LINUX_VERSION_CODE < 0x020300 /* XXX */#define pci_for_each_dev(x)	\	for((x)=pci_devices;(x);(x)=(x)->next)static inline int pci_enable_device(struct pci_dev *dev){return 0;}#define pci_disable_device(x)#define PCI_ANY_ID (~0)struct pci_device_id {	unsigned int vendor, device;	unsigned int subvendor, subdevice;	unsigned int class, class_mask;	unsigned long driver_data;};// stuff for allocating pci dma buffers#include <asm/io.h>#include <linux/malloc.h>#include <linux/ioport.h>#define PCI_DMA_FROMDEVICE              0#define PCI_DMA_TODEVICE                0static inline void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,	dma_addr_t *dma_handle){        void *ret;        int gfp = GFP_KERNEL;        if (hwdev == NULL)                gfp |= 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));}#define pci_map_single(cookie, address, size, dir)      virt_to_bus(address)#define pci_unmap_single(cookie, address, size, dir)#define pci_dma_sync_single(cookie, address, size, dir)// for getting base addressesstatic inline unsigned long pci_resource_start(struct pci_dev *dev, unsigned int bar){	if(dev->base_address[bar] & PCI_BASE_ADDRESS_SPACE_IO)		return dev->base_address[bar] & PCI_BASE_ADDRESS_IO_MASK;	return dev->base_address[bar] & PCI_BASE_ADDRESS_MEM_MASK;}static inline unsigned long pci_resource_end(struct pci_dev *dev, unsigned int bar){	return pci_resource_start(dev, bar);}static inline int pci_request_regions(struct pci_dev *dev, char *name){	const int max_num_base_addr = 6;	static const int fake_length = 1;	int i;	int retval = 0;	for(i = 0; i < max_num_base_addr; i++)	{		if(dev->base_address[i])		{			if(dev->base_address[i] & PCI_BASE_ADDRESS_SPACE_IO)				retval = check_region(pci_resource_start(dev, i),					fake_length);			if( retval )				break;		}	}	if(retval) return retval;	for(i = 0; i < max_num_base_addr; i++)	{		if(dev->base_address[i])		{			if(dev->base_address[i] & PCI_BASE_ADDRESS_SPACE_IO)				request_region(pci_resource_start(dev, i),					fake_length, name);		}	}	return 0;}static inline void pci_release_regions(struct pci_dev *dev){	static const int max_num_base_addr = 6;	static const int fake_length = 1;	int i;	for(i = 0; i < max_num_base_addr; i++)	{		if(dev->base_address[i])		{			if(dev->base_address[i] & PCI_BASE_ADDRESS_SPACE_IO)				release_region(pci_resource_start(dev, i),					fake_length);		}	}}static inline struct pci_dev* pci_find_subsys( unsigned int vendor, unsigned int device,	unsigned int ss_vendor, unsigned int ss_device,	const struct pci_dev *from){	rt_printk( "pci_find_subsys() not supported in kernels older than 2.4!\n" );	return NULL;}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,14)static inline void pci_set_master(struct pci_dev *dev){ return; }#endif	// 2.2.14#if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18)static inline unsigned long pci_resource_len (struct pci_dev *dev, int n_base){ return 0; }#endif	// 2.2.18#endif#endif /* _COMPAT_PCI_H */

⌨️ 快捷键说明

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