access.c

来自「Linux Kernel 2.6.9 for OMAP1710」· C语言 代码 · 共 63 行

C
63
字号
#include <linux/pci.h>#include <linux/module.h>#include <linux/ioport.h>/* * This interrupt-safe spinlock protects all accesses to PCI * configuration space. */static spinlock_t pci_lock = SPIN_LOCK_UNLOCKED;/* *  Wrappers for all PCI configuration access functions.  They just check *  alignment, do locking and call the low-level functions pointed to *  by pci_dev->ops. */#define PCI_byte_BAD 0#define PCI_word_BAD (pos & 1)#define PCI_dword_BAD (pos & 3)#define PCI_OP_READ(size,type,len) \int pci_bus_read_config_##size \	(struct pci_bus *bus, unsigned int devfn, int pos, type *value)	\{									\	int res;							\	unsigned long flags;						\	u32 data = 0;							\	if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;	\	spin_lock_irqsave(&pci_lock, flags);				\	res = bus->ops->read(bus, devfn, pos, len, &data);		\	*value = (type)data;						\	spin_unlock_irqrestore(&pci_lock, flags);			\	return res;							\}#define PCI_OP_WRITE(size,type,len) \int pci_bus_write_config_##size \	(struct pci_bus *bus, unsigned int devfn, int pos, type value)	\{									\	int res;							\	unsigned long flags;						\	if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;	\	spin_lock_irqsave(&pci_lock, flags);				\	res = bus->ops->write(bus, devfn, pos, len, value);		\	spin_unlock_irqrestore(&pci_lock, flags);			\	return res;							\}PCI_OP_READ(byte, u8, 1)PCI_OP_READ(word, u16, 2)PCI_OP_READ(dword, u32, 4)PCI_OP_WRITE(byte, u8, 1)PCI_OP_WRITE(word, u16, 2)PCI_OP_WRITE(dword, u32, 4)EXPORT_SYMBOL(pci_bus_read_config_byte);EXPORT_SYMBOL(pci_bus_read_config_word);EXPORT_SYMBOL(pci_bus_read_config_dword);EXPORT_SYMBOL(pci_bus_write_config_byte);EXPORT_SYMBOL(pci_bus_write_config_word);EXPORT_SYMBOL(pci_bus_write_config_dword);

⌨️ 快捷键说明

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