Linux-2.6.12-rc2
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / include / pcmcia / cs.h
blob8d8643adc7866e6bab8ac96580b4ddefdff91ec2
1 /*
2 * cs.h
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
8 * The initial developer of the original code is David A. Hinds
9 * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
12 * (C) 1999 David A. Hinds
15 #ifndef _LINUX_CS_H
16 #define _LINUX_CS_H
18 /* For AccessConfigurationRegister */
19 typedef struct conf_reg_t {
20 u_char Function;
21 u_int Action;
22 off_t Offset;
23 u_int Value;
24 } conf_reg_t;
26 /* Actions */
27 #define CS_READ 1
28 #define CS_WRITE 2
30 /* for AdjustResourceInfo */
31 typedef struct adjust_t {
32 u_int Action;
33 u_int Resource;
34 u_int Attributes;
35 union {
36 struct memory {
37 u_long Base;
38 u_long Size;
39 } memory;
40 struct io {
41 ioaddr_t BasePort;
42 ioaddr_t NumPorts;
43 u_int IOAddrLines;
44 } io;
45 struct irq {
46 u_int IRQ;
47 } irq;
48 } resource;
49 } adjust_t;
51 /* Action field */
52 #define REMOVE_MANAGED_RESOURCE 1
53 #define ADD_MANAGED_RESOURCE 2
54 #define GET_FIRST_MANAGED_RESOURCE 3
55 #define GET_NEXT_MANAGED_RESOURCE 4
56 /* Resource field */
57 #define RES_MEMORY_RANGE 1
58 #define RES_IO_RANGE 2
59 #define RES_IRQ 3
60 /* Attribute field */
61 #define RES_IRQ_TYPE 0x03
62 #define RES_IRQ_TYPE_EXCLUSIVE 0
63 #define RES_IRQ_TYPE_TIME 1
64 #define RES_IRQ_TYPE_DYNAMIC 2
65 #define RES_IRQ_CSC 0x04
66 #define RES_SHARED 0x08
67 #define RES_RESERVED 0x10
68 #define RES_ALLOCATED 0x20
69 #define RES_REMOVED 0x40
71 typedef struct servinfo_t {
72 char Signature[2];
73 u_int Count;
74 u_int Revision;
75 u_int CSLevel;
76 char *VendorString;
77 } servinfo_t;
79 typedef struct event_callback_args_t {
80 client_handle_t client_handle;
81 void *info;
82 void *mtdrequest;
83 void *buffer;
84 void *misc;
85 void *client_data;
86 } event_callback_args_t;
88 /* for GetConfigurationInfo */
89 typedef struct config_info_t {
90 u_char Function;
91 u_int Attributes;
92 u_int Vcc, Vpp1, Vpp2;
93 u_int IntType;
94 u_int ConfigBase;
95 u_char Status, Pin, Copy, Option, ExtStatus;
96 u_int Present;
97 u_int CardValues;
98 u_int AssignedIRQ;
99 u_int IRQAttributes;
100 ioaddr_t BasePort1;
101 ioaddr_t NumPorts1;
102 u_int Attributes1;
103 ioaddr_t BasePort2;
104 ioaddr_t NumPorts2;
105 u_int Attributes2;
106 u_int IOAddrLines;
107 } config_info_t;
109 /* For CardValues field */
110 #define CV_OPTION_VALUE 0x01
111 #define CV_STATUS_VALUE 0x02
112 #define CV_PIN_REPLACEMENT 0x04
113 #define CV_COPY_VALUE 0x08
114 #define CV_EXT_STATUS 0x10
116 /* For GetFirst/NextClient */
117 typedef struct client_req_t {
118 socket_t Socket;
119 u_int Attributes;
120 } client_req_t;
122 #define CLIENT_THIS_SOCKET 0x01
124 /* For RegisterClient */
125 typedef struct client_reg_t {
126 dev_info_t *dev_info;
127 u_int Attributes; /* UNUSED */
128 u_int EventMask;
129 int (*event_handler)(event_t event, int priority,
130 event_callback_args_t *);
131 event_callback_args_t event_callback_args;
132 u_int Version;
133 } client_reg_t;
135 /* ModifyConfiguration */
136 typedef struct modconf_t {
137 u_int Attributes;
138 u_int Vcc, Vpp1, Vpp2;
139 } modconf_t;
141 /* Attributes for ModifyConfiguration */
142 #define CONF_IRQ_CHANGE_VALID 0x100
143 #define CONF_VCC_CHANGE_VALID 0x200
144 #define CONF_VPP1_CHANGE_VALID 0x400
145 #define CONF_VPP2_CHANGE_VALID 0x800
147 /* For RequestConfiguration */
148 typedef struct config_req_t {
149 u_int Attributes;
150 u_int Vcc, Vpp1, Vpp2;
151 u_int IntType;
152 u_int ConfigBase;
153 u_char Status, Pin, Copy, ExtStatus;
154 u_char ConfigIndex;
155 u_int Present;
156 } config_req_t;
158 /* Attributes for RequestConfiguration */
159 #define CONF_ENABLE_IRQ 0x01
160 #define CONF_ENABLE_DMA 0x02
161 #define CONF_ENABLE_SPKR 0x04
162 #define CONF_VALID_CLIENT 0x100
164 /* IntType field */
165 #define INT_MEMORY 0x01
166 #define INT_MEMORY_AND_IO 0x02
167 #define INT_CARDBUS 0x04
168 #define INT_ZOOMED_VIDEO 0x08
170 /* For RequestIO and ReleaseIO */
171 typedef struct io_req_t {
172 ioaddr_t BasePort1;
173 ioaddr_t NumPorts1;
174 u_int Attributes1;
175 ioaddr_t BasePort2;
176 ioaddr_t NumPorts2;
177 u_int Attributes2;
178 u_int IOAddrLines;
179 } io_req_t;
181 /* Attributes for RequestIO and ReleaseIO */
182 #define IO_SHARED 0x01
183 #define IO_FIRST_SHARED 0x02
184 #define IO_FORCE_ALIAS_ACCESS 0x04
185 #define IO_DATA_PATH_WIDTH 0x18
186 #define IO_DATA_PATH_WIDTH_8 0x00
187 #define IO_DATA_PATH_WIDTH_16 0x08
188 #define IO_DATA_PATH_WIDTH_AUTO 0x10
190 /* For RequestIRQ and ReleaseIRQ */
191 typedef struct irq_req_t {
192 u_int Attributes;
193 u_int AssignedIRQ;
194 u_int IRQInfo1, IRQInfo2; /* IRQInfo2 is ignored */
195 void *Handler;
196 void *Instance;
197 } irq_req_t;
199 /* Attributes for RequestIRQ and ReleaseIRQ */
200 #define IRQ_TYPE 0x03
201 #define IRQ_TYPE_EXCLUSIVE 0x00
202 #define IRQ_TYPE_TIME 0x01
203 #define IRQ_TYPE_DYNAMIC_SHARING 0x02
204 #define IRQ_FORCED_PULSE 0x04
205 #define IRQ_FIRST_SHARED 0x08
206 #define IRQ_HANDLE_PRESENT 0x10
207 #define IRQ_PULSE_ALLOCATED 0x100
209 /* Bits in IRQInfo1 field */
210 #define IRQ_MASK 0x0f
211 #define IRQ_NMI_ID 0x01
212 #define IRQ_IOCK_ID 0x02
213 #define IRQ_BERR_ID 0x04
214 #define IRQ_VEND_ID 0x08
215 #define IRQ_INFO2_VALID 0x10
216 #define IRQ_LEVEL_ID 0x20
217 #define IRQ_PULSE_ID 0x40
218 #define IRQ_SHARE_ID 0x80
220 typedef struct eventmask_t {
221 u_int Attributes;
222 u_int EventMask;
223 } eventmask_t;
225 #define CONF_EVENT_MASK_VALID 0x01
227 /* Configuration registers present */
228 #define PRESENT_OPTION 0x001
229 #define PRESENT_STATUS 0x002
230 #define PRESENT_PIN_REPLACE 0x004
231 #define PRESENT_COPY 0x008
232 #define PRESENT_EXT_STATUS 0x010
233 #define PRESENT_IOBASE_0 0x020
234 #define PRESENT_IOBASE_1 0x040
235 #define PRESENT_IOBASE_2 0x080
236 #define PRESENT_IOBASE_3 0x100
237 #define PRESENT_IOSIZE 0x200
239 /* For GetMemPage, MapMemPage */
240 typedef struct memreq_t {
241 u_int CardOffset;
242 page_t Page;
243 } memreq_t;
245 /* For ModifyWindow */
246 typedef struct modwin_t {
247 u_int Attributes;
248 u_int AccessSpeed;
249 } modwin_t;
251 /* For RequestWindow */
252 typedef struct win_req_t {
253 u_int Attributes;
254 u_long Base;
255 u_int Size;
256 u_int AccessSpeed;
257 } win_req_t;
259 /* Attributes for RequestWindow */
260 #define WIN_ADDR_SPACE 0x0001
261 #define WIN_ADDR_SPACE_MEM 0x0000
262 #define WIN_ADDR_SPACE_IO 0x0001
263 #define WIN_MEMORY_TYPE 0x0002
264 #define WIN_MEMORY_TYPE_CM 0x0000
265 #define WIN_MEMORY_TYPE_AM 0x0002
266 #define WIN_ENABLE 0x0004
267 #define WIN_DATA_WIDTH 0x0018
268 #define WIN_DATA_WIDTH_8 0x0000
269 #define WIN_DATA_WIDTH_16 0x0008
270 #define WIN_DATA_WIDTH_32 0x0010
271 #define WIN_PAGED 0x0020
272 #define WIN_SHARED 0x0040
273 #define WIN_FIRST_SHARED 0x0080
274 #define WIN_USE_WAIT 0x0100
275 #define WIN_STRICT_ALIGN 0x0200
276 #define WIN_MAP_BELOW_1MB 0x0400
277 #define WIN_PREFETCH 0x0800
278 #define WIN_CACHEABLE 0x1000
279 #define WIN_BAR_MASK 0xe000
280 #define WIN_BAR_SHIFT 13
282 /* Attributes for RegisterClient -- UNUSED -- */
283 #define INFO_MASTER_CLIENT 0x01
284 #define INFO_IO_CLIENT 0x02
285 #define INFO_MTD_CLIENT 0x04
286 #define INFO_MEM_CLIENT 0x08
287 #define MAX_NUM_CLIENTS 3
289 #define INFO_CARD_SHARE 0x10
290 #define INFO_CARD_EXCL 0x20
292 typedef struct cs_status_t {
293 u_char Function;
294 event_t CardState;
295 event_t SocketState;
296 } cs_status_t;
298 typedef struct error_info_t {
299 int func;
300 int retcode;
301 } error_info_t;
303 /* Flag to bind to all functions */
304 #define BIND_FN_ALL 0xff
306 /* Events */
307 #define CS_EVENT_PRI_LOW 0
308 #define CS_EVENT_PRI_HIGH 1
310 #define CS_EVENT_WRITE_PROTECT 0x000001
311 #define CS_EVENT_CARD_LOCK 0x000002
312 #define CS_EVENT_CARD_INSERTION 0x000004
313 #define CS_EVENT_CARD_REMOVAL 0x000008
314 #define CS_EVENT_BATTERY_DEAD 0x000010
315 #define CS_EVENT_BATTERY_LOW 0x000020
316 #define CS_EVENT_READY_CHANGE 0x000040
317 #define CS_EVENT_CARD_DETECT 0x000080
318 #define CS_EVENT_RESET_REQUEST 0x000100
319 #define CS_EVENT_RESET_PHYSICAL 0x000200
320 #define CS_EVENT_CARD_RESET 0x000400
321 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
322 #define CS_EVENT_PM_SUSPEND 0x002000
323 #define CS_EVENT_PM_RESUME 0x004000
324 #define CS_EVENT_INSERTION_REQUEST 0x008000
325 #define CS_EVENT_EJECTION_REQUEST 0x010000
326 #define CS_EVENT_MTD_REQUEST 0x020000
327 #define CS_EVENT_ERASE_COMPLETE 0x040000
328 #define CS_EVENT_REQUEST_ATTENTION 0x080000
329 #define CS_EVENT_CB_DETECT 0x100000
330 #define CS_EVENT_3VCARD 0x200000
331 #define CS_EVENT_XVCARD 0x400000
333 /* Return codes */
334 #define CS_SUCCESS 0x00
335 #define CS_BAD_ADAPTER 0x01
336 #define CS_BAD_ATTRIBUTE 0x02
337 #define CS_BAD_BASE 0x03
338 #define CS_BAD_EDC 0x04
339 #define CS_BAD_IRQ 0x06
340 #define CS_BAD_OFFSET 0x07
341 #define CS_BAD_PAGE 0x08
342 #define CS_READ_FAILURE 0x09
343 #define CS_BAD_SIZE 0x0a
344 #define CS_BAD_SOCKET 0x0b
345 #define CS_BAD_TYPE 0x0d
346 #define CS_BAD_VCC 0x0e
347 #define CS_BAD_VPP 0x0f
348 #define CS_BAD_WINDOW 0x11
349 #define CS_WRITE_FAILURE 0x12
350 #define CS_NO_CARD 0x14
351 #define CS_UNSUPPORTED_FUNCTION 0x15
352 #define CS_UNSUPPORTED_MODE 0x16
353 #define CS_BAD_SPEED 0x17
354 #define CS_BUSY 0x18
355 #define CS_GENERAL_FAILURE 0x19
356 #define CS_WRITE_PROTECTED 0x1a
357 #define CS_BAD_ARG_LENGTH 0x1b
358 #define CS_BAD_ARGS 0x1c
359 #define CS_CONFIGURATION_LOCKED 0x1d
360 #define CS_IN_USE 0x1e
361 #define CS_NO_MORE_ITEMS 0x1f
362 #define CS_OUT_OF_RESOURCE 0x20
363 #define CS_BAD_HANDLE 0x21
365 #define CS_BAD_TUPLE 0x40
367 #ifdef __KERNEL__
370 * The main Card Services entry point
373 enum service {
374 AccessConfigurationRegister, AddSocketServices,
375 AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
376 DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
377 GetClientInfo, GetConfigurationInfo, GetEventMask,
378 GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
379 GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
380 GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
381 MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
382 OpenMemory, ParseTuple, ReadMemory, RegisterClient,
383 RegisterEraseQueue, RegisterMTD, RegisterTimer,
384 ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
385 ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
386 RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
387 RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
388 SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
389 WriteMemory, BindDevice, BindMTD, ReportError,
390 SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
391 GetFirstWindow, GetNextWindow, GetMemPage
394 struct pcmcia_socket;
396 int pcmcia_access_configuration_register(client_handle_t handle, conf_reg_t *reg);
397 int pcmcia_deregister_client(client_handle_t handle);
398 int pcmcia_get_configuration_info(client_handle_t handle, config_info_t *config);
399 int pcmcia_get_card_services_info(servinfo_t *info);
400 int pcmcia_get_first_window(window_handle_t *win, win_req_t *req);
401 int pcmcia_get_next_window(window_handle_t *win, win_req_t *req);
402 int pcmcia_get_status(client_handle_t handle, cs_status_t *status);
403 int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
404 int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
405 int pcmcia_modify_configuration(client_handle_t handle, modconf_t *mod);
406 int pcmcia_register_client(client_handle_t *handle, client_reg_t *req);
407 int pcmcia_release_configuration(client_handle_t handle);
408 int pcmcia_release_io(client_handle_t handle, io_req_t *req);
409 int pcmcia_release_irq(client_handle_t handle, irq_req_t *req);
410 int pcmcia_release_window(window_handle_t win);
411 int pcmcia_request_configuration(client_handle_t handle, config_req_t *req);
412 int pcmcia_request_io(client_handle_t handle, io_req_t *req);
413 int pcmcia_request_irq(client_handle_t handle, irq_req_t *req);
414 int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle_t *wh);
415 int pcmcia_reset_card(client_handle_t handle, client_req_t *req);
416 int pcmcia_suspend_card(struct pcmcia_socket *skt);
417 int pcmcia_resume_card(struct pcmcia_socket *skt);
418 int pcmcia_eject_card(struct pcmcia_socket *skt);
419 int pcmcia_insert_card(struct pcmcia_socket *skt);
420 int pcmcia_report_error(client_handle_t handle, error_info_t *err);
422 struct pcmcia_socket * pcmcia_get_socket(struct pcmcia_socket *skt);
423 void pcmcia_put_socket(struct pcmcia_socket *skt);
425 #endif /* __KERNEL__ */
427 #endif /* _LINUX_CS_H */