Lines Matching full:channel

49 	struct ipoctal_channel		channel[NR_CHANNELS];  member
58 return container_of(chan, struct ipoctal, channel[index]); in chan_to_ipoctal()
61 static void ipoctal_reset_channel(struct ipoctal_channel *channel) in ipoctal_reset_channel() argument
63 iowrite8(CR_DISABLE_RX | CR_DISABLE_TX, &channel->regs->w.cr); in ipoctal_reset_channel()
64 channel->rx_enable = 0; in ipoctal_reset_channel()
65 iowrite8(CR_CMD_RESET_RX, &channel->regs->w.cr); in ipoctal_reset_channel()
66 iowrite8(CR_CMD_RESET_TX, &channel->regs->w.cr); in ipoctal_reset_channel()
67 iowrite8(CR_CMD_RESET_ERR_STATUS, &channel->regs->w.cr); in ipoctal_reset_channel()
68 iowrite8(CR_CMD_RESET_MR, &channel->regs->w.cr); in ipoctal_reset_channel()
73 struct ipoctal_channel *channel; in ipoctal_port_activate() local
75 channel = dev_get_drvdata(tty->dev); in ipoctal_port_activate()
81 iowrite8(CR_ENABLE_RX, &channel->regs->w.cr); in ipoctal_port_activate()
82 channel->rx_enable = 1; in ipoctal_port_activate()
88 struct ipoctal_channel *channel = dev_get_drvdata(tty->dev); in ipoctal_open() local
89 struct ipoctal *ipoctal = chan_to_ipoctal(channel, tty->index); in ipoctal_open()
92 tty->driver_data = channel; in ipoctal_open()
97 err = tty_port_open(&channel->tty_port, tty, file); in ipoctal_open()
114 static void ipoctal_free_channel(struct ipoctal_channel *channel) in ipoctal_free_channel() argument
116 ipoctal_reset_stats(&channel->stats); in ipoctal_free_channel()
117 channel->pointer_read = 0; in ipoctal_free_channel()
118 channel->pointer_write = 0; in ipoctal_free_channel()
119 channel->nb_bytes = 0; in ipoctal_free_channel()
124 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_close() local
126 tty_port_close(&channel->tty_port, tty, filp); in ipoctal_close()
127 ipoctal_free_channel(channel); in ipoctal_close()
133 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_get_icount() local
139 icount->rx = channel->stats.rx; in ipoctal_get_icount()
140 icount->tx = channel->stats.tx; in ipoctal_get_icount()
141 icount->frame = channel->stats.framing_err; in ipoctal_get_icount()
142 icount->parity = channel->stats.parity_err; in ipoctal_get_icount()
143 icount->brk = channel->stats.rcv_break; in ipoctal_get_icount()
147 static void ipoctal_irq_rx(struct ipoctal_channel *channel, u8 sr) in ipoctal_irq_rx() argument
149 struct tty_port *port = &channel->tty_port; in ipoctal_irq_rx()
155 value = ioread8(&channel->regs->r.rhr); in ipoctal_irq_rx()
159 iowrite8(CR_CMD_RESET_ERR_STATUS, &channel->regs->w.cr); in ipoctal_irq_rx()
162 channel->stats.overrun_err++; in ipoctal_irq_rx()
167 channel->stats.parity_err++; in ipoctal_irq_rx()
171 channel->stats.framing_err++; in ipoctal_irq_rx()
175 channel->stats.rcv_break++; in ipoctal_irq_rx()
182 * If there are more, the isr register for this channel in ipoctal_irq_rx()
185 isr = ioread8(&channel->block_regs->r.isr); in ipoctal_irq_rx()
186 sr = ioread8(&channel->regs->r.sr); in ipoctal_irq_rx()
187 } while (isr & channel->isr_rx_rdy_mask); in ipoctal_irq_rx()
192 static void ipoctal_irq_tx(struct ipoctal_channel *channel) in ipoctal_irq_tx() argument
195 unsigned int *pointer_write = &channel->pointer_write; in ipoctal_irq_tx()
197 if (channel->nb_bytes == 0) in ipoctal_irq_tx()
200 spin_lock(&channel->lock); in ipoctal_irq_tx()
201 value = channel->tty_port.xmit_buf[*pointer_write]; in ipoctal_irq_tx()
202 iowrite8(value, &channel->regs->w.thr); in ipoctal_irq_tx()
203 channel->stats.tx++; in ipoctal_irq_tx()
206 channel->nb_bytes--; in ipoctal_irq_tx()
207 spin_unlock(&channel->lock); in ipoctal_irq_tx()
210 static void ipoctal_irq_channel(struct ipoctal_channel *channel) in ipoctal_irq_channel() argument
216 isr = ioread8(&channel->block_regs->r.isr); in ipoctal_irq_channel()
217 sr = ioread8(&channel->regs->r.sr); in ipoctal_irq_channel()
220 iowrite8(CR_CMD_RESET_BREAK_CHANGE, &channel->regs->w.cr); in ipoctal_irq_channel()
222 if ((sr & SR_TX_EMPTY) && (channel->nb_bytes == 0)) { in ipoctal_irq_channel()
223 iowrite8(CR_DISABLE_TX, &channel->regs->w.cr); in ipoctal_irq_channel()
226 if (channel->board_id == IPACK1_DEVICE_ID_SBS_OCTAL_485) { in ipoctal_irq_channel()
227 iowrite8(CR_CMD_NEGATE_RTSN, &channel->regs->w.cr); in ipoctal_irq_channel()
228 iowrite8(CR_ENABLE_RX, &channel->regs->w.cr); in ipoctal_irq_channel()
229 channel->rx_enable = 1; in ipoctal_irq_channel()
234 if ((isr & channel->isr_rx_rdy_mask) && (sr & SR_RX_READY)) in ipoctal_irq_channel()
235 ipoctal_irq_rx(channel, sr); in ipoctal_irq_channel()
238 if ((isr & channel->isr_tx_rdy_mask) && (sr & SR_TX_READY)) in ipoctal_irq_channel()
239 ipoctal_irq_tx(channel); in ipoctal_irq_channel()
253 ipoctal_irq_channel(&ipoctal->channel[i]); in ipoctal_irq_handler()
270 struct ipoctal_channel *channel; in ipoctal_inst_slot() local
318 struct ipoctal_channel *channel = &ipoctal->channel[i]; in ipoctal_inst_slot() local
319 channel->regs = chan_regs + i; in ipoctal_inst_slot()
320 channel->block_regs = block_regs + (i >> 1); in ipoctal_inst_slot()
321 channel->board_id = ipoctal->board_id; in ipoctal_inst_slot()
323 channel->isr_tx_rdy_mask = ISR_TxRDY_B; in ipoctal_inst_slot()
324 channel->isr_rx_rdy_mask = ISR_RxRDY_FFULL_B; in ipoctal_inst_slot()
326 channel->isr_tx_rdy_mask = ISR_TxRDY_A; in ipoctal_inst_slot()
327 channel->isr_rx_rdy_mask = ISR_RxRDY_FFULL_A; in ipoctal_inst_slot()
330 ipoctal_reset_channel(channel); in ipoctal_inst_slot()
332 &channel->regs->w.mr); /* mr1 */ in ipoctal_inst_slot()
333 iowrite8(0, &channel->regs->w.mr); /* mr2 */ in ipoctal_inst_slot()
334 iowrite8(TX_CLK_9600 | RX_CLK_9600, &channel->regs->w.csr); in ipoctal_inst_slot()
351 /* Each IP-OCTAL channel is a TTY port */ in ipoctal_inst_slot()
387 channel = &ipoctal->channel[i]; in ipoctal_inst_slot()
388 tty_port_init(&channel->tty_port); in ipoctal_inst_slot()
389 tty_port_alloc_xmit_buf(&channel->tty_port); in ipoctal_inst_slot()
390 channel->tty_port.ops = &ipoctal_tty_port_ops; in ipoctal_inst_slot()
392 ipoctal_reset_stats(&channel->stats); in ipoctal_inst_slot()
393 channel->nb_bytes = 0; in ipoctal_inst_slot()
394 spin_lock_init(&channel->lock); in ipoctal_inst_slot()
395 channel->pointer_read = 0; in ipoctal_inst_slot()
396 channel->pointer_write = 0; in ipoctal_inst_slot()
397 tty_dev = tty_port_register_device(&channel->tty_port, tty, i, NULL); in ipoctal_inst_slot()
400 tty_port_destroy(&channel->tty_port); in ipoctal_inst_slot()
403 dev_set_drvdata(tty_dev, channel); in ipoctal_inst_slot()
417 static inline int ipoctal_copy_write_buffer(struct ipoctal_channel *channel, in ipoctal_copy_write_buffer() argument
423 unsigned int *pointer_read = &channel->pointer_read; in ipoctal_copy_write_buffer()
427 if (i <= (PAGE_SIZE - channel->nb_bytes)) { in ipoctal_copy_write_buffer()
428 spin_lock_irqsave(&channel->lock, flags); in ipoctal_copy_write_buffer()
429 channel->tty_port.xmit_buf[*pointer_read] = buf[i]; in ipoctal_copy_write_buffer()
431 channel->nb_bytes++; in ipoctal_copy_write_buffer()
432 spin_unlock_irqrestore(&channel->lock, flags); in ipoctal_copy_write_buffer()
443 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_write_tty() local
446 char_copied = ipoctal_copy_write_buffer(channel, buf, count); in ipoctal_write_tty()
449 if (channel->board_id == IPACK1_DEVICE_ID_SBS_OCTAL_485) { in ipoctal_write_tty()
450 iowrite8(CR_DISABLE_RX, &channel->regs->w.cr); in ipoctal_write_tty()
451 channel->rx_enable = 0; in ipoctal_write_tty()
452 iowrite8(CR_CMD_ASSERT_RTSN, &channel->regs->w.cr); in ipoctal_write_tty()
459 iowrite8(CR_ENABLE_TX, &channel->regs->w.cr); in ipoctal_write_tty()
465 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_write_room() local
467 return PAGE_SIZE - channel->nb_bytes; in ipoctal_write_room()
472 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_chars_in_buffer() local
474 return channel->nb_bytes; in ipoctal_chars_in_buffer()
484 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_set_termios() local
490 ipoctal_reset_channel(channel); in ipoctal_set_termios()
527 switch (channel->board_id) { in ipoctal_set_termios()
603 iowrite8(mr1, &channel->regs->w.mr); in ipoctal_set_termios()
604 iowrite8(mr2, &channel->regs->w.mr); in ipoctal_set_termios()
605 iowrite8(csr, &channel->regs->w.csr); in ipoctal_set_termios()
608 if (channel->rx_enable) in ipoctal_set_termios()
609 iowrite8(CR_ENABLE_RX, &channel->regs->w.cr); in ipoctal_set_termios()
615 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_hangup() local
617 if (channel == NULL) in ipoctal_hangup()
620 spin_lock_irqsave(&channel->lock, flags); in ipoctal_hangup()
621 channel->nb_bytes = 0; in ipoctal_hangup()
622 channel->pointer_read = 0; in ipoctal_hangup()
623 channel->pointer_write = 0; in ipoctal_hangup()
624 spin_unlock_irqrestore(&channel->lock, flags); in ipoctal_hangup()
626 tty_port_hangup(&channel->tty_port); in ipoctal_hangup()
628 ipoctal_reset_channel(channel); in ipoctal_hangup()
629 tty_port_set_initialized(&channel->tty_port, 0); in ipoctal_hangup()
630 wake_up_interruptible(&channel->tty_port.open_wait); in ipoctal_hangup()
635 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_shutdown() local
637 if (channel == NULL) in ipoctal_shutdown()
640 ipoctal_reset_channel(channel); in ipoctal_shutdown()
641 tty_port_set_initialized(&channel->tty_port, 0); in ipoctal_shutdown()
646 struct ipoctal_channel *channel = tty->driver_data; in ipoctal_cleanup() local
647 struct ipoctal *ipoctal = chan_to_ipoctal(channel, tty->index); in ipoctal_cleanup()
696 struct ipoctal_channel *channel = &ipoctal->channel[i]; in __ipoctal_remove() local
698 tty_port_free_xmit_buf(&channel->tty_port); in __ipoctal_remove()
699 tty_port_destroy(&channel->tty_port); in __ipoctal_remove()