|
@@ -1539,6 +1539,8 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
printk("cy_ioctl %s, cmd = %x arg = %lx\n", tty->name, cmd, arg); /* */
|
|
|
#endif
|
|
|
|
|
|
+ lock_kernel();
|
|
|
+
|
|
|
switch (cmd) {
|
|
|
case CYGETMON:
|
|
|
ret_val = get_mon_info(info, argp);
|
|
@@ -1584,18 +1586,6 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
break;
|
|
|
|
|
|
/* The following commands are incompletely implemented!!! */
|
|
|
- case TIOCGSOFTCAR:
|
|
|
- ret_val =
|
|
|
- put_user(C_CLOCAL(tty) ? 1 : 0,
|
|
|
- (unsigned long __user *)argp);
|
|
|
- break;
|
|
|
- case TIOCSSOFTCAR:
|
|
|
- ret_val = get_user(val, (unsigned long __user *)argp);
|
|
|
- if (ret_val)
|
|
|
- break;
|
|
|
- tty->termios->c_cflag =
|
|
|
- ((tty->termios->c_cflag & ~CLOCAL) | (val ? CLOCAL : 0));
|
|
|
- break;
|
|
|
case TIOCGSERIAL:
|
|
|
ret_val = get_serial_info(info, argp);
|
|
|
break;
|
|
@@ -1605,6 +1595,7 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
default:
|
|
|
ret_val = -ENOIOCTLCMD;
|
|
|
}
|
|
|
+ unlock_kernel();
|
|
|
|
|
|
#ifdef SERIAL_DEBUG_OTHER
|
|
|
printk("cy_ioctl done\n");
|