xref: /openbmc/linux/include/pcmcia/ds.h (revision 272433e088f843dc4dd5a5ad38dd68b9a93dcebf)
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;
37a5835786SDominik Brodowski 
38a5835786SDominik Brodowski /* dynamic device IDs for PCMCIA device drivers. See
39a5835786SDominik Brodowski  * Documentation/pcmcia/driver.txt for details.
40a5835786SDominik Brodowski */
41a5835786SDominik Brodowski struct pcmcia_dynids {
42a5835786SDominik Brodowski 	spinlock_t		lock;
43a5835786SDominik Brodowski 	struct list_head	list;
44a5835786SDominik Brodowski };
45a5835786SDominik Brodowski 
46a5835786SDominik Brodowski struct pcmcia_driver {
47a5835786SDominik Brodowski 	int (*probe)		(struct pcmcia_device *dev);
48a5835786SDominik Brodowski 	void (*remove)		(struct pcmcia_device *dev);
49a5835786SDominik Brodowski 
50a5835786SDominik Brodowski 	int (*suspend)		(struct pcmcia_device *dev);
51a5835786SDominik Brodowski 	int (*resume)		(struct pcmcia_device *dev);
52a5835786SDominik Brodowski 
53a5835786SDominik Brodowski 	struct module		*owner;
54a5835786SDominik Brodowski 	struct pcmcia_device_id	*id_table;
55a5835786SDominik Brodowski 	struct device_driver	drv;
56a5835786SDominik Brodowski 	struct pcmcia_dynids	dynids;
57a5835786SDominik Brodowski };
58a5835786SDominik Brodowski 
59a5835786SDominik Brodowski /* driver registration */
60a5835786SDominik Brodowski int pcmcia_register_driver(struct pcmcia_driver *driver);
61a5835786SDominik Brodowski void pcmcia_unregister_driver(struct pcmcia_driver *driver);
62a5835786SDominik Brodowski 
63a5835786SDominik Brodowski /* Some drivers use dev_node_t to store char or block device information.
64a5835786SDominik Brodowski  * Don't use this in new drivers, though.
65a5835786SDominik Brodowski  */
66a5835786SDominik Brodowski typedef struct dev_node_t {
67a5835786SDominik Brodowski 	char			dev_name[DEV_NAME_LEN];
68a5835786SDominik Brodowski 	u_short			major, minor;
69a5835786SDominik Brodowski 	struct dev_node_t	*next;
70a5835786SDominik Brodowski } dev_node_t;
71a5835786SDominik Brodowski 
72a5835786SDominik Brodowski struct pcmcia_device {
73a5835786SDominik Brodowski 	/* the socket and the device_no [for multifunction devices]
74a5835786SDominik Brodowski 	   uniquely define a pcmcia_device */
75a5835786SDominik Brodowski 	struct pcmcia_socket	*socket;
76a5835786SDominik Brodowski 
77a5835786SDominik Brodowski 	char			*devname;
78a5835786SDominik Brodowski 
79a5835786SDominik Brodowski 	u8			device_no;
80a5835786SDominik Brodowski 
81a5835786SDominik Brodowski 	/* the hardware "function" device; certain subdevices can
82a5835786SDominik Brodowski 	 * share one hardware "function" device. */
83a5835786SDominik Brodowski 	u8			func;
84a5835786SDominik Brodowski 	struct config_t*	function_config;
85a5835786SDominik Brodowski 
86a5835786SDominik Brodowski 	struct list_head	socket_device_list;
87a5835786SDominik Brodowski 
88a5835786SDominik Brodowski 	/* deprecated, will be cleaned up soon */
89a5835786SDominik Brodowski 	dev_node_t		*dev_node;
90a5835786SDominik Brodowski 	u_int			open;
91a5835786SDominik Brodowski 	io_req_t		io;
92a5835786SDominik Brodowski 	irq_req_t		irq;
93a5835786SDominik Brodowski 	config_req_t		conf;
94a5835786SDominik Brodowski 	window_handle_t		win;
95a5835786SDominik Brodowski 
96a5835786SDominik Brodowski 	/* Is the device suspended, or in the process of
97a5835786SDominik Brodowski 	 * being removed? */
98a5835786SDominik Brodowski 	u16			suspended:1;
99a5835786SDominik Brodowski 	u16			_removed:1;
100a5835786SDominik Brodowski 
101a5835786SDominik Brodowski 	/* Flags whether io, irq, win configurations were
102a5835786SDominik Brodowski 	 * requested, and whether the configuration is "locked" */
103a5835786SDominik Brodowski 	u16			_irq:1;
104a5835786SDominik Brodowski 	u16			_io:1;
105a5835786SDominik Brodowski 	u16			_win:4;
106a5835786SDominik Brodowski 	u16			_locked:1;
107a5835786SDominik Brodowski 
108a5835786SDominik Brodowski 	/* Flag whether a "fuzzy" func_id based match is
109a5835786SDominik Brodowski 	 * allowed. */
110a5835786SDominik Brodowski 	u16			allow_func_id_match:1;
111a5835786SDominik Brodowski 
112a5835786SDominik Brodowski 	/* information about this device */
113a5835786SDominik Brodowski 	u16			has_manf_id:1;
114a5835786SDominik Brodowski 	u16			has_card_id:1;
115a5835786SDominik Brodowski 	u16			has_func_id:1;
116a5835786SDominik Brodowski 
117a5835786SDominik Brodowski 	u16			reserved:3;
118a5835786SDominik Brodowski 
119a5835786SDominik Brodowski 	u8			func_id;
120a5835786SDominik Brodowski 	u16			manf_id;
121a5835786SDominik Brodowski 	u16			card_id;
122a5835786SDominik Brodowski 
123a5835786SDominik Brodowski 	char *			prod_id[4];
124a5835786SDominik Brodowski 
125a5835786SDominik Brodowski 	u64			dma_mask;
126a5835786SDominik Brodowski 	struct device		dev;
127a5835786SDominik Brodowski 
128a5835786SDominik Brodowski #ifdef CONFIG_PCMCIA_IOCTL
129a5835786SDominik Brodowski 	/* device driver wanted by cardmgr */
130a5835786SDominik Brodowski 	struct pcmcia_driver *	cardmgr;
131a5835786SDominik Brodowski #endif
132a5835786SDominik Brodowski 
133a5835786SDominik Brodowski 	/* data private to drivers */
134a5835786SDominik Brodowski 	void			*priv;
135a5835786SDominik Brodowski };
136a5835786SDominik Brodowski 
137a5835786SDominik Brodowski #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
138a5835786SDominik Brodowski #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
139a5835786SDominik Brodowski 
140a5835786SDominik Brodowski /* deprecated -- don't use! */
141a5835786SDominik Brodowski #define handle_to_dev(handle) (handle->dev)
142a5835786SDominik Brodowski 
143a5835786SDominik Brodowski 
144a5835786SDominik Brodowski /* (deprecated) error reporting by PCMCIA devices. Use dev_printk()
145a5835786SDominik Brodowski  * or dev_dbg() directly in the driver, without referring to pcmcia_error_func()
146a5835786SDominik Brodowski  * and/or pcmcia_error_ret() for those functions will go away soon.
147a5835786SDominik Brodowski  */
148994917f8SDominik Brodowski enum service {
149994917f8SDominik Brodowski     AccessConfigurationRegister, AddSocketServices,
150994917f8SDominik Brodowski     AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
151994917f8SDominik Brodowski     DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
152994917f8SDominik Brodowski     GetClientInfo, GetConfigurationInfo, GetEventMask,
153994917f8SDominik Brodowski     GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
154994917f8SDominik Brodowski     GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
155994917f8SDominik Brodowski     GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
156994917f8SDominik Brodowski     MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
157994917f8SDominik Brodowski     OpenMemory, ParseTuple, ReadMemory, RegisterClient,
158994917f8SDominik Brodowski     RegisterEraseQueue, RegisterMTD, RegisterTimer,
159994917f8SDominik Brodowski     ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
160994917f8SDominik Brodowski     ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
161994917f8SDominik Brodowski     RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
162994917f8SDominik Brodowski     RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
163994917f8SDominik Brodowski     SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
164994917f8SDominik Brodowski     WriteMemory, BindDevice, BindMTD, ReportError,
165994917f8SDominik Brodowski     SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
166994917f8SDominik Brodowski     GetFirstWindow, GetNextWindow, GetMemPage
167994917f8SDominik Brodowski };
168a5835786SDominik Brodowski const char *pcmcia_error_func(int func);
169a5835786SDominik Brodowski const char *pcmcia_error_ret(int ret);
170a5835786SDominik Brodowski 
171a5835786SDominik Brodowski #define cs_error(p_dev, func, ret)			\
172a5835786SDominik Brodowski 	{						\
173a5835786SDominik Brodowski 		dev_printk(KERN_NOTICE, &p_dev->dev,	\
174a5835786SDominik Brodowski 			   "%s : %s\n",			\
175a5835786SDominik Brodowski 			   pcmcia_error_func(func),	\
176a5835786SDominik Brodowski 			   pcmcia_error_ret(ret));	\
177a5835786SDominik Brodowski 	}
178a5835786SDominik Brodowski 
179*272433e0SDominik Brodowski /* CIS access.
180*272433e0SDominik Brodowski  * Use the pcmcia_* versions in PCMCIA drivers
181*272433e0SDominik Brodowski  */
182*272433e0SDominik Brodowski int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse);
183*272433e0SDominik Brodowski 
184*272433e0SDominik Brodowski int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function,
185*272433e0SDominik Brodowski 			   tuple_t *tuple);
186*272433e0SDominik Brodowski #define pcmcia_get_first_tuple(p_dev, tuple) \
187*272433e0SDominik Brodowski 		pccard_get_first_tuple(p_dev->socket, p_dev->func, tuple)
188*272433e0SDominik Brodowski 
189*272433e0SDominik Brodowski int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function,
190*272433e0SDominik Brodowski 			  tuple_t *tuple);
191*272433e0SDominik Brodowski #define pcmcia_get_next_tuple(p_dev, tuple) \
192*272433e0SDominik Brodowski 		pccard_get_next_tuple(p_dev->socket, p_dev->func, tuple)
193*272433e0SDominik Brodowski 
194*272433e0SDominik Brodowski int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple);
195*272433e0SDominik Brodowski #define pcmcia_get_tuple_data(p_dev, tuple) \
196*272433e0SDominik Brodowski 		pccard_get_tuple_data(p_dev->socket, tuple)
197*272433e0SDominik Brodowski 
198*272433e0SDominik Brodowski 
199*272433e0SDominik Brodowski /* loop CIS entries for valid configuration */
200*272433e0SDominik Brodowski int pcmcia_loop_config(struct pcmcia_device *p_dev,
201*272433e0SDominik Brodowski 		       int	(*conf_check)	(struct pcmcia_device *p_dev,
202*272433e0SDominik Brodowski 						 cistpl_cftable_entry_t *cf,
203*272433e0SDominik Brodowski 						 cistpl_cftable_entry_t *dflt,
204*272433e0SDominik Brodowski 						 unsigned int vcc,
205*272433e0SDominik Brodowski 						 void *priv_data),
206*272433e0SDominik Brodowski 		       void *priv_data);
207a5835786SDominik Brodowski 
208994917f8SDominik Brodowski /* is the device still there? */
209994917f8SDominik Brodowski struct pcmcia_device *pcmcia_dev_present(struct pcmcia_device *p_dev);
210994917f8SDominik Brodowski 
211994917f8SDominik Brodowski /* low-level interface reset */
212994917f8SDominik Brodowski int pcmcia_reset_card(struct pcmcia_socket *skt);
213994917f8SDominik Brodowski 
214994917f8SDominik Brodowski /* CIS config */
215994917f8SDominik Brodowski int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
216994917f8SDominik Brodowski 					 conf_reg_t *reg);
217994917f8SDominik Brodowski 
218994917f8SDominik Brodowski /* device configuration */
219994917f8SDominik Brodowski int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req);
220994917f8SDominik Brodowski int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req);
221994917f8SDominik Brodowski int pcmcia_request_configuration(struct pcmcia_device *p_dev,
222994917f8SDominik Brodowski 				 config_req_t *req);
223994917f8SDominik Brodowski 
224994917f8SDominik Brodowski int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req,
225994917f8SDominik Brodowski 			  window_handle_t *wh);
226994917f8SDominik Brodowski int pcmcia_release_window(window_handle_t win);
227994917f8SDominik Brodowski 
228994917f8SDominik Brodowski int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
229994917f8SDominik Brodowski int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
230994917f8SDominik Brodowski 
231994917f8SDominik Brodowski int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
232994917f8SDominik Brodowski void pcmcia_disable_device(struct pcmcia_device *p_dev);
233994917f8SDominik Brodowski 
234a5835786SDominik Brodowski #endif /* __KERNEL__ */
235a5835786SDominik Brodowski 
236a5835786SDominik Brodowski 
237a5835786SDominik Brodowski 
238a5835786SDominik Brodowski /* Below, there are only definitions which are used by
239a5835786SDominik Brodowski  * - the PCMCIA ioctl
240a5835786SDominik Brodowski  * - deprecated PCMCIA userspace tools only
241a5835786SDominik Brodowski  *
242a5835786SDominik Brodowski  * here be dragons ... here be dragons ... here be dragons ... here be drag
243a5835786SDominik Brodowski  */
244a5835786SDominik Brodowski 
245a5835786SDominik Brodowski #if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__)
246a5835786SDominik Brodowski 
247d39bd564SDominik Brodowski #if defined(__arm__) || defined(__mips__) || defined(__avr32__) || \
248d39bd564SDominik Brodowski 	defined(__bfin__)
249d39bd564SDominik Brodowski /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
250d39bd564SDominik Brodowski typedef u_int   ioaddr_t;
251d39bd564SDominik Brodowski #else
252d39bd564SDominik Brodowski typedef u_short	ioaddr_t;
253d39bd564SDominik Brodowski #endif
254d39bd564SDominik Brodowski 
255a5835786SDominik Brodowski /* for AdjustResourceInfo */
256a5835786SDominik Brodowski typedef struct adjust_t {
257a5835786SDominik Brodowski 	u_int			Action;
258a5835786SDominik Brodowski 	u_int			Resource;
259a5835786SDominik Brodowski 	u_int			Attributes;
260a5835786SDominik Brodowski 	union {
261a5835786SDominik Brodowski 		struct memory {
262a5835786SDominik Brodowski 			u_long		Base;
263a5835786SDominik Brodowski 			u_long		Size;
264a5835786SDominik Brodowski 		} memory;
265a5835786SDominik Brodowski 		struct io {
266a5835786SDominik Brodowski 			ioaddr_t	BasePort;
267a5835786SDominik Brodowski 			ioaddr_t	NumPorts;
268a5835786SDominik Brodowski 			u_int		IOAddrLines;
269a5835786SDominik Brodowski 		} io;
270a5835786SDominik Brodowski 		struct irq {
271a5835786SDominik Brodowski 			u_int		IRQ;
272a5835786SDominik Brodowski 		} irq;
273a5835786SDominik Brodowski 	} resource;
274a5835786SDominik Brodowski } adjust_t;
275a5835786SDominik Brodowski 
276a5835786SDominik Brodowski /* Action field */
277a5835786SDominik Brodowski #define REMOVE_MANAGED_RESOURCE		1
278a5835786SDominik Brodowski #define ADD_MANAGED_RESOURCE		2
279a5835786SDominik Brodowski #define GET_FIRST_MANAGED_RESOURCE	3
280a5835786SDominik Brodowski #define GET_NEXT_MANAGED_RESOURCE	4
281a5835786SDominik Brodowski /* Resource field */
282a5835786SDominik Brodowski #define RES_MEMORY_RANGE		1
283a5835786SDominik Brodowski #define RES_IO_RANGE			2
284a5835786SDominik Brodowski #define RES_IRQ				3
285a5835786SDominik Brodowski /* Attribute field */
286a5835786SDominik Brodowski #define RES_IRQ_TYPE			0x03
287a5835786SDominik Brodowski #define RES_IRQ_TYPE_EXCLUSIVE		0
288a5835786SDominik Brodowski #define RES_IRQ_TYPE_TIME		1
289a5835786SDominik Brodowski #define RES_IRQ_TYPE_DYNAMIC		2
290a5835786SDominik Brodowski #define RES_IRQ_CSC			0x04
291a5835786SDominik Brodowski #define RES_SHARED			0x08
292a5835786SDominik Brodowski #define RES_RESERVED			0x10
293a5835786SDominik Brodowski #define RES_ALLOCATED			0x20
294a5835786SDominik Brodowski #define RES_REMOVED			0x40
295a5835786SDominik Brodowski 
296a5835786SDominik Brodowski 
2971da177e4SLinus Torvalds typedef struct tuple_parse_t {
2981da177e4SLinus Torvalds 	tuple_t			tuple;
2991da177e4SLinus Torvalds 	cisdata_t		data[255];
3001da177e4SLinus Torvalds 	cisparse_t		parse;
3011da177e4SLinus Torvalds } tuple_parse_t;
3021da177e4SLinus Torvalds 
3031da177e4SLinus Torvalds typedef struct win_info_t {
3041da177e4SLinus Torvalds 	window_handle_t		handle;
3051da177e4SLinus Torvalds 	win_req_t		window;
3061da177e4SLinus Torvalds 	memreq_t		map;
3071da177e4SLinus Torvalds } win_info_t;
3081da177e4SLinus Torvalds 
3091da177e4SLinus Torvalds typedef struct bind_info_t {
3101da177e4SLinus Torvalds 	dev_info_t		dev_info;
3111da177e4SLinus Torvalds 	u_char			function;
312fd238232SDominik Brodowski 	struct pcmcia_device	*instance;
3131da177e4SLinus Torvalds 	char			name[DEV_NAME_LEN];
3141da177e4SLinus Torvalds 	u_short			major, minor;
3151da177e4SLinus Torvalds 	void			*next;
3161da177e4SLinus Torvalds } bind_info_t;
3171da177e4SLinus Torvalds 
3181da177e4SLinus Torvalds typedef struct mtd_info_t {
3191da177e4SLinus Torvalds 	dev_info_t     		dev_info;
3201da177e4SLinus Torvalds 	u_int			Attributes;
3211da177e4SLinus Torvalds 	u_int			CardOffset;
3221da177e4SLinus Torvalds } mtd_info_t;
3231da177e4SLinus Torvalds 
324ae49ec92SMagnus Damm typedef struct region_info_t {
325ae49ec92SMagnus Damm 	u_int			Attributes;
326ae49ec92SMagnus Damm 	u_int			CardOffset;
327ae49ec92SMagnus Damm 	u_int			RegionSize;
328ae49ec92SMagnus Damm 	u_int			AccessSpeed;
329ae49ec92SMagnus Damm 	u_int			BlockSize;
330ae49ec92SMagnus Damm 	u_int			PartMultiple;
331ae49ec92SMagnus Damm 	u_char			JedecMfr, JedecInfo;
332ae49ec92SMagnus Damm 	memory_handle_t		next;
333ae49ec92SMagnus Damm } region_info_t;
334a5835786SDominik Brodowski 
335ae49ec92SMagnus Damm #define REGION_TYPE		0x0001
336ae49ec92SMagnus Damm #define REGION_TYPE_CM		0x0000
337ae49ec92SMagnus Damm #define REGION_TYPE_AM		0x0001
338ae49ec92SMagnus Damm #define REGION_PREFETCH		0x0008
339ae49ec92SMagnus Damm #define REGION_CACHEABLE	0x0010
340ae49ec92SMagnus Damm #define REGION_BAR_MASK		0xe000
341ae49ec92SMagnus Damm #define REGION_BAR_SHIFT	13
342ae49ec92SMagnus Damm 
34353efec95SDominik Brodowski /* For ReplaceCIS */
34453efec95SDominik Brodowski typedef struct cisdump_t {
34553efec95SDominik Brodowski 	u_int			Length;
34653efec95SDominik Brodowski 	cisdata_t		Data[CISTPL_MAX_CIS_SIZE];
34753efec95SDominik Brodowski } cisdump_t;
34853efec95SDominik Brodowski 
3491a53088cSDominik Brodowski /* for GetConfigurationInfo */
3501a53088cSDominik Brodowski typedef struct config_info_t {
3511a53088cSDominik Brodowski 	u_char			Function;
3521a53088cSDominik Brodowski 	u_int			Attributes;
3531a53088cSDominik Brodowski 	u_int			Vcc, Vpp1, Vpp2;
3541a53088cSDominik Brodowski 	u_int			IntType;
3551a53088cSDominik Brodowski 	u_int			ConfigBase;
3561a53088cSDominik Brodowski 	u_char			Status, Pin, Copy, Option, ExtStatus;
3571a53088cSDominik Brodowski 	u_int			Present;
3581a53088cSDominik Brodowski 	u_int			CardValues;
3591a53088cSDominik Brodowski 	u_int			AssignedIRQ;
3601a53088cSDominik Brodowski 	u_int			IRQAttributes;
3611a53088cSDominik Brodowski 	ioaddr_t		BasePort1;
3621a53088cSDominik Brodowski 	ioaddr_t		NumPorts1;
3631a53088cSDominik Brodowski 	u_int			Attributes1;
3641a53088cSDominik Brodowski 	ioaddr_t		BasePort2;
3651a53088cSDominik Brodowski 	ioaddr_t		NumPorts2;
3661a53088cSDominik Brodowski 	u_int			Attributes2;
3671a53088cSDominik Brodowski 	u_int			IOAddrLines;
3681a53088cSDominik Brodowski } config_info_t;
3691a53088cSDominik Brodowski 
3701da177e4SLinus Torvalds typedef union ds_ioctl_arg_t {
3711da177e4SLinus Torvalds 	adjust_t		adjust;
3721da177e4SLinus Torvalds 	config_info_t		config;
3731da177e4SLinus Torvalds 	tuple_t			tuple;
3741da177e4SLinus Torvalds 	tuple_parse_t		tuple_parse;
3751da177e4SLinus Torvalds 	client_req_t		client_req;
3761da177e4SLinus Torvalds 	cs_status_t		status;
3771da177e4SLinus Torvalds 	conf_reg_t		conf_reg;
3781da177e4SLinus Torvalds 	cisinfo_t		cisinfo;
3791da177e4SLinus Torvalds 	region_info_t		region;
3801da177e4SLinus Torvalds 	bind_info_t		bind_info;
3811da177e4SLinus Torvalds 	mtd_info_t		mtd_info;
3821da177e4SLinus Torvalds 	win_info_t		win_info;
3831da177e4SLinus Torvalds 	cisdump_t		cisdump;
3841da177e4SLinus Torvalds } ds_ioctl_arg_t;
3851da177e4SLinus Torvalds 
3861da177e4SLinus Torvalds #define DS_ADJUST_RESOURCE_INFO			_IOWR('d',  2, adjust_t)
3871da177e4SLinus Torvalds #define DS_GET_CONFIGURATION_INFO		_IOWR('d',  3, config_info_t)
3881da177e4SLinus Torvalds #define DS_GET_FIRST_TUPLE			_IOWR('d',  4, tuple_t)
3891da177e4SLinus Torvalds #define DS_GET_NEXT_TUPLE			_IOWR('d',  5, tuple_t)
3901da177e4SLinus Torvalds #define DS_GET_TUPLE_DATA			_IOWR('d',  6, tuple_parse_t)
3911da177e4SLinus Torvalds #define DS_PARSE_TUPLE				_IOWR('d',  7, tuple_parse_t)
3921da177e4SLinus Torvalds #define DS_RESET_CARD				_IO  ('d',  8)
3931da177e4SLinus Torvalds #define DS_GET_STATUS				_IOWR('d',  9, cs_status_t)
3941da177e4SLinus Torvalds #define DS_ACCESS_CONFIGURATION_REGISTER	_IOWR('d', 10, conf_reg_t)
3951da177e4SLinus Torvalds #define DS_VALIDATE_CIS				_IOR ('d', 11, cisinfo_t)
3961da177e4SLinus Torvalds #define DS_SUSPEND_CARD				_IO  ('d', 12)
3971da177e4SLinus Torvalds #define DS_RESUME_CARD				_IO  ('d', 13)
3981da177e4SLinus Torvalds #define DS_EJECT_CARD				_IO  ('d', 14)
3991da177e4SLinus Torvalds #define DS_INSERT_CARD				_IO  ('d', 15)
4001da177e4SLinus Torvalds #define DS_GET_FIRST_REGION			_IOWR('d', 16, region_info_t)
4011da177e4SLinus Torvalds #define DS_GET_NEXT_REGION			_IOWR('d', 17, region_info_t)
4021da177e4SLinus Torvalds #define DS_REPLACE_CIS				_IOWR('d', 18, cisdump_t)
4031da177e4SLinus Torvalds #define DS_GET_FIRST_WINDOW			_IOR ('d', 19, win_info_t)
4041da177e4SLinus Torvalds #define DS_GET_NEXT_WINDOW			_IOWR('d', 20, win_info_t)
4051da177e4SLinus Torvalds #define DS_GET_MEM_PAGE				_IOWR('d', 21, win_info_t)
4061da177e4SLinus Torvalds 
4071da177e4SLinus Torvalds #define DS_BIND_REQUEST				_IOWR('d', 60, bind_info_t)
4081da177e4SLinus Torvalds #define DS_GET_DEVICE_INFO			_IOWR('d', 61, bind_info_t)
4091da177e4SLinus Torvalds #define DS_GET_NEXT_DEVICE			_IOWR('d', 62, bind_info_t)
4101da177e4SLinus Torvalds #define DS_UNBIND_REQUEST			_IOW ('d', 63, bind_info_t)
4111da177e4SLinus Torvalds #define DS_BIND_MTD				_IOWR('d', 64, mtd_info_t)
4121da177e4SLinus Torvalds 
413a5835786SDominik Brodowski 
4149c8b7965SDominik Brodowski /* used in userspace only */
4159c8b7965SDominik Brodowski #define CS_IN_USE			0x1e
4169c8b7965SDominik Brodowski 
417994917f8SDominik Brodowski #define INFO_MASTER_CLIENT	0x01
418994917f8SDominik Brodowski #define INFO_IO_CLIENT		0x02
419994917f8SDominik Brodowski #define INFO_MTD_CLIENT		0x04
420994917f8SDominik Brodowski #define INFO_MEM_CLIENT		0x08
421994917f8SDominik Brodowski #define MAX_NUM_CLIENTS		3
422994917f8SDominik Brodowski 
423994917f8SDominik Brodowski #define INFO_CARD_SHARE		0x10
424994917f8SDominik Brodowski #define INFO_CARD_EXCL		0x20
425994917f8SDominik Brodowski 
4261da177e4SLinus Torvalds 
427a5835786SDominik Brodowski #endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */
4281da177e4SLinus Torvalds 
4291da177e4SLinus Torvalds #endif /* _LINUX_DS_H */
430