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