1 #ifndef	_CYCLOMX_H
2 #define	_CYCLOMX_H
3 /*
4 * cyclomx.h	Cyclom 2X WAN Link Driver.
5 *		User-level API definitions.
6 *
7 * Author:	Arnaldo Carvalho de Melo <acme@conectiva.com.br>
8 *
9 * Copyright:	(c) 1998-2003 Arnaldo Carvalho de Melo
10 *
11 * Based on wanpipe.h by Gene Kozin <genek@compuserve.com>
12 *
13 *		This program is free software; you can redistribute it and/or
14 *		modify it under the terms of the GNU General Public License
15 *		as published by the Free Software Foundation; either version
16 *		2 of the License, or (at your option) any later version.
17 * ============================================================================
18 * 2000/07/13    acme		remove crap #if KERNEL_VERSION > blah
19 * 2000/01/21    acme            rename cyclomx_open to cyclomx_mod_inc_use_count
20 *                               and cyclomx_close to cyclomx_mod_dec_use_count
21 * 1999/05/19	acme		wait_queue_head_t wait_stats(support for 2.3.*)
22 * 1999/01/03	acme		judicious use of data types
23 * 1998/12/27	acme		cleanup: PACKED not needed
24 * 1998/08/08	acme		Version 0.0.1
25 */
26 
27 #include <linux/wanrouter.h>
28 #include <linux/spinlock.h>
29 
30 #ifdef	__KERNEL__
31 /* Kernel Interface */
32 
33 #include <linux/cycx_drv.h>	/* Cyclom 2X support module API definitions */
34 #include <linux/cycx_cfm.h>	/* Cyclom 2X firmware module definitions */
35 #ifdef CONFIG_CYCLOMX_X25
36 #include <linux/cycx_x25.h>
37 #endif
38 
39 /* Adapter Data Space.
40  * This structure is needed because we handle multiple cards, otherwise
41  * static data would do it.
42  */
43 struct cycx_device {
44 	char devname[WAN_DRVNAME_SZ + 1];/* card name */
45 	struct cycx_hw hw;		/* hardware configuration */
46 	struct wan_device wandev;	/* WAN device data space */
47 	u32 state_tick;			/* link state timestamp */
48 	spinlock_t lock;
49 	char in_isr;			/* interrupt-in-service flag */
50 	char buff_int_mode_unbusy;      /* flag for carrying out dev_tint */
51 	wait_queue_head_t wait_stats;  /* to wait for the STATS indication */
52 	void __iomem *mbox;			/* -> mailbox */
53 	void (*isr)(struct cycx_device* card);	/* interrupt service routine */
54 	int (*exec)(struct cycx_device* card, void* u_cmd, void* u_data);
55 	union {
56 #ifdef CONFIG_CYCLOMX_X25
57 		struct { /* X.25 specific data */
58 			u32 lo_pvc;
59 			u32 hi_pvc;
60 			u32 lo_svc;
61 			u32 hi_svc;
62 			struct cycx_x25_stats stats;
63 			spinlock_t lock;
64 			u32 connection_keys;
65 		} x;
66 #endif
67 	} u;
68 };
69 
70 /* Public Functions */
71 void cycx_set_state(struct cycx_device *card, int state);
72 
73 #ifdef CONFIG_CYCLOMX_X25
74 int cycx_x25_wan_init(struct cycx_device *card, wandev_conf_t *conf);
75 #endif
76 #endif	/* __KERNEL__ */
77 #endif	/* _CYCLOMX_H */
78