/* * This routine is called whenever a serial port is opened. It * enables interrupts for a serial port, linking in its async structure into * the IRQ chain. It also performs the serial-specific * initialization for the tty structure. */ static int ctc_tty_open(struct tty_struct *tty, struct file *filp) { ctc_tty_info *info; unsigned long saveflags; int retval, line; line = MINOR(tty->device) - tty->driver.minor_start; if (line < 0 || line > CTC_TTY_MAX_DEVICES) return -ENODEV; info = &driver->info[line]; if (ctc_tty_paranoia_check(info, tty->device, "ctc_tty_open")) return -ENODEV; if (!info->netdev) return -ENODEV; #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open %s%d, count = %d\n", tty->driver.name, info->line, info->count); #endif spin_lock_irqsave(&ctc_tty_lock, saveflags); info->count++; tty->driver_data = info; info->tty = tty; spin_unlock_irqrestore(&ctc_tty_lock, saveflags); /* * Start up serial port */ retval = ctc_tty_startup(info); if (retval) { #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open return after startup\n"); #endif return retval; } retval = ctc_tty_block_til_ready(tty, filp, info); if (retval) { #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open return after ctc_tty_block_til_ready \n"); #endif return retval; } if ((info->count == 1) && (info->flags & CTC_ASYNC_SPLIT_TERMIOS)) { *tty->termios = info->normal_termios; ctc_tty_change_speed(info); } #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open %s%d successful...\n", CTC_TTY_NAME, info->line); #endif return 0; }
/* * This routine is called whenever a serial port is opened. It * enables interrupts for a serial port, linking in its async structure into * the IRQ chain. It also performs the serial-specific * initialization for the tty structure. */ static int ctc_tty_open(struct tty_struct *tty, struct file *filp) { ctc_tty_info *info; unsigned long saveflags; int retval, line; DBF_TEXT(trace, 3, __FUNCTION__); line = tty->index; if (line < 0 || line > CTC_TTY_MAX_DEVICES) return -ENODEV; info = &driver->info[line]; if (ctc_tty_paranoia_check(info, tty->name, "ctc_tty_open")) return -ENODEV; if (!info->netdev) return -ENODEV; #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open %s, count = %d\n", tty->name, info->count); #endif spin_lock_irqsave(&ctc_tty_lock, saveflags); info->count++; tty->driver_data = info; info->tty = tty; spin_unlock_irqrestore(&ctc_tty_lock, saveflags); /* * Start up serial port */ retval = ctc_tty_startup(info); if (retval) { #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open return after startup\n"); #endif return retval; } retval = ctc_tty_block_til_ready(tty, filp, info); if (retval) { #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open return after ctc_tty_block_til_ready \n"); #endif return retval; } #ifdef CTC_DEBUG_MODEM_OPEN printk(KERN_DEBUG "ctc_tty_open %s successful...\n", tty->name); #endif return 0; }