|
|
1.1 root 1: /*
2: * cs.h 1.74 2001/10/04 03:15:22
3: *
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/
8: *
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.
13: *
14: * The initial developer of the original code is David A. Hinds
15: * <[email protected]>. Portions created by David A. Hinds
16: * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
17: *
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
20: * which 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.
28: */
29:
30: #ifndef _LINUX_CS_H
31: #define _LINUX_CS_H
32:
33: /* For AccessConfigurationRegister */
34: typedef struct conf_reg_t {
35: u_char Function;
36: u_int Action;
37: off_t Offset;
38: u_int Value;
39: } conf_reg_t;
40:
41: /* Actions */
42: #define CS_READ 1
43: #define CS_WRITE 2
44:
45: /* for AdjustResourceInfo */
46: typedef struct adjust_t {
47: u_int Action;
48: u_int Resource;
49: u_int Attributes;
50: union {
51: struct memory {
52: u_long Base;
53: u_long Size;
54: } memory;
55: struct io {
56: ioaddr_t BasePort;
57: ioaddr_t NumPorts;
58: u_int IOAddrLines;
59: } io;
60: struct irq {
61: u_int IRQ;
62: } irq;
63: } resource;
64: } adjust_t;
65:
66: /* Action field */
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
71: /* Resource field */
72: #define RES_MEMORY_RANGE 1
73: #define RES_IO_RANGE 2
74: #define RES_IRQ 3
75: /* Attribute field */
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
85:
86: typedef struct servinfo_t {
87: char Signature[2];
88: u_int Count;
89: u_int Revision;
90: u_int CSLevel;
91: char *VendorString;
92: } servinfo_t;
93:
94: typedef struct event_callback_args_t {
95: client_handle_t client_handle;
96: void *info;
97: void *mtdrequest;
98: void *buffer;
99: void *misc;
100: void *client_data;
101: struct bus_operations *bus;
102: } event_callback_args_t;
103:
104: /* for GetConfigurationInfo */
105: typedef struct config_info_t {
106: u_char Function;
107: u_int Attributes;
108: u_int Vcc, Vpp1, Vpp2;
109: u_int IntType;
110: u_int ConfigBase;
111: u_char Status, Pin, Copy, Option, ExtStatus;
112: u_int Present;
113: u_int CardValues;
114: u_int AssignedIRQ;
115: u_int IRQAttributes;
116: ioaddr_t BasePort1;
117: ioaddr_t NumPorts1;
118: u_int Attributes1;
119: ioaddr_t BasePort2;
120: ioaddr_t NumPorts2;
121: u_int Attributes2;
122: u_int IOAddrLines;
123: } config_info_t;
124:
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
131:
132: /* For GetFirst/NextClient */
133: typedef struct client_req_t {
134: socket_t Socket;
135: u_int Attributes;
136: } client_req_t;
137:
138: #define CLIENT_THIS_SOCKET 0x01
139:
140: /* For RegisterClient */
141: typedef struct client_reg_t {
142: dev_info_t *dev_info;
143: u_int Attributes;
144: u_int EventMask;
145: int (*event_handler)(event_t event, int priority,
146: event_callback_args_t *);
147: event_callback_args_t event_callback_args;
148: u_int Version;
149: } client_reg_t;
150:
151: /* ModifyConfiguration */
152: typedef struct modconf_t {
153: u_int Attributes;
154: u_int Vcc, Vpp1, Vpp2;
155: } modconf_t;
156:
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
162:
163: /* For RequestConfiguration */
164: typedef struct config_req_t {
165: u_int Attributes;
166: u_int Vcc, Vpp1, Vpp2;
167: u_int IntType;
168: u_int ConfigBase;
169: u_char Status, Pin, Copy, ExtStatus;
170: u_char ConfigIndex;
171: u_int Present;
172: } config_req_t;
173:
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
179:
180: /* IntType field */
181: #define INT_MEMORY 0x01
182: #define INT_MEMORY_AND_IO 0x02
183: #define INT_CARDBUS 0x04
184: #define INT_ZOOMED_VIDEO 0x08
185:
186: /* For RequestIO and ReleaseIO */
187: typedef struct io_req_t {
188: ioaddr_t BasePort1;
189: ioaddr_t NumPorts1;
190: u_int Attributes1;
191: ioaddr_t BasePort2;
192: ioaddr_t NumPorts2;
193: u_int Attributes2;
194: u_int IOAddrLines;
195: } io_req_t;
196:
197: /* Attributes for RequestIO and ReleaseIO */
198: #define IO_SHARED 0x01
199: #define IO_FIRST_SHARED 0x02
200: #define IO_FORCE_ALIAS_ACCESS 0x04
201: #define IO_DATA_PATH_WIDTH 0x18
202: #define IO_DATA_PATH_WIDTH_8 0x00
203: #define IO_DATA_PATH_WIDTH_16 0x08
204: #define IO_DATA_PATH_WIDTH_AUTO 0x10
205:
206: /* For RequestIRQ and ReleaseIRQ */
207: typedef struct irq_req_t {
208: u_int Attributes;
209: u_int AssignedIRQ;
210: u_int IRQInfo1, IRQInfo2;
211: void *Handler;
212: void *Instance;
213: } irq_req_t;
214:
215: /* Attributes for RequestIRQ and ReleaseIRQ */
216: #define IRQ_TYPE 0x03
217: #define IRQ_TYPE_EXCLUSIVE 0x00
218: #define IRQ_TYPE_TIME 0x01
219: #define IRQ_TYPE_DYNAMIC_SHARING 0x02
220: #define IRQ_FORCED_PULSE 0x04
221: #define IRQ_FIRST_SHARED 0x08
222: #define IRQ_HANDLE_PRESENT 0x10
223: #define IRQ_PULSE_ALLOCATED 0x100
224:
225: /* Bits in IRQInfo1 field */
226: #define IRQ_MASK 0x0f
227: #define IRQ_NMI_ID 0x01
228: #define IRQ_IOCK_ID 0x02
229: #define IRQ_BERR_ID 0x04
230: #define IRQ_VEND_ID 0x08
231: #define IRQ_INFO2_VALID 0x10
232: #define IRQ_LEVEL_ID 0x20
233: #define IRQ_PULSE_ID 0x40
234: #define IRQ_SHARE_ID 0x80
235:
236: typedef struct eventmask_t {
237: u_int Attributes;
238: u_int EventMask;
239: } eventmask_t;
240:
241: #define CONF_EVENT_MASK_VALID 0x01
242:
243: /* Configuration registers present */
244: #define PRESENT_OPTION 0x001
245: #define PRESENT_STATUS 0x002
246: #define PRESENT_PIN_REPLACE 0x004
247: #define PRESENT_COPY 0x008
248: #define PRESENT_EXT_STATUS 0x010
249: #define PRESENT_IOBASE_0 0x020
250: #define PRESENT_IOBASE_1 0x040
251: #define PRESENT_IOBASE_2 0x080
252: #define PRESENT_IOBASE_3 0x100
253: #define PRESENT_IOSIZE 0x200
254:
255: /* For GetMemPage, MapMemPage */
256: typedef struct memreq_t {
257: u_int CardOffset;
258: page_t Page;
259: } memreq_t;
260:
261: /* For ModifyWindow */
262: typedef struct modwin_t {
263: u_int Attributes;
264: u_int AccessSpeed;
265: } modwin_t;
266:
267: /* For RequestWindow */
268: typedef struct win_req_t {
269: u_int Attributes;
270: u_long Base;
271: u_int Size;
272: u_int AccessSpeed;
273: } win_req_t;
274:
275: /* Attributes for RequestWindow */
276: #define WIN_ADDR_SPACE 0x0001
277: #define WIN_ADDR_SPACE_MEM 0x0000
278: #define WIN_ADDR_SPACE_IO 0x0001
279: #define WIN_MEMORY_TYPE 0x0002
280: #define WIN_MEMORY_TYPE_CM 0x0000
281: #define WIN_MEMORY_TYPE_AM 0x0002
282: #define WIN_ENABLE 0x0004
283: #define WIN_DATA_WIDTH 0x0018
284: #define WIN_DATA_WIDTH_8 0x0000
285: #define WIN_DATA_WIDTH_16 0x0008
286: #define WIN_DATA_WIDTH_32 0x0010
287: #define WIN_PAGED 0x0020
288: #define WIN_SHARED 0x0040
289: #define WIN_FIRST_SHARED 0x0080
290: #define WIN_USE_WAIT 0x0100
291: #define WIN_STRICT_ALIGN 0x0200
292: #define WIN_MAP_BELOW_1MB 0x0400
293: #define WIN_PREFETCH 0x0800
294: #define WIN_CACHEABLE 0x1000
295: #define WIN_BAR_MASK 0xe000
296: #define WIN_BAR_SHIFT 13
297:
298: /* Attributes for RegisterClient */
299: #define INFO_MASTER_CLIENT 0x01
300: #define INFO_IO_CLIENT 0x02
301: #define INFO_MTD_CLIENT 0x04
302: #define INFO_MEM_CLIENT 0x08
303: #define MAX_NUM_CLIENTS 3
304:
305: #define INFO_CARD_SHARE 0x10
306: #define INFO_CARD_EXCL 0x20
307:
308: typedef struct cs_status_t {
309: u_char Function;
310: event_t CardState;
311: event_t SocketState;
312: } cs_status_t;
313:
314: typedef struct error_info_t {
315: int func;
316: int retcode;
317: } error_info_t;
318:
319: /* Special stuff for binding drivers to sockets */
320: typedef struct bind_req_t {
321: socket_t Socket;
322: u_char Function;
323: dev_info_t *dev_info;
324: } bind_req_t;
325:
326: /* Flag to bind to all functions */
327: #define BIND_FN_ALL 0xff
328:
329: typedef struct mtd_bind_t {
330: socket_t Socket;
331: u_int Attributes;
332: u_int CardOffset;
333: dev_info_t *dev_info;
334: } mtd_bind_t;
335:
336: /* Events */
337: #define CS_EVENT_PRI_LOW 0
338: #define CS_EVENT_PRI_HIGH 1
339:
340: #define CS_EVENT_WRITE_PROTECT 0x000001
341: #define CS_EVENT_CARD_LOCK 0x000002
342: #define CS_EVENT_CARD_INSERTION 0x000004
343: #define CS_EVENT_CARD_REMOVAL 0x000008
344: #define CS_EVENT_BATTERY_DEAD 0x000010
345: #define CS_EVENT_BATTERY_LOW 0x000020
346: #define CS_EVENT_READY_CHANGE 0x000040
347: #define CS_EVENT_CARD_DETECT 0x000080
348: #define CS_EVENT_RESET_REQUEST 0x000100
349: #define CS_EVENT_RESET_PHYSICAL 0x000200
350: #define CS_EVENT_CARD_RESET 0x000400
351: #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
352: #define CS_EVENT_RESET_COMPLETE 0x001000
353: #define CS_EVENT_PM_SUSPEND 0x002000
354: #define CS_EVENT_PM_RESUME 0x004000
355: #define CS_EVENT_INSERTION_REQUEST 0x008000
356: #define CS_EVENT_EJECTION_REQUEST 0x010000
357: #define CS_EVENT_MTD_REQUEST 0x020000
358: #define CS_EVENT_ERASE_COMPLETE 0x040000
359: #define CS_EVENT_REQUEST_ATTENTION 0x080000
360: #define CS_EVENT_CB_DETECT 0x100000
361: #define CS_EVENT_3VCARD 0x200000
362: #define CS_EVENT_XVCARD 0x400000
363:
364: /* Return codes */
365: #define CS_SUCCESS 0x00
366: #define CS_BAD_ADAPTER 0x01
367: #define CS_BAD_ATTRIBUTE 0x02
368: #define CS_BAD_BASE 0x03
369: #define CS_BAD_EDC 0x04
370: #define CS_BAD_IRQ 0x06
371: #define CS_BAD_OFFSET 0x07
372: #define CS_BAD_PAGE 0x08
373: #define CS_READ_FAILURE 0x09
374: #define CS_BAD_SIZE 0x0a
375: #define CS_BAD_SOCKET 0x0b
376: #define CS_BAD_TYPE 0x0d
377: #define CS_BAD_VCC 0x0e
378: #define CS_BAD_VPP 0x0f
379: #define CS_BAD_WINDOW 0x11
380: #define CS_WRITE_FAILURE 0x12
381: #define CS_NO_CARD 0x14
382: #define CS_UNSUPPORTED_FUNCTION 0x15
383: #define CS_UNSUPPORTED_MODE 0x16
384: #define CS_BAD_SPEED 0x17
385: #define CS_BUSY 0x18
386: #define CS_GENERAL_FAILURE 0x19
387: #define CS_WRITE_PROTECTED 0x1a
388: #define CS_BAD_ARG_LENGTH 0x1b
389: #define CS_BAD_ARGS 0x1c
390: #define CS_CONFIGURATION_LOCKED 0x1d
391: #define CS_IN_USE 0x1e
392: #define CS_NO_MORE_ITEMS 0x1f
393: #define CS_OUT_OF_RESOURCE 0x20
394: #define CS_BAD_HANDLE 0x21
395:
396: #define CS_BAD_TUPLE 0x40
397:
398: #ifdef __KERNEL__
399:
400: /*
401: * Calls to set up low-level "Socket Services" drivers
402: */
403:
404: typedef int (*ss_entry_t)(u_int sock, u_int cmd, void *arg);
405: extern int register_ss_entry(int nsock, ss_entry_t entry);
406: extern void unregister_ss_entry(ss_entry_t entry);
407:
408: /*
409: * The main Card Services entry point
410: */
411:
412: enum service {
413: AccessConfigurationRegister, AddSocketServices,
414: AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
415: DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
416: GetClientInfo, GetConfigurationInfo, GetEventMask,
417: GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
418: GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
419: GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
420: MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
421: OpenMemory, ParseTuple, ReadMemory, RegisterClient,
422: RegisterEraseQueue, RegisterMTD, RegisterTimer,
423: ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
424: ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
425: RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
426: RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
427: SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
428: WriteMemory, BindDevice, BindMTD, ReportError,
429: SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
430: GetFirstWindow, GetNextWindow, GetMemPage
431: };
432:
433: #ifdef IN_CARD_SERVICES
434: extern int CardServices(int func, void *a1, void *a2, void *a3);
435: #else
436: extern int CardServices(int func, ...);
437: #endif
438:
439: #endif /* __KERNEL__ */
440:
441: #endif /* _LINUX_CS_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.