1 extern spinlock_t pnp_lock; 2 void *pnp_alloc(long size); 3 4 int pnp_register_protocol(struct pnp_protocol *protocol); 5 void pnp_unregister_protocol(struct pnp_protocol *protocol); 6 7 #define PNP_EISA_ID_MASK 0x7fffffff 8 void pnp_eisa_id_to_string(u32 id, char *str); 9 struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid); 10 struct pnp_card *pnp_alloc_card(struct pnp_protocol *, int id, char *pnpid); 11 12 int pnp_add_device(struct pnp_dev *dev); 13 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id); 14 int pnp_interface_attach_device(struct pnp_dev *dev); 15 16 int pnp_add_card(struct pnp_card *card); 17 struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id); 18 void pnp_remove_card(struct pnp_card *card); 19 int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev); 20 void pnp_remove_card_device(struct pnp_dev *dev); 21 22 struct pnp_port { 23 resource_size_t min; /* min base number */ 24 resource_size_t max; /* max base number */ 25 resource_size_t align; /* align boundary */ 26 resource_size_t size; /* size of range */ 27 unsigned char flags; /* port flags */ 28 unsigned char pad; /* pad */ 29 struct pnp_port *next; /* next port */ 30 }; 31 32 #define PNP_IRQ_NR 256 33 typedef struct { DECLARE_BITMAP(bits, PNP_IRQ_NR); } pnp_irq_mask_t; 34 35 struct pnp_irq { 36 pnp_irq_mask_t map; /* bitmap for IRQ lines */ 37 unsigned char flags; /* IRQ flags */ 38 unsigned char pad; /* pad */ 39 struct pnp_irq *next; /* next IRQ */ 40 }; 41 42 struct pnp_dma { 43 unsigned char map; /* bitmask for DMA channels */ 44 unsigned char flags; /* DMA flags */ 45 struct pnp_dma *next; /* next port */ 46 }; 47 48 struct pnp_mem { 49 resource_size_t min; /* min base number */ 50 resource_size_t max; /* max base number */ 51 resource_size_t align; /* align boundary */ 52 resource_size_t size; /* size of range */ 53 unsigned char flags; /* memory flags */ 54 unsigned char pad; /* pad */ 55 struct pnp_mem *next; /* next memory resource */ 56 }; 57 58 #define PNP_RES_PRIORITY_PREFERRED 0 59 #define PNP_RES_PRIORITY_ACCEPTABLE 1 60 #define PNP_RES_PRIORITY_FUNCTIONAL 2 61 #define PNP_RES_PRIORITY_INVALID 65535 62 63 struct pnp_option { 64 unsigned short priority; /* priority */ 65 struct pnp_port *port; /* first port */ 66 struct pnp_irq *irq; /* first IRQ */ 67 struct pnp_dma *dma; /* first DMA */ 68 struct pnp_mem *mem; /* first memory resource */ 69 struct pnp_option *next; /* used to chain dependent resources */ 70 }; 71 72 struct pnp_option *pnp_build_option(int priority); 73 struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev); 74 struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev, 75 int priority); 76 int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option, 77 pnp_irq_mask_t *map, unsigned char flags); 78 int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option, 79 unsigned char map, unsigned char flags); 80 int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option, 81 resource_size_t min, resource_size_t max, 82 resource_size_t align, resource_size_t size, 83 unsigned char flags); 84 int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option, 85 resource_size_t min, resource_size_t max, 86 resource_size_t align, resource_size_t size, 87 unsigned char flags); 88 void pnp_init_resources(struct pnp_dev *dev); 89 90 void pnp_fixup_device(struct pnp_dev *dev); 91 void pnp_free_option(struct pnp_option *option); 92 int __pnp_add_device(struct pnp_dev *dev); 93 void __pnp_remove_device(struct pnp_dev *dev); 94 95 int pnp_check_port(struct pnp_dev *dev, struct resource *res); 96 int pnp_check_mem(struct pnp_dev *dev, struct resource *res); 97 int pnp_check_irq(struct pnp_dev *dev, struct resource *res); 98 int pnp_check_dma(struct pnp_dev *dev, struct resource *res); 99 100 char *pnp_resource_type_name(struct resource *res); 101 void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc); 102 103 void pnp_free_resources(struct pnp_dev *dev); 104 int pnp_resource_type(struct resource *res); 105 106 struct pnp_resource { 107 struct list_head list; 108 struct resource res; 109 }; 110 111 void pnp_free_resource(struct pnp_resource *pnp_res); 112 113 struct pnp_resource *pnp_add_irq_resource(struct pnp_dev *dev, int irq, 114 int flags); 115 struct pnp_resource *pnp_add_dma_resource(struct pnp_dev *dev, int dma, 116 int flags); 117 struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev, 118 resource_size_t start, 119 resource_size_t end, int flags); 120 struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev, 121 resource_size_t start, 122 resource_size_t end, int flags); 123