2 * cs.h 1.69 1999/10/25 20:23:17
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@pcmcia.sourceforge.org>. 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.
33 /* For AccessConfigurationRegister */
34 typedef struct conf_reg_t
{
45 /* for AdjustResourceInfo */
46 typedef struct adjust_t
{
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
72 #define RES_MEMORY_RANGE 1
73 #define RES_IO_RANGE 2
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
{
94 typedef struct event_callback_args_t
{
95 client_handle_t client_handle
;
101 struct bus_operations
*bus
;
102 } event_callback_args_t
;
104 /* for GetConfigurationInfo */
105 typedef struct config_info_t
{
108 u_int Vcc
, Vpp1
, Vpp2
;
111 u_char Status
, Pin
, Copy
, Option
, ExtStatus
;
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
{
138 #define CLIENT_THIS_SOCKET 0x01
140 /* For RegisterClient */
141 typedef struct client_reg_t
{
142 dev_info_t
*dev_info
;
145 int (*event_handler
)(event_t event
, int priority
,
146 event_callback_args_t
*);
147 event_callback_args_t event_callback_args
;
151 /* ModifyConfiguration */
152 typedef struct modconf_t
{
154 u_int Vcc
, Vpp1
, Vpp2
;
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
{
166 u_int Vcc
, Vpp1
, Vpp2
;
169 u_char Status
, Pin
, Copy
, ExtStatus
;
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
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
{
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
{
209 u_int IRQInfo1
, IRQInfo2
;
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
{
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
{
265 /* For ModifyWindow */
266 typedef struct modwin_t
{
271 /* For RequestWindow */
272 typedef struct 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_STRICT_ALIGN 0x0200
296 #define WIN_MAP_BELOW_1MB 0x0400
297 #define WIN_PREFETCH 0x0800
298 #define WIN_CACHEABLE 0x1000
299 #define WIN_BAR_MASK 0xe000
300 #define WIN_BAR_SHIFT 13
302 /* Attributes for RegisterClient */
303 #define INFO_MASTER_CLIENT 0x01
304 #define INFO_IO_CLIENT 0x02
305 #define INFO_MTD_CLIENT 0x04
306 #define INFO_MEM_CLIENT 0x08
307 #define MAX_NUM_CLIENTS 3
309 #define INFO_CARD_SHARE 0x10
310 #define INFO_CARD_EXCL 0x20
312 typedef struct cs_status_t
{
318 typedef struct error_info_t
{
323 /* Special stuff for binding drivers to sockets */
324 typedef struct bind_req_t
{
327 dev_info_t
*dev_info
;
330 /* Flag to bind to all functions */
331 #define BIND_FN_ALL 0xff
333 typedef struct mtd_bind_t
{
337 dev_info_t
*dev_info
;
341 #define CS_EVENT_PRI_LOW 0
342 #define CS_EVENT_PRI_HIGH 1
344 #define CS_EVENT_WRITE_PROTECT 0x000001
345 #define CS_EVENT_CARD_LOCK 0x000002
346 #define CS_EVENT_CARD_INSERTION 0x000004
347 #define CS_EVENT_CARD_REMOVAL 0x000008
348 #define CS_EVENT_BATTERY_DEAD 0x000010
349 #define CS_EVENT_BATTERY_LOW 0x000020
350 #define CS_EVENT_READY_CHANGE 0x000040
351 #define CS_EVENT_CARD_DETECT 0x000080
352 #define CS_EVENT_RESET_REQUEST 0x000100
353 #define CS_EVENT_RESET_PHYSICAL 0x000200
354 #define CS_EVENT_CARD_RESET 0x000400
355 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
356 #define CS_EVENT_RESET_COMPLETE 0x001000
357 #define CS_EVENT_PM_SUSPEND 0x002000
358 #define CS_EVENT_PM_RESUME 0x004000
359 #define CS_EVENT_INSERTION_REQUEST 0x008000
360 #define CS_EVENT_EJECTION_REQUEST 0x010000
361 #define CS_EVENT_MTD_REQUEST 0x020000
362 #define CS_EVENT_ERASE_COMPLETE 0x040000
363 #define CS_EVENT_REQUEST_ATTENTION 0x080000
364 #define CS_EVENT_CB_DETECT 0x100000
365 #define CS_EVENT_3VCARD 0x200000
366 #define CS_EVENT_XVCARD 0x400000
369 #define CS_SUCCESS 0x00
370 #define CS_BAD_ADAPTER 0x01
371 #define CS_BAD_ATTRIBUTE 0x02
372 #define CS_BAD_BASE 0x03
373 #define CS_BAD_EDC 0x04
374 #define CS_BAD_IRQ 0x06
375 #define CS_BAD_OFFSET 0x07
376 #define CS_BAD_PAGE 0x08
377 #define CS_READ_FAILURE 0x09
378 #define CS_BAD_SIZE 0x0a
379 #define CS_BAD_SOCKET 0x0b
380 #define CS_BAD_TYPE 0x0d
381 #define CS_BAD_VCC 0x0e
382 #define CS_BAD_VPP 0x0f
383 #define CS_BAD_WINDOW 0x11
384 #define CS_WRITE_FAILURE 0x12
385 #define CS_NO_CARD 0x14
386 #define CS_UNSUPPORTED_FUNCTION 0x15
387 #define CS_UNSUPPORTED_MODE 0x16
388 #define CS_BAD_SPEED 0x17
390 #define CS_GENERAL_FAILURE 0x19
391 #define CS_WRITE_PROTECTED 0x1a
392 #define CS_BAD_ARG_LENGTH 0x1b
393 #define CS_BAD_ARGS 0x1c
394 #define CS_CONFIGURATION_LOCKED 0x1d
395 #define CS_IN_USE 0x1e
396 #define CS_NO_MORE_ITEMS 0x1f
397 #define CS_OUT_OF_RESOURCE 0x20
398 #define CS_BAD_HANDLE 0x21
400 #define CS_BAD_TUPLE 0x40
405 * Calls to set up low-level "Socket Services" drivers
408 typedef int (*ss_entry_t
)(u_int sock
, u_int cmd
, void *arg
);
409 extern int register_ss_entry(int nsock
, ss_entry_t entry
);
410 extern void unregister_ss_entry(ss_entry_t entry
);
413 * The main Card Services entry point
417 AccessConfigurationRegister
, AddSocketServices
,
418 AdjustResourceInfo
, CheckEraseQueue
, CloseMemory
, CopyMemory
,
419 DeregisterClient
, DeregisterEraseQueue
, GetCardServicesInfo
,
420 GetClientInfo
, GetConfigurationInfo
, GetEventMask
,
421 GetFirstClient
, GetFirstPartion
, GetFirstRegion
, GetFirstTuple
,
422 GetNextClient
, GetNextPartition
, GetNextRegion
, GetNextTuple
,
423 GetStatus
, GetTupleData
, MapLogSocket
, MapLogWindow
, MapMemPage
,
424 MapPhySocket
, MapPhyWindow
, ModifyConfiguration
, ModifyWindow
,
425 OpenMemory
, ParseTuple
, ReadMemory
, RegisterClient
,
426 RegisterEraseQueue
, RegisterMTD
, RegisterTimer
,
427 ReleaseConfiguration
, ReleaseExclusive
, ReleaseIO
, ReleaseIRQ
,
428 ReleaseSocketMask
, ReleaseWindow
, ReplaceSocketServices
,
429 RequestConfiguration
, RequestExclusive
, RequestIO
, RequestIRQ
,
430 RequestSocketMask
, RequestWindow
, ResetCard
, ReturnSSEntry
,
431 SetEventMask
, SetRegion
, ValidateCIS
, VendorSpecific
,
432 WriteMemory
, BindDevice
, BindMTD
, ReportError
,
433 SuspendCard
, ResumeCard
, EjectCard
, InsertCard
, ReplaceCIS
,
434 GetFirstWindow
, GetNextWindow
, GetMemPage
437 #ifdef IN_CARD_SERVICES
438 extern int CardServices(int func
, void *a1
, void *a2
, void *a3
);
440 extern int CardServices(int func
, ...);
443 int pcmcia_access_configuration_register(client_handle_t handle
, conf_reg_t
*reg
);
444 int pcmcia_bind_device(bind_req_t
*req
);
445 int pcmcia_bind_mtd(mtd_bind_t
*req
);
446 int pcmcia_deregister_client(client_handle_t handle
);
447 int pcmcia_get_configuration_info(client_handle_t handle
, config_info_t
*config
);
448 int pcmcia_get_card_services_info(servinfo_t
*info
);
449 int pcmcia_get_first_client(client_handle_t
*handle
, client_req_t
*req
);
450 int pcmcia_get_next_client(client_handle_t
*handle
, client_req_t
*req
);
451 int pcmcia_get_window(window_handle_t
*handle
, int idx
, win_req_t
*req
);
452 int pcmcia_get_first_window(client_handle_t
*handle
, win_req_t
*req
);
453 int pcmcia_get_next_window(window_handle_t
*win
, win_req_t
*req
);
454 int pcmcia_get_status(client_handle_t handle
, cs_status_t
*status
);
455 int pcmcia_get_mem_page(window_handle_t win
, memreq_t
*req
);
456 int pcmcia_map_mem_page(window_handle_t win
, memreq_t
*req
);
457 int pcmcia_modify_configuration(client_handle_t handle
, modconf_t
*mod
);
458 int pcmcia_modify_window(window_handle_t win
, modwin_t
*req
);
459 int pcmcia_register_client(client_handle_t
*handle
, client_reg_t
*req
);
460 int pcmcia_release_configuration(client_handle_t handle
);
461 int pcmcia_release_io(client_handle_t handle
, io_req_t
*req
);
462 int pcmcia_release_irq(client_handle_t handle
, irq_req_t
*req
);
463 int pcmcia_release_window(window_handle_t win
);
464 int pcmcia_request_configuration(client_handle_t handle
, config_req_t
*req
);
465 int pcmcia_request_io(client_handle_t handle
, io_req_t
*req
);
466 int pcmcia_request_irq(client_handle_t handle
, irq_req_t
*req
);
467 int pcmcia_request_window(client_handle_t
*handle
, win_req_t
*req
);
468 int pcmcia_reset_card(client_handle_t handle
, client_req_t
*req
);
469 int pcmcia_suspend_card(client_handle_t handle
, client_req_t
*req
);
470 int pcmcia_resume_card(client_handle_t handle
, client_req_t
*req
);
471 int pcmcia_eject_card(client_handle_t handle
, client_req_t
*req
);
472 int pcmcia_insert_card(client_handle_t handle
, client_req_t
*req
);
473 int pcmcia_set_event_mask(client_handle_t handle
, eventmask_t
*mask
);
474 int pcmcia_report_error(client_handle_t handle
, error_info_t
*err
);
477 int pcmcia_adjust_resource_info(client_handle_t handle
, adjust_t
*adj
);
479 #endif /* __KERNEL__ */
481 #endif /* _LINUX_CS_H */