📄 pnp.h
字号:
void (*quirk_function)(struct pnp_dev *dev); /* fixup function */};/* config parameters */#define PNP_CONFIG_NORMAL 0x0001#define PNP_CONFIG_FORCE 0x0002 /* disables validity checking *//* capabilities */#define PNP_READ 0x0001#define PNP_WRITE 0x0002#define PNP_DISABLE 0x0004#define PNP_CONFIGURABLE 0x0008#define PNP_REMOVABLE 0x0010#define pnp_can_read(dev) (((dev)->protocol) && ((dev)->protocol->get) && \ ((dev)->capabilities & PNP_READ))#define pnp_can_write(dev) (((dev)->protocol) && ((dev)->protocol->set) && \ ((dev)->capabilities & PNP_WRITE))#define pnp_can_disable(dev) (((dev)->protocol) && ((dev)->protocol->disable) && \ ((dev)->capabilities & PNP_DISABLE))#define pnp_can_configure(dev) ((!(dev)->active) && \ ((dev)->capabilities & PNP_CONFIGURABLE))#ifdef CONFIG_ISAPNPextern struct pnp_protocol isapnp_protocol;#define pnp_device_is_isapnp(dev) ((dev)->protocol == (&isapnp_protocol))#else#define pnp_device_is_isapnp(dev) 0#endif#ifdef CONFIG_PNPBIOSextern struct pnp_protocol pnpbios_protocol;#define pnp_device_is_pnpbios(dev) ((dev)->protocol == (&pnpbios_protocol))#else#define pnp_device_is_pnpbios(dev) 0#endif/* status */#define PNP_READY 0x0000#define PNP_ATTACHED 0x0001#define PNP_BUSY 0x0002#define PNP_FAULTY 0x0004/* isapnp specific macros */#define isapnp_card_number(dev) ((dev)->card ? (dev)->card->number : -1)#define isapnp_csn_number(dev) ((dev)->number)/* * Driver Management */struct pnp_id { char id[PNP_ID_LEN]; struct pnp_id * next;};struct pnp_driver { char * name; const struct pnp_device_id *id_table; unsigned int flags; int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); void (*remove) (struct pnp_dev *dev); int (*suspend) (struct pnp_dev *dev, pm_message_t state); int (*resume) (struct pnp_dev *dev); struct device_driver driver;};#define to_pnp_driver(drv) container_of(drv, struct pnp_driver, driver)struct pnp_card_driver { struct list_head global_list; char * name; const struct pnp_card_device_id *id_table; unsigned int flags; int (*probe) (struct pnp_card_link *card, const struct pnp_card_device_id *card_id); void (*remove) (struct pnp_card_link *card); int (*suspend) (struct pnp_card_link *card, pm_message_t state); int (*resume) (struct pnp_card_link *card); struct pnp_driver link;};#define to_pnp_card_driver(drv) container_of(drv, struct pnp_card_driver, link)/* pnp driver flags */#define PNP_DRIVER_RES_DO_NOT_CHANGE 0x0001 /* do not change the state of the device */#define PNP_DRIVER_RES_DISABLE 0x0003 /* ensure the device is disabled *//* * Protocol Management */struct pnp_protocol { struct list_head protocol_list; char * name; /* resource control functions */ int (*get)(struct pnp_dev *dev, struct pnp_resource_table *res); int (*set)(struct pnp_dev *dev, struct pnp_resource_table *res); int (*disable)(struct pnp_dev *dev); /* used by pnp layer only (look but don't touch) */ unsigned char number; /* protocol number*/ struct device dev; /* link to driver model */ struct list_head cards; struct list_head devices;};#define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)#define protocol_for_each_card(protocol,card) \ for((card) = protocol_to_pnp_card((protocol)->cards.next); \ (card) != protocol_to_pnp_card(&(protocol)->cards); \ (card) = protocol_to_pnp_card((card)->protocol_list.next))#define protocol_for_each_dev(protocol,dev) \ for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \ (dev) != protocol_to_pnp_dev(&(protocol)->devices); \ (dev) = protocol_to_pnp_dev((dev)->protocol_list.next))#if defined(CONFIG_PNP)/* device management */int pnp_register_protocol(struct pnp_protocol *protocol);void pnp_unregister_protocol(struct pnp_protocol *protocol);int pnp_add_device(struct pnp_dev *dev);int pnp_device_attach(struct pnp_dev *pnp_dev);void pnp_device_detach(struct pnp_dev *pnp_dev);extern struct list_head pnp_global;/* multidevice card support */int pnp_add_card(struct pnp_card *card);void pnp_remove_card(struct pnp_card *card);int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev);void pnp_remove_card_device(struct pnp_dev *dev);int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card);struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from);void pnp_release_card_device(struct pnp_dev * dev);int pnp_register_card_driver(struct pnp_card_driver * drv);void pnp_unregister_card_driver(struct pnp_card_driver * drv);extern struct list_head pnp_cards;/* resource management */struct pnp_option * pnp_register_independent_option(struct pnp_dev *dev);struct pnp_option * pnp_register_dependent_option(struct pnp_dev *dev, int priority);int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data);int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data);int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data);int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data);void pnp_init_resource_table(struct pnp_resource_table *table);int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode);int pnp_auto_config_dev(struct pnp_dev *dev);int pnp_validate_config(struct pnp_dev *dev);int pnp_start_dev(struct pnp_dev *dev);int pnp_stop_dev(struct pnp_dev *dev);int pnp_activate_dev(struct pnp_dev *dev);int pnp_disable_dev(struct pnp_dev *dev);void pnp_resource_change(struct resource *resource, resource_size_t start, resource_size_t size);/* protocol helpers */int pnp_is_active(struct pnp_dev * dev);int compare_pnp_id(struct pnp_id * pos, const char * id);int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev);int pnp_register_driver(struct pnp_driver *drv);void pnp_unregister_driver(struct pnp_driver *drv);#else/* device management */static inline int pnp_register_protocol(struct pnp_protocol *protocol) { return -ENODEV; }static inline void pnp_unregister_protocol(struct pnp_protocol *protocol) { }static inline int pnp_init_device(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_add_device(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_device_attach(struct pnp_dev *pnp_dev) { return -ENODEV; }static inline void pnp_device_detach(struct pnp_dev *pnp_dev) { ; }/* multidevice card support */static inline int pnp_add_card(struct pnp_card *card) { return -ENODEV; }static inline void pnp_remove_card(struct pnp_card *card) { ; }static inline int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev) { return -ENODEV; }static inline void pnp_remove_card_device(struct pnp_dev *dev) { ; }static inline int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card) { return -ENODEV; }static inline struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from) { return NULL; }static inline void pnp_release_card_device(struct pnp_dev * dev) { ; }static inline int pnp_register_card_driver(struct pnp_card_driver * drv) { return -ENODEV; }static inline void pnp_unregister_card_driver(struct pnp_card_driver * drv) { ; }/* resource management */static inline struct pnp_option * pnp_register_independent_option(struct pnp_dev *dev) { return NULL; }static inline struct pnp_option * pnp_register_dependent_option(struct pnp_dev *dev, int priority) { return NULL; }static inline int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data) { return -ENODEV; }static inline int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; }static inline int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }static inline int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }static inline void pnp_init_resource_table(struct pnp_resource_table *table) { }static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; }static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }static inline void pnp_resource_change(struct resource *resource, resource_size_t start, resource_size_t size) { }/* protocol helpers */static inline int pnp_is_active(struct pnp_dev * dev) { return 0; }static inline int compare_pnp_id(struct pnp_id * pos, const char * id) { return -ENODEV; }static inline int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev) { return -ENODEV; }static inline int pnp_register_driver(struct pnp_driver *drv) { return -ENODEV; }static inline void pnp_unregister_driver(struct pnp_driver *drv) { ; }#endif /* CONFIG_PNP */#define pnp_err(format, arg...) printk(KERN_ERR "pnp: " format "\n" , ## arg)#define pnp_info(format, arg...) printk(KERN_INFO "pnp: " format "\n" , ## arg)#define pnp_warn(format, arg...) printk(KERN_WARNING "pnp: " format "\n" , ## arg)#ifdef CONFIG_PNP_DEBUG#define pnp_dbg(format, arg...) printk(KERN_DEBUG "pnp: " format "\n" , ## arg)#else#define pnp_dbg(format, arg...) do {} while (0)#endif#endif /* __KERNEL__ */#endif /* _LINUX_PNP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -