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.
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_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
{
317 typedef struct error_info_t
{
322 /* Special stuff for binding drivers to sockets */
323 typedef struct bind_req_t
{
326 dev_info_t
*dev_info
;
329 /* Flag to bind to all functions */
330 #define BIND_FN_ALL 0xff
332 typedef struct mtd_bind_t
{
336 dev_info_t
*dev_info
;
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
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
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
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
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
);
439 extern int CardServices(int func
, ...);
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
;
466 #endif /* __KERNEL__ */
468 #endif /* _LINUX_CS_H */