Import 2.3.18pre1
[davej-history.git] / include / pcmcia / cs.h
blob2325ad3b2083a958ac51e723278134f71a00f2ad
1 /*
2 * cs.h 1.67 1999/09/02 18:34:59
4 * The contents of this file are subject to the Mozilla Public License
5 * Version 1.1 (the "License"); you may not use this file except in
6 * compliance with the License. You may obtain a copy of the License
7 * at http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS"
10 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
11 * the License for the specific language governing rights and
12 * limitations under the License.
14 * The initial developer of the original code is David A. Hinds
15 * <dhinds@hyper.stanford.edu>. Portions created by David A. Hinds
16 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
18 * Alternatively, the contents of this file may be used under the
19 * terms of the GNU Public License version 2 (the "GPL"), in which
20 * case the provisions of the GPL are applicable instead of the
21 * above. If you wish to allow the use of your version of this file
22 * only under the terms of the GPL and not to allow others to use
23 * your version of this file under the MPL, indicate your decision by
24 * deleting the provisions above and replace them with the notice and
25 * other provisions required by the GPL. If you do not delete the
26 * provisions above, a recipient may use your version of this file
27 * under either the MPL or the GPL.
30 #ifndef _LINUX_CS_H
31 #define _LINUX_CS_H
33 /* For AccessConfigurationRegister */
34 typedef struct conf_reg_t {
35 u_char Function;
36 u_int Action;
37 off_t Offset;
38 u_int Value;
39 } conf_reg_t;
41 /* Actions */
42 #define CS_READ 1
43 #define CS_WRITE 2
45 /* for AdjustResourceInfo */
46 typedef struct adjust_t {
47 u_int Action;
48 u_int Resource;
49 u_int Attributes;
50 union {
51 struct memory {
52 u_long Base;
53 u_long Size;
54 } memory;
55 struct io {
56 ioaddr_t BasePort;
57 ioaddr_t NumPorts;
58 u_int IOAddrLines;
59 } io;
60 struct irq {
61 u_int IRQ;
62 } irq;
63 } resource;
64 } adjust_t;
66 /* Action field */
67 #define REMOVE_MANAGED_RESOURCE 1
68 #define ADD_MANAGED_RESOURCE 2
69 #define GET_FIRST_MANAGED_RESOURCE 3
70 #define GET_NEXT_MANAGED_RESOURCE 4
71 /* Resource field */
72 #define RES_MEMORY_RANGE 1
73 #define RES_IO_RANGE 2
74 #define RES_IRQ 3
75 /* Attribute field */
76 #define RES_IRQ_TYPE 0x03
77 #define RES_IRQ_TYPE_EXCLUSIVE 0
78 #define RES_IRQ_TYPE_TIME 1
79 #define RES_IRQ_TYPE_DYNAMIC 2
80 #define RES_IRQ_CSC 0x04
81 #define RES_SHARED 0x08
82 #define RES_RESERVED 0x10
83 #define RES_ALLOCATED 0x20
84 #define RES_REMOVED 0x40
86 typedef struct servinfo_t {
87 char Signature[2];
88 u_int Count;
89 u_int Revision;
90 u_int CSLevel;
91 char *VendorString;
92 } servinfo_t;
94 typedef struct event_callback_args_t {
95 client_handle_t client_handle;
96 void *info;
97 void *mtdrequest;
98 void *buffer;
99 void *misc;
100 void *client_data;
101 struct bus_operations *bus;
102 } event_callback_args_t;
104 /* for GetConfigurationInfo */
105 typedef struct config_info_t {
106 u_char Function;
107 u_int Attributes;
108 u_int Vcc, Vpp1, Vpp2;
109 u_int IntType;
110 u_int ConfigBase;
111 u_char Status, Pin, Copy, Option, ExtStatus;
112 u_int Present;
113 u_int CardValues;
114 u_int AssignedIRQ;
115 u_int IRQAttributes;
116 ioaddr_t BasePort1;
117 ioaddr_t NumPorts1;
118 u_int Attributes1;
119 ioaddr_t BasePort2;
120 ioaddr_t NumPorts2;
121 u_int Attributes2;
122 u_int IOAddrLines;
123 } config_info_t;
125 /* For CardValues field */
126 #define CV_OPTION_VALUE 0x01
127 #define CV_STATUS_VALUE 0x02
128 #define CV_PIN_REPLACEMENT 0x04
129 #define CV_COPY_VALUE 0x08
130 #define CV_EXT_STATUS 0x10
132 /* For GetFirst/NextClient */
133 typedef struct client_req_t {
134 socket_t Socket;
135 u_int Attributes;
136 } client_req_t;
138 #define CLIENT_THIS_SOCKET 0x01
140 /* For RegisterClient */
141 typedef struct client_reg_t {
142 dev_info_t *dev_info;
143 u_int Attributes;
144 u_int EventMask;
145 int (*event_handler)(event_t event, int priority,
146 event_callback_args_t *);
147 event_callback_args_t event_callback_args;
148 u_int Version;
149 } client_reg_t;
151 /* ModifyConfiguration */
152 typedef struct modconf_t {
153 u_int Attributes;
154 u_int Vcc, Vpp1, Vpp2;
155 } modconf_t;
157 /* Attributes for ModifyConfiguration */
158 #define CONF_IRQ_CHANGE_VALID 0x100
159 #define CONF_VCC_CHANGE_VALID 0x200
160 #define CONF_VPP1_CHANGE_VALID 0x400
161 #define CONF_VPP2_CHANGE_VALID 0x800
163 /* For RequestConfiguration */
164 typedef struct config_req_t {
165 u_int Attributes;
166 u_int Vcc, Vpp1, Vpp2;
167 u_int IntType;
168 u_int ConfigBase;
169 u_char Status, Pin, Copy, ExtStatus;
170 u_char ConfigIndex;
171 u_int Present;
172 } config_req_t;
174 /* Attributes for RequestConfiguration */
175 #define CONF_ENABLE_IRQ 0x01
176 #define CONF_ENABLE_DMA 0x02
177 #define CONF_ENABLE_SPKR 0x04
178 #define CONF_VALID_CLIENT 0x100
180 /* IntType field */
181 #define INT_MEMORY 0x01
182 #define INT_MEMORY_AND_IO 0x02
183 #define INT_CARDBUS 0x04
185 /* For RequestIO and ReleaseIO */
186 typedef struct io_req_t {
187 ioaddr_t BasePort1;
188 ioaddr_t NumPorts1;
189 u_int Attributes1;
190 ioaddr_t BasePort2;
191 ioaddr_t NumPorts2;
192 u_int Attributes2;
193 u_int IOAddrLines;
194 } io_req_t;
196 /* Attributes for RequestIO and ReleaseIO */
197 #define IO_SHARED 0x01
198 #define IO_FIRST_SHARED 0x02
199 #define IO_FORCE_ALIAS_ACCESS 0x04
200 #define IO_DATA_PATH_WIDTH 0x18
201 #define IO_DATA_PATH_WIDTH_8 0x00
202 #define IO_DATA_PATH_WIDTH_16 0x08
203 #define IO_DATA_PATH_WIDTH_AUTO 0x10
205 /* For RequestIRQ and ReleaseIRQ */
206 typedef struct irq_req_t {
207 u_int Attributes;
208 u_int AssignedIRQ;
209 u_int IRQInfo1, IRQInfo2;
210 void *Handler;
211 void *Instance;
212 } irq_req_t;
214 /* Attributes for RequestIRQ and ReleaseIRQ */
215 #define IRQ_TYPE 0x03
216 #define IRQ_TYPE_EXCLUSIVE 0x00
217 #define IRQ_TYPE_TIME 0x01
218 #define IRQ_TYPE_DYNAMIC_SHARING 0x02
219 #define IRQ_FORCED_PULSE 0x04
220 #define IRQ_FIRST_SHARED 0x08
221 #define IRQ_HANDLE_PRESENT 0x10
222 #define IRQ_PULSE_ALLOCATED 0x100
224 /* Bits in IRQInfo1 field */
225 #define IRQ_MASK 0x0f
226 #define IRQ_NMI_ID 0x01
227 #define IRQ_IOCK_ID 0x02
228 #define IRQ_BERR_ID 0x04
229 #define IRQ_VEND_ID 0x08
230 #define IRQ_INFO2_VALID 0x10
231 #define IRQ_LEVEL_ID 0x20
232 #define IRQ_PULSE_ID 0x40
233 #define IRQ_SHARE_ID 0x80
235 typedef struct eventmask_t {
236 u_int Attributes;
237 u_int EventMask;
238 } eventmask_t;
240 #define CONF_EVENT_MASK_VALID 0x01
242 /* Configuration registers present */
243 #define PRESENT_OPTION 0x001
244 #define PRESENT_STATUS 0x002
245 #define PRESENT_PIN_REPLACE 0x004
246 #define PRESENT_COPY 0x008
247 #define PRESENT_EXT_STATUS 0x010
248 #define PRESENT_IOBASE_0 0x020
249 #define PRESENT_IOBASE_1 0x040
250 #define PRESENT_IOBASE_2 0x080
251 #define PRESENT_IOBASE_3 0x100
252 #define PRESENT_IOSIZE 0x200
254 /* Attributes for Request/GetConfiguration */
255 #define CONF_ENABLE_IRQ 0x01
256 #define EXCLUSIVE_USE 0x02
257 #define VALID_CLIENT 0x04
259 /* For GetMemPage, MapMemPage */
260 typedef struct memreq_t {
261 u_int CardOffset;
262 page_t Page;
263 } memreq_t;
265 /* For ModifyWindow */
266 typedef struct modwin_t {
267 u_int Attributes;
268 u_int AccessSpeed;
269 } modwin_t;
271 /* For RequestWindow */
272 typedef struct win_req_t {
273 u_int Attributes;
274 u_long Base;
275 u_int Size;
276 u_int AccessSpeed;
277 } win_req_t;
279 /* Attributes for RequestWindow */
280 #define WIN_ADDR_SPACE 0x0001
281 #define WIN_ADDR_SPACE_MEM 0x0000
282 #define WIN_ADDR_SPACE_IO 0x0001
283 #define WIN_MEMORY_TYPE 0x0002
284 #define WIN_MEMORY_TYPE_CM 0x0000
285 #define WIN_MEMORY_TYPE_AM 0x0002
286 #define WIN_ENABLE 0x0004
287 #define WIN_DATA_WIDTH 0x0018
288 #define WIN_DATA_WIDTH_8 0x0000
289 #define WIN_DATA_WIDTH_16 0x0008
290 #define WIN_DATA_WIDTH_32 0x0010
291 #define WIN_PAGED 0x0020
292 #define WIN_SHARED 0x0040
293 #define WIN_FIRST_SHARED 0x0080
294 #define WIN_USE_WAIT 0x0100
295 #define WIN_MAP_BELOW_1MB 0x0400
296 #define WIN_PREFETCH 0x0800
297 #define WIN_CACHEABLE 0x1000
298 #define WIN_BAR_MASK 0xe000
299 #define WIN_BAR_SHIFT 13
301 /* Attributes for RegisterClient */
302 #define INFO_MASTER_CLIENT 0x01
303 #define INFO_IO_CLIENT 0x02
304 #define INFO_MTD_CLIENT 0x04
305 #define INFO_MEM_CLIENT 0x08
306 #define MAX_NUM_CLIENTS 3
308 #define INFO_CARD_SHARE 0x10
309 #define INFO_CARD_EXCL 0x20
311 typedef struct cs_status_t {
312 u_char Function;
313 event_t CardState;
314 event_t SocketState;
315 } cs_status_t;
317 typedef struct error_info_t {
318 int func;
319 int retcode;
320 } error_info_t;
322 /* Special stuff for binding drivers to sockets */
323 typedef struct bind_req_t {
324 socket_t Socket;
325 u_char Function;
326 dev_info_t *dev_info;
327 } bind_req_t;
329 /* Flag to bind to all functions */
330 #define BIND_FN_ALL 0xff
332 typedef struct mtd_bind_t {
333 socket_t Socket;
334 u_int Attributes;
335 u_int CardOffset;
336 dev_info_t *dev_info;
337 } mtd_bind_t;
339 /* Events */
340 #define CS_EVENT_PRI_LOW 0
341 #define CS_EVENT_PRI_HIGH 1
343 #define CS_EVENT_WRITE_PROTECT 0x000001
344 #define CS_EVENT_CARD_LOCK 0x000002
345 #define CS_EVENT_CARD_INSERTION 0x000004
346 #define CS_EVENT_CARD_REMOVAL 0x000008
347 #define CS_EVENT_BATTERY_DEAD 0x000010
348 #define CS_EVENT_BATTERY_LOW 0x000020
349 #define CS_EVENT_READY_CHANGE 0x000040
350 #define CS_EVENT_CARD_DETECT 0x000080
351 #define CS_EVENT_RESET_REQUEST 0x000100
352 #define CS_EVENT_RESET_PHYSICAL 0x000200
353 #define CS_EVENT_CARD_RESET 0x000400
354 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
355 #define CS_EVENT_RESET_COMPLETE 0x001000
356 #define CS_EVENT_PM_SUSPEND 0x002000
357 #define CS_EVENT_PM_RESUME 0x004000
358 #define CS_EVENT_INSERTION_REQUEST 0x008000
359 #define CS_EVENT_EJECTION_REQUEST 0x010000
360 #define CS_EVENT_MTD_REQUEST 0x020000
361 #define CS_EVENT_ERASE_COMPLETE 0x040000
362 #define CS_EVENT_REQUEST_ATTENTION 0x080000
363 #define CS_EVENT_CB_DETECT 0x100000
364 #define CS_EVENT_3VCARD 0x200000
365 #define CS_EVENT_XVCARD 0x400000
367 /* Return codes */
368 #define CS_SUCCESS 0x00
369 #define CS_BAD_ADAPTER 0x01
370 #define CS_BAD_ATTRIBUTE 0x02
371 #define CS_BAD_BASE 0x03
372 #define CS_BAD_EDC 0x04
373 #define CS_BAD_IRQ 0x06
374 #define CS_BAD_OFFSET 0x07
375 #define CS_BAD_PAGE 0x08
376 #define CS_READ_FAILURE 0x09
377 #define CS_BAD_SIZE 0x0a
378 #define CS_BAD_SOCKET 0x0b
379 #define CS_BAD_TYPE 0x0d
380 #define CS_BAD_VCC 0x0e
381 #define CS_BAD_VPP 0x0f
382 #define CS_BAD_WINDOW 0x11
383 #define CS_WRITE_FAILURE 0x12
384 #define CS_NO_CARD 0x14
385 #define CS_UNSUPPORTED_FUNCTION 0x15
386 #define CS_UNSUPPORTED_MODE 0x16
387 #define CS_BAD_SPEED 0x17
388 #define CS_BUSY 0x18
389 #define CS_GENERAL_FAILURE 0x19
390 #define CS_WRITE_PROTECTED 0x1a
391 #define CS_BAD_ARG_LENGTH 0x1b
392 #define CS_BAD_ARGS 0x1c
393 #define CS_CONFIGURATION_LOCKED 0x1d
394 #define CS_IN_USE 0x1e
395 #define CS_NO_MORE_ITEMS 0x1f
396 #define CS_OUT_OF_RESOURCE 0x20
397 #define CS_BAD_HANDLE 0x21
399 #define CS_BAD_TUPLE 0x40
401 #ifdef __KERNEL__
404 * Calls to set up low-level "Socket Services" drivers
407 typedef int (*ss_entry_t)(u_int sock, u_int cmd, void *arg);
408 extern int register_ss_entry(int nsock, ss_entry_t entry);
409 extern void unregister_ss_entry(ss_entry_t entry);
412 * The main Card Services entry point
415 enum service {
416 AccessConfigurationRegister, AddSocketServices,
417 AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
418 DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
419 GetClientInfo, GetConfigurationInfo, GetEventMask,
420 GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
421 GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
422 GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
423 MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
424 OpenMemory, ParseTuple, ReadMemory, RegisterClient,
425 RegisterEraseQueue, RegisterMTD, RegisterTimer,
426 ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
427 ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
428 RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
429 RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
430 SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
431 WriteMemory, BindDevice, BindMTD, ReportError,
432 SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
433 GetFirstWindow, GetNextWindow, GetMemPage
436 #ifdef IN_CARD_SERVICES
437 extern int CardServices(int func, void *a1, void *a2, void *a3);
438 #else
439 extern int CardServices(int func, ...);
440 #endif
442 #ifdef __BEOS__
443 #define SS_MODULE_NAME(s) ("busses/pcmcia/" s "/v1")
444 #define MTD_MODULE_NAME(s) ("busses/pcmcia/" s "/v1")
445 #define CS_CLIENT_MODULE_NAME "bus_managers/pcmcia_cs/client/v1"
446 typedef struct cs_client_module_info {
447 bus_manager_info binfo;
448 int (*_CardServices)(int, ...);
449 int (*_MTDHelperEntry)(int, ...);
450 void (*_add_timer)(struct timer_list *);
451 void (*_del_timer)(struct timer_list *);
452 } cs_client_module_info;
453 #define CS_SOCKET_MODULE_NAME "bus_managers/pcmcia_cs/socket/v1"
454 typedef struct cs_socket_module_info {
455 bus_manager_info binfo;
456 int (*_register_ss_entry)(int, ss_entry_t);
457 void (*_unregister_ss_entry)(ss_entry_t);
458 void (*_add_timer)(struct timer_list *);
459 void (*_del_timer)(struct timer_list *);
460 int (*register_resource)(int, u_long, u_long);
461 int (*release_resource)(int, u_long, u_long);
462 int (*check_resource)(int, u_long, u_long);
463 } cs_socket_module_info;
464 #endif
466 #endif /* __KERNEL__ */
468 #endif /* _LINUX_CS_H */