diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/ide.h | 2 | ||||
| -rw-r--r-- | include/linux/isapnp.h | 17 | ||||
| -rw-r--r-- | include/linux/pnp.h | 71 |
3 files changed, 53 insertions, 37 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h index 2e2718ebfd98..9aec59722441 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -916,6 +916,8 @@ typedef struct hwif_s { struct pci_dev *pci_dev; /* for pci chipsets */ struct ide_pci_device_s *cds; /* chipset device struct */ + + struct pnp_dev *pnp_dev; /* for PnP devices */ #if 0 ide_hwif_ops_t *hwifops; diff --git a/include/linux/isapnp.h b/include/linux/isapnp.h index 3e03c39fbc40..9582944ab25c 100644 --- a/include/linux/isapnp.h +++ b/include/linux/isapnp.h @@ -122,6 +122,15 @@ static inline isapnp_proc_done(void) { return 0; } /* init/main.c */ int isapnp_init(void); +/* compat */ +struct pnp_card *pnp_find_card(unsigned short vendor, + unsigned short device, + struct pnp_card *from); +struct pnp_dev *pnp_find_dev(struct pnp_card *card, + unsigned short vendor, + unsigned short function, + struct pnp_dev *from); + #else /* !CONFIG_ISAPNP */ /* lowlevel configuration */ @@ -139,6 +148,14 @@ static inline void isapnp_device(unsigned char device) { ; } static inline void isapnp_activate(unsigned char device) { ; } static inline void isapnp_deactivate(unsigned char device) { ; } +static inline struct pnp_card *pnp_find_card(unsigned short vendor, + unsigned short device, + struct pnp_card *from) { return NULL; } +static inline struct pnp_dev *pnp_find_dev(struct pnp_card *card, + unsigned short vendor, + unsigned short function, + struct pnp_dev *from) { return NULL; } + #endif /* CONFIG_ISAPNP */ #endif /* __KERNEL__ */ diff --git a/include/linux/pnp.h b/include/linux/pnp.h index c4b120c8727b..b97e8f64122f 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h @@ -20,7 +20,8 @@ #define DEVICE_COUNT_IRQ 2 #define DEVICE_COUNT_DMA 2 -#define DEVICE_COUNT_RESOURCE 12 +#define DEVICE_COUNT_IO 8 +#define DEVICE_COUNT_MEM 4 #define MAX_DEVICES 8 struct pnp_resource; @@ -30,6 +31,7 @@ struct pnp_cfg; struct pnp_card { char name[80]; + int status; /* status of the card */ unsigned char number; /* card number */ struct list_head global_list; /* node in global list of cards */ struct list_head protocol_list; /* node in protocol's list of cards */ @@ -101,7 +103,8 @@ struct pnp_dev { struct pnp_resources *res; /* possible resource information */ int lock_resources; /* resources are locked */ - struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */ + struct resource io_resource[DEVICE_COUNT_IO]; /* port regions */ + struct resource mem_resource[DEVICE_COUNT_MEM]; /* memory regions + expansion ROMs */ struct resource dma_resource[DEVICE_COUNT_DMA]; struct resource irq_resource[DEVICE_COUNT_IRQ]; @@ -227,10 +230,14 @@ struct pnpc_driver { * Resource Management */ +#define pnp_flags_valid(resrc) (((resrc)->flags & IORESOURCE_UNSET) == 0 && \ + ((resrc)->flags & (IORESOURCE_IO|IORESOURCE_MEM|IORESOURCE_IRQ|IORESOURCE_DMA)) != 0) + /* Use these instead of directly reading pnp_dev to get resource information */ -#define pnp_port_start(dev,bar) ((dev)->resource[(bar)].start) -#define pnp_port_end(dev,bar) ((dev)->resource[(bar)].end) -#define pnp_port_flags(dev,bar) ((dev)->resource[(bar)].flags) +#define pnp_port_start(dev,bar) ((dev)->io_resource[(bar)].start) +#define pnp_port_end(dev,bar) ((dev)->io_resource[(bar)].end) +#define pnp_port_flags(dev,bar) ((dev)->io_resource[(bar)].flags) +#define pnp_port_valid(dev,bar) pnp_flags_valid(&(dev)->io_resource[(bar)]) #define pnp_port_len(dev,bar) \ ((pnp_port_start((dev),(bar)) == 0 && \ pnp_port_end((dev),(bar)) == \ @@ -239,9 +246,10 @@ struct pnpc_driver { (pnp_port_end((dev),(bar)) - \ pnp_port_start((dev),(bar)) + 1)) -#define pnp_mem_start(dev,bar) ((dev)->resource[(bar+8)].start) -#define pnp_mem_end(dev,bar) ((dev)->resource[(bar+8)].end) -#define pnp_mem_flags(dev,bar) ((dev)->resource[(bar+8)].flags) +#define pnp_mem_start(dev,bar) ((dev)->mem_resource[(bar)].start) +#define pnp_mem_end(dev,bar) ((dev)->mem_resource[(bar)].end) +#define pnp_mem_flags(dev,bar) ((dev)->mem_resource[(bar)].flags) +#define pnp_mem_valid(dev,bar) pnp_flags_valid(&(dev)->mem_resource[(bar)]) #define pnp_mem_len(dev,bar) \ ((pnp_mem_start((dev),(bar)) == 0 && \ pnp_mem_end((dev),(bar)) == \ @@ -250,11 +258,13 @@ struct pnpc_driver { (pnp_mem_end((dev),(bar)) - \ pnp_mem_start((dev),(bar)) + 1)) -#define pnp_irq(dev,bar) ((dev)->irq_resource[(bar)].start) -#define pnp_irq_flags(dev,bar) ((dev)->irq_resource[(bar)].flags) +#define pnp_irq(dev,bar) ((dev)->irq_resource[(bar)].start) +#define pnp_irq_flags(dev,bar) ((dev)->irq_resource[(bar)].flags) +#define pnp_irq_valid(dev,bar) pnp_flags_valid(&(dev)->irq_resource[(bar)]) -#define pnp_dma(dev,bar) ((dev)->dma_resource[(bar)].start) -#define pnp_dma_flags(dev,bar) ((dev)->dma_resource[(bar)].flags) +#define pnp_dma(dev,bar) ((dev)->dma_resource[(bar)].start) +#define pnp_dma_flags(dev,bar) ((dev)->dma_resource[(bar)].flags) +#define pnp_dma_valid(dev,bar) pnp_flags_valid(&(dev)->dma_resource[(bar)]) #define PNP_PORT_FLAG_16BITADDR (1<<0) #define PNP_PORT_FLAG_FIXED (1<<1) @@ -320,7 +330,8 @@ struct pnp_resources { }; struct pnp_res_cfg { - struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */ + struct resource io_resource[DEVICE_COUNT_IO]; /* I/O ports */ + struct resource mem_resource[DEVICE_COUNT_MEM]; /* memory regions + expansion ROMs */ struct resource dma_resource[DEVICE_COUNT_DMA]; struct resource irq_resource[DEVICE_COUNT_IRQ]; }; @@ -394,6 +405,8 @@ 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); +int pnp_device_attach(struct pnp_dev *pnp_dev); +void pnp_device_detach(struct pnp_dev *pnp_dev); #else @@ -415,11 +428,15 @@ static inline int pnp_init_res_cfg(struct pnp_res_cfg *template) { return -ENODE static inline int pnp_activate_dev(struct pnp_dev *dev, struct pnp_res_cfg *template) { return -ENODEV; } static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } static inline int pnp_raw_set_dev(struct pnp_dev *dev, int depnum, struct pnp_res_cfg *template) { return -ENODEV; } +static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { ; } static inline int compare_pnp_id(struct list_head * id_list, 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) { ; } +static inline int pnp_device_attach(struct pnp_dev *pnp_dev) { return -ENODEV; } +static inline void pnp_device_detach(struct pnp_dev *pnp_dev) { ; } + #endif /* CONFIG_PNP */ @@ -436,6 +453,8 @@ int pnpc_register_driver(struct pnpc_driver * drv); void pnpc_unregister_driver(struct pnpc_driver *drv); int pnpc_add_id(struct pnp_id *id, struct pnp_card *card); extern struct list_head pnp_cards; +int pnpc_attach(struct pnp_card *card); +void pnpc_detach(struct pnp_card *card); #else @@ -448,34 +467,12 @@ static inline void pnp_release_card_device(struct pnp_dev *dev) { ; } static inline int pnpc_register_driver(struct pnpc_driver *drv) { return -ENODEV; } static inline void pnpc_unregister_driver(struct pnpc_driver *drv) { ; } static inline int pnpc_add_id(struct pnp_id *id, struct pnp_card *card) { return -ENODEV; } +static inline int pnpc_attach(struct pnp_card *card) { return -ENODEV; } +static inline void pnpc_detach(struct pnp_card *card) { ; } #endif /* CONFIG_PNP_CARD */ -#if defined(CONFIG_ISAPNP) - -/* compat */ -struct pnp_card *pnp_find_card(unsigned short vendor, - unsigned short device, - struct pnp_card *from); -struct pnp_dev *pnp_find_dev(struct pnp_card *card, - unsigned short vendor, - unsigned short function, - struct pnp_dev *from); - -#else - -static inline struct pnp_card *pnp_find_card(unsigned short vendor, - unsigned short device, - struct pnp_card *from) { return NULL; } -static inline struct pnp_dev *pnp_find_dev(struct pnp_card *card, - unsigned short vendor, - unsigned short function, - struct pnp_dev *from) { return NULL; } - -#endif /* CONFIG_ISAPNP */ - - #ifdef DEBUG #define pnp_dbg(format, arg...) printk(KERN_DEBUG "pnp: " format "\n" , ## arg) #else |
