static void sierra_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { dev_dbg(&port->dev, "%s", __func__); tty_termios_copy_hw(tty->termios, old_termios); sierra_send_setup(tty, port); }
static void sierra_set_termios(struct usb_serial_port *port, struct ktermios *old_termios) { dbg("%s", __FUNCTION__); tty_termios_copy_hw(port->tty->termios, old_termios); sierra_send_setup(port); }
static void timbuart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { unsigned int baud; short bindex; unsigned long flags; baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); bindex = get_bindex(baud); dev_dbg(port->dev, "%s - bindex %d\n", __func__, bindex); if (bindex < 0) bindex = 0; baud = baudrates[bindex]; /* The serial layer calls into this once with old = NULL when setting up initially */ if (old) tty_termios_copy_hw(termios, old); tty_termios_encode_baud_rate(termios, baud, baud); spin_lock_irqsave(&port->lock, flags); iowrite8((u8)bindex, port->membase + TIMBUART_BAUDRATE); uart_update_timeout(port, termios->c_cflag, baud); spin_unlock_irqrestore(&port->lock, flags); }
static void altera_uart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { unsigned long flags; unsigned int baud, baudclk; baud = uart_get_baud_rate(port, termios, old, 0, 4000000); baudclk = port->uartclk / baud; if (old) tty_termios_copy_hw(termios, old); tty_termios_encode_baud_rate(termios, baud, baud); spin_lock_irqsave(&port->lock, flags); uart_update_timeout(port, termios->c_cflag, baud); altera_uart_writel(port, baudclk, ALTERA_UART_DIVISOR_REG); spin_unlock_irqrestore(&port->lock, flags); /* * FIXME: port->read_status_mask and port->ignore_status_mask * need to be initialized based on termios settings for * INPCK, IGNBRK, IGNPAR, PARMRK, BRKINT */ }
static void mvebu_uart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { unsigned long flags; unsigned int baud; spin_lock_irqsave(&port->lock, flags); port->read_status_mask = STAT_RX_RDY | STAT_OVR_ERR | STAT_TX_RDY | STAT_TX_FIFO_FUL; if (termios->c_iflag & INPCK) port->read_status_mask |= STAT_FRM_ERR | STAT_PAR_ERR; port->ignore_status_mask = 0; if (termios->c_iflag & IGNPAR) port->ignore_status_mask |= STAT_FRM_ERR | STAT_PAR_ERR | STAT_OVR_ERR; if ((termios->c_cflag & CREAD) == 0) port->ignore_status_mask |= STAT_RX_RDY | STAT_BRK_ERR; if (old) tty_termios_copy_hw(termios, old); baud = uart_get_baud_rate(port, termios, old, 0, 460800); uart_update_timeout(port, termios->c_cflag, baud); spin_unlock_irqrestore(&port->lock, flags); }
static void option_set_termios(struct usb_serial_port *port, struct ktermios *old_termios) { dbg("%s", __FUNCTION__); /* Doesn't support option setting */ tty_termios_copy_hw(port->tty->termios, old_termios); option_send_setup(port); }
static void option_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { dbg("%s", __func__); /* Doesn't support option setting */ tty_termios_copy_hw(tty->termios, old_termios); option_send_setup(tty, port); }
static void altera_jtaguart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { /* Just copy the old termios settings back */ if (old) tty_termios_copy_hw(termios, old); }
/** * tty_set_termios - update termios values * @tty: tty to update * @new_termios: desired new value * * Perform updates to the termios values set on this terminal. There * is a bit of layering violation here with n_tty in terms of the * internal knowledge of this function. * * Locking: termios_mutex */ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) { struct ktermios old_termios; struct tty_ldisc *ld; unsigned long flags; /* * Perform the actual termios internal changes under lock. */ /* FIXME: we need to decide on some locking/ordering semantics for the set_termios notification eventually */ mutex_lock(&tty->termios_mutex); old_termios = *tty->termios; *tty->termios = *new_termios; unset_locked_termios(tty->termios, &old_termios, tty->termios_locked); /* See if packet mode change of state. */ if (tty->link && tty->link->packet) { int extproc = (old_termios.c_lflag & EXTPROC) | (tty->termios->c_lflag & EXTPROC); int old_flow = ((old_termios.c_iflag & IXON) && (old_termios.c_cc[VSTOP] == '\023') && (old_termios.c_cc[VSTART] == '\021')); int new_flow = (I_IXON(tty) && STOP_CHAR(tty) == '\023' && START_CHAR(tty) == '\021'); if ((old_flow != new_flow) || extproc) { spin_lock_irqsave(&tty->ctrl_lock, flags); if (old_flow != new_flow) { tty->ctrl_status &= ~(TIOCPKT_DOSTOP | TIOCPKT_NOSTOP); if (new_flow) tty->ctrl_status |= TIOCPKT_DOSTOP; else tty->ctrl_status |= TIOCPKT_NOSTOP; } if (extproc) tty->ctrl_status |= TIOCPKT_IOCTL; spin_unlock_irqrestore(&tty->ctrl_lock, flags); wake_up_interruptible(&tty->link->read_wait); } } if (tty->ops->set_termios) (*tty->ops->set_termios)(tty, &old_termios); else tty_termios_copy_hw(tty->termios, &old_termios); ld = tty_ldisc_ref(tty); if (ld != NULL) { if (ld->ops->set_termios) (ld->ops->set_termios)(tty, &old_termios); tty_ldisc_deref(ld); } mutex_unlock(&tty->termios_mutex); return 0; }
static void f81232_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { /* FIXME - Stubbed out for now */ /* Don't change anything if nothing has changed */ if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) return; /* Do the real work here... */ if (old_termios) tty_termios_copy_hw(&tty->termios, old_termios); }
static void kobil_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old) { struct kobil_private *priv; int result; unsigned short urb_val = 0; int c_cflag = tty->termios.c_cflag; speed_t speed; priv = usb_get_serial_port_data(port); if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID || priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) { /* This device doesn't support ioctl calls */ tty_termios_copy_hw(&tty->termios, old); return; } speed = tty_get_baud_rate(tty); switch (speed) { case 1200: urb_val = SUSBCR_SBR_1200; break; default: speed = 9600; case 9600: urb_val = SUSBCR_SBR_9600; break; } urb_val |= (c_cflag & CSTOPB) ? SUSBCR_SPASB_2StopBits : SUSBCR_SPASB_1StopBit; if (c_cflag & PARENB) { if (c_cflag & PARODD) urb_val |= SUSBCR_SPASB_OddParity; else urb_val |= SUSBCR_SPASB_EvenParity; } else urb_val |= SUSBCR_SPASB_NoParity; tty->termios.c_cflag &= ~CMSPAR; tty_encode_baud_rate(tty, speed, speed); result = usb_control_msg(port->serial->dev, usb_rcvctrlpipe(port->serial->dev, 0), SUSBCRequest_SetBaudRateParityAndStopBits, USB_TYPE_VENDOR | USB_RECIP_ENDPOINT | USB_DIR_OUT, urb_val, 0, NULL, 0, KOBIL_TIMEOUT ); }
static void csvt_ctrl_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { struct csvt_ctrl_dev *dev = usb_get_serial_port_data(port); if (!dev) return; dev_dbg(&port->dev, "%s", __func__); /* Doesn't support option setting */ tty_termios_copy_hw(&tty->termios, old_termios); csvt_ctrl_write_cmd(dev, port); }
static void nwpserial_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { struct nwpserial_port *up; up = container_of(port, struct nwpserial_port, port); up->port.read_status_mask = NWPSERIAL_STATUS_RXVALID | NWPSERIAL_STATUS_TXFULL; up->port.ignore_status_mask = 0; /* ignore all characters if CREAD is not set */ if ((termios->c_cflag & CREAD) == 0) up->port.ignore_status_mask |= NWPSERIAL_STATUS_RXVALID; /* Copy back the old hardware settings */ if (old) tty_termios_copy_hw(termios, old); }
static void altera_uart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { unsigned long flags; unsigned int baud, baudclk; baud = uart_get_baud_rate(port, termios, old, 0, 4000000); baudclk = port->uartclk / baud; if (old) tty_termios_copy_hw(termios, old); tty_termios_encode_baud_rate(termios, baud, baud); spin_lock_irqsave(&port->lock, flags); writel(baudclk, port->membase + ALTERA_UART_DIVISOR_REG); spin_unlock_irqrestore(&port->lock, flags); }
/* Old_termios contains the original termios settings and * tty->termios contains the new setting to be used. */ static void ch341_set_termios(struct usb_serial_port *port, struct ktermios *old_termios) { struct ch341_private *priv = usb_get_serial_port_data(port); struct tty_struct *tty = port->tty; unsigned baud_rate; dbg("ch341_set_termios()"); baud_rate = tty_get_baud_rate(tty); switch (baud_rate) { case 2400: case 4800: case 9600: case 19200: case 38400: case 115200: priv->baud_rate = baud_rate; break; default: dbg("Rate %d not supported, using %d", baud_rate, DEFAULT_BAUD_RATE); priv->baud_rate = DEFAULT_BAUD_RATE; } ch341_set_baudrate(port->serial->dev, priv); /* Unimplemented: * (cflag & CSIZE) : data bits [5, 8] * (cflag & PARENB) : parity {NONE, EVEN, ODD} * (cflag & CSTOPB) : stop bits [1, 2] */ /* Copy back the old hardware settings */ tty_termios_copy_hw(tty->termios, old_termios); /* And re-encode with the new baud */ tty_encode_baud_rate(tty, baud_rate, baud_rate); }
static void ir_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { unsigned char *transfer_buffer; int result; speed_t baud; int ir_baud; dbg("%s - port %d", __func__, port->number); baud = tty_get_baud_rate(tty); /* * FIXME, we should compare the baud request against the * capability stated in the IR header that we got in the * startup function. */ switch (baud) { case 2400: ir_baud = USB_IRDA_BR_2400; break; case 9600: ir_baud = USB_IRDA_BR_9600; break; case 19200: ir_baud = USB_IRDA_BR_19200; break; case 38400: ir_baud = USB_IRDA_BR_38400; break; case 57600: ir_baud = USB_IRDA_BR_57600; break; case 115200: ir_baud = USB_IRDA_BR_115200; break; case 576000: ir_baud = USB_IRDA_BR_576000; break; case 1152000: ir_baud = USB_IRDA_BR_1152000; break; case 4000000: ir_baud = USB_IRDA_BR_4000000; break; default: ir_baud = USB_IRDA_BR_9600; baud = 9600; } if (xbof == -1) ir_xbof = ir_xbof_change(ir_add_bof); else ir_xbof = ir_xbof_change(xbof) ; /* FIXME need to check to see if our write urb is busy right * now, or use a urb pool. * * send the baud change out on an "empty" data packet */ transfer_buffer = port->write_urb->transfer_buffer; *transfer_buffer = ir_xbof | ir_baud; usb_fill_bulk_urb( port->write_urb, port->serial->dev, usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), port->write_urb->transfer_buffer, 1, ir_write_bulk_callback, port); port->write_urb->transfer_flags = URB_ZERO_PACKET; result = usb_submit_urb(port->write_urb, GFP_KERNEL); if (result) dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __func__, result); /* Only speed changes are supported */ tty_termios_copy_hw(tty->termios, old_termios); tty_encode_baud_rate(tty, baud, baud); }
static void ir_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { struct urb *urb; unsigned char *transfer_buffer; int result; speed_t baud; int ir_baud; dbg("%s - port %d", __func__, port->number); baud = tty_get_baud_rate(tty); /* * FIXME, we should compare the baud request against the * capability stated in the IR header that we got in the * startup function. */ switch (baud) { case 2400: ir_baud = USB_IRDA_BR_2400; break; case 9600: ir_baud = USB_IRDA_BR_9600; break; case 19200: ir_baud = USB_IRDA_BR_19200; break; case 38400: ir_baud = USB_IRDA_BR_38400; break; case 57600: ir_baud = USB_IRDA_BR_57600; break; case 115200: ir_baud = USB_IRDA_BR_115200; break; case 576000: ir_baud = USB_IRDA_BR_576000; break; case 1152000: ir_baud = USB_IRDA_BR_1152000; break; case 4000000: ir_baud = USB_IRDA_BR_4000000; break; default: ir_baud = USB_IRDA_BR_9600; baud = 9600; } if (xbof == -1) ir_xbof = ir_xbof_change(ir_add_bof); else ir_xbof = ir_xbof_change(xbof) ; /* Only speed changes are supported */ tty_termios_copy_hw(tty->termios, old_termios); tty_encode_baud_rate(tty, baud, baud); /* * send the baud change out on an "empty" data packet */ urb = usb_alloc_urb(0, GFP_KERNEL); if (!urb) { dev_err(&port->dev, "%s - no more urbs\n", __func__); return; } transfer_buffer = kmalloc(1, GFP_KERNEL); if (!transfer_buffer) { dev_err(&port->dev, "%s - out of memory\n", __func__); goto err_buf; } *transfer_buffer = ir_xbof | ir_baud; usb_fill_bulk_urb( urb, port->serial->dev, usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), transfer_buffer, 1, ir_set_termios_callback, port); urb->transfer_flags = URB_ZERO_PACKET; result = usb_submit_urb(urb, GFP_KERNEL); if (result) { dev_err(&port->dev, "%s - failed to submit urb: %d\n", __func__, result); goto err_subm; } usb_free_urb(urb); return; err_subm: kfree(transfer_buffer); err_buf: usb_free_urb(urb); }