2 * cs.h 1.71 2000/08/29 00:54:20
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 * <dahinds@users.sourceforge.net>. 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 General 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 } event_callback_args_t
;
103 /* for GetConfigurationInfo */
104 typedef struct config_info_t
{
107 u_int Vcc
, Vpp1
, Vpp2
;
110 u_char Status
, Pin
, Copy
, Option
, ExtStatus
;
124 /* For CardValues field */
125 #define CV_OPTION_VALUE 0x01
126 #define CV_STATUS_VALUE 0x02
127 #define CV_PIN_REPLACEMENT 0x04
128 #define CV_COPY_VALUE 0x08
129 #define CV_EXT_STATUS 0x10
131 /* For GetFirst/NextClient */
132 typedef struct client_req_t
{
137 #define CLIENT_THIS_SOCKET 0x01
139 /* For RegisterClient */
140 typedef struct client_reg_t
{
141 dev_info_t
*dev_info
;
144 int (*event_handler
)(event_t event
, int priority
,
145 event_callback_args_t
*);
146 event_callback_args_t event_callback_args
;
150 /* ModifyConfiguration */
151 typedef struct modconf_t
{
153 u_int Vcc
, Vpp1
, Vpp2
;
156 /* Attributes for ModifyConfiguration */
157 #define CONF_IRQ_CHANGE_VALID 0x100
158 #define CONF_VCC_CHANGE_VALID 0x200
159 #define CONF_VPP1_CHANGE_VALID 0x400
160 #define CONF_VPP2_CHANGE_VALID 0x800
162 /* For RequestConfiguration */
163 typedef struct config_req_t
{
165 u_int Vcc
, Vpp1
, Vpp2
;
168 u_char Status
, Pin
, Copy
, ExtStatus
;
173 /* Attributes for RequestConfiguration */
174 #define CONF_ENABLE_IRQ 0x01
175 #define CONF_ENABLE_DMA 0x02
176 #define CONF_ENABLE_SPKR 0x04
177 #define CONF_VALID_CLIENT 0x100
180 #define INT_MEMORY 0x01
181 #define INT_MEMORY_AND_IO 0x02
182 #define INT_CARDBUS 0x04
183 #define INT_ZOOMED_VIDEO 0x08
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 /* For GetMemPage, MapMemPage */
255 typedef struct memreq_t
{
260 /* For ModifyWindow */
261 typedef struct modwin_t
{
266 /* For RequestWindow */
267 typedef struct win_req_t
{
274 /* Attributes for RequestWindow */
275 #define WIN_ADDR_SPACE 0x0001
276 #define WIN_ADDR_SPACE_MEM 0x0000
277 #define WIN_ADDR_SPACE_IO 0x0001
278 #define WIN_MEMORY_TYPE 0x0002
279 #define WIN_MEMORY_TYPE_CM 0x0000
280 #define WIN_MEMORY_TYPE_AM 0x0002
281 #define WIN_ENABLE 0x0004
282 #define WIN_DATA_WIDTH 0x0018
283 #define WIN_DATA_WIDTH_8 0x0000
284 #define WIN_DATA_WIDTH_16 0x0008
285 #define WIN_DATA_WIDTH_32 0x0010
286 #define WIN_PAGED 0x0020
287 #define WIN_SHARED 0x0040
288 #define WIN_FIRST_SHARED 0x0080
289 #define WIN_USE_WAIT 0x0100
290 #define WIN_STRICT_ALIGN 0x0200
291 #define WIN_MAP_BELOW_1MB 0x0400
292 #define WIN_PREFETCH 0x0800
293 #define WIN_CACHEABLE 0x1000
294 #define WIN_BAR_MASK 0xe000
295 #define WIN_BAR_SHIFT 13
297 /* Attributes for RegisterClient */
298 #define INFO_MASTER_CLIENT 0x01
299 #define INFO_IO_CLIENT 0x02
300 #define INFO_MTD_CLIENT 0x04
301 #define INFO_MEM_CLIENT 0x08
302 #define MAX_NUM_CLIENTS 3
304 #define INFO_CARD_SHARE 0x10
305 #define INFO_CARD_EXCL 0x20
307 typedef struct cs_status_t
{
313 typedef struct error_info_t
{
318 /* Special stuff for binding drivers to sockets */
319 typedef struct bind_req_t
{
320 struct pcmcia_socket
*Socket
;
322 dev_info_t
*dev_info
;
325 /* Flag to bind to all functions */
326 #define BIND_FN_ALL 0xff
328 typedef struct mtd_bind_t
{
329 struct pcmcia_socket
*Socket
;
332 dev_info_t
*dev_info
;
336 #define CS_EVENT_PRI_LOW 0
337 #define CS_EVENT_PRI_HIGH 1
339 #define CS_EVENT_WRITE_PROTECT 0x000001
340 #define CS_EVENT_CARD_LOCK 0x000002
341 #define CS_EVENT_CARD_INSERTION 0x000004
342 #define CS_EVENT_CARD_REMOVAL 0x000008
343 #define CS_EVENT_BATTERY_DEAD 0x000010
344 #define CS_EVENT_BATTERY_LOW 0x000020
345 #define CS_EVENT_READY_CHANGE 0x000040
346 #define CS_EVENT_CARD_DETECT 0x000080
347 #define CS_EVENT_RESET_REQUEST 0x000100
348 #define CS_EVENT_RESET_PHYSICAL 0x000200
349 #define CS_EVENT_CARD_RESET 0x000400
350 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
351 #define CS_EVENT_RESET_COMPLETE 0x001000
352 #define CS_EVENT_PM_SUSPEND 0x002000
353 #define CS_EVENT_PM_RESUME 0x004000
354 #define CS_EVENT_INSERTION_REQUEST 0x008000
355 #define CS_EVENT_EJECTION_REQUEST 0x010000
356 #define CS_EVENT_MTD_REQUEST 0x020000
357 #define CS_EVENT_ERASE_COMPLETE 0x040000
358 #define CS_EVENT_REQUEST_ATTENTION 0x080000
359 #define CS_EVENT_CB_DETECT 0x100000
360 #define CS_EVENT_3VCARD 0x200000
361 #define CS_EVENT_XVCARD 0x400000
364 #define CS_SUCCESS 0x00
365 #define CS_BAD_ADAPTER 0x01
366 #define CS_BAD_ATTRIBUTE 0x02
367 #define CS_BAD_BASE 0x03
368 #define CS_BAD_EDC 0x04
369 #define CS_BAD_IRQ 0x06
370 #define CS_BAD_OFFSET 0x07
371 #define CS_BAD_PAGE 0x08
372 #define CS_READ_FAILURE 0x09
373 #define CS_BAD_SIZE 0x0a
374 #define CS_BAD_SOCKET 0x0b
375 #define CS_BAD_TYPE 0x0d
376 #define CS_BAD_VCC 0x0e
377 #define CS_BAD_VPP 0x0f
378 #define CS_BAD_WINDOW 0x11
379 #define CS_WRITE_FAILURE 0x12
380 #define CS_NO_CARD 0x14
381 #define CS_UNSUPPORTED_FUNCTION 0x15
382 #define CS_UNSUPPORTED_MODE 0x16
383 #define CS_BAD_SPEED 0x17
385 #define CS_GENERAL_FAILURE 0x19
386 #define CS_WRITE_PROTECTED 0x1a
387 #define CS_BAD_ARG_LENGTH 0x1b
388 #define CS_BAD_ARGS 0x1c
389 #define CS_CONFIGURATION_LOCKED 0x1d
390 #define CS_IN_USE 0x1e
391 #define CS_NO_MORE_ITEMS 0x1f
392 #define CS_OUT_OF_RESOURCE 0x20
393 #define CS_BAD_HANDLE 0x21
395 #define CS_BAD_TUPLE 0x40
400 * The main Card Services entry point
404 AccessConfigurationRegister
, AddSocketServices
,
405 AdjustResourceInfo
, CheckEraseQueue
, CloseMemory
, CopyMemory
,
406 DeregisterClient
, DeregisterEraseQueue
, GetCardServicesInfo
,
407 GetClientInfo
, GetConfigurationInfo
, GetEventMask
,
408 GetFirstClient
, GetFirstPartion
, GetFirstRegion
, GetFirstTuple
,
409 GetNextClient
, GetNextPartition
, GetNextRegion
, GetNextTuple
,
410 GetStatus
, GetTupleData
, MapLogSocket
, MapLogWindow
, MapMemPage
,
411 MapPhySocket
, MapPhyWindow
, ModifyConfiguration
, ModifyWindow
,
412 OpenMemory
, ParseTuple
, ReadMemory
, RegisterClient
,
413 RegisterEraseQueue
, RegisterMTD
, RegisterTimer
,
414 ReleaseConfiguration
, ReleaseExclusive
, ReleaseIO
, ReleaseIRQ
,
415 ReleaseSocketMask
, ReleaseWindow
, ReplaceSocketServices
,
416 RequestConfiguration
, RequestExclusive
, RequestIO
, RequestIRQ
,
417 RequestSocketMask
, RequestWindow
, ResetCard
, ReturnSSEntry
,
418 SetEventMask
, SetRegion
, ValidateCIS
, VendorSpecific
,
419 WriteMemory
, BindDevice
, BindMTD
, ReportError
,
420 SuspendCard
, ResumeCard
, EjectCard
, InsertCard
, ReplaceCIS
,
421 GetFirstWindow
, GetNextWindow
, GetMemPage
424 int pcmcia_access_configuration_register(client_handle_t handle
, conf_reg_t
*reg
);
425 int pcmcia_deregister_client(client_handle_t handle
);
426 int pcmcia_get_configuration_info(client_handle_t handle
, config_info_t
*config
);
427 int pcmcia_get_card_services_info(servinfo_t
*info
);
428 int pcmcia_get_first_client(client_handle_t
*handle
, client_req_t
*req
);
429 int pcmcia_get_next_client(client_handle_t
*handle
, client_req_t
*req
);
430 int pcmcia_get_window(window_handle_t
*handle
, int idx
, win_req_t
*req
);
431 int pcmcia_get_first_window(window_handle_t
*win
, win_req_t
*req
);
432 int pcmcia_get_next_window(window_handle_t
*win
, win_req_t
*req
);
433 int pcmcia_get_status(client_handle_t handle
, cs_status_t
*status
);
434 int pcmcia_get_mem_page(window_handle_t win
, memreq_t
*req
);
435 int pcmcia_map_mem_page(window_handle_t win
, memreq_t
*req
);
436 int pcmcia_modify_configuration(client_handle_t handle
, modconf_t
*mod
);
437 int pcmcia_modify_window(window_handle_t win
, modwin_t
*req
);
438 int pcmcia_register_client(client_handle_t
*handle
, client_reg_t
*req
);
439 int pcmcia_release_configuration(client_handle_t handle
);
440 int pcmcia_release_io(client_handle_t handle
, io_req_t
*req
);
441 int pcmcia_release_irq(client_handle_t handle
, irq_req_t
*req
);
442 int pcmcia_release_window(window_handle_t win
);
443 int pcmcia_request_configuration(client_handle_t handle
, config_req_t
*req
);
444 int pcmcia_request_io(client_handle_t handle
, io_req_t
*req
);
445 int pcmcia_request_irq(client_handle_t handle
, irq_req_t
*req
);
446 int pcmcia_request_window(client_handle_t
*handle
, win_req_t
*req
, window_handle_t
*wh
);
447 int pcmcia_reset_card(client_handle_t handle
, client_req_t
*req
);
448 int pcmcia_suspend_card(struct pcmcia_socket
*skt
);
449 int pcmcia_resume_card(struct pcmcia_socket
*skt
);
450 int pcmcia_eject_card(struct pcmcia_socket
*skt
);
451 int pcmcia_insert_card(struct pcmcia_socket
*skt
);
452 int pcmcia_set_event_mask(client_handle_t handle
, eventmask_t
*mask
);
453 int pcmcia_report_error(client_handle_t handle
, error_info_t
*err
);
454 struct pci_bus
*pcmcia_lookup_bus(client_handle_t handle
);
457 int pcmcia_adjust_resource_info(client_handle_t handle
, adjust_t
*adj
);
459 #endif /* __KERNEL__ */
461 #endif /* _LINUX_CS_H */