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
18 /* For AccessConfigurationRegister */
19 typedef struct conf_reg_t
{
30 /* for AdjustResourceInfo */
31 typedef struct adjust_t
{
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
57 #define RES_MEMORY_RANGE 1
58 #define RES_IO_RANGE 2
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 event_callback_args_t
{
72 struct pcmcia_device
*client_handle
;
74 } event_callback_args_t
;
76 /* for GetConfigurationInfo */
77 typedef struct config_info_t
{
80 u_int Vcc
, Vpp1
, Vpp2
;
83 u_char Status
, Pin
, Copy
, Option
, ExtStatus
;
97 /* For CardValues field */
98 #define CV_OPTION_VALUE 0x01
99 #define CV_STATUS_VALUE 0x02
100 #define CV_PIN_REPLACEMENT 0x04
101 #define CV_COPY_VALUE 0x08
102 #define CV_EXT_STATUS 0x10
104 /* For GetFirst/NextClient */
105 typedef struct client_req_t
{
110 #define CLIENT_THIS_SOCKET 0x01
112 /* For RegisterClient */
113 typedef struct client_reg_t
{
114 dev_info_t
*dev_info
;
115 u_int Attributes
; /* UNUSED */
117 int (*event_handler
)(event_t event
, int priority
,
118 event_callback_args_t
*);
119 event_callback_args_t event_callback_args
;
123 /* ModifyConfiguration */
124 typedef struct modconf_t
{
126 u_int Vcc
, Vpp1
, Vpp2
;
129 /* Attributes for ModifyConfiguration */
130 #define CONF_IRQ_CHANGE_VALID 0x100
131 #define CONF_VCC_CHANGE_VALID 0x200
132 #define CONF_VPP1_CHANGE_VALID 0x400
133 #define CONF_VPP2_CHANGE_VALID 0x800
135 /* For RequestConfiguration */
136 typedef struct config_req_t
{
138 u_int Vcc
, Vpp1
, Vpp2
;
141 u_char Status
, Pin
, Copy
, ExtStatus
;
146 /* Attributes for RequestConfiguration */
147 #define CONF_ENABLE_IRQ 0x01
148 #define CONF_ENABLE_DMA 0x02
149 #define CONF_ENABLE_SPKR 0x04
150 #define CONF_VALID_CLIENT 0x100
153 #define INT_MEMORY 0x01
154 #define INT_MEMORY_AND_IO 0x02
155 #define INT_CARDBUS 0x04
156 #define INT_ZOOMED_VIDEO 0x08
158 /* For RequestIO and ReleaseIO */
159 typedef struct io_req_t
{
169 /* Attributes for RequestIO and ReleaseIO */
170 #define IO_SHARED 0x01
171 #define IO_FIRST_SHARED 0x02
172 #define IO_FORCE_ALIAS_ACCESS 0x04
173 #define IO_DATA_PATH_WIDTH 0x18
174 #define IO_DATA_PATH_WIDTH_8 0x00
175 #define IO_DATA_PATH_WIDTH_16 0x08
176 #define IO_DATA_PATH_WIDTH_AUTO 0x10
178 /* For RequestIRQ and ReleaseIRQ */
179 typedef struct irq_req_t
{
182 u_int IRQInfo1
, IRQInfo2
; /* IRQInfo2 is ignored */
187 /* Attributes for RequestIRQ and ReleaseIRQ */
188 #define IRQ_TYPE 0x03
189 #define IRQ_TYPE_EXCLUSIVE 0x00
190 #define IRQ_TYPE_TIME 0x01
191 #define IRQ_TYPE_DYNAMIC_SHARING 0x02
192 #define IRQ_FORCED_PULSE 0x04
193 #define IRQ_FIRST_SHARED 0x08
194 #define IRQ_HANDLE_PRESENT 0x10
195 #define IRQ_PULSE_ALLOCATED 0x100
197 /* Bits in IRQInfo1 field */
198 #define IRQ_MASK 0x0f
199 #define IRQ_NMI_ID 0x01
200 #define IRQ_IOCK_ID 0x02
201 #define IRQ_BERR_ID 0x04
202 #define IRQ_VEND_ID 0x08
203 #define IRQ_INFO2_VALID 0x10
204 #define IRQ_LEVEL_ID 0x20
205 #define IRQ_PULSE_ID 0x40
206 #define IRQ_SHARE_ID 0x80
208 typedef struct eventmask_t
{
213 #define CONF_EVENT_MASK_VALID 0x01
215 /* Configuration registers present */
216 #define PRESENT_OPTION 0x001
217 #define PRESENT_STATUS 0x002
218 #define PRESENT_PIN_REPLACE 0x004
219 #define PRESENT_COPY 0x008
220 #define PRESENT_EXT_STATUS 0x010
221 #define PRESENT_IOBASE_0 0x020
222 #define PRESENT_IOBASE_1 0x040
223 #define PRESENT_IOBASE_2 0x080
224 #define PRESENT_IOBASE_3 0x100
225 #define PRESENT_IOSIZE 0x200
227 /* For GetMemPage, MapMemPage */
228 typedef struct memreq_t
{
233 /* For ModifyWindow */
234 typedef struct modwin_t
{
239 /* For RequestWindow */
240 typedef struct win_req_t
{
247 /* Attributes for RequestWindow */
248 #define WIN_ADDR_SPACE 0x0001
249 #define WIN_ADDR_SPACE_MEM 0x0000
250 #define WIN_ADDR_SPACE_IO 0x0001
251 #define WIN_MEMORY_TYPE 0x0002
252 #define WIN_MEMORY_TYPE_CM 0x0000
253 #define WIN_MEMORY_TYPE_AM 0x0002
254 #define WIN_ENABLE 0x0004
255 #define WIN_DATA_WIDTH 0x0018
256 #define WIN_DATA_WIDTH_8 0x0000
257 #define WIN_DATA_WIDTH_16 0x0008
258 #define WIN_DATA_WIDTH_32 0x0010
259 #define WIN_PAGED 0x0020
260 #define WIN_SHARED 0x0040
261 #define WIN_FIRST_SHARED 0x0080
262 #define WIN_USE_WAIT 0x0100
263 #define WIN_STRICT_ALIGN 0x0200
264 #define WIN_MAP_BELOW_1MB 0x0400
265 #define WIN_PREFETCH 0x0800
266 #define WIN_CACHEABLE 0x1000
267 #define WIN_BAR_MASK 0xe000
268 #define WIN_BAR_SHIFT 13
270 /* Attributes for RegisterClient -- UNUSED -- */
271 #define INFO_MASTER_CLIENT 0x01
272 #define INFO_IO_CLIENT 0x02
273 #define INFO_MTD_CLIENT 0x04
274 #define INFO_MEM_CLIENT 0x08
275 #define MAX_NUM_CLIENTS 3
277 #define INFO_CARD_SHARE 0x10
278 #define INFO_CARD_EXCL 0x20
280 typedef struct cs_status_t
{
286 typedef struct error_info_t
{
291 /* Flag to bind to all functions */
292 #define BIND_FN_ALL 0xff
295 #define CS_EVENT_PRI_LOW 0
296 #define CS_EVENT_PRI_HIGH 1
298 #define CS_EVENT_WRITE_PROTECT 0x000001
299 #define CS_EVENT_CARD_LOCK 0x000002
300 #define CS_EVENT_CARD_INSERTION 0x000004
301 #define CS_EVENT_CARD_REMOVAL 0x000008
302 #define CS_EVENT_BATTERY_DEAD 0x000010
303 #define CS_EVENT_BATTERY_LOW 0x000020
304 #define CS_EVENT_READY_CHANGE 0x000040
305 #define CS_EVENT_CARD_DETECT 0x000080
306 #define CS_EVENT_RESET_REQUEST 0x000100
307 #define CS_EVENT_RESET_PHYSICAL 0x000200
308 #define CS_EVENT_CARD_RESET 0x000400
309 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
310 #define CS_EVENT_PM_SUSPEND 0x002000
311 #define CS_EVENT_PM_RESUME 0x004000
312 #define CS_EVENT_INSERTION_REQUEST 0x008000
313 #define CS_EVENT_EJECTION_REQUEST 0x010000
314 #define CS_EVENT_MTD_REQUEST 0x020000
315 #define CS_EVENT_ERASE_COMPLETE 0x040000
316 #define CS_EVENT_REQUEST_ATTENTION 0x080000
317 #define CS_EVENT_CB_DETECT 0x100000
318 #define CS_EVENT_3VCARD 0x200000
319 #define CS_EVENT_XVCARD 0x400000
322 #define CS_SUCCESS 0x00
323 #define CS_BAD_ADAPTER 0x01
324 #define CS_BAD_ATTRIBUTE 0x02
325 #define CS_BAD_BASE 0x03
326 #define CS_BAD_EDC 0x04
327 #define CS_BAD_IRQ 0x06
328 #define CS_BAD_OFFSET 0x07
329 #define CS_BAD_PAGE 0x08
330 #define CS_READ_FAILURE 0x09
331 #define CS_BAD_SIZE 0x0a
332 #define CS_BAD_SOCKET 0x0b
333 #define CS_BAD_TYPE 0x0d
334 #define CS_BAD_VCC 0x0e
335 #define CS_BAD_VPP 0x0f
336 #define CS_BAD_WINDOW 0x11
337 #define CS_WRITE_FAILURE 0x12
338 #define CS_NO_CARD 0x14
339 #define CS_UNSUPPORTED_FUNCTION 0x15
340 #define CS_UNSUPPORTED_MODE 0x16
341 #define CS_BAD_SPEED 0x17
343 #define CS_GENERAL_FAILURE 0x19
344 #define CS_WRITE_PROTECTED 0x1a
345 #define CS_BAD_ARG_LENGTH 0x1b
346 #define CS_BAD_ARGS 0x1c
347 #define CS_CONFIGURATION_LOCKED 0x1d
348 #define CS_IN_USE 0x1e
349 #define CS_NO_MORE_ITEMS 0x1f
350 #define CS_OUT_OF_RESOURCE 0x20
351 #define CS_BAD_HANDLE 0x21
353 #define CS_BAD_TUPLE 0x40
358 * The main Card Services entry point
362 AccessConfigurationRegister
, AddSocketServices
,
363 AdjustResourceInfo
, CheckEraseQueue
, CloseMemory
, CopyMemory
,
364 DeregisterClient
, DeregisterEraseQueue
, GetCardServicesInfo
,
365 GetClientInfo
, GetConfigurationInfo
, GetEventMask
,
366 GetFirstClient
, GetFirstPartion
, GetFirstRegion
, GetFirstTuple
,
367 GetNextClient
, GetNextPartition
, GetNextRegion
, GetNextTuple
,
368 GetStatus
, GetTupleData
, MapLogSocket
, MapLogWindow
, MapMemPage
,
369 MapPhySocket
, MapPhyWindow
, ModifyConfiguration
, ModifyWindow
,
370 OpenMemory
, ParseTuple
, ReadMemory
, RegisterClient
,
371 RegisterEraseQueue
, RegisterMTD
, RegisterTimer
,
372 ReleaseConfiguration
, ReleaseExclusive
, ReleaseIO
, ReleaseIRQ
,
373 ReleaseSocketMask
, ReleaseWindow
, ReplaceSocketServices
,
374 RequestConfiguration
, RequestExclusive
, RequestIO
, RequestIRQ
,
375 RequestSocketMask
, RequestWindow
, ResetCard
, ReturnSSEntry
,
376 SetEventMask
, SetRegion
, ValidateCIS
, VendorSpecific
,
377 WriteMemory
, BindDevice
, BindMTD
, ReportError
,
378 SuspendCard
, ResumeCard
, EjectCard
, InsertCard
, ReplaceCIS
,
379 GetFirstWindow
, GetNextWindow
, GetMemPage
382 struct pcmcia_socket
;
384 int pcmcia_access_configuration_register(struct pcmcia_device
*p_dev
, conf_reg_t
*reg
);
385 int pcmcia_deregister_client(struct pcmcia_device
*p_dev
);
386 int pcmcia_get_configuration_info(struct pcmcia_device
*p_dev
, config_info_t
*config
);
387 int pcmcia_get_first_window(window_handle_t
*win
, win_req_t
*req
);
388 int pcmcia_get_next_window(window_handle_t
*win
, win_req_t
*req
);
389 int pcmcia_get_status(struct pcmcia_device
*p_dev
, cs_status_t
*status
);
390 int pcmcia_get_mem_page(window_handle_t win
, memreq_t
*req
);
391 int pcmcia_map_mem_page(window_handle_t win
, memreq_t
*req
);
392 int pcmcia_modify_configuration(struct pcmcia_device
*p_dev
, modconf_t
*mod
);
393 int pcmcia_register_client(client_handle_t
*handle
, client_reg_t
*req
);
394 int pcmcia_release_configuration(struct pcmcia_device
*p_dev
);
395 int pcmcia_release_io(struct pcmcia_device
*p_dev
, io_req_t
*req
);
396 int pcmcia_release_irq(struct pcmcia_device
*p_dev
, irq_req_t
*req
);
397 int pcmcia_release_window(window_handle_t win
);
398 int pcmcia_request_configuration(struct pcmcia_device
*p_dev
, config_req_t
*req
);
399 int pcmcia_request_io(struct pcmcia_device
*p_dev
, io_req_t
*req
);
400 int pcmcia_request_irq(struct pcmcia_device
*p_dev
, irq_req_t
*req
);
401 int pcmcia_request_window(struct pcmcia_device
**p_dev
, win_req_t
*req
, window_handle_t
*wh
);
402 int pcmcia_reset_card(struct pcmcia_device
*p_dev
, client_req_t
*req
);
403 int pcmcia_suspend_card(struct pcmcia_socket
*skt
);
404 int pcmcia_resume_card(struct pcmcia_socket
*skt
);
405 int pcmcia_eject_card(struct pcmcia_socket
*skt
);
406 int pcmcia_insert_card(struct pcmcia_socket
*skt
);
408 struct pcmcia_socket
* pcmcia_get_socket(struct pcmcia_socket
*skt
);
409 void pcmcia_put_socket(struct pcmcia_socket
*skt
);
411 #endif /* __KERNEL__ */
413 #endif /* _LINUX_CS_H */