📄 pci.h
字号:
};struct pci_raw_ops { int (*read)(unsigned int domain, unsigned int bus, unsigned int devfn, int reg, int len, u32 *val); int (*write)(unsigned int domain, unsigned int bus, unsigned int devfn, int reg, int len, u32 val);};extern struct pci_raw_ops *raw_pci_ops;struct pci_bus_region { unsigned long start; unsigned long end;};struct pci_dynids { spinlock_t lock; /* protects list, index */ struct list_head list; /* for IDs added at runtime */ unsigned int use_driver_data:1; /* pci_driver->driver_data is used */};/* ---------------------------------------------------------------- *//** PCI Error Recovery System (PCI-ERS). If a PCI device driver provides * a set fof callbacks in struct pci_error_handlers, then that device driver * will be notified of PCI bus errors, and will be driven to recovery * when an error occurs. */typedef unsigned int __bitwise pci_ers_result_t;enum pci_ers_result { /* no result/none/not supported in device driver */ PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1, /* Device driver can recover without slot reset */ PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2, /* Device driver wants slot to be reset. */ PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3, /* Device has completely failed, is unrecoverable */ PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4, /* Device driver is fully recovered and operational */ PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,};/* PCI bus error event callbacks */struct pci_error_handlers{ /* PCI bus error detected on this device */ pci_ers_result_t (*error_detected)(struct pci_dev *dev, enum pci_channel_state error); /* MMIO has been re-enabled, but not DMA */ pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev); /* PCI Express link has been reset */ pci_ers_result_t (*link_reset)(struct pci_dev *dev); /* PCI slot has been reset */ pci_ers_result_t (*slot_reset)(struct pci_dev *dev); /* Device driver may resume normal operations */ void (*resume)(struct pci_dev *dev);};/* ---------------------------------------------------------------- */struct module;struct pci_driver { struct list_head node; char *name; const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */ 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) */ int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ int (*suspend_late) (struct pci_dev *dev, pm_message_t state); int (*resume_early) (struct pci_dev *dev); int (*resume) (struct pci_dev *dev); /* Device woken up */ int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable); /* Enable wake event */ void (*shutdown) (struct pci_dev *dev); struct pci_error_handlers *err_handler; struct device_driver driver; struct pci_dynids dynids; int multithread_probe;};#define to_pci_driver(drv) container_of(drv,struct pci_driver, driver)/** * PCI_DEVICE - macro used to describe a specific pci device * @vend: the 16 bit PCI Vendor ID * @dev: the 16 bit PCI Device ID * * This macro is used to create a struct pci_device_id that matches a * specific device. The subvendor and subdevice fields will be set to * PCI_ANY_ID. */#define PCI_DEVICE(vend,dev) \ .vendor = (vend), .device = (dev), \ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID/** * PCI_DEVICE_CLASS - macro used to describe a specific pci device class * @dev_class: the class, subclass, prog-if triple for this device * @dev_class_mask: the class mask for this device * * This macro is used to create a struct pci_device_id that matches a * specific PCI class. The vendor, device, subvendor, and subdevice * fields will be set to PCI_ANY_ID. */#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \ .class = (dev_class), .class_mask = (dev_class_mask), \ .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID/* * pci_module_init is obsolete, this stays here till we fix up all usages of it * in the tree. */#define pci_module_init pci_register_driver/* these external functions are only available when PCI support is enabled */#ifdef CONFIG_PCIextern struct bus_type pci_bus_type;/* Do NOT directly access these two variables, unless you are arch specific pci * code, or pci core code. */extern struct list_head pci_root_buses; /* list of all known PCI buses */extern struct list_head pci_devices; /* list of all devices */void pcibios_fixup_bus(struct pci_bus *);int __must_check pcibios_enable_device(struct pci_dev *, int mask);char *pcibios_setup (char *str);/* Used only when drivers/pci/setup.c is used */void pcibios_align_resource(void *, struct resource *, resource_size_t, resource_size_t);void pcibios_update_irq(struct pci_dev *, int irq);/* Generic PCI functions used internally */extern struct pci_bus *pci_find_bus(int domain, int busnr);void pci_bus_add_devices(struct pci_bus *bus);struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus, struct pci_ops *ops, void *sysdata);static inline struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata){ struct pci_bus *root_bus; root_bus = pci_scan_bus_parented(NULL, bus, ops, sysdata); if (root_bus) pci_bus_add_devices(root_bus); return root_bus;}struct pci_bus *pci_create_bus(struct device *parent, int bus, struct pci_ops *ops, void *sysdata);struct pci_bus * pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr);int pci_scan_slot(struct pci_bus *bus, int devfn);struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn);void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);unsigned int pci_scan_child_bus(struct pci_bus *bus);int __must_check pci_bus_add_device(struct pci_dev *dev);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_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);extern struct pci_dev *pci_dev_get(struct pci_dev *dev);extern void pci_dev_put(struct pci_dev *dev);extern void pci_remove_bus(struct pci_bus *b);extern void pci_remove_bus_device(struct pci_dev *dev);extern void pci_stop_bus_device(struct pci_dev *dev);void pci_setup_cardbus(struct pci_bus *bus);extern void pci_sort_breadthfirst(void);/* 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_device_reverse (unsigned int vendor, unsigned int device, 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_find_next_capability (struct pci_dev *dev, u8 pos, int cap);int pci_find_ext_capability (struct pci_dev *dev, int cap);struct pci_bus *pci_find_next_bus(const struct pci_bus *from);struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from);struct pci_dev *pci_get_device_reverse(unsigned int vendor, unsigned int device, struct pci_dev *from);struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, unsigned int ss_vendor, unsigned int ss_device, struct pci_dev *from);struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn);struct pci_dev *pci_get_bus_and_slot (unsigned int bus, unsigned int devfn);struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from);int pci_dev_present(const struct pci_device_id *ids);int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val);int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val);int pci_bus_read_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 *val);int pci_bus_write_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 val);int pci_bus_write_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 val);int pci_bus_write_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 val);static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val){ return pci_bus_read_config_byte (dev->bus, dev->devfn, where, val);}static inline int pci_read_config_word(struct pci_dev *dev, int where, u16 *val){ return pci_bus_read_config_word (dev->bus, dev->devfn, where, val);}static inline int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val){ return pci_bus_read_config_dword (dev->bus, dev->devfn, where, val);}static inline int pci_write_config_byte(struct pci_dev *dev, int where, u8 val){ return pci_bus_write_config_byte (dev->bus, dev->devfn, where, val);}static inline int pci_write_config_word(struct pci_dev *dev, int where, u16 val){ return pci_bus_write_config_word (dev->bus, dev->devfn, where, val);}static inline int pci_write_config_dword(struct pci_dev *dev, int where, u32 val){ return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val);}int __must_check pci_enable_device(struct pci_dev *dev);int __must_check pci_enable_device_bars(struct pci_dev *dev, int mask);void pci_disable_device(struct pci_dev *dev);void pci_set_master(struct pci_dev *dev);#define HAVE_PCI_SET_MWIint __must_check pci_set_mwi(struct pci_dev *dev);void pci_clear_mwi(struct pci_dev *dev);void pci_intx(struct pci_dev *dev, int enable);int pci_set_dma_mask(struct pci_dev *dev, u64 mask);int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);int __must_check pci_assign_resource(struct pci_dev *dev, int i);int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i);void pci_restore_bars(struct pci_dev *dev);/* ROM control related routines */void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);void __iomem __must_check *pci_map_rom_copy(struct pci_dev *pdev, size_t *size);void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);void pci_remove_rom(struct pci_dev *pdev);/* Power management related routines */int pci_save_state(struct pci_dev *dev);int pci_restore_state(struct pci_dev *dev);int pci_set_power_state(struct pci_dev *dev, pci_power_t state);pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable);/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */void pci_bus_assign_resources(struct pci_bus *bus);void pci_bus_size_bridges(struct pci_bus *bus);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 *);void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), int (*)(struct pci_dev *, u8, u8));#define HAVE_PCI_REQ_REGIONS 2int __must_check pci_request_regions(struct pci_dev *, const char *);void pci_release_regions(struct pci_dev *);int __must_check pci_request_region(struct pci_dev *, int, const char *);void pci_release_region(struct pci_dev *, int);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -