1 Index: linux-2.6.20.7/drivers/char/ts0710_mux.c
2 ===================================================================
3 --- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 10:51:31.000000000 +0200
4 +++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 10:53:05.000000000 +0200
6 static volatile __u8 mux_recv_info_flags[NR_MUXS];
7 static mux_recv_struct *mux_recv_queue = NULL;
9 -static struct tty_driver mux_driver;
11 +static struct tty_driver *mux_driver;
14 #define COMM_FOR_MUX_DRIVER usb_for_mux_driver
18 dlci = tty2dlci[line];
19 + mux_table[line] = tty;
21 /* if( dlci == 1 ) { */
22 /* Open server channel 0 first */
31 @@ -3894,43 +3897,50 @@
32 INIT_WORK(&receive_tqueue, receive_worker, NULL);
33 INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
35 - memset(&mux_driver, 0, sizeof(struct tty_driver));
36 - memset(&mux_tty, 0, sizeof(mux_tty));
37 - mux_driver.magic = TTY_DRIVER_MAGIC;
38 - mux_driver.driver_name = "ts0710mux";
39 - mux_driver.name = "ts0710mux";
40 - mux_driver.major = TS0710MUX_MAJOR;
41 - mux_driver.minor_start = TS0710MUX_MINOR_START;
42 - mux_driver.num = NR_MUXS;
43 - mux_driver.type = TTY_DRIVER_TYPE_SERIAL;
44 - mux_driver.subtype = SERIAL_TYPE_NORMAL;
45 - mux_driver.init_termios = tty_std_termios;
46 - mux_driver.init_termios.c_iflag = 0;
47 - mux_driver.init_termios.c_oflag = 0;
48 - mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD;
49 - mux_driver.init_termios.c_lflag = 0;
50 - mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
52 - mux_driver.ttys = mux_table;
53 - mux_driver.termios = mux_termios;
54 - mux_driver.termios_locked = mux_termios_locked;
55 + mux_driver = alloc_tty_driver(NR_MUXS);
59 + mux_driver->owner = THIS_MODULE;
60 + mux_driver->driver_name = "ts0710mux";
61 + mux_driver->name = "mux";
62 + mux_driver->devfs_name = "mux";
63 + mux_driver->major = TS0710MUX_MAJOR;
64 + mux_driver->minor_start = TS0710MUX_MINOR_START;
65 + mux_driver->type = TTY_DRIVER_TYPE_SERIAL;
66 + mux_driver->subtype = SERIAL_TYPE_NORMAL;
67 + mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
69 + mux_driver->init_termios = tty_std_termios;
70 + mux_driver->init_termios.c_iflag = 0;
71 + mux_driver->init_termios.c_oflag = 0;
72 + mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
73 + mux_driver->init_termios.c_lflag = 0;
75 +// mux_driver.ttys = mux_table;
76 + mux_driver->termios = mux_termios;
77 + mux_driver->termios_locked = mux_termios_locked;
78 // mux_driver.driver_state = mux_state;
79 - mux_driver.other = NULL;
80 + mux_driver->other = NULL;
82 - mux_driver.open = mux_open;
83 - mux_driver.close = mux_close;
84 - mux_driver.write = mux_write;
85 - mux_driver.write_room = mux_write_room;
86 - mux_driver.flush_buffer = mux_flush_buffer;
87 - mux_driver.chars_in_buffer = mux_chars_in_buffer;
88 - mux_driver.throttle = mux_throttle;
89 - mux_driver.unthrottle = mux_unthrottle;
90 - mux_driver.ioctl = mux_ioctl;
91 - mux_driver.owner = THIS_MODULE;
92 + mux_driver->open = mux_open;
93 + mux_driver->close = mux_close;
94 + mux_driver->write = mux_write;
95 + mux_driver->write_room = mux_write_room;
96 + mux_driver->flush_buffer = mux_flush_buffer;
97 + mux_driver->chars_in_buffer = mux_chars_in_buffer;
98 + mux_driver->throttle = mux_throttle;
99 + mux_driver->unthrottle = mux_unthrottle;
100 + mux_driver->ioctl = mux_ioctl;
102 - if (tty_register_driver(&mux_driver))
103 + // FIXME: No panic() here
104 + if (tty_register_driver(mux_driver))
105 panic("Couldn't register mux driver");
107 + for (j=0; j<NR_MUXS; j++)
108 + tty_register_device(mux_driver, j, NULL);
111 COMM_MUX_DISPATCHER = mux_dispatcher;
112 COMM_MUX_SENDER = mux_sender;
114 @@ -3964,7 +3974,10 @@
115 mux_recv_info[j] = 0;
118 - if (tty_unregister_driver(&mux_driver))
119 + for (j=0; j<NR_MUXS; j++)
120 + tty_unregister_device(mux_driver, j);
122 + if (tty_unregister_driver(mux_driver))
123 panic("Couldn't unregister mux driver");