1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef GIGASET_H
17#define GIGASET_H
18
19
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 <linux/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
43#define MAX_RESP_SIZE 511
44
45#define MAX_EVENTS 64
46
47#define RBUFSIZE 8192
48
49#define GIG_TICK 100
50
51
52#define INIT_TIMEOUT 1
53
54
55#define RING_TIMEOUT 3
56#define BAS_TIMEOUT 20
57#define ATRDY_TIMEOUT 3
58
59#define BAS_RETRY 3
60
61#define MAXACT 3
62
63extern int gigaset_debuglevel;
64
65
66enum debuglevel {
67 DEBUG_INTR = 0x00008,
68 DEBUG_CMD = 0x00020,
69 DEBUG_STREAM = 0x00040,
70 DEBUG_STREAM_DUMP = 0x00080,
71 DEBUG_LLDATA = 0x00100,
72 DEBUG_EVENT = 0x00200,
73 DEBUG_HDLC = 0x00800,
74 DEBUG_CHANNEL = 0x01000,
75 DEBUG_TRANSCMD = 0x02000,
76 DEBUG_MCMD = 0x04000,
77 DEBUG_INIT = 0x08000,
78
79 DEBUG_SUSPEND = 0x10000,
80 DEBUG_OUTPUT = 0x20000,
81 DEBUG_ISO = 0x40000,
82 DEBUG_IF = 0x80000,
83 DEBUG_USBREQ = 0x100000,
84
85 DEBUG_LOCKCMD = 0x200000,
86
87
88 DEBUG_ANY = 0x3fffff,
89
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
109void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg,
110 size_t len, const unsigned char *buf);
111
112
113#define ZSAU_NONE 0
114#define ZSAU_PROCEEDING 1
115#define ZSAU_CALL_DELIVERED 2
116#define ZSAU_ACTIVE 3
117#define ZSAU_DISCONNECT_IND 4
118#define ZSAU_NULL 5
119#define ZSAU_DISCONNECT_REQ 6
120#define ZSAU_UNKNOWN -1
121
122
123#define OUT_VENDOR_REQ (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT)
124#define IN_VENDOR_REQ (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT)
125
126
127#define HD_B1_FLOW_CONTROL 0x80
128#define HD_B2_FLOW_CONTROL 0x81
129#define HD_RECEIVEATDATA_ACK (0x35)
130#define HD_READY_SEND_ATDATA (0x36)
131#define HD_OPEN_ATCHANNEL_ACK (0x37)
132#define HD_CLOSE_ATCHANNEL_ACK (0x38)
133#define HD_DEVICE_INIT_OK (0x11)
134#define HD_OPEN_B1CHANNEL_ACK (0x51)
135#define HD_OPEN_B2CHANNEL_ACK (0x52)
136#define HD_CLOSE_B1CHANNEL_ACK (0x53)
137#define HD_CLOSE_B2CHANNEL_ACK (0x54)
138#define HD_SUSPEND_END (0x61)
139#define HD_RESET_INTERRUPT_PIPE_ACK (0xFF)
140
141
142#define HD_OPEN_B1CHANNEL (0x23)
143#define HD_CLOSE_B1CHANNEL (0x24)
144#define HD_OPEN_B2CHANNEL (0x25)
145#define HD_CLOSE_B2CHANNEL (0x26)
146#define HD_RESET_INTERRUPT_PIPE (0x27)
147#define HD_DEVICE_INIT_ACK (0x34)
148#define HD_WRITE_ATMESSAGE (0x12)
149#define HD_READ_ATMESSAGE (0x13)
150#define HD_OPEN_ATCHANNEL (0x28)
151#define HD_CLOSE_ATCHANNEL (0x29)
152
153
154#define BAS_CHANNELS 2
155
156
157#define BAS_FRAMETIME 1
158#define BAS_NUMFRAMES 8
159#define BAS_MAXFRAME 16
160#define BAS_NORMFRAME 8
161#define BAS_HIGHFRAME 10
162#define BAS_LOWFRAME 5
163#define BAS_CORRFRAMES 4
164
165#define BAS_INBUFSIZE (BAS_MAXFRAME * BAS_NUMFRAMES)
166
167#define BAS_OUTBUFSIZE 4096
168#define BAS_OUTBUFPAD BAS_MAXFRAME
169
170#define BAS_INURBS 3
171#define BAS_OUTURBS 3
172
173
174#define AT_ISO 0
175#define AT_DIAL 1
176#define AT_MSN 2
177#define AT_BC 3
178#define AT_PROTO 4
179#define AT_TYPE 5
180#define AT_CLIP 6
181
182#define AT_NUM 7
183
184
185
186#define VAR_ZSAU 0
187#define VAR_ZDLE 1
188#define VAR_ZCTP 2
189
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
198#define STR_NUM 5
199
200
201#define EV_TIMEOUT -105
202#define EV_IF_VER -106
203#define EV_PROC_CIDMODE -107
204#define EV_SHUTDOWN -108
205#define EV_START -110
206#define EV_STOP -111
207#define EV_IF_LOCK -112
208#define EV_ACCEPT -114
209#define EV_DIAL -115
210#define EV_HUP -116
211#define EV_BC_OPEN -117
212#define EV_BC_CLOSED -118
213
214
215#define INS_command 0x0001
216#define INS_DLE_char 0x0002
217#define INS_byte_stuff 0x0004
218#define INS_have_data 0x0008
219#define INS_DLE_command 0x0020
220#define INS_flag_hunt 0x0040
221
222
223#define CHS_D_UP 0x01
224#define CHS_B_UP 0x02
225#define CHS_NOTIFY_LL 0x04
226
227#define ICALL_REJECT 0
228#define ICALL_ACCEPT 1
229#define ICALL_IGNORE 2
230
231
232#define MS_UNINITIALIZED 0
233#define MS_INIT 1
234#define MS_LOCKED 2
235#define MS_SHUTDOWN 3
236#define MS_RECOVER 4
237#define MS_READY 5
238
239
240#define M_UNKNOWN 0
241#define M_CONFIG 1
242#define M_UNIMODEM 2
243#define M_CID 3
244
245
246#define SM_LOCKED 0
247#define SM_ISDN 1
248
249
250#define L2_BITSYNC 0
251#define L2_HDLC 1
252#define L2_VOICE 2
253
254struct gigaset_ops;
255struct gigaset_driver;
256
257struct usb_cardstate;
258struct ser_cardstate;
259struct bas_cardstate;
260
261struct bc_state;
262struct usb_bc_state;
263struct ser_bc_state;
264struct bas_bc_state;
265
266struct reply_t {
267 int resp_code;
268 int min_ConState;
269 int max_ConState;
270 int parameter;
271 int new_ConState;
272 int timeout;
273 int action[MAXACT];
274 char *command;
275};
276
277extern struct reply_t gigaset_tab_cid[];
278extern struct reply_t gigaset_tab_nocid[];
279
280struct inbuf_t {
281 struct cardstate *cs;
282 int inputstate;
283 int head, tail;
284 unsigned char data[RBUFSIZE];
285};
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304struct isowbuf_t {
305 int read;
306 int nextread;
307 int write;
308 atomic_t writesem;
309 int wbits;
310 unsigned char data[BAS_OUTBUFSIZE + BAS_OUTBUFPAD];
311 unsigned char idle;
312};
313
314
315
316
317
318
319
320
321
322struct isow_urbctx_t {
323 struct urb *urb;
324 struct bc_state *bcs;
325 int limit;
326 int status;
327};
328
329
330
331
332
333struct at_state_t {
334 struct list_head list;
335 int waiting;
336 int getstring;
337 unsigned timer_index;
338 unsigned long timer_expires;
339 int timer_active;
340 unsigned int ConState;
341 struct reply_t *replystruct;
342 int cid;
343 int int_var[VAR_NUM];
344 char *str_var[STR_NUM];
345 unsigned pending_commands;
346 unsigned seq_index;
347
348 struct cardstate *cs;
349 struct bc_state *bcs;
350};
351
352struct event_t {
353 int type;
354 void *ptr, *arg;
355 int parameter;
356 int cid;
357 struct at_state_t *at_state;
358};
359
360
361struct bc_state {
362 struct sk_buff *tx_skb;
363 struct sk_buff_head squeue;
364
365
366 int corrupted;
367 int trans_down;
368 int trans_up;
369
370 struct at_state_t at_state;
371
372
373 unsigned rx_bufsize;
374 struct sk_buff *rx_skb;
375 __u16 rx_fcs;
376 int inputstate;
377
378 int channel;
379
380 struct cardstate *cs;
381
382 unsigned chstate;
383 int ignore;
384 unsigned proto2;
385 char *commands[AT_NUM];
386
387#ifdef CONFIG_GIGASET_DEBUG
388 int emptycount;
389#endif
390 int busy;
391 int use_count;
392
393
394 union {
395 struct ser_bc_state *ser;
396 struct usb_bc_state *usb;
397 struct bas_bc_state *bas;
398 } hw;
399
400 void *ap;
401 int apconnstate;
402 spinlock_t aplock;
403};
404
405struct cardstate {
406 struct gigaset_driver *driver;
407 unsigned minor_index;
408 struct device *dev;
409 struct device *tty_dev;
410 unsigned flags;
411
412 const struct gigaset_ops *ops;
413
414
415 wait_queue_head_t waitqueue;
416 int waiting;
417 int mode;
418 int mstate;
419
420 int cmd_result;
421
422 int channels;
423 struct bc_state *bcs;
424
425 int onechannel;
426
427
428 spinlock_t lock;
429 struct at_state_t at_state;
430 struct list_head temp_at_states;
431
432
433 struct inbuf_t *inbuf;
434
435 struct cmdbuf_t *cmdbuf, *lastcmdbuf;
436 spinlock_t cmdlock;
437 unsigned curlen, cmdbytes;
438
439 struct tty_port port;
440 struct tasklet_struct if_wake_tasklet;
441 unsigned control_state;
442
443 unsigned fwver[4];
444 int gotfwver;
445
446 unsigned running;
447 unsigned connected;
448 unsigned isdn_up;
449
450 unsigned cidmode;
451
452 int myid;
453 void *iif;
454 unsigned short hw_hdr_len;
455
456 struct reply_t *tabnocid;
457 struct reply_t *tabcid;
458 int cs_init;
459 int ignoreframes;
460
461 struct mutex mutex;
462
463
464
465
466
467 struct timer_list timer;
468 int retry_count;
469 int dle;
470
471 int cur_at_seq;
472
473 int curchannel;
474
475 int commands_pending;
476
477 struct tasklet_struct
478 event_tasklet;
479
480
481
482
483
484
485
486 struct tasklet_struct
487 write_tasklet;
488
489
490
491 struct event_t events[MAX_EVENTS];
492 unsigned ev_tail, ev_head;
493 spinlock_t ev_lock;
494
495
496 unsigned char respdata[MAX_RESP_SIZE + 1];
497 unsigned cbytes;
498
499
500 union {
501 struct usb_cardstate *usb;
502 struct ser_cardstate *ser;
503 struct bas_cardstate *bas;
504 } hw;
505};
506
507struct gigaset_driver {
508 struct list_head list;
509 spinlock_t lock;
510 struct tty_driver *tty;
511 unsigned have_tty;
512 unsigned minor;
513 unsigned minors;
514 struct cardstate *cs;
515 int blocked;
516
517 const struct gigaset_ops *ops;
518 struct module *owner;
519};
520
521struct cmdbuf_t {
522 struct cmdbuf_t *next, *prev;
523 int len, offset;
524 struct tasklet_struct *wake_tasklet;
525 unsigned char buf[0];
526};
527
528struct bas_bc_state {
529
530 int running;
531 atomic_t corrbytes;
532 spinlock_t isooutlock;
533 struct isow_urbctx_t isoouturbs[BAS_OUTURBS];
534 struct isow_urbctx_t *isooutdone, *isooutfree, *isooutovfl;
535 struct isowbuf_t *isooutbuf;
536 unsigned numsub;
537
538 struct tasklet_struct sent_tasklet;
539
540
541 spinlock_t isoinlock;
542 struct urb *isoinurbs[BAS_INURBS];
543 unsigned char isoinbuf[BAS_INBUFSIZE * BAS_INURBS];
544 struct urb *isoindone;
545 int isoinstatus;
546 int loststatus;
547 unsigned isoinlost;
548
549
550 unsigned seqlen;
551
552 unsigned inbyte, inbits;
553
554 unsigned goodbytes;
555 unsigned alignerrs;
556 unsigned fcserrs;
557 unsigned frameerrs;
558 unsigned giants;
559 unsigned runts;
560 unsigned aborts;
561 unsigned shared0s;
562 unsigned stolen0s;
563
564 struct tasklet_struct rcvd_tasklet;
565};
566
567struct gigaset_ops {
568
569
570 int (*write_cmd)(struct cardstate *cs, struct cmdbuf_t *cb);
571
572
573 int (*write_room)(struct cardstate *cs);
574 int (*chars_in_buffer)(struct cardstate *cs);
575 int (*brkchars)(struct cardstate *cs, const unsigned char buf[6]);
576
577
578
579 int (*init_bchannel)(struct bc_state *bcs);
580
581
582
583 int (*close_bchannel)(struct bc_state *bcs);
584
585
586 int (*initbcshw)(struct bc_state *bcs);
587
588
589 void (*freebcshw)(struct bc_state *bcs);
590
591
592 void (*reinitbcshw)(struct bc_state *bcs);
593
594
595 int (*initcshw)(struct cardstate *cs);
596
597
598 void (*freecshw)(struct cardstate *cs);
599
600
601
602 int (*set_modem_ctrl)(struct cardstate *cs, unsigned old_state,
603 unsigned new_state);
604 int (*baud_rate)(struct cardstate *cs, unsigned cflag);
605 int (*set_line_ctrl)(struct cardstate *cs, unsigned cflag);
606
607
608
609
610 int (*send_skb)(struct bc_state *bcs, struct sk_buff *skb);
611
612
613
614 void (*handle_input)(struct inbuf_t *inbuf);
615
616};
617
618
619
620
621
622
623
624
625
626#define DLE_FLAG 0x10
627
628
629
630
631
632
633int gigaset_m10x_send_skb(struct bc_state *bcs, struct sk_buff *skb);
634
635
636
637void gigaset_m10x_input(struct inbuf_t *inbuf);
638
639
640
641
642
643
644int gigaset_isoc_send_skb(struct bc_state *bcs, struct sk_buff *skb);
645
646
647
648void gigaset_isoc_input(struct inbuf_t *inbuf);
649
650
651
652void gigaset_isoc_receive(unsigned char *src, unsigned count,
653 struct bc_state *bcs);
654
655
656
657int gigaset_isoc_buildframe(struct bc_state *bcs, unsigned char *in, int len);
658
659
660void gigaset_isowbuf_init(struct isowbuf_t *iwb, unsigned char idle);
661
662
663int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size);
664
665
666
667
668
669
670void gigaset_isdn_regdrv(void);
671void gigaset_isdn_unregdrv(void);
672int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid);
673void gigaset_isdn_unregdev(struct cardstate *cs);
674
675
676void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb);
677void gigaset_skb_rcvd(struct bc_state *bcs, struct sk_buff *skb);
678void gigaset_isdn_rcv_err(struct bc_state *bcs);
679
680
681void gigaset_isdn_start(struct cardstate *cs);
682void gigaset_isdn_stop(struct cardstate *cs);
683int gigaset_isdn_icall(struct at_state_t *at_state);
684void gigaset_isdn_connD(struct bc_state *bcs);
685void gigaset_isdn_hupD(struct bc_state *bcs);
686void gigaset_isdn_connB(struct bc_state *bcs);
687void gigaset_isdn_hupB(struct bc_state *bcs);
688
689
690
691
692
693
694void gigaset_handle_event(unsigned long data);
695
696
697
698void gigaset_handle_modem_response(struct cardstate *cs);
699
700
701
702
703
704
705void gigaset_init_dev_sysfs(struct cardstate *cs);
706void gigaset_free_dev_sysfs(struct cardstate *cs);
707
708
709
710
711
712void gigaset_bcs_reinit(struct bc_state *bcs);
713void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs,
714 struct cardstate *cs, int cid);
715int gigaset_get_channel(struct bc_state *bcs);
716struct bc_state *gigaset_get_free_channel(struct cardstate *cs);
717void gigaset_free_channel(struct bc_state *bcs);
718int gigaset_get_channels(struct cardstate *cs);
719void gigaset_free_channels(struct cardstate *cs);
720void gigaset_block_channels(struct cardstate *cs);
721
722
723struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors,
724 const char *procname,
725 const char *devname,
726 const struct gigaset_ops *ops,
727 struct module *owner);
728
729
730void gigaset_freedriver(struct gigaset_driver *drv);
731
732struct cardstate *gigaset_get_cs_by_tty(struct tty_struct *tty);
733struct cardstate *gigaset_get_cs_by_id(int id);
734void gigaset_blockdriver(struct gigaset_driver *drv);
735
736
737
738struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,
739 int onechannel, int ignoreframes,
740 int cidmode, const char *modulename);
741
742
743void gigaset_freecs(struct cardstate *cs);
744
745
746int gigaset_start(struct cardstate *cs);
747
748
749void gigaset_stop(struct cardstate *cs);
750
751
752int gigaset_shutdown(struct cardstate *cs);
753
754
755void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb);
756
757
758
759
760
761struct event_t *gigaset_add_event(struct cardstate *cs,
762 struct at_state_t *at_state, int type,
763 void *ptr, int parameter, void *arg);
764
765
766int gigaset_enterconfigmode(struct cardstate *cs);
767
768
769static inline void gigaset_schedule_event(struct cardstate *cs)
770{
771 unsigned long flags;
772 spin_lock_irqsave(&cs->lock, flags);
773 if (cs->running)
774 tasklet_schedule(&cs->event_tasklet);
775 spin_unlock_irqrestore(&cs->lock, flags);
776}
777
778
779
780static inline void gigaset_bchannel_down(struct bc_state *bcs)
781{
782 gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_CLOSED, NULL, 0, NULL);
783 gigaset_schedule_event(bcs->cs);
784}
785
786
787
788static inline void gigaset_bchannel_up(struct bc_state *bcs)
789{
790 gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_OPEN, NULL, 0, NULL);
791 gigaset_schedule_event(bcs->cs);
792}
793
794
795static inline struct sk_buff *gigaset_new_rx_skb(struct bc_state *bcs)
796{
797 struct cardstate *cs = bcs->cs;
798 unsigned short hw_hdr_len = cs->hw_hdr_len;
799
800 if (bcs->ignore) {
801 bcs->rx_skb = NULL;
802 } else {
803 bcs->rx_skb = dev_alloc_skb(bcs->rx_bufsize + hw_hdr_len);
804 if (bcs->rx_skb == NULL)
805 dev_warn(cs->dev, "could not allocate skb\n");
806 else
807 skb_reserve(bcs->rx_skb, hw_hdr_len);
808 }
809 return bcs->rx_skb;
810}
811
812
813int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src,
814 unsigned numbytes);
815
816
817
818
819
820
821void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname,
822 const char *devname);
823
824void gigaset_if_freedriver(struct gigaset_driver *drv);
825
826void gigaset_if_init(struct cardstate *cs);
827
828void gigaset_if_free(struct cardstate *cs);
829
830void gigaset_if_receive(struct cardstate *cs,
831 unsigned char *buffer, size_t len);
832
833#endif
834