xref: /openbmc/linux/include/pcmcia/ds.h (revision 91284224da5b15ec6c2b45e10fa5eccd1c92a204)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * ds.h -- 16-bit PCMCIA core support
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * This program is free software; you can redistribute it and/or modify
51da177e4SLinus Torvalds  * it under the terms of the GNU General Public License version 2 as
61da177e4SLinus Torvalds  * published by the Free Software Foundation.
71da177e4SLinus Torvalds  *
81da177e4SLinus Torvalds  * The initial developer of the original code is David A. Hinds
91da177e4SLinus Torvalds  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
101da177e4SLinus Torvalds  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
111da177e4SLinus Torvalds  *
121da177e4SLinus Torvalds  * (C) 1999		David A. Hinds
13a5835786SDominik Brodowski  * (C) 2003 - 2008	Dominik Brodowski
141da177e4SLinus Torvalds  */
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds #ifndef _LINUX_DS_H
171da177e4SLinus Torvalds #define _LINUX_DS_H
181da177e4SLinus Torvalds 
198e2f3b70SDominik Brodowski #ifdef __KERNEL__
208e2f3b70SDominik Brodowski #include <linux/mod_devicetable.h>
218e2f3b70SDominik Brodowski #endif
228e2f3b70SDominik Brodowski 
231da177e4SLinus Torvalds #include <pcmcia/cs_types.h>
241ad275e3SDominik Brodowski #include <pcmcia/device_id.h>
251da177e4SLinus Torvalds 
26a5835786SDominik Brodowski #ifdef __KERNEL__
27a5835786SDominik Brodowski #include <linux/device.h>
28a5835786SDominik Brodowski #include <pcmcia/ss.h>
29a5835786SDominik Brodowski 
30a5835786SDominik Brodowski /*
31a5835786SDominik Brodowski  * PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus
32a5835786SDominik Brodowski  * a.k.a. PCI drivers
33a5835786SDominik Brodowski  */
34a5835786SDominik Brodowski struct pcmcia_socket;
35a5835786SDominik Brodowski struct pcmcia_device;
36a5835786SDominik Brodowski struct config_t;
37*91284224SDominik Brodowski struct net_device;
38a5835786SDominik Brodowski 
39a5835786SDominik Brodowski /* dynamic device IDs for PCMCIA device drivers. See
40a5835786SDominik Brodowski  * Documentation/pcmcia/driver.txt for details.
41a5835786SDominik Brodowski */
42a5835786SDominik Brodowski struct pcmcia_dynids {
43a5835786SDominik Brodowski 	spinlock_t		lock;
44a5835786SDominik Brodowski 	struct list_head	list;
45a5835786SDominik Brodowski };
46a5835786SDominik Brodowski 
47a5835786SDominik Brodowski struct pcmcia_driver {
48a5835786SDominik Brodowski 	int (*probe)		(struct pcmcia_device *dev);
49a5835786SDominik Brodowski 	void (*remove)		(struct pcmcia_device *dev);
50a5835786SDominik Brodowski 
51a5835786SDominik Brodowski 	int (*suspend)		(struct pcmcia_device *dev);
52a5835786SDominik Brodowski 	int (*resume)		(struct pcmcia_device *dev);
53a5835786SDominik Brodowski 
54a5835786SDominik Brodowski 	struct module		*owner;
55a5835786SDominik Brodowski 	struct pcmcia_device_id	*id_table;
56a5835786SDominik Brodowski 	struct device_driver	drv;
57a5835786SDominik Brodowski 	struct pcmcia_dynids	dynids;
58a5835786SDominik Brodowski };
59a5835786SDominik Brodowski 
60a5835786SDominik Brodowski /* driver registration */
61a5835786SDominik Brodowski int pcmcia_register_driver(struct pcmcia_driver *driver);
62a5835786SDominik Brodowski void pcmcia_unregister_driver(struct pcmcia_driver *driver);
63a5835786SDominik Brodowski 
64a5835786SDominik Brodowski /* Some drivers use dev_node_t to store char or block device information.
65a5835786SDominik Brodowski  * Don't use this in new drivers, though.
66a5835786SDominik Brodowski  */
67a5835786SDominik Brodowski typedef struct dev_node_t {
68a5835786SDominik Brodowski 	char			dev_name[DEV_NAME_LEN];
69a5835786SDominik Brodowski 	u_short			major, minor;
70a5835786SDominik Brodowski 	struct dev_node_t	*next;
71a5835786SDominik Brodowski } dev_node_t;
72a5835786SDominik Brodowski 
73a5835786SDominik Brodowski struct pcmcia_device {
74a5835786SDominik Brodowski 	/* the socket and the device_no [for multifunction devices]
75a5835786SDominik Brodowski 	   uniquely define a pcmcia_device */
76a5835786SDominik Brodowski 	struct pcmcia_socket	*socket;
77a5835786SDominik Brodowski 
78a5835786SDominik Brodowski 	char			*devname;
79a5835786SDominik Brodowski 
80a5835786SDominik Brodowski 	u8			device_no;
81a5835786SDominik Brodowski 
82a5835786SDominik Brodowski 	/* the hardware "function" device; certain subdevices can
83a5835786SDominik Brodowski 	 * share one hardware "function" device. */
84a5835786SDominik Brodowski 	u8			func;
85a5835786SDominik Brodowski 	struct config_t*	function_config;
86a5835786SDominik Brodowski 
87a5835786SDominik Brodowski 	struct list_head	socket_device_list;
88a5835786SDominik Brodowski 
89a5835786SDominik Brodowski 	/* deprecated, will be cleaned up soon */
90a5835786SDominik Brodowski 	dev_node_t		*dev_node;
91a5835786SDominik Brodowski 	u_int			open;
92a5835786SDominik Brodowski 	io_req_t		io;
93a5835786SDominik Brodowski 	irq_req_t		irq;
94a5835786SDominik Brodowski 	config_req_t		conf;
95a5835786SDominik Brodowski 	window_handle_t		win;
96a5835786SDominik Brodowski 
97a5835786SDominik Brodowski 	/* Is the device suspended, or in the process of
98a5835786SDominik Brodowski 	 * being removed? */
99a5835786SDominik Brodowski 	u16			suspended:1;
100a5835786SDominik Brodowski 	u16			_removed:1;
101a5835786SDominik Brodowski 
102a5835786SDominik Brodowski 	/* Flags whether io, irq, win configurations were
103a5835786SDominik Brodowski 	 * requested, and whether the configuration is "locked" */
104a5835786SDominik Brodowski 	u16			_irq:1;
105a5835786SDominik Brodowski 	u16			_io:1;
106a5835786SDominik Brodowski 	u16			_win:4;
107a5835786SDominik Brodowski 	u16			_locked:1;
108a5835786SDominik Brodowski 
109a5835786SDominik Brodowski 	/* Flag whether a "fuzzy" func_id based match is
110a5835786SDominik Brodowski 	 * allowed. */
111a5835786SDominik Brodowski 	u16			allow_func_id_match:1;
112a5835786SDominik Brodowski 
113a5835786SDominik Brodowski 	/* information about this device */
114a5835786SDominik Brodowski 	u16			has_manf_id:1;
115a5835786SDominik Brodowski 	u16			has_card_id:1;
116a5835786SDominik Brodowski 	u16			has_func_id:1;
117a5835786SDominik Brodowski 
118a5835786SDominik Brodowski 	u16			reserved:3;
119a5835786SDominik Brodowski 
120a5835786SDominik Brodowski 	u8			func_id;
121a5835786SDominik Brodowski 	u16			manf_id;
122a5835786SDominik Brodowski 	u16			card_id;
123a5835786SDominik Brodowski 
124a5835786SDominik Brodowski 	char *			prod_id[4];
125a5835786SDominik Brodowski 
126a5835786SDominik Brodowski 	u64			dma_mask;
127a5835786SDominik Brodowski 	struct device		dev;
128a5835786SDominik Brodowski 
129a5835786SDominik Brodowski #ifdef CONFIG_PCMCIA_IOCTL
130a5835786SDominik Brodowski 	/* device driver wanted by cardmgr */
131a5835786SDominik Brodowski 	struct pcmcia_driver *	cardmgr;
132a5835786SDominik Brodowski #endif
133a5835786SDominik Brodowski 
134a5835786SDominik Brodowski 	/* data private to drivers */
135a5835786SDominik Brodowski 	void			*priv;
136a5835786SDominik Brodowski };
137a5835786SDominik Brodowski 
138a5835786SDominik Brodowski #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
139a5835786SDominik Brodowski #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
140a5835786SDominik Brodowski 
141a5835786SDominik Brodowski /* deprecated -- don't use! */
142a5835786SDominik Brodowski #define handle_to_dev(handle) (handle->dev)
143a5835786SDominik Brodowski 
144a5835786SDominik Brodowski 
145a5835786SDominik Brodowski /* (deprecated) error reporting by PCMCIA devices. Use dev_printk()
146a5835786SDominik Brodowski  * or dev_dbg() directly in the driver, without referring to pcmcia_error_func()
147a5835786SDominik Brodowski  * and/or pcmcia_error_ret() for those functions will go away soon.
148a5835786SDominik Brodowski  */
149994917f8SDominik Brodowski enum service {
150994917f8SDominik Brodowski     AccessConfigurationRegister, AddSocketServices,
151994917f8SDominik Brodowski     AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
152994917f8SDominik Brodowski     DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
153994917f8SDominik Brodowski     GetClientInfo, GetConfigurationInfo, GetEventMask,
154994917f8SDominik Brodowski     GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
155994917f8SDominik Brodowski     GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
156994917f8SDominik Brodowski     GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
157994917f8SDominik Brodowski     MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
158994917f8SDominik Brodowski     OpenMemory, ParseTuple, ReadMemory, RegisterClient,
159994917f8SDominik Brodowski     RegisterEraseQueue, RegisterMTD, RegisterTimer,
160994917f8SDominik Brodowski     ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
161994917f8SDominik Brodowski     ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
162994917f8SDominik Brodowski     RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
163994917f8SDominik Brodowski     RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
164994917f8SDominik Brodowski     SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
165994917f8SDominik Brodowski     WriteMemory, BindDevice, BindMTD, ReportError,
166994917f8SDominik Brodowski     SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
167994917f8SDominik Brodowski     GetFirstWindow, GetNextWindow, GetMemPage
168994917f8SDominik Brodowski };
169a5835786SDominik Brodowski const char *pcmcia_error_func(int func);
170a5835786SDominik Brodowski const char *pcmcia_error_ret(int ret);
171a5835786SDominik Brodowski 
172a5835786SDominik Brodowski #define cs_error(p_dev, func, ret)			\
173a5835786SDominik Brodowski 	{						\
174a5835786SDominik Brodowski 		dev_printk(KERN_NOTICE, &p_dev->dev,	\
175a5835786SDominik Brodowski 			   "%s : %s\n",			\
176a5835786SDominik Brodowski 			   pcmcia_error_func(func),	\
177a5835786SDominik Brodowski 			   pcmcia_error_ret(ret));	\
178a5835786SDominik Brodowski 	}
179a5835786SDominik Brodowski 
180*91284224SDominik Brodowski 
181*91284224SDominik Brodowski /*
182*91284224SDominik Brodowski  * CIS access.
183*91284224SDominik Brodowski  *
184*91284224SDominik Brodowski  * Please use the following functions to access CIS tuples:
185*91284224SDominik Brodowski  * - pcmcia_get_tuple()
186*91284224SDominik Brodowski  * - pcmcia_loop_tuple()
187*91284224SDominik Brodowski  * - pcmcia_get_mac_from_cis()
188*91284224SDominik Brodowski  *
189*91284224SDominik Brodowski  * To parse a tuple_t, pcmcia_parse_tuple() exists. Its interface
190*91284224SDominik Brodowski  * might change in future.
191272433e0SDominik Brodowski  */
192*91284224SDominik Brodowski 
193*91284224SDominik Brodowski /* get the very first CIS entry of type @code. Note that buf is pointer
194*91284224SDominik Brodowski  * to u8 *buf; and that you need to kfree(buf) afterwards. */
195*91284224SDominik Brodowski size_t pcmcia_get_tuple(struct pcmcia_device *p_dev, cisdata_t code,
196*91284224SDominik Brodowski 			u8 **buf);
197*91284224SDominik Brodowski 
198*91284224SDominik Brodowski /* loop over CIS entries */
199*91284224SDominik Brodowski int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code,
200*91284224SDominik Brodowski 		      int (*loop_tuple) (struct pcmcia_device *p_dev,
201*91284224SDominik Brodowski 					 tuple_t *tuple,
202*91284224SDominik Brodowski 					 void *priv_data),
203*91284224SDominik Brodowski 		      void *priv_data);
204*91284224SDominik Brodowski 
205*91284224SDominik Brodowski /* get the MAC address from CISTPL_FUNCE */
206*91284224SDominik Brodowski int pcmcia_get_mac_from_cis(struct pcmcia_device *p_dev,
207*91284224SDominik Brodowski 			    struct net_device *dev);
208*91284224SDominik Brodowski 
209*91284224SDominik Brodowski 
210*91284224SDominik Brodowski /* parse a tuple_t */
211272433e0SDominik Brodowski int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse);
212272433e0SDominik Brodowski 
213272433e0SDominik Brodowski /* loop CIS entries for valid configuration */
214272433e0SDominik Brodowski int pcmcia_loop_config(struct pcmcia_device *p_dev,
215272433e0SDominik Brodowski 		       int	(*conf_check)	(struct pcmcia_device *p_dev,
216272433e0SDominik Brodowski 						 cistpl_cftable_entry_t *cf,
217272433e0SDominik Brodowski 						 cistpl_cftable_entry_t *dflt,
218272433e0SDominik Brodowski 						 unsigned int vcc,
219272433e0SDominik Brodowski 						 void *priv_data),
220272433e0SDominik Brodowski 		       void *priv_data);
221a5835786SDominik Brodowski 
222994917f8SDominik Brodowski /* is the device still there? */
223994917f8SDominik Brodowski struct pcmcia_device *pcmcia_dev_present(struct pcmcia_device *p_dev);
224994917f8SDominik Brodowski 
225994917f8SDominik Brodowski /* low-level interface reset */
226994917f8SDominik Brodowski int pcmcia_reset_card(struct pcmcia_socket *skt);
227994917f8SDominik Brodowski 
228994917f8SDominik Brodowski /* CIS config */
229994917f8SDominik Brodowski int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
230994917f8SDominik Brodowski 					 conf_reg_t *reg);
231994917f8SDominik Brodowski 
232*91284224SDominik Brodowski /* deprecated -- do not use in drivers. */
233*91284224SDominik Brodowski int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function,
234*91284224SDominik Brodowski 			tuple_t *tuple);
235*91284224SDominik Brodowski #define pcmcia_get_first_tuple(p_dev, tuple) \
236*91284224SDominik Brodowski 	pccard_get_first_tuple(p_dev->socket, p_dev->func, tuple)
237*91284224SDominik Brodowski 
238*91284224SDominik Brodowski int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function,
239*91284224SDominik Brodowski 			tuple_t *tuple);
240*91284224SDominik Brodowski #define pcmcia_get_next_tuple(p_dev, tuple) \
241*91284224SDominik Brodowski 	pccard_get_next_tuple(p_dev->socket, p_dev->func, tuple)
242*91284224SDominik Brodowski 
243*91284224SDominik Brodowski int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple);
244*91284224SDominik Brodowski #define pcmcia_get_tuple_data(p_dev, tuple) \
245*91284224SDominik Brodowski 	pccard_get_tuple_data(p_dev->socket, tuple)
246*91284224SDominik Brodowski 
247994917f8SDominik Brodowski /* device configuration */
248994917f8SDominik Brodowski int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req);
249994917f8SDominik Brodowski int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req);
250994917f8SDominik Brodowski int pcmcia_request_configuration(struct pcmcia_device *p_dev,
251994917f8SDominik Brodowski 				 config_req_t *req);
252994917f8SDominik Brodowski 
253994917f8SDominik Brodowski int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req,
254994917f8SDominik Brodowski 			  window_handle_t *wh);
255994917f8SDominik Brodowski int pcmcia_release_window(window_handle_t win);
256994917f8SDominik Brodowski 
257994917f8SDominik Brodowski int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
258994917f8SDominik Brodowski int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
259994917f8SDominik Brodowski 
260994917f8SDominik Brodowski int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
261994917f8SDominik Brodowski void pcmcia_disable_device(struct pcmcia_device *p_dev);
262994917f8SDominik Brodowski 
263a5835786SDominik Brodowski #endif /* __KERNEL__ */
264a5835786SDominik Brodowski 
265a5835786SDominik Brodowski 
266a5835786SDominik Brodowski 
267a5835786SDominik Brodowski /* Below, there are only definitions which are used by
268a5835786SDominik Brodowski  * - the PCMCIA ioctl
269a5835786SDominik Brodowski  * - deprecated PCMCIA userspace tools only
270a5835786SDominik Brodowski  *
271a5835786SDominik Brodowski  * here be dragons ... here be dragons ... here be dragons ... here be drag
272a5835786SDominik Brodowski  */
273a5835786SDominik Brodowski 
274a5835786SDominik Brodowski #if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__)
275a5835786SDominik Brodowski 
276d39bd564SDominik Brodowski #if defined(__arm__) || defined(__mips__) || defined(__avr32__) || \
277d39bd564SDominik Brodowski 	defined(__bfin__)
278d39bd564SDominik Brodowski /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
279d39bd564SDominik Brodowski typedef u_int   ioaddr_t;
280d39bd564SDominik Brodowski #else
281d39bd564SDominik Brodowski typedef u_short	ioaddr_t;
282d39bd564SDominik Brodowski #endif
283d39bd564SDominik Brodowski 
284a5835786SDominik Brodowski /* for AdjustResourceInfo */
285a5835786SDominik Brodowski typedef struct adjust_t {
286a5835786SDominik Brodowski 	u_int			Action;
287a5835786SDominik Brodowski 	u_int			Resource;
288a5835786SDominik Brodowski 	u_int			Attributes;
289a5835786SDominik Brodowski 	union {
290a5835786SDominik Brodowski 		struct memory {
291a5835786SDominik Brodowski 			u_long		Base;
292a5835786SDominik Brodowski 			u_long		Size;
293a5835786SDominik Brodowski 		} memory;
294a5835786SDominik Brodowski 		struct io {
295a5835786SDominik Brodowski 			ioaddr_t	BasePort;
296a5835786SDominik Brodowski 			ioaddr_t	NumPorts;
297a5835786SDominik Brodowski 			u_int		IOAddrLines;
298a5835786SDominik Brodowski 		} io;
299a5835786SDominik Brodowski 		struct irq {
300a5835786SDominik Brodowski 			u_int		IRQ;
301a5835786SDominik Brodowski 		} irq;
302a5835786SDominik Brodowski 	} resource;
303a5835786SDominik Brodowski } adjust_t;
304a5835786SDominik Brodowski 
305a5835786SDominik Brodowski /* Action field */
306a5835786SDominik Brodowski #define REMOVE_MANAGED_RESOURCE		1
307a5835786SDominik Brodowski #define ADD_MANAGED_RESOURCE		2
308a5835786SDominik Brodowski #define GET_FIRST_MANAGED_RESOURCE	3
309a5835786SDominik Brodowski #define GET_NEXT_MANAGED_RESOURCE	4
310a5835786SDominik Brodowski /* Resource field */
311a5835786SDominik Brodowski #define RES_MEMORY_RANGE		1
312a5835786SDominik Brodowski #define RES_IO_RANGE			2
313a5835786SDominik Brodowski #define RES_IRQ				3
314a5835786SDominik Brodowski /* Attribute field */
315a5835786SDominik Brodowski #define RES_IRQ_TYPE			0x03
316a5835786SDominik Brodowski #define RES_IRQ_TYPE_EXCLUSIVE		0
317a5835786SDominik Brodowski #define RES_IRQ_TYPE_TIME		1
318a5835786SDominik Brodowski #define RES_IRQ_TYPE_DYNAMIC		2
319a5835786SDominik Brodowski #define RES_IRQ_CSC			0x04
320a5835786SDominik Brodowski #define RES_SHARED			0x08
321a5835786SDominik Brodowski #define RES_RESERVED			0x10
322a5835786SDominik Brodowski #define RES_ALLOCATED			0x20
323a5835786SDominik Brodowski #define RES_REMOVED			0x40
324a5835786SDominik Brodowski 
325a5835786SDominik Brodowski 
3261da177e4SLinus Torvalds typedef struct tuple_parse_t {
3271da177e4SLinus Torvalds 	tuple_t			tuple;
3281da177e4SLinus Torvalds 	cisdata_t		data[255];
3291da177e4SLinus Torvalds 	cisparse_t		parse;
3301da177e4SLinus Torvalds } tuple_parse_t;
3311da177e4SLinus Torvalds 
3321da177e4SLinus Torvalds typedef struct win_info_t {
3331da177e4SLinus Torvalds 	window_handle_t		handle;
3341da177e4SLinus Torvalds 	win_req_t		window;
3351da177e4SLinus Torvalds 	memreq_t		map;
3361da177e4SLinus Torvalds } win_info_t;
3371da177e4SLinus Torvalds 
3381da177e4SLinus Torvalds typedef struct bind_info_t {
3391da177e4SLinus Torvalds 	dev_info_t		dev_info;
3401da177e4SLinus Torvalds 	u_char			function;
341fd238232SDominik Brodowski 	struct pcmcia_device	*instance;
3421da177e4SLinus Torvalds 	char			name[DEV_NAME_LEN];
3431da177e4SLinus Torvalds 	u_short			major, minor;
3441da177e4SLinus Torvalds 	void			*next;
3451da177e4SLinus Torvalds } bind_info_t;
3461da177e4SLinus Torvalds 
3471da177e4SLinus Torvalds typedef struct mtd_info_t {
3481da177e4SLinus Torvalds 	dev_info_t     		dev_info;
3491da177e4SLinus Torvalds 	u_int			Attributes;
3501da177e4SLinus Torvalds 	u_int			CardOffset;
3511da177e4SLinus Torvalds } mtd_info_t;
3521da177e4SLinus Torvalds 
353ae49ec92SMagnus Damm typedef struct region_info_t {
354ae49ec92SMagnus Damm 	u_int			Attributes;
355ae49ec92SMagnus Damm 	u_int			CardOffset;
356ae49ec92SMagnus Damm 	u_int			RegionSize;
357ae49ec92SMagnus Damm 	u_int			AccessSpeed;
358ae49ec92SMagnus Damm 	u_int			BlockSize;
359ae49ec92SMagnus Damm 	u_int			PartMultiple;
360ae49ec92SMagnus Damm 	u_char			JedecMfr, JedecInfo;
361ae49ec92SMagnus Damm 	memory_handle_t		next;
362ae49ec92SMagnus Damm } region_info_t;
363a5835786SDominik Brodowski 
364ae49ec92SMagnus Damm #define REGION_TYPE		0x0001
365ae49ec92SMagnus Damm #define REGION_TYPE_CM		0x0000
366ae49ec92SMagnus Damm #define REGION_TYPE_AM		0x0001
367ae49ec92SMagnus Damm #define REGION_PREFETCH		0x0008
368ae49ec92SMagnus Damm #define REGION_CACHEABLE	0x0010
369ae49ec92SMagnus Damm #define REGION_BAR_MASK		0xe000
370ae49ec92SMagnus Damm #define REGION_BAR_SHIFT	13
371ae49ec92SMagnus Damm 
37253efec95SDominik Brodowski /* For ReplaceCIS */
37353efec95SDominik Brodowski typedef struct cisdump_t {
37453efec95SDominik Brodowski 	u_int			Length;
37553efec95SDominik Brodowski 	cisdata_t		Data[CISTPL_MAX_CIS_SIZE];
37653efec95SDominik Brodowski } cisdump_t;
37753efec95SDominik Brodowski 
3781a53088cSDominik Brodowski /* for GetConfigurationInfo */
3791a53088cSDominik Brodowski typedef struct config_info_t {
3801a53088cSDominik Brodowski 	u_char			Function;
3811a53088cSDominik Brodowski 	u_int			Attributes;
3821a53088cSDominik Brodowski 	u_int			Vcc, Vpp1, Vpp2;
3831a53088cSDominik Brodowski 	u_int			IntType;
3841a53088cSDominik Brodowski 	u_int			ConfigBase;
3851a53088cSDominik Brodowski 	u_char			Status, Pin, Copy, Option, ExtStatus;
3861a53088cSDominik Brodowski 	u_int			Present;
3871a53088cSDominik Brodowski 	u_int			CardValues;
3881a53088cSDominik Brodowski 	u_int			AssignedIRQ;
3891a53088cSDominik Brodowski 	u_int			IRQAttributes;
3901a53088cSDominik Brodowski 	ioaddr_t		BasePort1;
3911a53088cSDominik Brodowski 	ioaddr_t		NumPorts1;
3921a53088cSDominik Brodowski 	u_int			Attributes1;
3931a53088cSDominik Brodowski 	ioaddr_t		BasePort2;
3941a53088cSDominik Brodowski 	ioaddr_t		NumPorts2;
3951a53088cSDominik Brodowski 	u_int			Attributes2;
3961a53088cSDominik Brodowski 	u_int			IOAddrLines;
3971a53088cSDominik Brodowski } config_info_t;
3981a53088cSDominik Brodowski 
399a45b3fb1SDominik Brodowski /* For ValidateCIS */
400a45b3fb1SDominik Brodowski typedef struct cisinfo_t {
401a45b3fb1SDominik Brodowski 	u_int			Chains;
402a45b3fb1SDominik Brodowski } cisinfo_t;
403a45b3fb1SDominik Brodowski 
404a45b3fb1SDominik Brodowski typedef struct cs_status_t {
405a45b3fb1SDominik Brodowski 	u_char			Function;
406a45b3fb1SDominik Brodowski 	event_t 		CardState;
407a45b3fb1SDominik Brodowski 	event_t			SocketState;
408a45b3fb1SDominik Brodowski } cs_status_t;
409a45b3fb1SDominik Brodowski 
4101da177e4SLinus Torvalds typedef union ds_ioctl_arg_t {
4111da177e4SLinus Torvalds 	adjust_t		adjust;
4121da177e4SLinus Torvalds 	config_info_t		config;
4131da177e4SLinus Torvalds 	tuple_t			tuple;
4141da177e4SLinus Torvalds 	tuple_parse_t		tuple_parse;
4151da177e4SLinus Torvalds 	client_req_t		client_req;
4161da177e4SLinus Torvalds 	cs_status_t		status;
4171da177e4SLinus Torvalds 	conf_reg_t		conf_reg;
4181da177e4SLinus Torvalds 	cisinfo_t		cisinfo;
4191da177e4SLinus Torvalds 	region_info_t		region;
4201da177e4SLinus Torvalds 	bind_info_t		bind_info;
4211da177e4SLinus Torvalds 	mtd_info_t		mtd_info;
4221da177e4SLinus Torvalds 	win_info_t		win_info;
4231da177e4SLinus Torvalds 	cisdump_t		cisdump;
4241da177e4SLinus Torvalds } ds_ioctl_arg_t;
4251da177e4SLinus Torvalds 
4261da177e4SLinus Torvalds #define DS_ADJUST_RESOURCE_INFO			_IOWR('d',  2, adjust_t)
4271da177e4SLinus Torvalds #define DS_GET_CONFIGURATION_INFO		_IOWR('d',  3, config_info_t)
4281da177e4SLinus Torvalds #define DS_GET_FIRST_TUPLE			_IOWR('d',  4, tuple_t)
4291da177e4SLinus Torvalds #define DS_GET_NEXT_TUPLE			_IOWR('d',  5, tuple_t)
4301da177e4SLinus Torvalds #define DS_GET_TUPLE_DATA			_IOWR('d',  6, tuple_parse_t)
4311da177e4SLinus Torvalds #define DS_PARSE_TUPLE				_IOWR('d',  7, tuple_parse_t)
4321da177e4SLinus Torvalds #define DS_RESET_CARD				_IO  ('d',  8)
4331da177e4SLinus Torvalds #define DS_GET_STATUS				_IOWR('d',  9, cs_status_t)
4341da177e4SLinus Torvalds #define DS_ACCESS_CONFIGURATION_REGISTER	_IOWR('d', 10, conf_reg_t)
4351da177e4SLinus Torvalds #define DS_VALIDATE_CIS				_IOR ('d', 11, cisinfo_t)
4361da177e4SLinus Torvalds #define DS_SUSPEND_CARD				_IO  ('d', 12)
4371da177e4SLinus Torvalds #define DS_RESUME_CARD				_IO  ('d', 13)
4381da177e4SLinus Torvalds #define DS_EJECT_CARD				_IO  ('d', 14)
4391da177e4SLinus Torvalds #define DS_INSERT_CARD				_IO  ('d', 15)
4401da177e4SLinus Torvalds #define DS_GET_FIRST_REGION			_IOWR('d', 16, region_info_t)
4411da177e4SLinus Torvalds #define DS_GET_NEXT_REGION			_IOWR('d', 17, region_info_t)
4421da177e4SLinus Torvalds #define DS_REPLACE_CIS				_IOWR('d', 18, cisdump_t)
4431da177e4SLinus Torvalds #define DS_GET_FIRST_WINDOW			_IOR ('d', 19, win_info_t)
4441da177e4SLinus Torvalds #define DS_GET_NEXT_WINDOW			_IOWR('d', 20, win_info_t)
4451da177e4SLinus Torvalds #define DS_GET_MEM_PAGE				_IOWR('d', 21, win_info_t)
4461da177e4SLinus Torvalds 
4471da177e4SLinus Torvalds #define DS_BIND_REQUEST				_IOWR('d', 60, bind_info_t)
4481da177e4SLinus Torvalds #define DS_GET_DEVICE_INFO			_IOWR('d', 61, bind_info_t)
4491da177e4SLinus Torvalds #define DS_GET_NEXT_DEVICE			_IOWR('d', 62, bind_info_t)
4501da177e4SLinus Torvalds #define DS_UNBIND_REQUEST			_IOW ('d', 63, bind_info_t)
4511da177e4SLinus Torvalds #define DS_BIND_MTD				_IOWR('d', 64, mtd_info_t)
4521da177e4SLinus Torvalds 
453a5835786SDominik Brodowski 
4549c8b7965SDominik Brodowski /* used in userspace only */
4559c8b7965SDominik Brodowski #define CS_IN_USE			0x1e
4569c8b7965SDominik Brodowski 
457994917f8SDominik Brodowski #define INFO_MASTER_CLIENT	0x01
458994917f8SDominik Brodowski #define INFO_IO_CLIENT		0x02
459994917f8SDominik Brodowski #define INFO_MTD_CLIENT		0x04
460994917f8SDominik Brodowski #define INFO_MEM_CLIENT		0x08
461994917f8SDominik Brodowski #define MAX_NUM_CLIENTS		3
462994917f8SDominik Brodowski 
463994917f8SDominik Brodowski #define INFO_CARD_SHARE		0x10
464994917f8SDominik Brodowski #define INFO_CARD_EXCL		0x20
465994917f8SDominik Brodowski 
4661da177e4SLinus Torvalds 
467a5835786SDominik Brodowski #endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */
4681da177e4SLinus Torvalds 
4691da177e4SLinus Torvalds #endif /* _LINUX_DS_H */
470