pcmcia: remove obsolete ioctl
[deliverable/linux.git] / include / pcmcia / ds.h
CommitLineData
1da177e4
LT
1/*
2 * ds.h -- 16-bit PCMCIA core support
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * The initial developer of the original code is David A. Hinds
9 * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
11 *
12 * (C) 1999 David A. Hinds
a5835786 13 * (C) 2003 - 2008 Dominik Brodowski
1da177e4
LT
14 */
15
16#ifndef _LINUX_DS_H
17#define _LINUX_DS_H
18
8e2f3b70
DB
19#ifdef __KERNEL__
20#include <linux/mod_devicetable.h>
21#endif
22
1da177e4 23#include <pcmcia/cs_types.h>
1ad275e3 24#include <pcmcia/device_id.h>
1da177e4 25
1da177e4
LT
26#ifdef __KERNEL__
27#include <linux/device.h>
e2d40963 28#include <pcmcia/ss.h>
04de0816 29#include <asm/atomic.h>
1da177e4 30
a5835786
DB
31/*
32 * PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus
33 * a.k.a. PCI drivers
34 */
1da177e4 35struct pcmcia_socket;
a5835786 36struct pcmcia_device;
dbb22f0d 37struct config_t;
91284224 38struct net_device;
1da177e4 39
a5835786
DB
40/* dynamic device IDs for PCMCIA device drivers. See
41 * Documentation/pcmcia/driver.txt for details.
42*/
6179b556 43struct pcmcia_dynids {
3f565232 44 struct mutex lock;
6179b556
BW
45 struct list_head list;
46};
47
1da177e4 48struct pcmcia_driver {
f8cfa618 49 int (*probe) (struct pcmcia_device *dev);
cc3b4866
DB
50 void (*remove) (struct pcmcia_device *dev);
51
98e4c28b
DB
52 int (*suspend) (struct pcmcia_device *dev);
53 int (*resume) (struct pcmcia_device *dev);
54
1da177e4 55 struct module *owner;
1ad275e3 56 struct pcmcia_device_id *id_table;
1da177e4 57 struct device_driver drv;
6179b556 58 struct pcmcia_dynids dynids;
1da177e4
LT
59};
60
61/* driver registration */
62int pcmcia_register_driver(struct pcmcia_driver *driver);
63void pcmcia_unregister_driver(struct pcmcia_driver *driver);
64
65struct pcmcia_device {
66 /* the socket and the device_no [for multifunction devices]
67 uniquely define a pcmcia_device */
68 struct pcmcia_socket *socket;
69
bd65a685
BG
70 char *devname;
71
1da177e4
LT
72 u8 device_no;
73
74 /* the hardware "function" device; certain subdevices can
75 * share one hardware "function" device. */
76 u8 func;
9fea84f4 77 struct config_t *function_config;
1da177e4
LT
78
79 struct list_head socket_device_list;
80
fd238232 81 /* deprecated, will be cleaned up soon */
fd238232 82 u_int open;
fd238232 83 io_req_t io;
fd238232
DB
84 config_req_t conf;
85 window_handle_t win;
fd238232 86
6f0f38c4 87 /* device setup */
eb14120f 88 unsigned int irq;
6f0f38c4 89
04de0816 90 /* Is the device suspended? */
e2d40963
DB
91 u16 suspended:1;
92
93 /* Flags whether io, irq, win configurations were
94 * requested, and whether the configuration is "locked" */
95 u16 _irq:1;
96 u16 _io:1;
97 u16 _win:4;
98 u16 _locked:1;
1da177e4 99
e2d40963
DB
100 /* Flag whether a "fuzzy" func_id based match is
101 * allowed. */
102 u16 allow_func_id_match:1;
f6fbe01a 103
1da177e4 104 /* information about this device */
e2d40963
DB
105 u16 has_manf_id:1;
106 u16 has_card_id:1;
107 u16 has_func_id:1;
1ad275e3 108
04de0816 109 u16 reserved:4;
1da177e4
LT
110
111 u8 func_id;
112 u16 manf_id;
113 u16 card_id;
114
9fea84f4 115 char *prod_id[4];
1da177e4 116
43d9f7fd 117 u64 dma_mask;
0e0fad8f
DB
118 struct device dev;
119
e2d40963
DB
120 /* data private to drivers */
121 void *priv;
1da177e4
LT
122};
123
124#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
125#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
126
a5835786 127
91284224
DB
128/*
129 * CIS access.
130 *
131 * Please use the following functions to access CIS tuples:
132 * - pcmcia_get_tuple()
133 * - pcmcia_loop_tuple()
134 * - pcmcia_get_mac_from_cis()
135 *
136 * To parse a tuple_t, pcmcia_parse_tuple() exists. Its interface
137 * might change in future.
272433e0 138 */
272433e0 139
91284224
DB
140/* get the very first CIS entry of type @code. Note that buf is pointer
141 * to u8 *buf; and that you need to kfree(buf) afterwards. */
142size_t pcmcia_get_tuple(struct pcmcia_device *p_dev, cisdata_t code,
143 u8 **buf);
272433e0 144
91284224
DB
145/* loop over CIS entries */
146int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code,
147 int (*loop_tuple) (struct pcmcia_device *p_dev,
148 tuple_t *tuple,
149 void *priv_data),
150 void *priv_data);
272433e0 151
91284224
DB
152/* get the MAC address from CISTPL_FUNCE */
153int pcmcia_get_mac_from_cis(struct pcmcia_device *p_dev,
154 struct net_device *dev);
272433e0
DB
155
156
91284224
DB
157/* parse a tuple_t */
158int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse);
159
272433e0
DB
160/* loop CIS entries for valid configuration */
161int pcmcia_loop_config(struct pcmcia_device *p_dev,
162 int (*conf_check) (struct pcmcia_device *p_dev,
163 cistpl_cftable_entry_t *cf,
164 cistpl_cftable_entry_t *dflt,
165 unsigned int vcc,
166 void *priv_data),
167 void *priv_data);
1da177e4 168
994917f8
DB
169/* is the device still there? */
170struct pcmcia_device *pcmcia_dev_present(struct pcmcia_device *p_dev);
171
172/* low-level interface reset */
173int pcmcia_reset_card(struct pcmcia_socket *skt);
174
175/* CIS config */
176int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
177 conf_reg_t *reg);
178
179/* device configuration */
180int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req);
eb14120f 181
b19a7275
DB
182int __must_check
183__pcmcia_request_exclusive_irq(struct pcmcia_device *p_dev,
eb14120f 184 irq_handler_t handler);
b19a7275
DB
185static inline __must_check __deprecated int
186pcmcia_request_exclusive_irq(struct pcmcia_device *p_dev,
187 irq_handler_t handler)
188{
189 return __pcmcia_request_exclusive_irq(p_dev, handler);
190}
191
eb14120f
DB
192int __must_check pcmcia_request_irq(struct pcmcia_device *p_dev,
193 irq_handler_t handler);
194
994917f8
DB
195int pcmcia_request_configuration(struct pcmcia_device *p_dev,
196 config_req_t *req);
197
6838b03f 198int pcmcia_request_window(struct pcmcia_device *p_dev, win_req_t *req,
994917f8 199 window_handle_t *wh);
f5560da5 200int pcmcia_release_window(struct pcmcia_device *p_dev, window_handle_t win);
868575d1
MD
201int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t win,
202 memreq_t *req);
994917f8
DB
203
204int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
205void pcmcia_disable_device(struct pcmcia_device *p_dev);
206
1da177e4 207#endif /* __KERNEL__ */
a5835786 208
1da177e4 209#endif /* _LINUX_DS_H */
This page took 0.489265 seconds and 5 git commands to generate.