aboutsummaryrefslogtreecommitdiffstats
path: root/include/pcmcia/ds.h
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2008-08-27 18:41:16 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2008-08-29 03:28:47 -0400
commita58357862e71919555ea96cd272e535593a8b3da (patch)
tree6d02488965a9c1c075dc6f015553be067010f29c /include/pcmcia/ds.h
parentc23889ca5afcce60bb01739cd831c3cbcbab2a06 (diff)
pcmcia: cleanup device driver header file
The header file primarily used for (in-kernel) PCMCIA device drivers also deserved a major cleanup. This header file also serves as the dumping ground for all typedefs and definitions only used by the deprecated PCMCIA ioctl and the deprecated PCMCIA userspace tools using this ioctl. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'include/pcmcia/ds.h')
-rw-r--r--include/pcmcia/ds.h327
1 files changed, 200 insertions, 127 deletions
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h
index a98bbf42023a..bdf7d5e474f7 100644
--- a/include/pcmcia/ds.h
+++ b/include/pcmcia/ds.h
@@ -10,7 +10,7 @@
10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
11 * 11 *
12 * (C) 1999 David A. Hinds 12 * (C) 1999 David A. Hinds
13 * (C) 2003 - 2004 Dominik Brodowski 13 * (C) 2003 - 2008 Dominik Brodowski
14 */ 14 */
15 15
16#ifndef _LINUX_DS_H 16#ifndef _LINUX_DS_H
@@ -23,138 +23,21 @@
23#include <pcmcia/cs_types.h> 23#include <pcmcia/cs_types.h>
24#include <pcmcia/device_id.h> 24#include <pcmcia/device_id.h>
25 25
26typedef struct tuple_parse_t {
27 tuple_t tuple;
28 cisdata_t data[255];
29 cisparse_t parse;
30} tuple_parse_t;
31
32typedef struct win_info_t {
33 window_handle_t handle;
34 win_req_t window;
35 memreq_t map;
36} win_info_t;
37
38typedef struct bind_info_t {
39 dev_info_t dev_info;
40 u_char function;
41 struct pcmcia_device *instance;
42 char name[DEV_NAME_LEN];
43 u_short major, minor;
44 void *next;
45} bind_info_t;
46
47typedef struct mtd_info_t {
48 dev_info_t dev_info;
49 u_int Attributes;
50 u_int CardOffset;
51} mtd_info_t;
52
53typedef struct region_info_t {
54 u_int Attributes;
55 u_int CardOffset;
56 u_int RegionSize;
57 u_int AccessSpeed;
58 u_int BlockSize;
59 u_int PartMultiple;
60 u_char JedecMfr, JedecInfo;
61 memory_handle_t next;
62} region_info_t;
63#define REGION_TYPE 0x0001
64#define REGION_TYPE_CM 0x0000
65#define REGION_TYPE_AM 0x0001
66#define REGION_PREFETCH 0x0008
67#define REGION_CACHEABLE 0x0010
68#define REGION_BAR_MASK 0xe000
69#define REGION_BAR_SHIFT 13
70
71/* For ReplaceCIS */
72typedef struct cisdump_t {
73 u_int Length;
74 cisdata_t Data[CISTPL_MAX_CIS_SIZE];
75} cisdump_t;
76
77/* for GetConfigurationInfo */
78typedef struct config_info_t {
79 u_char Function;
80 u_int Attributes;
81 u_int Vcc, Vpp1, Vpp2;
82 u_int IntType;
83 u_int ConfigBase;
84 u_char Status, Pin, Copy, Option, ExtStatus;
85 u_int Present;
86 u_int CardValues;
87 u_int AssignedIRQ;
88 u_int IRQAttributes;
89 ioaddr_t BasePort1;
90 ioaddr_t NumPorts1;
91 u_int Attributes1;
92 ioaddr_t BasePort2;
93 ioaddr_t NumPorts2;
94 u_int Attributes2;
95 u_int IOAddrLines;
96} config_info_t;
97
98typedef union ds_ioctl_arg_t {
99 adjust_t adjust;
100 config_info_t config;
101 tuple_t tuple;
102 tuple_parse_t tuple_parse;
103 client_req_t client_req;
104 cs_status_t status;
105 conf_reg_t conf_reg;
106 cisinfo_t cisinfo;
107 region_info_t region;
108 bind_info_t bind_info;
109 mtd_info_t mtd_info;
110 win_info_t win_info;
111 cisdump_t cisdump;
112} ds_ioctl_arg_t;
113
114#define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t)
115#define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t)
116#define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t)
117#define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t)
118#define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t)
119#define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t)
120#define DS_RESET_CARD _IO ('d', 8)
121#define DS_GET_STATUS _IOWR('d', 9, cs_status_t)
122#define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
123#define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t)
124#define DS_SUSPEND_CARD _IO ('d', 12)
125#define DS_RESUME_CARD _IO ('d', 13)
126#define DS_EJECT_CARD _IO ('d', 14)
127#define DS_INSERT_CARD _IO ('d', 15)
128#define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t)
129#define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t)
130#define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t)
131#define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t)
132#define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t)
133#define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t)
134
135#define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t)
136#define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t)
137#define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t)
138#define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t)
139#define DS_BIND_MTD _IOWR('d', 64, mtd_info_t)
140
141/* used in userspace only */
142#define CS_IN_USE 0x1e
143
144#ifdef __KERNEL__ 26#ifdef __KERNEL__
145#include <linux/device.h> 27#include <linux/device.h>
146#include <pcmcia/ss.h> 28#include <pcmcia/ss.h>
147 29
148typedef struct dev_node_t { 30/*
149 char dev_name[DEV_NAME_LEN]; 31 * PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus
150 u_short major, minor; 32 * a.k.a. PCI drivers
151 struct dev_node_t *next; 33 */
152} dev_node_t;
153
154
155struct pcmcia_socket; 34struct pcmcia_socket;
35struct pcmcia_device;
156struct config_t; 36struct config_t;
157 37
38/* dynamic device IDs for PCMCIA device drivers. See
39 * Documentation/pcmcia/driver.txt for details.
40*/
158struct pcmcia_dynids { 41struct pcmcia_dynids {
159 spinlock_t lock; 42 spinlock_t lock;
160 struct list_head list; 43 struct list_head list;
@@ -177,6 +60,14 @@ struct pcmcia_driver {
177int pcmcia_register_driver(struct pcmcia_driver *driver); 60int pcmcia_register_driver(struct pcmcia_driver *driver);
178void pcmcia_unregister_driver(struct pcmcia_driver *driver); 61void pcmcia_unregister_driver(struct pcmcia_driver *driver);
179 62
63/* Some drivers use dev_node_t to store char or block device information.
64 * Don't use this in new drivers, though.
65 */
66typedef struct dev_node_t {
67 char dev_name[DEV_NAME_LEN];
68 u_short major, minor;
69 struct dev_node_t *next;
70} dev_node_t;
180 71
181struct pcmcia_device { 72struct pcmcia_device {
182 /* the socket and the device_no [for multifunction devices] 73 /* the socket and the device_no [for multifunction devices]
@@ -246,9 +137,14 @@ struct pcmcia_device {
246#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev) 137#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
247#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv) 138#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
248 139
140/* deprecated -- don't use! */
249#define handle_to_dev(handle) (handle->dev) 141#define handle_to_dev(handle) (handle->dev)
250 142
251/* error reporting */ 143
144/* (deprecated) error reporting by PCMCIA devices. Use dev_printk()
145 * or dev_dbg() directly in the driver, without referring to pcmcia_error_func()
146 * and/or pcmcia_error_ret() for those functions will go away soon.
147 */
252 148
253const char *pcmcia_error_func(int func); 149const char *pcmcia_error_func(int func);
254const char *pcmcia_error_ret(int ret); 150const char *pcmcia_error_ret(int ret);
@@ -263,4 +159,181 @@ const char *pcmcia_error_ret(int ret);
263 159
264 160
265#endif /* __KERNEL__ */ 161#endif /* __KERNEL__ */
162
163
164
165/* Below, there are only definitions which are used by
166 * - the PCMCIA ioctl
167 * - deprecated PCMCIA userspace tools only
168 *
169 * here be dragons ... here be dragons ... here be dragons ... here be drag
170 */
171
172#if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__)
173
174/* for AdjustResourceInfo */
175typedef struct adjust_t {
176 u_int Action;
177 u_int Resource;
178 u_int Attributes;
179 union {
180 struct memory {
181 u_long Base;
182 u_long Size;
183 } memory;
184 struct io {
185 ioaddr_t BasePort;
186 ioaddr_t NumPorts;
187 u_int IOAddrLines;
188 } io;
189 struct irq {
190 u_int IRQ;
191 } irq;
192 } resource;
193} adjust_t;
194
195/* Action field */
196#define REMOVE_MANAGED_RESOURCE 1
197#define ADD_MANAGED_RESOURCE 2
198#define GET_FIRST_MANAGED_RESOURCE 3
199#define GET_NEXT_MANAGED_RESOURCE 4
200/* Resource field */
201#define RES_MEMORY_RANGE 1
202#define RES_IO_RANGE 2
203#define RES_IRQ 3
204/* Attribute field */
205#define RES_IRQ_TYPE 0x03
206#define RES_IRQ_TYPE_EXCLUSIVE 0
207#define RES_IRQ_TYPE_TIME 1
208#define RES_IRQ_TYPE_DYNAMIC 2
209#define RES_IRQ_CSC 0x04
210#define RES_SHARED 0x08
211#define RES_RESERVED 0x10
212#define RES_ALLOCATED 0x20
213#define RES_REMOVED 0x40
214
215
216typedef struct tuple_parse_t {
217 tuple_t tuple;
218 cisdata_t data[255];
219 cisparse_t parse;
220} tuple_parse_t;
221
222typedef struct win_info_t {
223 window_handle_t handle;
224 win_req_t window;
225 memreq_t map;
226} win_info_t;
227
228typedef struct bind_info_t {
229 dev_info_t dev_info;
230 u_char function;
231 struct pcmcia_device *instance;
232 char name[DEV_NAME_LEN];
233 u_short major, minor;
234 void *next;
235} bind_info_t;
236
237typedef struct mtd_info_t {
238 dev_info_t dev_info;
239 u_int Attributes;
240 u_int CardOffset;
241} mtd_info_t;
242
243typedef struct region_info_t {
244 u_int Attributes;
245 u_int CardOffset;
246 u_int RegionSize;
247 u_int AccessSpeed;
248 u_int BlockSize;
249 u_int PartMultiple;
250 u_char JedecMfr, JedecInfo;
251 memory_handle_t next;
252} region_info_t;
253
254#define REGION_TYPE 0x0001
255#define REGION_TYPE_CM 0x0000
256#define REGION_TYPE_AM 0x0001
257#define REGION_PREFETCH 0x0008
258#define REGION_CACHEABLE 0x0010
259#define REGION_BAR_MASK 0xe000
260#define REGION_BAR_SHIFT 13
261
262/* For ReplaceCIS */
263typedef struct cisdump_t {
264 u_int Length;
265 cisdata_t Data[CISTPL_MAX_CIS_SIZE];
266} cisdump_t;
267
268/* for GetConfigurationInfo */
269typedef struct config_info_t {
270 u_char Function;
271 u_int Attributes;
272 u_int Vcc, Vpp1, Vpp2;
273 u_int IntType;
274 u_int ConfigBase;
275 u_char Status, Pin, Copy, Option, ExtStatus;
276 u_int Present;
277 u_int CardValues;
278 u_int AssignedIRQ;
279 u_int IRQAttributes;
280 ioaddr_t BasePort1;
281 ioaddr_t NumPorts1;
282 u_int Attributes1;
283 ioaddr_t BasePort2;
284 ioaddr_t NumPorts2;
285 u_int Attributes2;
286 u_int IOAddrLines;
287} config_info_t;
288
289typedef union ds_ioctl_arg_t {
290 adjust_t adjust;
291 config_info_t config;
292 tuple_t tuple;
293 tuple_parse_t tuple_parse;
294 client_req_t client_req;
295 cs_status_t status;
296 conf_reg_t conf_reg;
297 cisinfo_t cisinfo;
298 region_info_t region;
299 bind_info_t bind_info;
300 mtd_info_t mtd_info;
301 win_info_t win_info;
302 cisdump_t cisdump;
303} ds_ioctl_arg_t;
304
305#define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t)
306#define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t)
307#define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t)
308#define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t)
309#define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t)
310#define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t)
311#define DS_RESET_CARD _IO ('d', 8)
312#define DS_GET_STATUS _IOWR('d', 9, cs_status_t)
313#define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
314#define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t)
315#define DS_SUSPEND_CARD _IO ('d', 12)
316#define DS_RESUME_CARD _IO ('d', 13)
317#define DS_EJECT_CARD _IO ('d', 14)
318#define DS_INSERT_CARD _IO ('d', 15)
319#define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t)
320#define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t)
321#define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t)
322#define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t)
323#define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t)
324#define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t)
325
326#define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t)
327#define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t)
328#define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t)
329#define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t)
330#define DS_BIND_MTD _IOWR('d', 64, mtd_info_t)
331
332
333/* used in userspace only */
334#define CS_IN_USE 0x1e
335
336
337#endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */
338
266#endif /* _LINUX_DS_H */ 339#endif /* _LINUX_DS_H */