···218218219219config ISI220220 tristate "Multi-Tech multiport card support (EXPERIMENTAL)"221221- depends on SERIAL_NONSTANDARD && PCI && BROKEN221221+ depends on SERIAL_NONSTANDARD && PCI222222 select FW_LOADER223223 help224224 This is a driver for the Multi-Tech cards which provide several
+9-21
drivers/char/isicom.c
···11811181}1182118211831183/* ioctl et all */11841184-static inline void isicom_send_break(struct isi_port *port,11851185- unsigned long length)11841184+static int isicom_send_break(struct tty_struct *tty, int length)11861185{11861186+ struct isi_port *port = tty->driver_data;11871187 struct isi_board *card = port->card;11881188 unsigned long base = card->base;1189118911901190+ if (length == -1)11911191+ return -EOPNOTSUPP;11921192+11901193 if (!lock_card(card))11911191- return;11941194+ return -EINVAL;1192119511931196 outw(0x8000 | ((port->channel) << (card->shift_count)) | 0x3, base);11941197 outw((length & 0xff) << 8 | 0x00, base);···11991196 InterruptTheCard(base);1200119712011198 unlock_card(card);11991199+ return 0;12021200}1203120112041202static int isicom_tiocmget(struct tty_struct *tty, struct file *file)···13091305{13101306 struct isi_port *port = tty->driver_data;13111307 void __user *argp = (void __user *)arg;13121312- int retval;1313130813141309 if (isicom_paranoia_check(port, tty->name, "isicom_ioctl"))13151310 return -ENODEV;1316131113171312 switch (cmd) {13181318- case TCSBRK:13191319- retval = tty_check_change(tty);13201320- if (retval)13211321- return retval;13221322- tty_wait_until_sent(tty, 0);13231323- if (!arg)13241324- isicom_send_break(port, HZ/4);13251325- return 0;13261326-13271327- case TCSBRKP:13281328- retval = tty_check_change(tty);13291329- if (retval)13301330- return retval;13311331- tty_wait_until_sent(tty, 0);13321332- isicom_send_break(port, arg ? arg * (HZ/10) : HZ/4);13331333- return 0;13341313 case TIOCGSERIAL:13351314 return isicom_get_serial_info(port, argp);13361315···14461459 .flush_buffer = isicom_flush_buffer,14471460 .tiocmget = isicom_tiocmget,14481461 .tiocmset = isicom_tiocmset,14621462+ .break_ctl = isicom_send_break,14491463};1450146414511465static int __devinit reset_card(struct pci_dev *pdev,···18201832 isicom_normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |18211833 CLOCAL;18221834 isicom_normal->flags = TTY_DRIVER_REAL_RAW |18231823- TTY_DRIVER_DYNAMIC_DEV;18351835+ TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_HARDWARE_BREAK;18241836 tty_set_operations(isicom_normal, &isicom_ops);1825183718261838 retval = tty_register_driver(isicom_normal);