?? pci.h
字號:
unsigned char where, unsigned char *val);int pcibios_read_config_word (unsigned char bus, unsigned char dev_fn, unsigned char where, unsigned short *val);int pcibios_read_config_dword (unsigned char bus, unsigned char dev_fn, unsigned char where, unsigned int *val);int pcibios_write_config_byte (unsigned char bus, unsigned char dev_fn, unsigned char where, unsigned char val);int pcibios_write_config_word (unsigned char bus, unsigned char dev_fn, unsigned char where, unsigned short val);int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn, unsigned char where, unsigned int val);int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn);int pcibios_find_device (unsigned short vendor, unsigned short dev_id, unsigned short index, unsigned char *bus, unsigned char *dev_fn);/* Generic PCI functions used internally */void pci_init(void);int pci_bus_exists(const struct list_head *list, int nr);struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);struct pci_bus *pci_alloc_primary_bus(int bus);struct pci_dev *pci_scan_slot(struct pci_dev *temp);int pci_proc_attach_device(struct pci_dev *dev);int pci_proc_detach_device(struct pci_dev *dev);int pci_proc_attach_bus(struct pci_bus *bus);int pci_proc_detach_bus(struct pci_bus *bus);void pci_name_device(struct pci_dev *dev);char *pci_class_name(u32 class);void pci_read_bridge_bases(struct pci_bus *child);struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res);int pci_setup_device(struct pci_dev *dev);int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);/* Generic PCI functions exported to card drivers */struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from);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);struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from);struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn);int pci_find_capability (struct pci_dev *dev, int cap);int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);int pci_write_config_word(struct pci_dev *dev, int where, u16 val);int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);int pci_enable_device(struct pci_dev *dev);void pci_disable_device(struct pci_dev *dev);void pci_set_master(struct pci_dev *dev);int pci_set_dma_mask(struct pci_dev *dev, u64 mask);int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask);int pci_assign_resource(struct pci_dev *dev, int i);/* Power management related routines */int pci_save_state(struct pci_dev *dev, u32 *buffer);int pci_restore_state(struct pci_dev *dev, u32 *buffer);int pci_set_power_state(struct pci_dev *dev, int state);int pci_enable_wake(struct pci_dev *dev, u32 state, int enable);int pci_generic_suspend_save(struct pci_dev *pdev, u32 state);int pci_generic_resume_restore(struct pci_dev *pdev);/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */int pci_claim_resource(struct pci_dev *, int);void pci_assign_unassigned_resources(void);void pdev_enable_device(struct pci_dev *);void pdev_sort_resources(struct pci_dev *, struct resource_list *, u32);unsigned long pci_bridge_check_io(struct pci_dev *);void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), int (*)(struct pci_dev *, u8, u8));#define HAVE_PCI_REQ_REGIONSint pci_request_regions(struct pci_dev *, char *);void pci_release_regions(struct pci_dev *);/* New-style probing supporting hot-pluggable devices */int pci_register_driver(struct pci_driver *);void pci_unregister_driver(struct pci_driver *);void pci_insert_device(struct pci_dev *, struct pci_bus *);void pci_remove_device(struct pci_dev *);struct pci_driver *pci_dev_driver(const struct pci_dev *);const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev);void pci_announce_device_to_drivers(struct pci_dev *);unsigned int pci_do_scan_bus(struct pci_bus *bus);struct pci_bus * pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr);#endif /* CONFIG_PCI *//* kmem_cache style wrapper around pci_alloc_consistent() */struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev, size_t size, size_t align, size_t allocation, int flags);void pci_pool_destroy (struct pci_pool *pool);void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle);void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr);/* Include architecture-dependent settings and functions */#include <asm/pci.h>/* * If the system does not have PCI, clearly these return errors. Define * these as simple inline functions to avoid hair in drivers. */#ifndef CONFIG_PCIstatic inline int pcibios_present(void) { return 0; }static inline int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn) { return PCIBIOS_DEVICE_NOT_FOUND; }#define _PCI_NOP(o,s,t) \ static inline int pcibios_##o##_config_##s (u8 bus, u8 dfn, u8 where, t val) \ { return PCIBIOS_FUNC_NOT_SUPPORTED; } \ static inline int pci_##o##_config_##s (struct pci_dev *dev, int where, t val) \ { return PCIBIOS_FUNC_NOT_SUPPORTED; }#define _PCI_NOP_ALL(o,x) _PCI_NOP(o,byte,u8 x) \ _PCI_NOP(o,word,u16 x) \ _PCI_NOP(o,dword,u32 x)_PCI_NOP_ALL(read, *)_PCI_NOP_ALL(write,)static inline struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from){ return NULL; }static inline struct pci_dev *pci_find_class(unsigned int class, const struct pci_dev *from){ return NULL; }static inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn){ return NULL; }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){ return NULL; }static inline void pci_set_master(struct pci_dev *dev) { }static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }static inline void pci_disable_device(struct pci_dev *dev) { }static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; }static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }static inline int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; }static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;}static inline int pci_register_driver(struct pci_driver *drv) { return 0;}static inline void pci_unregister_driver(struct pci_driver *drv) { }static inline int scsi_to_pci_dma_dir(unsigned char scsi_dir) { return scsi_dir; }static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }/* Power management related routines */static inline int pci_save_state(struct pci_dev *dev, u32 *buffer) { return 0; }static inline int pci_restore_state(struct pci_dev *dev, u32 *buffer) { return 0; }static inline int pci_set_power_state(struct pci_dev *dev, int state) { return 0; }static inline int pci_enable_wake(struct pci_dev *dev, u32 state, int enable) { return 0; }#define pci_for_each_dev(dev) \ for(dev = NULL; 0; )#else/* * a helper function which helps ensure correct pci_driver * setup and cleanup for commonly-encountered hotplug/modular cases * * This MUST stay in a header, as it checks for -DMODULE */static inline int pci_module_init(struct pci_driver *drv){ int rc = pci_register_driver (drv); if (rc > 0) return 0; /* iff CONFIG_HOTPLUG and built into kernel, we should * leave the driver around for future hotplug events. * For the module case, a hotplug daemon of some sort * should load a module in response to an insert event. */#if defined(CONFIG_HOTPLUG) && !defined(MODULE) if (rc == 0) return 0;#else if (rc == 0) rc = -ENODEV; #endif /* if we get here, we need to clean up pci driver instance * and return some sort of error */ pci_unregister_driver (drv); return rc;}#endif /* !CONFIG_PCI *//* these helpers provide future and backwards compatibility * for accessing popular PCI BAR info */#define pci_resource_start(dev,bar) ((dev)->resource[(bar)].start)#define pci_resource_end(dev,bar) ((dev)->resource[(bar)].end)#define pci_resource_flags(dev,bar) ((dev)->resource[(bar)].flags)#define pci_resource_len(dev,bar) \ ((pci_resource_start((dev),(bar)) == 0 && \ pci_resource_end((dev),(bar)) == \ pci_resource_start((dev),(bar))) ? 0 : \ \ (pci_resource_end((dev),(bar)) - \ pci_resource_start((dev),(bar)) + 1))/* Similar to the helpers above, these manipulate per-pci_dev * driver-specific data. Currently stored as pci_dev::driver_data, * a void pointer, but it is not present on older kernels. */static inline void *pci_get_drvdata (struct pci_dev *pdev){ return pdev->driver_data;}static inline void pci_set_drvdata (struct pci_dev *pdev, void *data){ pdev->driver_data = data;}/* * The world is not perfect and supplies us with broken PCI devices. * For at least a part of these bugs we need a work-around, so both * generic (drivers/pci/quirks.c) and per-architecture code can define * fixup hooks to be called for particular buggy devices. */struct pci_fixup { int pass; u16 vendor, device; /* You can use PCI_ANY_ID here of course */ void (*hook)(struct pci_dev *dev);};extern struct pci_fixup pcibios_fixups[];#define PCI_FIXUP_HEADER 1 /* Called immediately after reading configuration header */#define PCI_FIXUP_FINAL 2 /* Final phase of device fixups */void pci_fixup_device(int pass, struct pci_dev *dev);extern int pci_pci_problems;#define PCIPCI_FAIL 1#define PCIPCI_TRITON 2#define PCIPCI_NATOMA 4#define PCIPCI_VIAETBF 8#define PCIPCI_VSFX 16#endif /* __KERNEL__ */#endif /* LINUX_PCI_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -