Blame view

include/pcmcia/ss.h 6.95 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  /*
   * ss.h
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   *
   * The initial developer of the original code is David A. Hinds
   * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
   * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
   *
   * (C) 1999             David A. Hinds
   */
  
  #ifndef _LINUX_SS_H
  #define _LINUX_SS_H
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
17
  #include <linux/device.h>
4e57b6817   Tim Schmielau   [PATCH] fix missi...
18
  #include <linux/sched.h>	/* task_struct, completion */
7fe908dd1   Dominik Brodowski   [PATCH] pcmcia: u...
19
  #include <linux/mutex.h>
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
20

8c3520d4e   Daniel Ritz   [PATCH] yenta: au...
21
22
23
  #ifdef CONFIG_CARDBUS
  #include <linux/pci.h>
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  
  /* Definitions for card status flags for GetStatus */
  #define SS_WRPROT	0x0001
  #define SS_CARDLOCK	0x0002
  #define SS_EJECTION	0x0004
  #define SS_INSERTION	0x0008
  #define SS_BATDEAD	0x0010
  #define SS_BATWARN	0x0020
  #define SS_READY	0x0040
  #define SS_DETECT	0x0080
  #define SS_POWERON	0x0100
  #define SS_GPI		0x0200
  #define SS_STSCHG	0x0400
  #define SS_CARDBUS	0x0800
  #define SS_3VCARD	0x1000
  #define SS_XVCARD	0x2000
  #define SS_PENDING	0x4000
  #define SS_ZVCARD	0x8000
  
  /* InquireSocket capabilities */
  #define SS_CAP_PAGE_REGS	0x0001
  #define SS_CAP_VIRTUAL_BUS	0x0002
  #define SS_CAP_MEM_ALIGN	0x0004
  #define SS_CAP_STATIC_MAP	0x0008
  #define SS_CAP_PCCARD		0x4000
  #define SS_CAP_CARDBUS		0x8000
  
  /* for GetSocket, SetSocket */
  typedef struct socket_state_t {
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
53
54
55
56
  	u_int	flags;
  	u_int	csc_mask;
  	u_char	Vcc, Vpp;
  	u_char	io_irq;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  } socket_state_t;
  
  extern socket_state_t dead_socket;
  
  /* Socket configuration flags */
  #define SS_PWR_AUTO	0x0010
  #define SS_IOCARD	0x0020
  #define SS_RESET	0x0040
  #define SS_DMA_MODE	0x0080
  #define SS_SPKR_ENA	0x0100
  #define SS_OUTPUT_ENA	0x0200
  
  /* Flags for I/O port and memory windows */
  #define MAP_ACTIVE	0x01
  #define MAP_16BIT	0x02
  #define MAP_AUTOSZ	0x04
  #define MAP_0WS		0x08
  #define MAP_WRPROT	0x10
  #define MAP_ATTRIB	0x20
  #define MAP_USE_WAIT	0x40
  #define MAP_PREFETCH	0x80
  
  /* Use this just for bridge windows */
  #define MAP_IOSPACE	0x20
fa912bcb0   Daniel Ritz   [PATCH] yenta TI:...
81
82
83
  /* power hook operations */
  #define HOOK_POWER_PRE	0x01
  #define HOOK_POWER_POST	0x02
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
  typedef struct pccard_io_map {
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
85
86
87
  	u_char	map;
  	u_char	flags;
  	u_short	speed;
1d8076655   Steven A. Falco   pcmcia: Use phys_...
88
  	phys_addr_t start, stop;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
90
91
  } pccard_io_map;
  
  typedef struct pccard_mem_map {
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
92
93
94
  	u_char		map;
  	u_char		flags;
  	u_short		speed;
1d8076655   Steven A. Falco   pcmcia: Use phys_...
95
  	phys_addr_t	static_start;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
96
97
  	u_int		card_start;
  	struct resource	*res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
  } pccard_mem_map;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
99
  typedef struct io_window_t {
906da809c   Olof Johansson   pcmcia: replace k...
100
  	u_int			InUse, Config;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
102
  	struct resource		*res;
  } io_window_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
  /* Maximum number of IO windows per socket */
  #define MAX_IO_WIN 2
  
  /* Maximum number of memory windows per socket */
  #define MAX_WIN 4
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
108
109
110
111
112
113
  
  /*
   * Socket operations.
   */
  struct pcmcia_socket;
  struct pccard_resource_ops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114
115
  struct config_t;
  struct pcmcia_callback;
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
116
  struct user_info_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
118
119
120
121
122
123
124
125
  struct pccard_operations {
  	int (*init)(struct pcmcia_socket *s);
  	int (*suspend)(struct pcmcia_socket *s);
  	int (*get_status)(struct pcmcia_socket *s, u_int *value);
  	int (*set_socket)(struct pcmcia_socket *s, socket_state_t *state);
  	int (*set_io_map)(struct pcmcia_socket *s, struct pccard_io_map *io);
  	int (*set_mem_map)(struct pcmcia_socket *s, struct pccard_mem_map *mem);
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
127
  struct pcmcia_socket {
  	struct module			*owner;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
  	socket_state_t			socket;
  	u_int				state;
88b060d6c   Dominik Brodowski   pcmcia: improve c...
130
  	u_int				suspended_state;	/* state before suspend */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
134
  	u_short				functions;
  	u_short				lock_count;
  	pccard_mem_map			cis_mem;
  	void __iomem 			*cis_virt;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135
  	io_window_t			io[MAX_IO_WIN];
82f88e360   Dominik Brodowski   pcmcia: remove un...
136
  	pccard_mem_map			win[MAX_WIN];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
  	struct list_head		cis_cache;
53efec951   Dominik Brodowski   pcmcia: only copy...
138
139
  	size_t				fake_cis_len;
  	u8				*fake_cis;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
140
141
142
  
  	struct list_head		socket_list;
  	struct completion		socket_released;
9fea84f46   Dominik Brodowski   pcmcia: CodingSty...
143
  	/* deprecated */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
145
146
147
148
149
150
  	unsigned int			sock;		/* socket number */
  
  
  	/* socket capabilities */
  	u_int				features;
  	u_int				irq_mask;
  	u_int				map_size;
906da809c   Olof Johansson   pcmcia: replace k...
151
  	u_int				io_offset;
1689164a2   Russell King - ARM Linux   PCMCIA: ss: allow...
152
  	u_int				pci_irq;
9fea84f46   Dominik Brodowski   pcmcia: CodingSty...
153
  	struct pci_dev			*cb_dev;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
155
156
157
  	/* socket setup is done so resources should be able to be allocated.
  	 * Only if set to 1, calls to find_{io,mem}_region are handled, and
  	 * insertio events are actually managed by the PCMCIA layer.*/
ce3f9d71b   Dominik Brodowski   pcmcia: remove un...
158
  	u8				resource_setup_done;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
159
160
  
  	/* socket operations */
9fea84f46   Dominik Brodowski   pcmcia: CodingSty...
161
162
163
  	struct pccard_operations	*ops;
  	struct pccard_resource_ops	*resource_ops;
  	void				*resource_data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
164
165
166
  
  	/* Zoom video behaviour is so chip specific its not worth adding
  	   this to _ops */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
167
168
  	void 				(*zoom_video)(struct pcmcia_socket *,
  						      int);
fa912bcb0   Daniel Ritz   [PATCH] yenta TI:...
169
170
171
  
  	/* so is power hook */
  	int (*power_hook)(struct pcmcia_socket *sock, int operation);
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
172

8c3520d4e   Daniel Ritz   [PATCH] yenta: au...
173
  	/* allows tuning the CB bridge before loading driver for the CB card */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
174
  #ifdef CONFIG_CARDBUS
8c3520d4e   Daniel Ritz   [PATCH] yenta: au...
175
176
  	void (*tune_bridge)(struct pcmcia_socket *sock, struct pci_bus *bus);
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
177
  	/* state thread */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178
179
  	struct task_struct		*thread;
  	struct completion		thread_done;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
180
  	unsigned int			thread_events;
f971dbd5d   Dominik Brodowski   pcmcia: use pccar...
181
  	unsigned int			sysfs_events;
00ce99ff5   Dominik Brodowski   pcmcia: simplify ...
182
183
184
  
  	/* For the non-trivial interaction between these locks,
  	 * see Documentation/pcmcia/locking.txt */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
185
  	struct mutex			skt_mutex;
6b8e087b8   Dominik Brodowski   pcmcia: add locki...
186
  	struct mutex			ops_mutex;
00ce99ff5   Dominik Brodowski   pcmcia: simplify ...
187

f971dbd5d   Dominik Brodowski   pcmcia: use pccar...
188
  	/* protects thread_events and sysfs_events */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
189
  	spinlock_t			thread_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
190
191
  
  	/* pcmcia (16-bit) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
  	struct pcmcia_callback		*callback;
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
193
  #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
194
195
196
197
198
199
200
  	/* The following elements refer to 16-bit PCMCIA devices inserted
  	 * into the socket */
  	struct list_head		devices_list;
  
  	/* the number of devices, used only internally and subject to
  	 * incorrectness and change */
  	u8				device_count;
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
201

ce3f9d71b   Dominik Brodowski   pcmcia: remove un...
202
203
  	/* does the PCMCIA card consist of two pseudo devices? */
  	u8				pcmcia_pfc;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
204

04de08161   Dominik Brodowski   pcmcia: pcmcia_de...
205
206
  	/* non-zero if PCMCIA card is present */
  	atomic_t			present;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
207

6f840afb4   Dominik Brodowski   pcmcia: replace s...
208
209
  	/* IRQ to be used by PCMCIA devices. May not be IRQ 0. */
  	unsigned int			pcmcia_irq;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
210
  #endif /* CONFIG_PCMCIA */
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
211

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
212
  	/* socket device */
873733188   Greg Kroah-Hartman   Driver core: conv...
213
  	struct device			dev;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
214
215
  	/* data internal to the socket driver */
  	void				*driver_data;
9905d1b41   Rafael J. Wysocki   PM / yenta: Split...
216
217
  	/* status of the card during resume from a system sleep state */
  	int				resume_status;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
220
221
222
223
224
  /* socket drivers must define the resource operations type they use. There
   * are three options:
   * - pccard_static_ops		iomem and ioport areas are assigned statically
   * - pccard_iodyn_ops		iomem areas is assigned statically, ioport
   *				areas dynamically
4e8804ff6   Dominik Brodowski   pcmcia: m8xx_pcmc...
225
226
   *				If this option is selected, use
   *				"select PCCARD_IODYN" in Kconfig.
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
227
228
229
   * - pccard_nonstatic_ops	iomem and ioport areas are assigned dynamically.
   *				If this option is selected, use
   *				"select PCCARD_NONSTATIC" in Kconfig.
3a86e1807   Dominik Brodowski   pcmcia: do not us...
230
   *
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
231
232
   */
  extern struct pccard_resource_ops pccard_static_ops;
3a86e1807   Dominik Brodowski   pcmcia: do not us...
233
  #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
234
235
  extern struct pccard_resource_ops pccard_iodyn_ops;
  extern struct pccard_resource_ops pccard_nonstatic_ops;
3a86e1807   Dominik Brodowski   pcmcia: do not us...
236
237
238
239
240
241
242
  #else
  /* If PCMCIA is not used, but only CARDBUS, these functions are not used
   * at all. Therefore, do not use the large (240K!) rsrc_nonstatic module
   */
  #define pccard_iodyn_ops pccard_static_ops
  #define pccard_nonstatic_ops pccard_static_ops
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
244
245
246
  /* socket drivers use this callback in their IRQ handler */
  extern void pcmcia_parse_events(struct pcmcia_socket *socket,
  				unsigned int events);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
247

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
248
  /* to register and unregister a socket */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
250
  extern int pcmcia_register_socket(struct pcmcia_socket *socket);
  extern void pcmcia_unregister_socket(struct pcmcia_socket *socket);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
252
  
  #endif /* _LINUX_SS_H */