Lines Matching refs:ch
52 static void cls_set_cts_flow_control(struct jsm_channel *ch) in cls_set_cts_flow_control() argument
54 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_cts_flow_control()
55 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_cts_flow_control()
62 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_cts_flow_control()
64 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_cts_flow_control()
70 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_cts_flow_control()
73 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_cts_flow_control()
81 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_cts_flow_control()
84 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_cts_flow_control()
88 &ch->ch_cls_uart->isr_fcr); in cls_set_cts_flow_control()
90 ch->ch_t_tlevel = 16; in cls_set_cts_flow_control()
93 static void cls_set_ixon_flow_control(struct jsm_channel *ch) in cls_set_ixon_flow_control() argument
95 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_ixon_flow_control()
96 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_ixon_flow_control()
103 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_ixon_flow_control()
105 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_ixon_flow_control()
111 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_ixon_flow_control()
114 writeb(ch->ch_startc, &ch->ch_cls_uart->mcr); in cls_set_ixon_flow_control()
115 writeb(0, &ch->ch_cls_uart->lsr); in cls_set_ixon_flow_control()
116 writeb(ch->ch_stopc, &ch->ch_cls_uart->msr); in cls_set_ixon_flow_control()
117 writeb(0, &ch->ch_cls_uart->spr); in cls_set_ixon_flow_control()
120 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_ixon_flow_control()
128 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_ixon_flow_control()
131 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_ixon_flow_control()
135 &ch->ch_cls_uart->isr_fcr); in cls_set_ixon_flow_control()
138 static void cls_set_no_output_flow_control(struct jsm_channel *ch) in cls_set_no_output_flow_control() argument
140 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_no_output_flow_control()
141 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_no_output_flow_control()
148 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_no_output_flow_control()
150 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_no_output_flow_control()
156 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_no_output_flow_control()
159 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_no_output_flow_control()
167 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_no_output_flow_control()
170 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_no_output_flow_control()
174 &ch->ch_cls_uart->isr_fcr); in cls_set_no_output_flow_control()
176 ch->ch_r_watermark = 0; in cls_set_no_output_flow_control()
177 ch->ch_t_tlevel = 16; in cls_set_no_output_flow_control()
178 ch->ch_r_tlevel = 16; in cls_set_no_output_flow_control()
181 static void cls_set_rts_flow_control(struct jsm_channel *ch) in cls_set_rts_flow_control() argument
183 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_rts_flow_control()
184 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_rts_flow_control()
191 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_rts_flow_control()
193 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_rts_flow_control()
199 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_rts_flow_control()
202 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_rts_flow_control()
206 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_rts_flow_control()
209 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_rts_flow_control()
213 &ch->ch_cls_uart->isr_fcr); in cls_set_rts_flow_control()
215 ch->ch_r_watermark = 4; in cls_set_rts_flow_control()
216 ch->ch_r_tlevel = 8; in cls_set_rts_flow_control()
219 static void cls_set_ixoff_flow_control(struct jsm_channel *ch) in cls_set_ixoff_flow_control() argument
221 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_ixoff_flow_control()
222 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_ixoff_flow_control()
229 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_ixoff_flow_control()
231 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_ixoff_flow_control()
237 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_ixoff_flow_control()
240 writeb(ch->ch_startc, &ch->ch_cls_uart->mcr); in cls_set_ixoff_flow_control()
241 writeb(0, &ch->ch_cls_uart->lsr); in cls_set_ixoff_flow_control()
242 writeb(ch->ch_stopc, &ch->ch_cls_uart->msr); in cls_set_ixoff_flow_control()
243 writeb(0, &ch->ch_cls_uart->spr); in cls_set_ixoff_flow_control()
246 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_ixoff_flow_control()
250 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_ixoff_flow_control()
253 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_ixoff_flow_control()
257 &ch->ch_cls_uart->isr_fcr); in cls_set_ixoff_flow_control()
260 static void cls_set_no_input_flow_control(struct jsm_channel *ch) in cls_set_no_input_flow_control() argument
262 u8 lcrb = readb(&ch->ch_cls_uart->lcr); in cls_set_no_input_flow_control()
263 u8 ier = readb(&ch->ch_cls_uart->ier); in cls_set_no_input_flow_control()
270 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_set_no_input_flow_control()
272 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_set_no_input_flow_control()
278 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_set_no_input_flow_control()
281 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_set_no_input_flow_control()
285 writeb(ier, &ch->ch_cls_uart->ier); in cls_set_no_input_flow_control()
288 writeb((UART_FCR_ENABLE_FIFO), &ch->ch_cls_uart->isr_fcr); in cls_set_no_input_flow_control()
292 &ch->ch_cls_uart->isr_fcr); in cls_set_no_input_flow_control()
294 ch->ch_t_tlevel = 16; in cls_set_no_input_flow_control()
295 ch->ch_r_tlevel = 16; in cls_set_no_input_flow_control()
305 static void cls_clear_break(struct jsm_channel *ch) in cls_clear_break() argument
309 spin_lock_irqsave(&ch->ch_lock, lock_flags); in cls_clear_break()
312 if (ch->ch_flags & CH_BREAK_SENDING) { in cls_clear_break()
313 u8 temp = readb(&ch->ch_cls_uart->lcr); in cls_clear_break()
315 writeb((temp & ~UART_LCR_SBC), &ch->ch_cls_uart->lcr); in cls_clear_break()
317 ch->ch_flags &= ~(CH_BREAK_SENDING); in cls_clear_break()
318 jsm_dbg(IOCTL, &ch->ch_bd->pci_dev, in cls_clear_break()
322 spin_unlock_irqrestore(&ch->ch_lock, lock_flags); in cls_clear_break()
325 static void cls_disable_receiver(struct jsm_channel *ch) in cls_disable_receiver() argument
327 u8 tmp = readb(&ch->ch_cls_uart->ier); in cls_disable_receiver()
330 writeb(tmp, &ch->ch_cls_uart->ier); in cls_disable_receiver()
333 static void cls_enable_receiver(struct jsm_channel *ch) in cls_enable_receiver() argument
335 u8 tmp = readb(&ch->ch_cls_uart->ier); in cls_enable_receiver()
338 writeb(tmp, &ch->ch_cls_uart->ier); in cls_enable_receiver()
342 static void cls_assert_modem_signals(struct jsm_channel *ch) in cls_assert_modem_signals() argument
344 if (!ch) in cls_assert_modem_signals()
347 writeb(ch->ch_mostat, &ch->ch_cls_uart->mcr); in cls_assert_modem_signals()
350 static void cls_copy_data_from_uart_to_queue(struct jsm_channel *ch) in cls_copy_data_from_uart_to_queue() argument
359 if (!ch) in cls_copy_data_from_uart_to_queue()
362 spin_lock_irqsave(&ch->ch_lock, flags); in cls_copy_data_from_uart_to_queue()
365 head = ch->ch_r_head & RQUEUEMASK; in cls_copy_data_from_uart_to_queue()
366 tail = ch->ch_r_tail & RQUEUEMASK; in cls_copy_data_from_uart_to_queue()
369 linestatus = ch->ch_cached_lsr; in cls_copy_data_from_uart_to_queue()
370 ch->ch_cached_lsr = 0; in cls_copy_data_from_uart_to_queue()
381 if (ch->ch_c_iflag & IGNBRK) in cls_copy_data_from_uart_to_queue()
389 linestatus = readb(&ch->ch_cls_uart->lsr); in cls_copy_data_from_uart_to_queue()
403 discard = readb(&ch->ch_cls_uart->txrx); in cls_copy_data_from_uart_to_queue()
417 ch->ch_r_tail = tail; in cls_copy_data_from_uart_to_queue()
418 ch->ch_err_overrun++; in cls_copy_data_from_uart_to_queue()
422 ch->ch_equeue[head] = linestatus & (UART_LSR_BI | UART_LSR_PE in cls_copy_data_from_uart_to_queue()
424 ch->ch_rqueue[head] = readb(&ch->ch_cls_uart->txrx); in cls_copy_data_from_uart_to_queue()
428 if (ch->ch_equeue[head] & UART_LSR_PE) in cls_copy_data_from_uart_to_queue()
429 ch->ch_err_parity++; in cls_copy_data_from_uart_to_queue()
430 if (ch->ch_equeue[head] & UART_LSR_BI) in cls_copy_data_from_uart_to_queue()
431 ch->ch_err_break++; in cls_copy_data_from_uart_to_queue()
432 if (ch->ch_equeue[head] & UART_LSR_FE) in cls_copy_data_from_uart_to_queue()
433 ch->ch_err_frame++; in cls_copy_data_from_uart_to_queue()
437 ch->ch_rxcount++; in cls_copy_data_from_uart_to_queue()
443 ch->ch_r_head = head & RQUEUEMASK; in cls_copy_data_from_uart_to_queue()
444 ch->ch_e_head = head & EQUEUEMASK; in cls_copy_data_from_uart_to_queue()
446 spin_unlock_irqrestore(&ch->ch_lock, flags); in cls_copy_data_from_uart_to_queue()
449 static void cls_copy_data_from_queue_to_uart(struct jsm_channel *ch) in cls_copy_data_from_queue_to_uart() argument
457 if (!ch) in cls_copy_data_from_queue_to_uart()
460 circ = &ch->uart_port.state->xmit; in cls_copy_data_from_queue_to_uart()
467 if ((ch->ch_flags & CH_STOP) || (ch->ch_flags & CH_BREAK_SENDING)) in cls_copy_data_from_queue_to_uart()
471 if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM))) in cls_copy_data_from_queue_to_uart()
484 writeb(circ->buf[tail], &ch->ch_cls_uart->txrx); in cls_copy_data_from_queue_to_uart()
487 ch->ch_txcount++; in cls_copy_data_from_queue_to_uart()
494 if (len_written > ch->ch_t_tlevel) in cls_copy_data_from_queue_to_uart()
495 ch->ch_flags &= ~(CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM); in cls_copy_data_from_queue_to_uart()
498 uart_write_wakeup(&ch->uart_port); in cls_copy_data_from_queue_to_uart()
501 static void cls_parse_modem(struct jsm_channel *ch, u8 signals) in cls_parse_modem() argument
505 jsm_dbg(MSIGS, &ch->ch_bd->pci_dev, in cls_parse_modem()
507 ch->ch_portnum, msignals); in cls_parse_modem()
517 uart_handle_dcd_change(&ch->uart_port, msignals & UART_MSR_DCD); in cls_parse_modem()
519 uart_handle_dcd_change(&ch->uart_port, msignals & UART_MSR_CTS); in cls_parse_modem()
522 ch->ch_mistat |= UART_MSR_DCD; in cls_parse_modem()
524 ch->ch_mistat &= ~UART_MSR_DCD; in cls_parse_modem()
527 ch->ch_mistat |= UART_MSR_DSR; in cls_parse_modem()
529 ch->ch_mistat &= ~UART_MSR_DSR; in cls_parse_modem()
532 ch->ch_mistat |= UART_MSR_RI; in cls_parse_modem()
534 ch->ch_mistat &= ~UART_MSR_RI; in cls_parse_modem()
537 ch->ch_mistat |= UART_MSR_CTS; in cls_parse_modem()
539 ch->ch_mistat &= ~UART_MSR_CTS; in cls_parse_modem()
541 jsm_dbg(MSIGS, &ch->ch_bd->pci_dev, in cls_parse_modem()
543 ch->ch_portnum, in cls_parse_modem()
544 !!((ch->ch_mistat | ch->ch_mostat) & UART_MCR_DTR), in cls_parse_modem()
545 !!((ch->ch_mistat | ch->ch_mostat) & UART_MCR_RTS), in cls_parse_modem()
546 !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_CTS), in cls_parse_modem()
547 !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_DSR), in cls_parse_modem()
548 !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_RI), in cls_parse_modem()
549 !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_DCD)); in cls_parse_modem()
555 struct jsm_channel *ch; in cls_parse_isr() local
567 ch = brd->channels[port]; in cls_parse_isr()
568 if (!ch) in cls_parse_isr()
573 isr = readb(&ch->ch_cls_uart->isr_fcr); in cls_parse_isr()
582 cls_copy_data_from_uart_to_queue(ch); in cls_parse_isr()
583 jsm_check_queue_flow_control(ch); in cls_parse_isr()
589 spin_lock_irqsave(&ch->ch_lock, flags); in cls_parse_isr()
590 ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM); in cls_parse_isr()
591 spin_unlock_irqrestore(&ch->ch_lock, flags); in cls_parse_isr()
592 cls_copy_data_from_queue_to_uart(ch); in cls_parse_isr()
602 cls_parse_modem(ch, readb(&ch->ch_cls_uart->msr)); in cls_parse_isr()
607 static void cls_flush_uart_write(struct jsm_channel *ch) in cls_flush_uart_write() argument
612 if (!ch) in cls_flush_uart_write()
616 &ch->ch_cls_uart->isr_fcr); in cls_flush_uart_write()
620 tmp = readb(&ch->ch_cls_uart->isr_fcr); in cls_flush_uart_write()
622 jsm_dbg(IOCTL, &ch->ch_bd->pci_dev, in cls_flush_uart_write()
629 ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM); in cls_flush_uart_write()
633 static void cls_flush_uart_read(struct jsm_channel *ch) in cls_flush_uart_read() argument
635 if (!ch) in cls_flush_uart_read()
652 static void cls_send_start_character(struct jsm_channel *ch) in cls_send_start_character() argument
654 if (!ch) in cls_send_start_character()
657 if (ch->ch_startc != __DISABLED_CHAR) { in cls_send_start_character()
658 ch->ch_xon_sends++; in cls_send_start_character()
659 writeb(ch->ch_startc, &ch->ch_cls_uart->txrx); in cls_send_start_character()
663 static void cls_send_stop_character(struct jsm_channel *ch) in cls_send_stop_character() argument
665 if (!ch) in cls_send_stop_character()
668 if (ch->ch_stopc != __DISABLED_CHAR) { in cls_send_stop_character()
669 ch->ch_xoff_sends++; in cls_send_stop_character()
670 writeb(ch->ch_stopc, &ch->ch_cls_uart->txrx); in cls_send_stop_character()
678 static void cls_param(struct jsm_channel *ch) in cls_param() argument
689 bd = ch->ch_bd; in cls_param()
696 if ((ch->ch_c_cflag & (CBAUD)) == 0) { in cls_param()
697 ch->ch_r_head = 0; in cls_param()
698 ch->ch_r_tail = 0; in cls_param()
699 ch->ch_e_head = 0; in cls_param()
700 ch->ch_e_tail = 0; in cls_param()
702 cls_flush_uart_write(ch); in cls_param()
703 cls_flush_uart_read(ch); in cls_param()
706 ch->ch_flags |= (CH_BAUD0); in cls_param()
707 ch->ch_mostat &= ~(UART_MCR_RTS | UART_MCR_DTR); in cls_param()
708 cls_assert_modem_signals(ch); in cls_param()
712 cflag = C_BAUD(ch->uart_port.state->port.tty); in cls_param()
721 if (ch->ch_flags & CH_BAUD0) in cls_param()
722 ch->ch_flags &= ~(CH_BAUD0); in cls_param()
724 if (ch->ch_c_cflag & PARENB) in cls_param()
727 if (!(ch->ch_c_cflag & PARODD)) in cls_param()
735 if (ch->ch_c_cflag & CMSPAR) in cls_param()
739 if (ch->ch_c_cflag & CSTOPB) in cls_param()
742 switch (ch->ch_c_cflag & CSIZE) { in cls_param()
758 ier = readb(&ch->ch_cls_uart->ier); in cls_param()
759 uart_lcr = readb(&ch->ch_cls_uart->lcr); in cls_param()
761 quot = ch->ch_bd->bd_dividend / baud; in cls_param()
764 writeb(UART_LCR_DLAB, &ch->ch_cls_uart->lcr); in cls_param()
765 writeb((quot & 0xff), &ch->ch_cls_uart->txrx); in cls_param()
766 writeb((quot >> 8), &ch->ch_cls_uart->ier); in cls_param()
767 writeb(lcr, &ch->ch_cls_uart->lcr); in cls_param()
771 writeb(lcr, &ch->ch_cls_uart->lcr); in cls_param()
773 if (ch->ch_c_cflag & CREAD) in cls_param()
778 writeb(ier, &ch->ch_cls_uart->ier); in cls_param()
780 if (ch->ch_c_cflag & CRTSCTS) in cls_param()
781 cls_set_cts_flow_control(ch); in cls_param()
782 else if (ch->ch_c_iflag & IXON) { in cls_param()
787 if ((ch->ch_startc == __DISABLED_CHAR) || in cls_param()
788 (ch->ch_stopc == __DISABLED_CHAR)) in cls_param()
789 cls_set_no_output_flow_control(ch); in cls_param()
791 cls_set_ixon_flow_control(ch); in cls_param()
793 cls_set_no_output_flow_control(ch); in cls_param()
795 if (ch->ch_c_cflag & CRTSCTS) in cls_param()
796 cls_set_rts_flow_control(ch); in cls_param()
797 else if (ch->ch_c_iflag & IXOFF) { in cls_param()
802 if ((ch->ch_startc == __DISABLED_CHAR) || in cls_param()
803 (ch->ch_stopc == __DISABLED_CHAR)) in cls_param()
804 cls_set_no_input_flow_control(ch); in cls_param()
806 cls_set_ixoff_flow_control(ch); in cls_param()
808 cls_set_no_input_flow_control(ch); in cls_param()
810 cls_assert_modem_signals(ch); in cls_param()
813 cls_parse_modem(ch, readb(&ch->ch_cls_uart->msr)); in cls_param()
859 static void cls_uart_init(struct jsm_channel *ch) in cls_uart_init() argument
861 unsigned char lcrb = readb(&ch->ch_cls_uart->lcr); in cls_uart_init()
864 writeb(0, &ch->ch_cls_uart->ier); in cls_uart_init()
870 writeb(UART_EXAR654_ENHANCED_REGISTER_SET, &ch->ch_cls_uart->lcr); in cls_uart_init()
872 isr_fcr = readb(&ch->ch_cls_uart->isr_fcr); in cls_uart_init()
877 writeb(isr_fcr, &ch->ch_cls_uart->isr_fcr); in cls_uart_init()
880 writeb(lcrb, &ch->ch_cls_uart->lcr); in cls_uart_init()
883 readb(&ch->ch_cls_uart->txrx); in cls_uart_init()
886 &ch->ch_cls_uart->isr_fcr); in cls_uart_init()
889 ch->ch_flags |= (CH_FIFO_ENABLED | CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM); in cls_uart_init()
891 readb(&ch->ch_cls_uart->lsr); in cls_uart_init()
892 readb(&ch->ch_cls_uart->msr); in cls_uart_init()
898 static void cls_uart_off(struct jsm_channel *ch) in cls_uart_off() argument
901 writeb(0, &ch->ch_cls_uart->ier); in cls_uart_off()
910 static u32 cls_get_uart_bytes_left(struct jsm_channel *ch) in cls_get_uart_bytes_left() argument
913 u8 lsr = readb(&ch->ch_cls_uart->lsr); in cls_get_uart_bytes_left()
919 ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM); in cls_get_uart_bytes_left()
932 static void cls_send_break(struct jsm_channel *ch) in cls_send_break() argument
935 if (!(ch->ch_flags & CH_BREAK_SENDING)) { in cls_send_break()
936 u8 temp = readb(&ch->ch_cls_uart->lcr); in cls_send_break()
938 writeb((temp | UART_LCR_SBC), &ch->ch_cls_uart->lcr); in cls_send_break()
939 ch->ch_flags |= (CH_BREAK_SENDING); in cls_send_break()
950 static void cls_send_immediate_char(struct jsm_channel *ch, unsigned char c) in cls_send_immediate_char() argument
952 writeb(c, &ch->ch_cls_uart->txrx); in cls_send_immediate_char()