Blame view

drivers/pnp/base.h 5.73 KB
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
1
2
3
4
  /*
   * Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
   *	Bjorn Helgaas <bjorn.helgaas@hp.com>
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
  extern spinlock_t pnp_lock;
8a89efd18   Drew Moseley   PNP: create devic...
6
  extern struct device_attribute pnp_interface_attrs[];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
  void *pnp_alloc(long size);
62cfb298b   Bjorn Helgaas   PNP: make interfa...
8
9
10
  
  int pnp_register_protocol(struct pnp_protocol *protocol);
  void pnp_unregister_protocol(struct pnp_protocol *protocol);
25eb84618   Bjorn Helgaas   PNP: add pnp_eisa...
11
12
  #define PNP_EISA_ID_MASK 0x7fffffff
  void pnp_eisa_id_to_string(u32 id, char *str);
620e112cf   Thomas Renninger   ACPI/PNP: A HID v...
13
14
  struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id,
  			      const char *pnpid);
6bf2aab24   Bjorn Helgaas   PNP: add pnp_allo...
15
  struct pnp_card *pnp_alloc_card(struct pnp_protocol *, int id, char *pnpid);
62cfb298b   Bjorn Helgaas   PNP: make interfa...
16
17
  
  int pnp_add_device(struct pnp_dev *dev);
620e112cf   Thomas Renninger   ACPI/PNP: A HID v...
18
  struct pnp_id *pnp_add_id(struct pnp_dev *dev, const char *id);
62cfb298b   Bjorn Helgaas   PNP: make interfa...
19
20
  
  int pnp_add_card(struct pnp_card *card);
62cfb298b   Bjorn Helgaas   PNP: make interfa...
21
22
23
  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);
a1802c429   Bjorn Helgaas   PNP: make resourc...
24
  struct pnp_port {
169aaffe8   Bjorn Helgaas   PNP: increase I/O...
25
26
27
28
  	resource_size_t min;	/* min base number */
  	resource_size_t max;	/* max base number */
  	resource_size_t align;	/* align boundary */
  	resource_size_t size;	/* size of range */
a1802c429   Bjorn Helgaas   PNP: make resourc...
29
  	unsigned char flags;	/* port flags */
a1802c429   Bjorn Helgaas   PNP: make resourc...
30
31
32
  };
  
  #define PNP_IRQ_NR 256
7aefff518   Bjorn Helgaas   PNP: introduce pn...
33
  typedef struct { DECLARE_BITMAP(bits, PNP_IRQ_NR); } pnp_irq_mask_t;
a1802c429   Bjorn Helgaas   PNP: make resourc...
34
  struct pnp_irq {
7aefff518   Bjorn Helgaas   PNP: introduce pn...
35
  	pnp_irq_mask_t map;	/* bitmap for IRQ lines */
a1802c429   Bjorn Helgaas   PNP: make resourc...
36
  	unsigned char flags;	/* IRQ flags */
a1802c429   Bjorn Helgaas   PNP: make resourc...
37
38
39
40
41
  };
  
  struct pnp_dma {
  	unsigned char map;	/* bitmask for DMA channels */
  	unsigned char flags;	/* DMA flags */
a1802c429   Bjorn Helgaas   PNP: make resourc...
42
43
44
  };
  
  struct pnp_mem {
169aaffe8   Bjorn Helgaas   PNP: increase I/O...
45
46
47
48
  	resource_size_t min;	/* min base number */
  	resource_size_t max;	/* max base number */
  	resource_size_t align;	/* align boundary */
  	resource_size_t size;	/* size of range */
a1802c429   Bjorn Helgaas   PNP: make resourc...
49
  	unsigned char flags;	/* memory flags */
a1802c429   Bjorn Helgaas   PNP: make resourc...
50
  };
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
51
52
53
54
55
  #define PNP_OPTION_DEPENDENT		0x80000000
  #define PNP_OPTION_SET_MASK		0xffff
  #define PNP_OPTION_SET_SHIFT		12
  #define PNP_OPTION_PRIORITY_MASK	0xfff
  #define PNP_OPTION_PRIORITY_SHIFT	0
a1802c429   Bjorn Helgaas   PNP: make resourc...
56
57
58
  #define PNP_RES_PRIORITY_PREFERRED	0
  #define PNP_RES_PRIORITY_ACCEPTABLE	1
  #define PNP_RES_PRIORITY_FUNCTIONAL	2
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
59
  #define PNP_RES_PRIORITY_INVALID	PNP_OPTION_PRIORITY_MASK
a1802c429   Bjorn Helgaas   PNP: make resourc...
60
61
  
  struct pnp_option {
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
62
63
64
65
66
67
68
69
70
71
  	struct list_head list;
  	unsigned int flags;	/* independent/dependent, set, priority */
  
  	unsigned long type;	/* IORESOURCE_{IO,MEM,IRQ,DMA} */
  	union {
  		struct pnp_port port;
  		struct pnp_irq irq;
  		struct pnp_dma dma;
  		struct pnp_mem mem;
  	} u;
a1802c429   Bjorn Helgaas   PNP: make resourc...
72
  };
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
73
  int pnp_register_irq_resource(struct pnp_dev *dev, unsigned int option_flags,
c227536b4   Bjorn Helgaas   PNP: centralize r...
74
  			      pnp_irq_mask_t *map, unsigned char flags);
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
75
  int pnp_register_dma_resource(struct pnp_dev *dev, unsigned int option_flags,
c227536b4   Bjorn Helgaas   PNP: centralize r...
76
  			      unsigned char map, unsigned char flags);
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
77
  int pnp_register_port_resource(struct pnp_dev *dev, unsigned int option_flags,
c227536b4   Bjorn Helgaas   PNP: centralize r...
78
79
80
  			       resource_size_t min, resource_size_t max,
  			       resource_size_t align, resource_size_t size,
  			       unsigned char flags);
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
81
  int pnp_register_mem_resource(struct pnp_dev *dev, unsigned int option_flags,
c227536b4   Bjorn Helgaas   PNP: centralize r...
82
83
84
  			      resource_size_t min, resource_size_t max,
  			      resource_size_t align, resource_size_t size,
  			      unsigned char flags);
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  
  static inline int pnp_option_is_dependent(struct pnp_option *option)
  {
  	return option->flags & PNP_OPTION_DEPENDENT ? 1 : 0;
  }
  
  static inline unsigned int pnp_option_set(struct pnp_option *option)
  {
  	return (option->flags >> PNP_OPTION_SET_SHIFT) & PNP_OPTION_SET_MASK;
  }
  
  static inline unsigned int pnp_option_priority(struct pnp_option *option)
  {
  	return (option->flags >> PNP_OPTION_PRIORITY_SHIFT) &
  	    PNP_OPTION_PRIORITY_MASK;
  }
  
  static inline unsigned int pnp_new_dependent_set(struct pnp_dev *dev,
  						 int priority)
  {
  	unsigned int flags;
  
  	if (priority > PNP_RES_PRIORITY_FUNCTIONAL) {
  		dev_warn(&dev->dev, "invalid dependent option priority %d "
  			 "clipped to %d", priority,
  			 PNP_RES_PRIORITY_INVALID);
  		priority = PNP_RES_PRIORITY_INVALID;
  	}
  
  	flags = PNP_OPTION_DEPENDENT |
  	    ((dev->num_dependent_sets & PNP_OPTION_SET_MASK) <<
  		PNP_OPTION_SET_SHIFT) |
  	    ((priority & PNP_OPTION_PRIORITY_MASK) <<
  		PNP_OPTION_PRIORITY_SHIFT);
  
  	dev->num_dependent_sets++;
  
  	return flags;
  }
  
  char *pnp_option_priority_name(struct pnp_option *option);
  void dbg_pnp_show_option(struct pnp_dev *dev, struct pnp_option *option);
62cfb298b   Bjorn Helgaas   PNP: make interfa...
127
  void pnp_init_resources(struct pnp_dev *dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
  void pnp_fixup_device(struct pnp_dev *dev);
1f32ca31e   Bjorn Helgaas   PNP: convert reso...
129
  void pnp_free_options(struct pnp_dev *dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
131
  int __pnp_add_device(struct pnp_dev *dev);
  void __pnp_remove_device(struct pnp_dev *dev);
f5d94ff01   Bjorn Helgaas   PNP: pass resourc...
132
133
134
  int pnp_check_port(struct pnp_dev *dev, struct resource *res);
  int pnp_check_mem(struct pnp_dev *dev, struct resource *res);
  int pnp_check_irq(struct pnp_dev *dev, struct resource *res);
586f83e2b   David Rientjes   pnp: only assign ...
135
  #ifdef CONFIG_ISA_DMA_API
f5d94ff01   Bjorn Helgaas   PNP: pass resourc...
136
  int pnp_check_dma(struct pnp_dev *dev, struct resource *res);
586f83e2b   David Rientjes   pnp: only assign ...
137
  #endif
81b5c75f0   Bjorn Helgaas   PNP: add debug wh...
138

9fdee4e02   Bjorn Helgaas   PNP: add pnp_reso...
139
  char *pnp_resource_type_name(struct resource *res);
81b5c75f0   Bjorn Helgaas   PNP: add debug wh...
140
  void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
d948a8daa   Bjorn Helgaas   PNP: factor pnp_i...
141

aee3ad815   Bjorn Helgaas   PNP: replace pnp_...
142
  void pnp_free_resources(struct pnp_dev *dev);
b563cf59c   Rene Herman   pnp: make the res...
143
  unsigned long pnp_resource_type(struct resource *res);
02d83b5da   Bjorn Helgaas   PNP: make pnp_res...
144

784f01d5b   Bjorn Helgaas   PNP: add struct p...
145
  struct pnp_resource {
aee3ad815   Bjorn Helgaas   PNP: replace pnp_...
146
  	struct list_head list;
784f01d5b   Bjorn Helgaas   PNP: add struct p...
147
148
  	struct resource res;
  };
aee3ad815   Bjorn Helgaas   PNP: replace pnp_...
149
  void pnp_free_resource(struct pnp_resource *pnp_res);
dbddd0383   Bjorn Helgaas   PNP: make generic...
150
151
152
  
  struct pnp_resource *pnp_add_irq_resource(struct pnp_dev *dev, int irq,
  					  int flags);
dc16f5f2e   Bjorn Helgaas   PNP: make generic...
153
154
  struct pnp_resource *pnp_add_dma_resource(struct pnp_dev *dev, int dma,
  					  int flags);
cc8c2e308   Bjorn Helgaas   PNP: make generic...
155
156
157
  struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev,
  					 resource_size_t start,
  					 resource_size_t end, int flags);
d6180f366   Bjorn Helgaas   PNP: make generic...
158
159
160
  struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev,
  					  resource_size_t start,
  					  resource_size_t end, int flags);
7e0e9c042   Bjorn Helgaas   PNPACPI: add bus ...
161
162
163
  struct pnp_resource *pnp_add_bus_resource(struct pnp_dev *dev,
  					  resource_size_t start,
  					  resource_size_t end);
97ef062bb   Bjorn Helgaas   PNP: add CONFIG_P...
164
165
166
167
168
169
170
171
172
173
  
  extern int pnp_debug;
  
  #if defined(CONFIG_PNP_DEBUG_MESSAGES)
  #define pnp_dbg(dev, format, arg...)					\
  	({ if (pnp_debug) dev_printk(KERN_DEBUG, dev, format, ## arg); 0; })
  #else
  #define pnp_dbg(dev, format, arg...)					\
  	({ if (0) dev_printk(KERN_DEBUG, dev, format, ## arg); 0; })
  #endif