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