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 */
32 #define REMOVE_MANAGED_RESOURCE 1
33 #define ADD_MANAGED_RESOURCE 2
36 typedef struct event_callback_args_t {
37 struct pcmcia_device *client_handle;
39 } event_callback_args_t;
41 /* For CardValues field */
42 #define CV_OPTION_VALUE 0x01
43 #define CV_STATUS_VALUE 0x02
44 #define CV_PIN_REPLACEMENT 0x04
45 #define CV_COPY_VALUE 0x08
46 #define CV_EXT_STATUS 0x10
48 /* For GetFirst/NextClient */
49 typedef struct client_req_t {
54 #define CLIENT_THIS_SOCKET 0x01
56 /* ModifyConfiguration */
57 typedef struct modconf_t {
59 u_int Vcc, Vpp1, Vpp2;
62 /* Attributes for ModifyConfiguration */
63 #define CONF_IRQ_CHANGE_VALID 0x0100
64 #define CONF_VCC_CHANGE_VALID 0x0200
65 #define CONF_VPP1_CHANGE_VALID 0x0400
66 #define CONF_VPP2_CHANGE_VALID 0x0800
67 #define CONF_IO_CHANGE_WIDTH 0x1000
69 /* For RequestConfiguration */
70 typedef struct config_req_t {
72 u_int Vpp; /* both Vpp1 and Vpp2 */
75 u_char Status, Pin, Copy, ExtStatus;
80 /* Attributes for RequestConfiguration */
81 #define CONF_ENABLE_IRQ 0x01
82 #define CONF_ENABLE_DMA 0x02
83 #define CONF_ENABLE_SPKR 0x04
84 #define CONF_VALID_CLIENT 0x100
87 #define INT_MEMORY 0x01
88 #define INT_MEMORY_AND_IO 0x02
89 #define INT_CARDBUS 0x04
90 #define INT_ZOOMED_VIDEO 0x08
92 /* For RequestIO and ReleaseIO */
93 typedef struct io_req_t {
103 /* Attributes for RequestIO and ReleaseIO */
104 #define IO_SHARED 0x01
105 #define IO_FIRST_SHARED 0x02
106 #define IO_FORCE_ALIAS_ACCESS 0x04
107 #define IO_DATA_PATH_WIDTH 0x18
108 #define IO_DATA_PATH_WIDTH_8 0x00
109 #define IO_DATA_PATH_WIDTH_16 0x08
110 #define IO_DATA_PATH_WIDTH_AUTO 0x10
112 /* For RequestIRQ and ReleaseIRQ */
113 typedef struct irq_req_t {
116 u_int IRQInfo1, IRQInfo2; /* IRQInfo2 is ignored */
121 /* Attributes for RequestIRQ and ReleaseIRQ */
122 #define IRQ_TYPE 0x03
123 #define IRQ_TYPE_EXCLUSIVE 0x00
124 #define IRQ_TYPE_TIME 0x01
125 #define IRQ_TYPE_DYNAMIC_SHARING 0x02
126 #define IRQ_FORCED_PULSE 0x04
127 #define IRQ_FIRST_SHARED 0x08
128 #define IRQ_HANDLE_PRESENT 0x10
129 #define IRQ_PULSE_ALLOCATED 0x100
131 /* Bits in IRQInfo1 field */
132 #define IRQ_MASK 0x0f
133 #define IRQ_NMI_ID 0x01
134 #define IRQ_IOCK_ID 0x02
135 #define IRQ_BERR_ID 0x04
136 #define IRQ_VEND_ID 0x08
137 #define IRQ_INFO2_VALID 0x10
138 #define IRQ_LEVEL_ID 0x20
139 #define IRQ_PULSE_ID 0x40
140 #define IRQ_SHARE_ID 0x80
142 typedef struct eventmask_t {
147 #define CONF_EVENT_MASK_VALID 0x01
149 /* Configuration registers present */
150 #define PRESENT_OPTION 0x001
151 #define PRESENT_STATUS 0x002
152 #define PRESENT_PIN_REPLACE 0x004
153 #define PRESENT_COPY 0x008
154 #define PRESENT_EXT_STATUS 0x010
155 #define PRESENT_IOBASE_0 0x020
156 #define PRESENT_IOBASE_1 0x040
157 #define PRESENT_IOBASE_2 0x080
158 #define PRESENT_IOBASE_3 0x100
159 #define PRESENT_IOSIZE 0x200
161 /* For GetMemPage, MapMemPage */
162 typedef struct memreq_t {
167 /* For ModifyWindow */
168 typedef struct modwin_t {
173 /* For RequestWindow */
174 typedef struct win_req_t {
181 /* Attributes for RequestWindow */
182 #define WIN_ADDR_SPACE 0x0001
183 #define WIN_ADDR_SPACE_MEM 0x0000
184 #define WIN_ADDR_SPACE_IO 0x0001
185 #define WIN_MEMORY_TYPE 0x0002
186 #define WIN_MEMORY_TYPE_CM 0x0000
187 #define WIN_MEMORY_TYPE_AM 0x0002
188 #define WIN_ENABLE 0x0004
189 #define WIN_DATA_WIDTH 0x0018
190 #define WIN_DATA_WIDTH_8 0x0000
191 #define WIN_DATA_WIDTH_16 0x0008
192 #define WIN_DATA_WIDTH_32 0x0010
193 #define WIN_PAGED 0x0020
194 #define WIN_SHARED 0x0040
195 #define WIN_FIRST_SHARED 0x0080
196 #define WIN_USE_WAIT 0x0100
197 #define WIN_STRICT_ALIGN 0x0200
198 #define WIN_MAP_BELOW_1MB 0x0400
199 #define WIN_PREFETCH 0x0800
200 #define WIN_CACHEABLE 0x1000
201 #define WIN_BAR_MASK 0xe000
202 #define WIN_BAR_SHIFT 13
204 /* Attributes for RegisterClient -- UNUSED -- */
205 #define INFO_MASTER_CLIENT 0x01
206 #define INFO_IO_CLIENT 0x02
207 #define INFO_MTD_CLIENT 0x04
208 #define INFO_MEM_CLIENT 0x08
209 #define MAX_NUM_CLIENTS 3
211 #define INFO_CARD_SHARE 0x10
212 #define INFO_CARD_EXCL 0x20
214 typedef struct cs_status_t {
220 typedef struct error_info_t {
225 /* Flag to bind to all functions */
226 #define BIND_FN_ALL 0xff
229 #define CS_EVENT_PRI_LOW 0
230 #define CS_EVENT_PRI_HIGH 1
232 #define CS_EVENT_WRITE_PROTECT 0x000001
233 #define CS_EVENT_CARD_LOCK 0x000002
234 #define CS_EVENT_CARD_INSERTION 0x000004
235 #define CS_EVENT_CARD_REMOVAL 0x000008
236 #define CS_EVENT_BATTERY_DEAD 0x000010
237 #define CS_EVENT_BATTERY_LOW 0x000020
238 #define CS_EVENT_READY_CHANGE 0x000040
239 #define CS_EVENT_CARD_DETECT 0x000080
240 #define CS_EVENT_RESET_REQUEST 0x000100
241 #define CS_EVENT_RESET_PHYSICAL 0x000200
242 #define CS_EVENT_CARD_RESET 0x000400
243 #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
244 #define CS_EVENT_PM_SUSPEND 0x002000
245 #define CS_EVENT_PM_RESUME 0x004000
246 #define CS_EVENT_INSERTION_REQUEST 0x008000
247 #define CS_EVENT_EJECTION_REQUEST 0x010000
248 #define CS_EVENT_MTD_REQUEST 0x020000
249 #define CS_EVENT_ERASE_COMPLETE 0x040000
250 #define CS_EVENT_REQUEST_ATTENTION 0x080000
251 #define CS_EVENT_CB_DETECT 0x100000
252 #define CS_EVENT_3VCARD 0x200000
253 #define CS_EVENT_XVCARD 0x400000
259 * The main Card Services entry point
263 AccessConfigurationRegister, AddSocketServices,
264 AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
265 DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
266 GetClientInfo, GetConfigurationInfo, GetEventMask,
267 GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
268 GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
269 GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
270 MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
271 OpenMemory, ParseTuple, ReadMemory, RegisterClient,
272 RegisterEraseQueue, RegisterMTD, RegisterTimer,
273 ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
274 ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
275 RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
276 RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
277 SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
278 WriteMemory, BindDevice, BindMTD, ReportError,
279 SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
280 GetFirstWindow, GetNextWindow, GetMemPage
283 struct pcmcia_socket;
285 int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, conf_reg_t *reg);
286 int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
287 int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
288 int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
289 int pcmcia_release_window(window_handle_t win);
290 int pcmcia_request_configuration(struct pcmcia_device *p_dev, config_req_t *req);
291 int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req);
292 int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req);
293 int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_handle_t *wh);
294 int pcmcia_suspend_card(struct pcmcia_socket *skt);
295 int pcmcia_resume_card(struct pcmcia_socket *skt);
296 int pcmcia_eject_card(struct pcmcia_socket *skt);
297 int pcmcia_insert_card(struct pcmcia_socket *skt);
298 int pccard_reset_card(struct pcmcia_socket *skt);
300 struct pcmcia_device * pcmcia_dev_present(struct pcmcia_device *p_dev);
301 void pcmcia_disable_device(struct pcmcia_device *p_dev);
303 struct pcmcia_socket * pcmcia_get_socket(struct pcmcia_socket *skt);
304 void pcmcia_put_socket(struct pcmcia_socket *skt);
306 /* compatibility functions */
307 #define pcmcia_reset_card(p_dev, req) \
308 pccard_reset_card(p_dev->socket)
310 #endif /* __KERNEL__ */
312 #endif /* _LINUX_CS_H */