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 /* ModifyConfiguration */
113 typedef struct modconf_t
{
115 u_int Vcc
, Vpp1
, Vpp2
;
118 /* Attributes for ModifyConfiguration */
119 #define CONF_IRQ_CHANGE_VALID 0x100
120 #define CONF_VCC_CHANGE_VALID 0x200
121 #define CONF_VPP1_CHANGE_VALID 0x400
122 #define CONF_VPP2_CHANGE_VALID 0x800
124 /* For RequestConfiguration */
125 typedef struct config_req_t
{
127 u_int Vcc
, Vpp1
, Vpp2
;
130 u_char Status
, Pin
, Copy
, ExtStatus
;
135 /* Attributes for RequestConfiguration */
136 #define CONF_ENABLE_IRQ 0x01
137 #define CONF_ENABLE_DMA 0x02
138 #define CONF_ENABLE_SPKR 0x04
139 #define CONF_VALID_CLIENT 0x100
142 #define INT_MEMORY 0x01
143 #define INT_MEMORY_AND_IO 0x02
144 #define INT_CARDBUS 0x04
145 #define INT_ZOOMED_VIDEO 0x08
147 /* For RequestIO and ReleaseIO */
148 typedef struct io_req_t
{
158 /* Attributes for RequestIO and ReleaseIO */
159 #define IO_SHARED 0x01
160 #define IO_FIRST_SHARED 0x02
161 #define IO_FORCE_ALIAS_ACCESS 0x04
162 #define IO_DATA_PATH_WIDTH 0x18
163 #define IO_DATA_PATH_WIDTH_8 0x00
164 #define IO_DATA_PATH_WIDTH_16 0x08
165 #define IO_DATA_PATH_WIDTH_AUTO 0x10
167 /* For RequestIRQ and ReleaseIRQ */
168 typedef struct irq_req_t
{
171 u_int IRQInfo1
, IRQInfo2
; /* IRQInfo2 is ignored */
176 /* Attributes for RequestIRQ and ReleaseIRQ */
177 #define IRQ_TYPE 0x03
178 #define IRQ_TYPE_EXCLUSIVE 0x00
179 #define IRQ_TYPE_TIME 0x01
180 #define IRQ_TYPE_DYNAMIC_SHARING 0x02
181 #define IRQ_FORCED_PULSE 0x04
182 #define IRQ_FIRST_SHARED 0x08
183 #define IRQ_HANDLE_PRESENT 0x10
184 #define IRQ_PULSE_ALLOCATED 0x100
186 /* Bits in IRQInfo1 field */
187 #define IRQ_MASK 0x0f
188 #define IRQ_NMI_ID 0x01
189 #define IRQ_IOCK_ID 0x02
190 #define IRQ_BERR_ID 0x04
191 #define IRQ_VEND_ID 0x08
192 #define IRQ_INFO2_VALID 0x10
193 #define IRQ_LEVEL_ID 0x20
194 #define IRQ_PULSE_ID 0x40
195 #define IRQ_SHARE_ID 0x80
197 typedef struct eventmask_t
{
202 #define CONF_EVENT_MASK_VALID 0x01
204 /* Configuration registers present */
205 #define PRESENT_OPTION 0x001
206 #define PRESENT_STATUS 0x002
207 #define PRESENT_PIN_REPLACE 0x004
208 #define PRESENT_COPY 0x008
209 #define PRESENT_EXT_STATUS 0x010
210 #define PRESENT_IOBASE_0 0x020
211 #define PRESENT_IOBASE_1 0x040
212 #define PRESENT_IOBASE_2 0x080
213 #define PRESENT_IOBASE_3 0x100
214 #define PRESENT_IOSIZE 0x200
216 /* For GetMemPage, MapMemPage */
217 typedef struct memreq_t
{
222 /* For ModifyWindow */
223 typedef struct modwin_t
{
228 /* For RequestWindow */
229 typedef struct win_req_t
{
236 /* Attributes for RequestWindow */
237 #define WIN_ADDR_SPACE 0x0001
238 #define WIN_ADDR_SPACE_MEM 0x0000
239 #define WIN_ADDR_SPACE_IO 0x0001
240 #define WIN_MEMORY_TYPE 0x0002
241 #define WIN_MEMORY_TYPE_CM 0x0000
242 #define WIN_MEMORY_TYPE_AM 0x0002
243 #define WIN_ENABLE 0x0004
244 #define WIN_DATA_WIDTH 0x0018
245 #define WIN_DATA_WIDTH_8 0x0000
246 #define WIN_DATA_WIDTH_16 0x0008
247 #define WIN_DATA_WIDTH_32 0x0010
248 #define WIN_PAGED 0x0020
249 #define WIN_SHARED 0x0040
250 #define WIN_FIRST_SHARED 0x0080
251 #define WIN_USE_WAIT 0x0100
252 #define WIN_STRICT_ALIGN 0x0200
253 #define WIN_MAP_BELOW_1MB 0x0400
254 #define WIN_PREFETCH 0x0800
255 #define WIN_CACHEABLE 0x1000
256 #define WIN_BAR_MASK 0xe000
257 #define WIN_BAR_SHIFT 13
259 /* Attributes for RegisterClient -- UNUSED -- */
260 #define INFO_MASTER_CLIENT 0x01
261 #define INFO_IO_CLIENT 0x02
262 #define INFO_MTD_CLIENT 0x04
263 #define INFO_MEM_CLIENT 0x08
264 #define MAX_NUM_CLIENTS 3
266 #define INFO_CARD_SHARE 0x10
267 #define INFO_CARD_EXCL 0x20
269 typedef struct cs_status_t
{
275 typedef struct error_info_t
{
280 /* Flag to bind to all functions */
281 #define BIND_FN_ALL 0xff
284 #define CS_EVENT_PRI_LOW 0
285 #define CS_EVENT_PRI_HIGH 1
287 #define CS_EVENT_WRITE_PROTECT 0x000001
288 #define CS_EVENT_CARD_LOCK 0x000002
289 #define CS_EVENT_CARD_INSERTION 0x000004
290 #define CS_EVENT_CARD_REMOVAL 0x000008
291 #define CS_EVENT_BATTERY_DEAD 0x000010
292 #define CS_EVENT_BATTERY_LOW 0x000020
293 #define CS_EVENT_READY_CHANGE 0x000040
294 #define CS_EVENT_CARD_DETECT 0x000080
295 #define CS_EVENT_RESET_REQUEST 0x000100
296 #define CS_EVENT_RESET_PHYSICAL 0x000200
297 #define CS_EVENT_CARD_RESET 0x000400
298 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
299 #define CS_EVENT_PM_SUSPEND 0x002000
300 #define CS_EVENT_PM_RESUME 0x004000
301 #define CS_EVENT_INSERTION_REQUEST 0x008000
302 #define CS_EVENT_EJECTION_REQUEST 0x010000
303 #define CS_EVENT_MTD_REQUEST 0x020000
304 #define CS_EVENT_ERASE_COMPLETE 0x040000
305 #define CS_EVENT_REQUEST_ATTENTION 0x080000
306 #define CS_EVENT_CB_DETECT 0x100000
307 #define CS_EVENT_3VCARD 0x200000
308 #define CS_EVENT_XVCARD 0x400000
311 #define CS_SUCCESS 0x00
312 #define CS_BAD_ADAPTER 0x01
313 #define CS_BAD_ATTRIBUTE 0x02
314 #define CS_BAD_BASE 0x03
315 #define CS_BAD_EDC 0x04
316 #define CS_BAD_IRQ 0x06
317 #define CS_BAD_OFFSET 0x07
318 #define CS_BAD_PAGE 0x08
319 #define CS_READ_FAILURE 0x09
320 #define CS_BAD_SIZE 0x0a
321 #define CS_BAD_SOCKET 0x0b
322 #define CS_BAD_TYPE 0x0d
323 #define CS_BAD_VCC 0x0e
324 #define CS_BAD_VPP 0x0f
325 #define CS_BAD_WINDOW 0x11
326 #define CS_WRITE_FAILURE 0x12
327 #define CS_NO_CARD 0x14
328 #define CS_UNSUPPORTED_FUNCTION 0x15
329 #define CS_UNSUPPORTED_MODE 0x16
330 #define CS_BAD_SPEED 0x17
332 #define CS_GENERAL_FAILURE 0x19
333 #define CS_WRITE_PROTECTED 0x1a
334 #define CS_BAD_ARG_LENGTH 0x1b
335 #define CS_BAD_ARGS 0x1c
336 #define CS_CONFIGURATION_LOCKED 0x1d
337 #define CS_IN_USE 0x1e
338 #define CS_NO_MORE_ITEMS 0x1f
339 #define CS_OUT_OF_RESOURCE 0x20
340 #define CS_BAD_HANDLE 0x21
342 #define CS_BAD_TUPLE 0x40
347 * The main Card Services entry point
351 AccessConfigurationRegister
, AddSocketServices
,
352 AdjustResourceInfo
, CheckEraseQueue
, CloseMemory
, CopyMemory
,
353 DeregisterClient
, DeregisterEraseQueue
, GetCardServicesInfo
,
354 GetClientInfo
, GetConfigurationInfo
, GetEventMask
,
355 GetFirstClient
, GetFirstPartion
, GetFirstRegion
, GetFirstTuple
,
356 GetNextClient
, GetNextPartition
, GetNextRegion
, GetNextTuple
,
357 GetStatus
, GetTupleData
, MapLogSocket
, MapLogWindow
, MapMemPage
,
358 MapPhySocket
, MapPhyWindow
, ModifyConfiguration
, ModifyWindow
,
359 OpenMemory
, ParseTuple
, ReadMemory
, RegisterClient
,
360 RegisterEraseQueue
, RegisterMTD
, RegisterTimer
,
361 ReleaseConfiguration
, ReleaseExclusive
, ReleaseIO
, ReleaseIRQ
,
362 ReleaseSocketMask
, ReleaseWindow
, ReplaceSocketServices
,
363 RequestConfiguration
, RequestExclusive
, RequestIO
, RequestIRQ
,
364 RequestSocketMask
, RequestWindow
, ResetCard
, ReturnSSEntry
,
365 SetEventMask
, SetRegion
, ValidateCIS
, VendorSpecific
,
366 WriteMemory
, BindDevice
, BindMTD
, ReportError
,
367 SuspendCard
, ResumeCard
, EjectCard
, InsertCard
, ReplaceCIS
,
368 GetFirstWindow
, GetNextWindow
, GetMemPage
371 struct pcmcia_socket
;
373 int pcmcia_access_configuration_register(struct pcmcia_device
*p_dev
, conf_reg_t
*reg
);
374 int pcmcia_get_configuration_info(struct pcmcia_device
*p_dev
, config_info_t
*config
);
375 int pcmcia_get_first_window(window_handle_t
*win
, win_req_t
*req
);
376 int pcmcia_get_next_window(window_handle_t
*win
, win_req_t
*req
);
377 int pcmcia_get_status(struct pcmcia_device
*p_dev
, cs_status_t
*status
);
378 int pcmcia_get_mem_page(window_handle_t win
, memreq_t
*req
);
379 int pcmcia_map_mem_page(window_handle_t win
, memreq_t
*req
);
380 int pcmcia_modify_configuration(struct pcmcia_device
*p_dev
, modconf_t
*mod
);
381 int pcmcia_release_configuration(struct pcmcia_device
*p_dev
);
382 int pcmcia_release_io(struct pcmcia_device
*p_dev
, io_req_t
*req
);
383 int pcmcia_release_irq(struct pcmcia_device
*p_dev
, irq_req_t
*req
);
384 int pcmcia_release_window(window_handle_t win
);
385 int pcmcia_request_configuration(struct pcmcia_device
*p_dev
, config_req_t
*req
);
386 int pcmcia_request_io(struct pcmcia_device
*p_dev
, io_req_t
*req
);
387 int pcmcia_request_irq(struct pcmcia_device
*p_dev
, irq_req_t
*req
);
388 int pcmcia_request_window(struct pcmcia_device
**p_dev
, win_req_t
*req
, window_handle_t
*wh
);
389 int pcmcia_suspend_card(struct pcmcia_socket
*skt
);
390 int pcmcia_resume_card(struct pcmcia_socket
*skt
);
391 int pcmcia_eject_card(struct pcmcia_socket
*skt
);
392 int pcmcia_insert_card(struct pcmcia_socket
*skt
);
393 int pccard_reset_card(struct pcmcia_socket
*skt
);
395 void pcmcia_disable_device(struct pcmcia_device
*p_dev
);
397 struct pcmcia_socket
* pcmcia_get_socket(struct pcmcia_socket
*skt
);
398 void pcmcia_put_socket(struct pcmcia_socket
*skt
);
400 /* compatibility functions */
401 #define pcmcia_reset_card(p_dev, req) \
402 pccard_reset_card(p_dev->socket)
404 #endif /* __KERNEL__ */
406 #endif /* _LINUX_CS_H */