1/*
2 * Siemens Gigaset 307x driver
3 * Common header file for all connection variants
4 *
5 * Written by Stefan Eilers
6 *        and Hansjoerg Lipp <hjlipp@web.de>
7 *
8 * =====================================================================
9 *	This program is free software; you can redistribute it and/or
10 *	modify it under the terms of the GNU General Public License as
11 *	published by the Free Software Foundation; either version 2 of
12 *	the License, or (at your option) any later version.
13 * =====================================================================
14 */
15
16#ifndef GIGASET_H
17#define GIGASET_H
18
19#include <linux/kernel.h>
20#include <linux/compiler.h>
21#include <linux/types.h>
22#include <linux/spinlock.h>
23#include <linux/isdnif.h>
24#include <linux/usb.h>
25#include <linux/skbuff.h>
26#include <linux/netdevice.h>
27#include <linux/ppp_defs.h>
28#include <linux/timer.h>
29#include <linux/interrupt.h>
30#include <linux/tty.h>
31#include <linux/tty_driver.h>
32#include <linux/list.h>
33#include <asm/atomic.h>
34
35#define GIG_VERSION {0,5,0,0}
36#define GIG_COMPAT  {0,4,0,0}
37
38#define MAX_REC_PARAMS 10	/* Max. number of params in response string */
39#define MAX_RESP_SIZE 512	/* Max. size of a response string */
40#define HW_HDR_LEN 2		/* Header size used to store ack info */
41
42#define MAX_EVENTS 64		/* size of event queue */
43
44#define RBUFSIZE 8192
45#define SBUFSIZE 4096		/* sk_buff payload size */
46
47#define TRANSBUFSIZE 768	/* bytes per skb for transparent receive */
48#define MAX_BUF_SIZE (SBUFSIZE - 2)	/* Max. size of a data packet from LL */
49
50/* compile time options */
51#define GIG_MAJOR 0
52
53#define GIG_MAYINITONDIAL
54#define GIG_RETRYCID
55#define GIG_X75
56
57#define GIG_TICK 100		/* in milliseconds */
58
59/* timeout values (unit: 1 sec) */
60#define INIT_TIMEOUT 1
61
62/* timeout values (unit: 0.1 sec) */
63#define RING_TIMEOUT 3		/* for additional parameters to RING */
64#define BAS_TIMEOUT 20		/* for response to Base USB ops */
65#define ATRDY_TIMEOUT 3		/* for HD_READY_SEND_ATDATA */
66
67#define BAS_RETRY 3		/* max. retries for base USB ops */
68
69#define MAXACT 3
70
71extern int gigaset_debuglevel;	/* "needs" cast to (enum debuglevel) */
72
73/* any combination of these can be given with the 'debug=' parameter to insmod,
74 * e.g. 'insmod usb_gigaset.o debug=0x2c' will set DEBUG_OPEN, DEBUG_CMD and
75 * DEBUG_INTR.
76 */
77enum debuglevel {
78	DEBUG_REG	  = 0x0002, /* serial port I/O register operations */
79	DEBUG_OPEN	  = 0x0004, /* open/close serial port */
80	DEBUG_INTR	  = 0x0008, /* interrupt processing */
81	DEBUG_INTR_DUMP	  = 0x0010, /* Activating hexdump debug output on
82				       interrupt requests, not available as
83				       run-time option */
84	DEBUG_CMD	  = 0x00020, /* sent/received LL commands */
85	DEBUG_STREAM	  = 0x00040, /* application data stream I/O events */
86	DEBUG_STREAM_DUMP = 0x00080, /* application data stream content */
87	DEBUG_LLDATA	  = 0x00100, /* sent/received LL data */
88	DEBUG_INTR_0	  = 0x00200, /* serial port interrupt processing */
89	DEBUG_DRIVER	  = 0x00400, /* driver structure */
90	DEBUG_HDLC	  = 0x00800, /* M10x HDLC processing */
91	DEBUG_WRITE	  = 0x01000, /* M105 data write */
92	DEBUG_TRANSCMD	  = 0x02000, /* AT-COMMANDS+RESPONSES */
93	DEBUG_MCMD	  = 0x04000, /* COMMANDS THAT ARE SENT VERY OFTEN */
94	DEBUG_INIT	  = 0x08000, /* (de)allocation+initialization of data
95					structures */
96	DEBUG_LOCK	  = 0x10000, /* semaphore operations */
97	DEBUG_OUTPUT	  = 0x20000, /* output to device */
98	DEBUG_ISO	  = 0x40000, /* isochronous transfers */
99	DEBUG_IF	  = 0x80000, /* character device operations */
100	DEBUG_USBREQ	  = 0x100000, /* USB communication (except payload
101					 data) */
102	DEBUG_LOCKCMD	  = 0x200000, /* AT commands and responses when
103					 MS_LOCKED */
104
105	DEBUG_ANY	  = 0x3fffff, /* print message if any of the others is
106					 activated */
107};
108
109/* missing from linux/device.h ... */
110#ifndef dev_notice
111#define dev_notice(dev, format, arg...)		\
112	dev_printk(KERN_NOTICE , dev , format , ## arg)
113#endif
114
115/* Kernel message macros for situations where dev_printk and friends cannot be
116 * used for lack of reliable access to a device structure.
117 * linux/usb.h already contains these but in an obsolete form which clutters
118 * the log needlessly, and according to the USB maintainer those should be
119 * removed rather than fixed anyway.
120 */
121#undef err
122#undef info
123#undef warn
124#undef notice
125
126#define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \
127	format "\n" , ## arg)
128#define info(format, arg...) printk(KERN_INFO KBUILD_MODNAME ": " \
129	format "\n" , ## arg)
130#define warn(format, arg...) printk(KERN_WARNING KBUILD_MODNAME ": " \
131	format "\n" , ## arg)
132#define notice(format, arg...) printk(KERN_NOTICE KBUILD_MODNAME ": " \
133	format "\n" , ## arg)
134
135#ifdef CONFIG_GIGASET_DEBUG
136
137#define gig_dbg(level, format, arg...) \
138	do { \
139		if (unlikely(((enum debuglevel)gigaset_debuglevel) & (level))) \
140			printk(KERN_DEBUG KBUILD_MODNAME ": " format "\n", \
141			       ## arg); \
142	} while (0)
143#define DEBUG_DEFAULT (DEBUG_TRANSCMD | DEBUG_CMD | DEBUG_USBREQ)
144
145#else
146
147#define gig_dbg(level, format, arg...) do {} while (0)
148#define DEBUG_DEFAULT 0
149
150#endif
151
152void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg,
153			size_t len, const unsigned char *buf);
154
155/* connection state */
156#define ZSAU_NONE			0
157#define ZSAU_DISCONNECT_IND		4
158#define ZSAU_OUTGOING_CALL_PROCEEDING	1
159#define ZSAU_PROCEEDING			1
160#define ZSAU_CALL_DELIVERED		2
161#define ZSAU_ACTIVE			3
162#define ZSAU_NULL			5
163#define ZSAU_DISCONNECT_REQ		6
164#define ZSAU_UNKNOWN			-1
165
166/* USB control transfer requests */
167#define OUT_VENDOR_REQ	(USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT)
168#define IN_VENDOR_REQ	(USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT)
169
170/* int-in-events 3070 */
171#define HD_B1_FLOW_CONTROL		0x80
172#define HD_B2_FLOW_CONTROL		0x81
173#define HD_RECEIVEATDATA_ACK		(0x35)		// 3070
174						// att: HD_RECEIVE>>AT<<DATA_ACK
175#define HD_READY_SEND_ATDATA		(0x36)		// 3070
176#define HD_OPEN_ATCHANNEL_ACK		(0x37)		// 3070
177#define HD_CLOSE_ATCHANNEL_ACK		(0x38)		// 3070
178#define HD_DEVICE_INIT_OK		(0x11)		// ISurf USB + 3070
179#define HD_OPEN_B1CHANNEL_ACK		(0x51)		// ISurf USB + 3070
180#define HD_OPEN_B2CHANNEL_ACK		(0x52)		// ISurf USB + 3070
181#define HD_CLOSE_B1CHANNEL_ACK		(0x53)		// ISurf USB + 3070
182#define HD_CLOSE_B2CHANNEL_ACK		(0x54)		// ISurf USB + 3070
183// 	 Powermangment
184#define HD_SUSPEND_END			(0x61)		// ISurf USB
185//   Configuration
186#define HD_RESET_INTERRUPT_PIPE_ACK	(0xFF)		// ISurf USB + 3070
187
188/* control requests 3070 */
189#define	HD_OPEN_B1CHANNEL		(0x23)		// ISurf USB + 3070
190#define	HD_CLOSE_B1CHANNEL		(0x24)		// ISurf USB + 3070
191#define	HD_OPEN_B2CHANNEL		(0x25)		// ISurf USB + 3070
192#define	HD_CLOSE_B2CHANNEL		(0x26)		// ISurf USB + 3070
193#define HD_RESET_INTERRUPT_PIPE		(0x27)		// ISurf USB + 3070
194#define	HD_DEVICE_INIT_ACK		(0x34)		// ISurf USB + 3070
195#define	HD_WRITE_ATMESSAGE		(0x12)		// 3070
196#define	HD_READ_ATMESSAGE		(0x13)		// 3070
197#define	HD_OPEN_ATCHANNEL		(0x28)		// 3070
198#define	HD_CLOSE_ATCHANNEL		(0x29)		// 3070
199
200/* USB frames for isochronous transfer */
201#define BAS_FRAMETIME	1	/* number of milliseconds between frames */
202#define BAS_NUMFRAMES	8	/* number of frames per URB */
203#define BAS_MAXFRAME	16	/* allocated bytes per frame */
204#define BAS_NORMFRAME	8	/* send size without flow control */
205#define BAS_HIGHFRAME	10	/* "    "    with positive flow control */
206#define BAS_LOWFRAME	5	/* "    "    with negative flow control */
207#define BAS_CORRFRAMES	4	/* flow control multiplicator */
208
209#define BAS_INBUFSIZE	(BAS_MAXFRAME * BAS_NUMFRAMES)
210					/* size of isoc in buf per URB */
211#define BAS_OUTBUFSIZE	4096		/* size of common isoc out buffer */
212#define BAS_OUTBUFPAD	BAS_MAXFRAME	/* size of pad area for isoc out buf */
213
214#define BAS_INURBS	3
215#define BAS_OUTURBS	3
216
217/* variable commands in struct bc_state */
218#define AT_ISO		0
219#define AT_DIAL		1
220#define AT_MSN		2
221#define AT_BC		3
222#define AT_PROTO	4
223#define AT_TYPE		5
224#define AT_HLC		6
225#define AT_NUM		7
226
227/* variables in struct at_state_t */
228#define VAR_ZSAU	0
229#define VAR_ZDLE	1
230#define VAR_ZVLS	2
231#define VAR_ZCTP	3
232#define VAR_NUM		4
233
234#define STR_NMBR	0
235#define STR_ZCPN	1
236#define STR_ZCON	2
237#define STR_ZBC		3
238#define STR_ZHLC	4
239#define STR_NUM		5
240
241#define EV_TIMEOUT	-105
242#define EV_IF_VER	-106
243#define EV_PROC_CIDMODE	-107
244#define EV_SHUTDOWN	-108
245#define EV_START	-110
246#define EV_STOP		-111
247#define EV_IF_LOCK	-112
248#define EV_PROTO_L2	-113
249#define EV_ACCEPT	-114
250#define EV_DIAL		-115
251#define EV_HUP		-116
252#define EV_BC_OPEN	-117
253#define EV_BC_CLOSED	-118
254
255/* input state */
256#define INS_command	0x0001
257#define INS_DLE_char	0x0002
258#define INS_byte_stuff	0x0004
259#define INS_have_data	0x0008
260#define INS_skip_frame	0x0010
261#define INS_DLE_command	0x0020
262#define INS_flag_hunt	0x0040
263
264/* channel state */
265#define CHS_D_UP	0x01
266#define CHS_B_UP	0x02
267#define CHS_NOTIFY_LL	0x04
268
269#define ICALL_REJECT	0
270#define ICALL_ACCEPT	1
271#define ICALL_IGNORE	2
272
273/* device state */
274#define MS_UNINITIALIZED	0
275#define MS_INIT			1
276#define MS_LOCKED		2
277#define MS_SHUTDOWN		3
278#define MS_RECOVER		4
279#define MS_READY		5
280
281/* mode */
282#define M_UNKNOWN	0
283#define M_CONFIG	1
284#define M_UNIMODEM	2
285#define M_CID		3
286
287/* start mode */
288#define SM_LOCKED	0
289#define SM_ISDN		1 /* default */
290
291struct gigaset_ops;
292struct gigaset_driver;
293
294struct usb_cardstate;
295struct ser_cardstate;
296struct bas_cardstate;
297
298struct bc_state;
299struct usb_bc_state;
300struct ser_bc_state;
301struct bas_bc_state;
302
303struct reply_t {
304	int	resp_code;	/* RSP_XXXX */
305	int	min_ConState;	/* <0 => ignore */
306	int	max_ConState;	/* <0 => ignore */
307	int	parameter;	/* e.g. ZSAU_XXXX <0: ignore*/
308	int	new_ConState;	/* <0 => ignore */
309	int	timeout;	/* >0 => *HZ; <=0 => TOUT_XXXX*/
310	int	action[MAXACT];	/* ACT_XXXX */
311	char	*command;	/* NULL==none */
312};
313
314extern struct reply_t gigaset_tab_cid_m10x[];
315extern struct reply_t gigaset_tab_nocid_m10x[];
316
317struct inbuf_t {
318	unsigned char		*rcvbuf;	/* usb-gigaset receive buffer */
319	struct bc_state		*bcs;
320	struct cardstate	*cs;
321	int			inputstate;
322	atomic_t		head, tail;
323	unsigned char		data[RBUFSIZE];
324};
325
326/* isochronous write buffer structure
327 * circular buffer with pad area for extraction of complete USB frames
328 * - data[read..nextread-1] is valid data already submitted to the USB subsystem
329 * - data[nextread..write-1] is valid data yet to be sent
330 * - data[write] is the next byte to write to
331 *   - in byte-oriented L2 procotols, it is completely free
332 *   - in bit-oriented L2 procotols, it may contain a partial byte of valid data
333 * - data[write+1..read-1] is free
334 * - wbits is the number of valid data bits in data[write], starting at the LSB
335 * - writesem is the semaphore for writing to the buffer:
336 *   if writesem <= 0, data[write..read-1] is currently being written to
337 * - idle contains the byte value to repeat when the end of valid data is
338 *   reached; if nextread==write (buffer contains no data to send), either the
339 *   BAS_OUTBUFPAD bytes immediately before data[write] (if
340 *   write>=BAS_OUTBUFPAD) or those of the pad area (if write<BAS_OUTBUFPAD)
341 *   are also filled with that value
342 */
343struct isowbuf_t {
344	atomic_t	read;
345	atomic_t	nextread;
346	atomic_t	write;
347	atomic_t	writesem;
348	int		wbits;
349	unsigned char	data[BAS_OUTBUFSIZE + BAS_OUTBUFPAD];
350	unsigned char	idle;
351};
352
353/* isochronous write URB context structure
354 * data to be stored along with the URB and retrieved when it is returned
355 * as completed by the USB subsystem
356 * - urb: pointer to the URB itself
357 * - bcs: pointer to the B Channel control structure
358 * - limit: end of write buffer area covered by this URB
359 */
360struct isow_urbctx_t {
361	struct urb *urb;
362	struct bc_state *bcs;
363	int limit;
364};
365
366/* AT state structure
367 * data associated with the state of an ISDN connection, whether or not
368 * it is currently assigned a B channel
369 */
370struct at_state_t {
371	struct list_head	list;
372	int			waiting;
373	int			getstring;
374	unsigned		timer_index;
375	unsigned long		timer_expires;
376	int			timer_active;
377	unsigned int		ConState;	/* State of connection */
378	struct reply_t		*replystruct;
379	int			cid;
380	int			int_var[VAR_NUM];	/* see VAR_XXXX */
381	char			*str_var[STR_NUM];	/* see STR_XXXX */
382	unsigned		pending_commands;	/* see PC_XXXX */
383	unsigned		seq_index;
384
385	struct cardstate	*cs;
386	struct bc_state		*bcs;
387};
388
389struct resp_type_t {
390	unsigned char	*response;
391	int		resp_code;	/* RSP_XXXX */
392	int		type;		/* RT_XXXX */
393};
394
395struct event_t {
396	int type;
397	void *ptr, *arg;
398	int parameter;
399	int cid;
400	struct at_state_t *at_state;
401};
402
403/* This buffer holds all information about the used B-Channel */
404struct bc_state {
405	struct sk_buff *tx_skb;		/* Current transfer buffer to modem */
406	struct sk_buff_head squeue;	/* B-Channel send Queue */
407
408	/* Variables for debugging .. */
409	int corrupted;			/* Counter for corrupted packages */
410	int trans_down;			/* Counter of packages (downstream) */
411	int trans_up;			/* Counter of packages (upstream) */
412
413	struct at_state_t at_state;
414	unsigned long rcvbytes;
415
416	__u16 fcs;
417	struct sk_buff *skb;
418	int inputstate;			/* see INS_XXXX */
419
420	int channel;
421
422	struct cardstate *cs;
423
424	unsigned chstate;		/* bitmap (CHS_*) */
425	int ignore;
426	unsigned proto2;		/* Layer 2 protocol (ISDN_PROTO_L2_*) */
427	char *commands[AT_NUM];		/* see AT_XXXX */
428
429#ifdef CONFIG_GIGASET_DEBUG
430	int emptycount;
431#endif
432	int busy;
433	int use_count;
434
435	/* private data of hardware drivers */
436	union {
437		struct ser_bc_state *ser;	/* serial hardware driver */
438		struct usb_bc_state *usb;	/* usb hardware driver (m105) */
439		struct bas_bc_state *bas;	/* usb hardware driver (base) */
440	} hw;
441};
442
443struct cardstate {
444	struct gigaset_driver *driver;
445	unsigned minor_index;
446	struct device *dev;
447	struct device *tty_dev;
448
449	const struct gigaset_ops *ops;
450
451	/* Stuff to handle communication */
452	wait_queue_head_t waitqueue;
453	int waiting;
454	atomic_t mode;			/* see M_XXXX */
455	atomic_t mstate;		/* Modem state: see MS_XXXX */
456					/* only changed by the event layer */
457	int cmd_result;
458
459	int channels;
460	struct bc_state *bcs;		/* Array of struct bc_state */
461
462	int onechannel;			/* data and commands transmitted in one
463					   stream (M10x) */
464
465	spinlock_t lock;
466	struct at_state_t at_state;	/* at_state_t for cid == 0 */
467	struct list_head temp_at_states;/* list of temporary "struct
468					   at_state_t"s without B channel */
469
470	struct inbuf_t *inbuf;
471
472	struct cmdbuf_t *cmdbuf, *lastcmdbuf;
473	spinlock_t cmdlock;
474	unsigned curlen, cmdbytes;
475
476	unsigned open_count;
477	struct tty_struct *tty;
478	struct tasklet_struct if_wake_tasklet;
479	unsigned control_state;
480
481	unsigned fwver[4];
482	int gotfwver;
483
484	unsigned running;		/* !=0 if events are handled */
485	unsigned connected;		/* !=0 if hardware is connected */
486	unsigned isdn_up;		/* !=0 after ISDN_STAT_RUN */
487
488	unsigned cidmode;
489
490	int myid;			/* id for communication with LL */
491	isdn_if iif;
492
493	struct reply_t *tabnocid;
494	struct reply_t *tabcid;
495	int cs_init;
496	int ignoreframes;		/* frames to ignore after setting up the
497					   B channel */
498	struct mutex mutex;		/* locks this structure:
499					 *   connected is not changed,
500					 *   hardware_up is not changed,
501					 *   MState is not changed to or from
502					 *   MS_LOCKED */
503
504	struct timer_list timer;
505	int retry_count;
506	int dle;			/* !=0 if modem commands/responses are
507					   dle encoded */
508	int cur_at_seq;			/* sequence of AT commands being
509					   processed */
510	int curchannel;			/* channel those commands are meant
511					   for */
512	atomic_t commands_pending;
513	struct tasklet_struct event_tasklet;
514	struct tasklet_struct write_tasklet;
515					/* tasklet for serial output
516					 * (not used in base driver) */
517
518	/* event queue */
519	struct event_t events[MAX_EVENTS];
520	unsigned ev_tail, ev_head;
521	spinlock_t ev_lock;
522
523	/* current modem response */
524	unsigned char respdata[MAX_RESP_SIZE];
525	unsigned cbytes;
526
527	/* private data of hardware drivers */
528	union {
529		struct usb_cardstate *usb; /* USB hardware driver (m105) */
530		struct ser_cardstate *ser; /* serial hardware driver */
531		struct bas_cardstate *bas; /* USB hardware driver (base) */
532	} hw;
533};
534
535struct gigaset_driver {
536	struct list_head list;
537	spinlock_t lock;		/* locks minor tables and blocked */
538	struct tty_driver *tty;
539	unsigned have_tty;
540	unsigned minor;
541	unsigned minors;
542	struct cardstate *cs;
543	unsigned *flags;
544	int blocked;
545
546	const struct gigaset_ops *ops;
547	struct module *owner;
548};
549
550struct cmdbuf_t {
551	struct cmdbuf_t *next, *prev;
552	int len, offset;
553	struct tasklet_struct *wake_tasklet;
554	unsigned char buf[0];
555};
556
557struct bas_bc_state {
558	/* isochronous output state */
559	atomic_t	running;
560	atomic_t	corrbytes;
561	spinlock_t	isooutlock;
562	struct isow_urbctx_t	isoouturbs[BAS_OUTURBS];
563	struct isow_urbctx_t	*isooutdone, *isooutfree, *isooutovfl;
564	struct isowbuf_t	*isooutbuf;
565	unsigned numsub;		/* submitted URB counter
566					   (for diagnostic messages only) */
567	struct tasklet_struct	sent_tasklet;
568
569	/* isochronous input state */
570	spinlock_t isoinlock;
571	struct urb *isoinurbs[BAS_INURBS];
572	unsigned char isoinbuf[BAS_INBUFSIZE * BAS_INURBS];
573	struct urb *isoindone;		/* completed isoc read URB */
574	int loststatus;			/* status of dropped URB */
575	unsigned isoinlost;		/* number of bytes lost */
576	/* state of bit unstuffing algorithm
577	   (in addition to BC_state.inputstate) */
578	unsigned seqlen;		/* number of '1' bits not yet
579					   unstuffed */
580	unsigned inbyte, inbits;	/* collected bits for next byte */
581	/* statistics */
582	unsigned goodbytes;		/* bytes correctly received */
583	unsigned alignerrs;		/* frames with incomplete byte at end */
584	unsigned fcserrs;		/* FCS errors */
585	unsigned frameerrs;		/* framing errors */
586	unsigned giants;		/* long frames */
587	unsigned runts;			/* short frames */
588	unsigned aborts;		/* HDLC aborts */
589	unsigned shared0s;		/* '0' bits shared between flags */
590	unsigned stolen0s;		/* '0' stuff bits also serving as
591					   leading flag bits */
592	struct tasklet_struct rcvd_tasklet;
593};
594
595struct gigaset_ops {
596	/* Called from ev-layer.c/interface.c for sending AT commands to the
597	   device */
598	int (*write_cmd)(struct cardstate *cs,
599			 const unsigned char *buf, int len,
600			 struct tasklet_struct *wake_tasklet);
601
602	/* Called from interface.c for additional device control */
603	int (*write_room)(struct cardstate *cs);
604	int (*chars_in_buffer)(struct cardstate *cs);
605	int (*brkchars)(struct cardstate *cs, const unsigned char buf[6]);
606
607	/* Called from ev-layer.c after setting up connection
608	 * Should call gigaset_bchannel_up(), when finished. */
609	int (*init_bchannel)(struct bc_state *bcs);
610
611	/* Called from ev-layer.c after hanging up
612	 * Should call gigaset_bchannel_down(), when finished. */
613	int (*close_bchannel)(struct bc_state *bcs);
614
615	int (*initbcshw)(struct bc_state *bcs);
616
617	int (*freebcshw)(struct bc_state *bcs);
618
619	void (*reinitbcshw)(struct bc_state *bcs);
620
621	int (*initcshw)(struct cardstate *cs);
622
623	void (*freecshw)(struct cardstate *cs);
624
625	/* Called from common.c/interface.c for additional serial port
626	   control */
627	int (*set_modem_ctrl)(struct cardstate *cs, unsigned old_state,
628			      unsigned new_state);
629	int (*baud_rate)(struct cardstate *cs, unsigned cflag);
630	int (*set_line_ctrl)(struct cardstate *cs, unsigned cflag);
631
632	/* Called from i4l.c to put an skb into the send-queue. */
633	int (*send_skb)(struct bc_state *bcs, struct sk_buff *skb);
634
635	/* Called from ev-layer.c to process a block of data
636	 * received through the common/control channel. */
637	void (*handle_input)(struct inbuf_t *inbuf);
638
639};
640
641/* = Common structures and definitions ======================================= */
642
643/* Parser states for DLE-Event:
644 * <DLE-EVENT>: <DLE_FLAG> "X" <EVENT> <DLE_FLAG> "."
645 * <DLE_FLAG>:  0x10
646 * <EVENT>:     ((a-z)* | (A-Z)* | (0-10)*)+
647 */
648#define DLE_FLAG	0x10
649
650/* ===========================================================================
651 *  Functions implemented in asyncdata.c
652 */
653
654/* Called from i4l.c to put an skb into the send-queue.
655 * After sending gigaset_skb_sent() should be called. */
656int gigaset_m10x_send_skb(struct bc_state *bcs, struct sk_buff *skb);
657
658/* Called from ev-layer.c to process a block of data
659 * received through the common/control channel. */
660void gigaset_m10x_input(struct inbuf_t *inbuf);
661
662/* ===========================================================================
663 *  Functions implemented in isocdata.c
664 */
665
666/* Called from i4l.c to put an skb into the send-queue.
667 * After sending gigaset_skb_sent() should be called. */
668int gigaset_isoc_send_skb(struct bc_state *bcs, struct sk_buff *skb);
669
670/* Called from ev-layer.c to process a block of data
671 * received through the common/control channel. */
672void gigaset_isoc_input(struct inbuf_t *inbuf);
673
674/* Called from bas-gigaset.c to process a block of data
675 * received through the isochronous channel */
676void gigaset_isoc_receive(unsigned char *src, unsigned count,
677			  struct bc_state *bcs);
678
679/* Called from bas-gigaset.c to put a block of data
680 * into the isochronous output buffer */
681int gigaset_isoc_buildframe(struct bc_state *bcs, unsigned char *in, int len);
682
683/* Called from bas-gigaset.c to initialize the isochronous output buffer */
684void gigaset_isowbuf_init(struct isowbuf_t *iwb, unsigned char idle);
685
686/* Called from bas-gigaset.c to retrieve a block of bytes for sending */
687int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size);
688
689/* ===========================================================================
690 *  Functions implemented in i4l.c/gigaset.h
691 */
692
693/* Called by gigaset_initcs() for setting up with the isdn4linux subsystem */
694int gigaset_register_to_LL(struct cardstate *cs, const char *isdnid);
695
696void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb);
697
698/* Called from common.c/ev-layer.c to indicate events relevant to the LL */
699int gigaset_isdn_icall(struct at_state_t *at_state);
700int gigaset_isdn_setup_accept(struct at_state_t *at_state);
701int gigaset_isdn_setup_dial(struct at_state_t *at_state, void *data);
702
703void gigaset_i4l_cmd(struct cardstate *cs, int cmd);
704void gigaset_i4l_channel_cmd(struct bc_state *bcs, int cmd);
705
706
707static inline void gigaset_isdn_rcv_err(struct bc_state *bcs)
708{
709	isdn_ctrl response;
710
711	/* error -> LL */
712	gig_dbg(DEBUG_CMD, "sending L1ERR");
713	response.driver = bcs->cs->myid;
714	response.command = ISDN_STAT_L1ERR;
715	response.arg = bcs->channel;
716	response.parm.errcode = ISDN_STAT_L1ERR_RECV;
717	bcs->cs->iif.statcallb(&response);
718}
719
720/* ===========================================================================
721 *  Functions implemented in ev-layer.c
722 */
723
724/* tasklet called from common.c to process queued events */
725void gigaset_handle_event(unsigned long data);
726
727/* called from isocdata.c / asyncdata.c
728 * when a complete modem response line has been received */
729void gigaset_handle_modem_response(struct cardstate *cs);
730
731/* ===========================================================================
732 *  Functions implemented in proc.c
733 */
734
735/* initialize sysfs for device */
736void gigaset_init_dev_sysfs(struct cardstate *cs);
737void gigaset_free_dev_sysfs(struct cardstate *cs);
738
739/* ===========================================================================
740 *  Functions implemented in common.c/gigaset.h
741 */
742
743void gigaset_bcs_reinit(struct bc_state *bcs);
744void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs,
745		     struct cardstate *cs, int cid);
746int gigaset_get_channel(struct bc_state *bcs);
747void gigaset_free_channel(struct bc_state *bcs);
748int gigaset_get_channels(struct cardstate *cs);
749void gigaset_free_channels(struct cardstate *cs);
750void gigaset_block_channels(struct cardstate *cs);
751
752/* Allocate and initialize driver structure. */
753struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors,
754					  const char *procname,
755					  const char *devname,
756					  const struct gigaset_ops *ops,
757					  struct module *owner);
758
759/* Deallocate driver structure. */
760void gigaset_freedriver(struct gigaset_driver *drv);
761void gigaset_debugdrivers(void);
762struct cardstate *gigaset_get_cs_by_tty(struct tty_struct *tty);
763struct cardstate *gigaset_get_cs_by_id(int id);
764
765/* For drivers without fixed assignment device<->cardstate (usb) */
766struct cardstate *gigaset_getunassignedcs(struct gigaset_driver *drv);
767void gigaset_unassign(struct cardstate *cs);
768void gigaset_blockdriver(struct gigaset_driver *drv);
769
770/* Allocate and initialize card state. Calls hardware dependent
771   gigaset_init[b]cs(). */
772struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,
773				 int onechannel, int ignoreframes,
774				 int cidmode, const char *modulename);
775
776/* Free card state. Calls hardware dependent gigaset_free[b]cs(). */
777void gigaset_freecs(struct cardstate *cs);
778
779/* Tell common.c that hardware and driver are ready. */
780int gigaset_start(struct cardstate *cs);
781
782/* Tell common.c that the device is not present any more. */
783void gigaset_stop(struct cardstate *cs);
784
785/* Tell common.c that the driver is being unloaded. */
786void gigaset_shutdown(struct cardstate *cs);
787
788/* Tell common.c that an skb has been sent. */
789void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb);
790
791/* Append event to the queue.
792 * Returns NULL on failure or a pointer to the event on success.
793 * ptr must be kmalloc()ed (and not be freed by the caller).
794 */
795struct event_t *gigaset_add_event(struct cardstate *cs,
796				  struct at_state_t *at_state, int type,
797				  void *ptr, int parameter, void *arg);
798
799/* Called on CONFIG1 command from frontend. */
800int gigaset_enterconfigmode(struct cardstate *cs); //0: success <0: errorcode
801
802/* cs->lock must not be locked */
803static inline void gigaset_schedule_event(struct cardstate *cs)
804{
805	unsigned long flags;
806	spin_lock_irqsave(&cs->lock, flags);
807	if (cs->running)
808		tasklet_schedule(&cs->event_tasklet);
809	spin_unlock_irqrestore(&cs->lock, flags);
810}
811
812/* Tell common.c that B channel has been closed. */
813/* cs->lock must not be locked */
814static inline void gigaset_bchannel_down(struct bc_state *bcs)
815{
816	gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_CLOSED, NULL, 0, NULL);
817
818	gig_dbg(DEBUG_CMD, "scheduling BC_CLOSED");
819	gigaset_schedule_event(bcs->cs);
820}
821
822/* Tell common.c that B channel has been opened. */
823/* cs->lock must not be locked */
824static inline void gigaset_bchannel_up(struct bc_state *bcs)
825{
826	gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_OPEN, NULL, 0, NULL);
827
828	gig_dbg(DEBUG_CMD, "scheduling BC_OPEN");
829	gigaset_schedule_event(bcs->cs);
830}
831
832/* handling routines for sk_buff */
833/* ============================= */
834
835/* pass received skb to LL
836 * Warning: skb must not be accessed anymore!
837 */
838static inline void gigaset_rcv_skb(struct sk_buff *skb,
839				   struct cardstate *cs,
840				   struct bc_state *bcs)
841{
842	cs->iif.rcvcallb_skb(cs->myid, bcs->channel, skb);
843	bcs->trans_down++;
844}
845
846/* handle reception of corrupted skb
847 * Warning: skb must not be accessed anymore!
848 */
849static inline void gigaset_rcv_error(struct sk_buff *procskb,
850				     struct cardstate *cs,
851				     struct bc_state *bcs)
852{
853	if (procskb)
854		dev_kfree_skb(procskb);
855
856	if (bcs->ignore)
857		--bcs->ignore;
858	else {
859		++bcs->corrupted;
860		gigaset_isdn_rcv_err(bcs);
861	}
862}
863
864/* append received bytes to inbuf */
865int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src,
866		       unsigned numbytes);
867
868/* ===========================================================================
869 *  Functions implemented in interface.c
870 */
871
872/* initialize interface */
873void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname,
874			   const char *devname);
875/* release interface */
876void gigaset_if_freedriver(struct gigaset_driver *drv);
877/* add minor */
878void gigaset_if_init(struct cardstate *cs);
879/* remove minor */
880void gigaset_if_free(struct cardstate *cs);
881/* device received data */
882void gigaset_if_receive(struct cardstate *cs,
883			unsigned char *buffer, size_t len);
884
885#endif
886