Blame view

include/pcmcia/ss.h 6.81 KB
d2912cb15   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
  /*
   * ss.h
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
9
10
11
12
13
   * 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...
14
  #include <linux/device.h>
4e57b6817   Tim Schmielau   [PATCH] fix missi...
15
  #include <linux/sched.h>	/* task_struct, completion */
7fe908dd1   Dominik Brodowski   [PATCH] pcmcia: u...
16
  #include <linux/mutex.h>
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
17

8c3520d4e   Daniel Ritz   [PATCH] yenta: au...
18
19
20
  #ifdef CONFIG_CARDBUS
  #include <linux/pci.h>
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
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
  
  /* 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...
50
51
52
53
  	u_int	flags;
  	u_int	csc_mask;
  	u_char	Vcc, Vpp;
  	u_char	io_irq;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  } 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:...
78
79
80
  /* power hook operations */
  #define HOOK_POWER_PRE	0x01
  #define HOOK_POWER_POST	0x02
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
81
  typedef struct pccard_io_map {
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
82
83
84
  	u_char	map;
  	u_char	flags;
  	u_short	speed;
1d8076655   Steven A. Falco   pcmcia: Use phys_...
85
  	phys_addr_t start, stop;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
87
88
  } pccard_io_map;
  
  typedef struct pccard_mem_map {
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
89
90
91
  	u_char		map;
  	u_char		flags;
  	u_short		speed;
1d8076655   Steven A. Falco   pcmcia: Use phys_...
92
  	phys_addr_t	static_start;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
93
94
  	u_int		card_start;
  	struct resource	*res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  } pccard_mem_map;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
  typedef struct io_window_t {
906da809c   Olof Johansson   pcmcia: replace k...
97
  	u_int			InUse, Config;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
  	struct resource		*res;
  } io_window_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
101
102
103
104
  /* 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...
105
106
107
108
109
110
  
  /*
   * Socket operations.
   */
  struct pcmcia_socket;
  struct pccard_resource_ops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
112
  struct config_t;
  struct pcmcia_callback;
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
113
  struct user_info_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114

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

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
152
153
154
  	/* 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...
155
  	u8				resource_setup_done;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
156
157
  
  	/* socket operations */
9fea84f46   Dominik Brodowski   pcmcia: CodingSty...
158
159
160
  	struct pccard_operations	*ops;
  	struct pccard_resource_ops	*resource_ops;
  	void				*resource_data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161
162
163
  
  	/* Zoom video behaviour is so chip specific its not worth adding
  	   this to _ops */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
164
165
  	void 				(*zoom_video)(struct pcmcia_socket *,
  						      int);
fa912bcb0   Daniel Ritz   [PATCH] yenta TI:...
166
167
168
  
  	/* so is power hook */
  	int (*power_hook)(struct pcmcia_socket *sock, int operation);
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
169

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

f971dbd5d   Dominik Brodowski   pcmcia: use pccar...
185
  	/* protects thread_events and sysfs_events */
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
186
  	spinlock_t			thread_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
187
188
  
  	/* pcmcia (16-bit) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
189
  	struct pcmcia_callback		*callback;
dc109497b   Dominik Brodowski   [PATCH] pcmcia: m...
190
  #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
191
192
193
194
195
196
197
  	/* 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...
198

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

04de08161   Dominik Brodowski   pcmcia: pcmcia_de...
202
203
  	/* non-zero if PCMCIA card is present */
  	atomic_t			present;
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
204

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

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

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
217
218
219
220
221
  /* 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...
222
223
   *				If this option is selected, use
   *				"select PCCARD_IODYN" in Kconfig.
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
224
225
226
   * - 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...
227
   *
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
228
229
   */
  extern struct pccard_resource_ops pccard_static_ops;
3a86e1807   Dominik Brodowski   pcmcia: do not us...
230
  #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
231
232
  extern struct pccard_resource_ops pccard_iodyn_ops;
  extern struct pccard_resource_ops pccard_nonstatic_ops;
3a86e1807   Dominik Brodowski   pcmcia: do not us...
233
234
235
236
237
238
239
  #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
240

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
241
242
243
  /* 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
244

c23889ca5   Dominik Brodowski   pcmcia: cleanup s...
245
  /* to register and unregister a socket */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
247
  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
248
249
  
  #endif /* _LINUX_SS_H */