Lines Matching full:port
2 * Simple synchronous serial port driver for ETRAX 100LX.
37 /* responsible for port->bufchunk of a common buffer. */
114 char started; /* 1 if port has been started */
115 char port_nbr; /* Port 0 or 1 */
116 char busy; /* 1 if port is busy */
118 char enabled; /* 1 if port is enabled */
119 char use_dma; /* 1 if port uses dma */
155 static inline int sync_data_avail(struct sync_port *port);
175 static void send_word(struct sync_port *port);
176 static void start_dma(struct sync_port *port, const char *data, int count);
177 static void start_dma_in(struct sync_port *port);
266 "Could not allocate IO group for port %d\n", 0); in etrax_sync_serial_init()
276 "Could not allocate IO group for port %d\n", 1); in etrax_sync_serial_init()
289 printk("unable to get major for synchronous serial port\n"); in etrax_sync_serial_init()
340 printk(KERN_INFO "ETRAX 100LX synchronous serial port driver\n"); in etrax_sync_serial_init()
346 struct sync_port *port = &ports[portnbr]; in initialize_port() local
348 DEBUG(printk(KERN_DEBUG "Init sync serial port %d\n", portnbr)); in initialize_port()
350 port->started = 0; in initialize_port()
351 port->port_nbr = portnbr; in initialize_port()
352 port->busy = 0; in initialize_port()
353 port->tr_running = 0; in initialize_port()
355 port->out_count = 0; in initialize_port()
356 port->outp = port->out_buffer; in initialize_port()
358 port->readp = port->flip; in initialize_port()
359 port->writep = port->flip; in initialize_port()
360 port->in_buffer_size = IN_BUFFER_SIZE; in initialize_port()
361 port->inbufchunk = IN_DESCR_SIZE; in initialize_port()
362 port->next_rx_desc = &port->in_descr[0]; in initialize_port()
363 port->prev_rx_desc = &port->in_descr[NUM_IN_DESCR-1]; in initialize_port()
364 port->prev_rx_desc->ctrl = d_eol; in initialize_port()
366 init_waitqueue_head(&port->out_wait_q); in initialize_port()
367 init_waitqueue_head(&port->in_wait_q); in initialize_port()
369 port->ctrl_data_shadow = in initialize_port()
393 if (port->use_dma) in initialize_port()
394 port->ctrl_data_shadow |= IO_STATE(R_SYNC_SERIAL1_CTRL, in initialize_port()
397 port->ctrl_data_shadow |= IO_STATE(R_SYNC_SERIAL1_CTRL, in initialize_port()
400 *port->ctrl_data = port->ctrl_data_shadow; in initialize_port()
403 static inline int sync_data_avail(struct sync_port *port) in sync_data_avail() argument
409 start = (unsigned char *)port->readp; /* cast away volatile */ in sync_data_avail()
410 end = (unsigned char *)port->writep; /* cast away volatile */ in sync_data_avail()
418 avail = port->in_buffer_size - (start - end); in sync_data_avail()
422 static inline int sync_data_avail_to_end(struct sync_port *port) in sync_data_avail_to_end() argument
428 start = (unsigned char *)port->readp; /* cast away volatile */ in sync_data_avail_to_end()
429 end = (unsigned char *)port->writep; /* cast away volatile */ in sync_data_avail_to_end()
438 avail = port->flip + port->in_buffer_size - start; in sync_data_avail_to_end()
446 struct sync_port *port; in sync_serial_open() local
451 DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev)); in sync_serial_open()
458 port = &ports[dev]; in sync_serial_open()
460 if (port->busy == 2) { in sync_serial_open()
464 if (port->init_irqs) { in sync_serial_open()
465 if (port->use_dma) { in sync_serial_open()
466 if (port == &ports[0]) { in sync_serial_open()
472 "sync serial port 1 IRQ"); in sync_serial_open()
477 free_irq(24, &port[0]); in sync_serial_open()
479 "sync serial port 1 IRQ"); in sync_serial_open()
485 free_irq(24, &port[0]); in sync_serial_open()
486 free_irq(25, &port[0]); in sync_serial_open()
488 "sync serial port 1 " in sync_serial_open()
496 free_irq(24, &port[0]); in sync_serial_open()
497 free_irq(25, &port[0]); in sync_serial_open()
499 "sync serial port 1 " in sync_serial_open()
521 } else if (port == &ports[1]) { in sync_serial_open()
527 "sync serial port 3 IRQ"); in sync_serial_open()
534 "sync serial port 3 IRQ"); in sync_serial_open()
543 "sync serial port 3 " in sync_serial_open()
554 "sync serial port 3 " in sync_serial_open()
577 start_dma_in(port); in sync_serial_open()
578 port->init_irqs = 0; in sync_serial_open()
579 } else { /* !port->use_dma */ in sync_serial_open()
581 if (port == &ports[0]) { in sync_serial_open()
591 } else if (port == &ports[1]) { in sync_serial_open()
602 port->init_irqs = 0; in sync_serial_open()
607 } /* port->init_irqs */ in sync_serial_open()
609 port->busy++; in sync_serial_open()
610 /* Start port if we use it as input */ in sync_serial_open()
611 mode = IO_EXTRACT(R_SYNC_SERIAL1_CTRL, mode, port->ctrl_data_shadow); in sync_serial_open()
616 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_halt, in sync_serial_open()
618 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, tr_enable, in sync_serial_open()
620 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, rec_enable, in sync_serial_open()
622 port->started = 1; in sync_serial_open()
623 *port->ctrl_data = port->ctrl_data_shadow; in sync_serial_open()
624 if (!port->use_dma) in sync_serial_open()
625 *R_IRQ_MASK1_SET = 1 << port->data_avail_bit; in sync_serial_open()
638 struct sync_port *port; in sync_serial_release() local
644 port = &ports[dev]; in sync_serial_release()
645 if (port->busy) in sync_serial_release()
646 port->busy--; in sync_serial_release()
647 if (!port->busy) in sync_serial_release()
648 *R_IRQ_MASK1_CLR = ((1 << port->data_avail_bit) | in sync_serial_release()
649 (1 << port->transmitter_ready_bit)); in sync_serial_release()
660 struct sync_port *port; in sync_serial_poll() local
663 port = &ports[dev]; in sync_serial_poll()
664 poll_wait(file, &port->out_wait_q, wait); in sync_serial_poll()
665 poll_wait(file, &port->in_wait_q, wait); in sync_serial_poll()
667 if (port->out_count < OUT_BUFFER_SIZE) in sync_serial_poll()
670 if (sync_data_avail(port) >= port->inbufchunk) in sync_serial_poll()
690 struct sync_port *port; in sync_serial_ioctl_unlocked() local
696 port = &ports[dev]; in sync_serial_ioctl_unlocked()
699 /* Disable port while changing config */ in sync_serial_ioctl_unlocked()
701 if (port->use_dma) { in sync_serial_ioctl_unlocked()
703 port->tr_running = 0; in sync_serial_ioctl_unlocked()
704 port->out_count = 0; in sync_serial_ioctl_unlocked()
705 port->outp = port->out_buffer; in sync_serial_ioctl_unlocked()
712 if (port->use_dma) { in sync_serial_ioctl_unlocked()
714 port->tr_running = 0; in sync_serial_ioctl_unlocked()
715 port->out_count = 0; in sync_serial_ioctl_unlocked()
716 port->outp = port->out_buffer; in sync_serial_ioctl_unlocked()
748 SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
764 *R_IRQ_MASK1_CLR = 1 << port->data_avail_bit; in sync_serial_ioctl_unlocked()
765 else if (!port->use_dma) in sync_serial_ioctl_unlocked()
766 *R_IRQ_MASK1_SET = 1 << port->data_avail_bit; in sync_serial_ioctl_unlocked()
767 SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, mode, arg); in sync_serial_ioctl_unlocked()
771 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
774 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
778 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
781 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
784 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
788 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
791 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
795 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
798 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
801 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
804 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
807 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
811 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
814 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
818 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
821 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
825 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
828 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
835 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
838 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
842 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
845 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
849 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
852 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
857 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
860 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
864 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
867 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
871 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
874 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
878 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, flow_ctrl, in sync_serial_ioctl_unlocked()
880 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, bitorder, in sync_serial_ioctl_unlocked()
882 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, in sync_serial_ioctl_unlocked()
884 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_sync, on); in sync_serial_ioctl_unlocked()
885 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_syncsize, in sync_serial_ioctl_unlocked()
887 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_synctype, in sync_serial_ioctl_unlocked()
890 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
892 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
894 SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
897 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
899 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
901 SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, in sync_serial_ioctl_unlocked()
907 if (arg > port->in_buffer_size/NUM_IN_DESCR) in sync_serial_ioctl_unlocked()
909 port->inbufchunk = arg; in sync_serial_ioctl_unlocked()
911 port->in_buffer_size = in sync_serial_ioctl_unlocked()
912 (port->in_buffer_size/port->inbufchunk) * in sync_serial_ioctl_unlocked()
913 port->inbufchunk; in sync_serial_ioctl_unlocked()
915 port->inbufchunk, port->in_buffer_size)); in sync_serial_ioctl_unlocked()
916 if (port->use_dma) { in sync_serial_ioctl_unlocked()
917 if (port->port_nbr == 0) { in sync_serial_ioctl_unlocked()
924 start_dma_in(port); in sync_serial_ioctl_unlocked()
933 /* Set config and enable port */ in sync_serial_ioctl_unlocked()
934 *port->ctrl_data = port->ctrl_data_shadow; in sync_serial_ioctl_unlocked()
944 /* Reset DMA. At readout from serial port the data could be shifted in sync_serial_ioctl_unlocked()
947 if (port->use_dma) { in sync_serial_ioctl_unlocked()
948 if (port->port_nbr == 0) { in sync_serial_ioctl_unlocked()
955 start_dma_in(port); in sync_serial_ioctl_unlocked()
979 struct sync_port *port; in sync_serial_write() local
990 port = &ports[dev]; in sync_serial_write()
993 port->port_nbr, count, port->out_count, OUT_BUFFER_SIZE)); in sync_serial_write()
1007 if (count > OUT_BUFFER_SIZE - port->out_count) in sync_serial_write()
1008 count = OUT_BUFFER_SIZE - port->out_count; in sync_serial_write()
1010 outp = (unsigned long)port->outp; in sync_serial_write()
1011 free_outp = outp + port->out_count; in sync_serial_write()
1013 out_buffer = (unsigned long)port->out_buffer; in sync_serial_write()
1039 port->out_count += count; in sync_serial_write()
1043 if (!port->started) { in sync_serial_write()
1044 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_halt, in sync_serial_write()
1046 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, tr_enable, in sync_serial_write()
1048 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, rec_enable, in sync_serial_write()
1050 port->started = 1; in sync_serial_write()
1053 *port->ctrl_data = port->ctrl_data_shadow; in sync_serial_write()
1057 if (!port->tr_running) { in sync_serial_write()
1058 if (!port->use_dma) { in sync_serial_write()
1060 send_word(port); in sync_serial_write()
1063 port->transmitter_ready_bit; in sync_serial_write()
1065 start_dma(port, in sync_serial_write()
1066 (unsigned char *volatile)port->outp, c); in sync_serial_write()
1070 port->port_nbr, count)); in sync_serial_write()
1075 add_wait_queue(&port->out_wait_q, &wait); in sync_serial_write()
1078 if (!port->tr_running) { in sync_serial_write()
1079 if (!port->use_dma) { in sync_serial_write()
1081 send_word(port); in sync_serial_write()
1083 *R_IRQ_MASK1_SET = 1 << port->transmitter_ready_bit; in sync_serial_write()
1085 start_dma(port, port->outp, c); in sync_serial_write()
1090 remove_wait_queue(&port->out_wait_q, &wait); in sync_serial_write()
1094 DEBUGWRITE(printk(KERN_DEBUG "w d%d c %lu\n", port->port_nbr, count)); in sync_serial_write()
1103 struct sync_port *port; in sync_serial_read() local
1112 port = &ports[dev]; in sync_serial_read()
1115 dev, count, port->readp - port->flip, in sync_serial_read()
1116 port->writep - port->flip, port->in_buffer_size)); in sync_serial_read()
1118 if (!port->started) { in sync_serial_read()
1119 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_halt, in sync_serial_read()
1121 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, tr_enable, in sync_serial_read()
1123 SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, rec_enable, in sync_serial_read()
1125 port->started = 1; in sync_serial_read()
1127 *port->ctrl_data = port->ctrl_data_shadow; in sync_serial_read()
1132 start = (unsigned char *)port->readp; /* cast away volatile */ in sync_serial_read()
1133 end = (unsigned char *)port->writep; /* cast away volatile */ in sync_serial_read()
1135 while (start == end && !port->full) { in sync_serial_read()
1140 interruptible_sleep_on(&port->in_wait_q); in sync_serial_read()
1145 start = (unsigned char *)port->readp; /* cast away volatile */ in sync_serial_read()
1146 end = (unsigned char *)port->writep; /* cast away volatile */ in sync_serial_read()
1151 if (port->full) in sync_serial_read()
1152 avail = port->in_buffer_size; in sync_serial_read()
1156 avail = port->flip + port->in_buffer_size - start; in sync_serial_read()
1163 port->readp += count; in sync_serial_read()
1164 if (port->readp >= port->flip + port->in_buffer_size) /* Wrap? */ in sync_serial_read()
1165 port->readp = port->flip; in sync_serial_read()
1166 port->full = 0; in sync_serial_read()
1172 static void send_word(struct sync_port *port) in send_word() argument
1175 port->ctrl_data_shadow)) { in send_word()
1177 port->out_count--; in send_word()
1178 *port->data_out = *port->outp++; in send_word()
1179 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in send_word()
1180 port->outp = port->out_buffer; in send_word()
1184 int data = (*port->outp++) << 8; in send_word()
1185 data |= *port->outp++; in send_word()
1186 port->out_count -= 2; in send_word()
1187 *port->data_out = data; in send_word()
1188 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in send_word()
1189 port->outp = port->out_buffer; in send_word()
1193 port->out_count -= 2; in send_word()
1194 *port->data_out = *(unsigned short *)port->outp; in send_word()
1195 port->outp += 2; in send_word()
1196 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in send_word()
1197 port->outp = port->out_buffer; in send_word()
1200 port->out_count -= 3; in send_word()
1201 *port->data_out = *(unsigned int *)port->outp; in send_word()
1202 port->outp += 3; in send_word()
1203 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in send_word()
1204 port->outp = port->out_buffer; in send_word()
1207 port->out_count -= 4; in send_word()
1208 *port->data_out = *(unsigned int *)port->outp; in send_word()
1209 port->outp += 4; in send_word()
1210 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in send_word()
1211 port->outp = port->out_buffer; in send_word()
1217 static void start_dma(struct sync_port *port, const char *data, int count) in start_dma() argument
1219 port->tr_running = 1; in start_dma()
1220 port->out_descr.hw_len = 0; in start_dma()
1221 port->out_descr.next = 0; in start_dma()
1222 port->out_descr.ctrl = d_eol | d_eop; /* No d_wait to avoid glitches */ in start_dma()
1223 port->out_descr.sw_len = count; in start_dma()
1224 port->out_descr.buf = virt_to_phys(data); in start_dma()
1225 port->out_descr.status = 0; in start_dma()
1227 *port->output_dma_first = virt_to_phys(&port->out_descr); in start_dma()
1228 *port->output_dma_cmd = IO_STATE(R_DMA_CH0_CMD, cmd, start); in start_dma()
1233 static void start_dma_in(struct sync_port *port) in start_dma_in() argument
1237 port->writep = port->flip; in start_dma_in()
1239 if (port->writep > port->flip + port->in_buffer_size) { in start_dma_in()
1243 buf = virt_to_phys(port->in_buffer); in start_dma_in()
1245 port->in_descr[i].sw_len = port->inbufchunk; in start_dma_in()
1246 port->in_descr[i].ctrl = d_int; in start_dma_in()
1247 port->in_descr[i].next = virt_to_phys(&port->in_descr[i+1]); in start_dma_in()
1248 port->in_descr[i].buf = buf; in start_dma_in()
1249 port->in_descr[i].hw_len = 0; in start_dma_in()
1250 port->in_descr[i].status = 0; in start_dma_in()
1251 port->in_descr[i].fifo_len = 0; in start_dma_in()
1252 buf += port->inbufchunk; in start_dma_in()
1253 prepare_rx_descriptor(&port->in_descr[i]); in start_dma_in()
1256 port->in_descr[i-1].next = virt_to_phys(&port->in_descr[0]); in start_dma_in()
1257 port->in_descr[i-1].ctrl |= d_eol; in start_dma_in()
1258 port->next_rx_desc = &port->in_descr[0]; in start_dma_in()
1259 port->prev_rx_desc = &port->in_descr[NUM_IN_DESCR - 1]; in start_dma_in()
1260 *port->input_dma_first = virt_to_phys(port->next_rx_desc); in start_dma_in()
1261 *port->input_dma_cmd = IO_STATE(R_DMA_CH0_CMD, cmd, start); in start_dma_in()
1274 struct sync_port *port = &ports[i]; in tr_interrupt() local
1275 if (!port->enabled || !port->use_dma) in tr_interrupt()
1278 /* IRQ active for the port? */ in tr_interrupt()
1279 if (!(ireg & (1 << port->output_dma_bit))) in tr_interrupt()
1285 *port->output_dma_clr_irq = in tr_interrupt()
1289 descr = &port->out_descr; in tr_interrupt()
1296 port->out_count -= sentl; in tr_interrupt()
1297 port->outp += sentl; in tr_interrupt()
1298 if (port->outp >= port->out_buffer + OUT_BUFFER_SIZE) in tr_interrupt()
1299 port->outp = port->out_buffer; in tr_interrupt()
1300 if (port->out_count) { in tr_interrupt()
1301 int c = port->out_buffer + OUT_BUFFER_SIZE - port->outp; in tr_interrupt()
1302 if (c > port->out_count) in tr_interrupt()
1303 c = port->out_count; in tr_interrupt()
1306 start_dma(port, port->outp, c); in tr_interrupt()
1310 port->tr_running = 0; in tr_interrupt()
1313 wake_up_interruptible(&port->out_wait_q); in tr_interrupt()
1325 struct sync_port *port = &ports[i]; in rx_interrupt() local
1327 if (!port->enabled || !port->use_dma) in rx_interrupt()
1330 if (!(ireg & (1 << port->input_dma_descr_bit))) in rx_interrupt()
1335 while (*port->input_dma_descr != in rx_interrupt()
1336 virt_to_phys(port->next_rx_desc)) { in rx_interrupt()
1337 if (port->writep + port->inbufchunk > port->flip + in rx_interrupt()
1338 port->in_buffer_size) { in rx_interrupt()
1339 int first_size = port->flip + in rx_interrupt()
1340 port->in_buffer_size - port->writep; in rx_interrupt()
1341 memcpy(port->writep, in rx_interrupt()
1342 phys_to_virt(port->next_rx_desc->buf), in rx_interrupt()
1344 memcpy(port->flip, in rx_interrupt()
1345 phys_to_virt(port->next_rx_desc->buf + in rx_interrupt()
1347 port->inbufchunk - first_size); in rx_interrupt()
1348 port->writep = port->flip + in rx_interrupt()
1349 port->inbufchunk - first_size; in rx_interrupt()
1351 memcpy(port->writep, in rx_interrupt()
1352 phys_to_virt(port->next_rx_desc->buf), in rx_interrupt()
1353 port->inbufchunk); in rx_interrupt()
1354 port->writep += port->inbufchunk; in rx_interrupt()
1355 if (port->writep >= port->flip in rx_interrupt()
1356 + port->in_buffer_size) in rx_interrupt()
1357 port->writep = port->flip; in rx_interrupt()
1359 if (port->writep == port->readp) in rx_interrupt()
1360 port->full = 1; in rx_interrupt()
1361 prepare_rx_descriptor(port->next_rx_desc); in rx_interrupt()
1362 port->next_rx_desc->ctrl |= d_eol; in rx_interrupt()
1363 port->prev_rx_desc->ctrl &= ~d_eol; in rx_interrupt()
1364 port->prev_rx_desc = phys_to_virt((unsigned) in rx_interrupt()
1365 port->next_rx_desc); in rx_interrupt()
1366 port->next_rx_desc = phys_to_virt((unsigned) in rx_interrupt()
1367 port->next_rx_desc->next); in rx_interrupt()
1369 wake_up_interruptible(&port->in_wait_q); in rx_interrupt()
1370 *port->input_dma_cmd = IO_STATE(R_DMA_CH1_CMD, in rx_interrupt()
1373 *port->input_dma_clr_irq = IO_STATE(R_DMA_CH0_CLR_INTR, in rx_interrupt()
1388 struct sync_port *port = &ports[i]; in manual_interrupt() local
1390 if (!port->enabled || port->use_dma) in manual_interrupt()
1394 if (*R_IRQ_MASK1_RD & (1 << port->data_avail_bit)) { in manual_interrupt()
1397 switch (port->ctrl_data_shadow & in manual_interrupt()
1400 *port->writep++ = in manual_interrupt()
1401 *(volatile char *)port->data_in; in manual_interrupt()
1405 int data = *(unsigned short *)port->data_in; in manual_interrupt()
1406 *port->writep = (data & 0x0ff0) >> 4; in manual_interrupt()
1407 *(port->writep + 1) = data & 0x0f; in manual_interrupt()
1408 port->writep += 2; in manual_interrupt()
1412 *(unsigned short *)port->writep = in manual_interrupt()
1413 *(volatile unsigned short *)port->data_in; in manual_interrupt()
1414 port->writep += 2; in manual_interrupt()
1417 *(unsigned int *)port->writep = *port->data_in; in manual_interrupt()
1418 port->writep += 3; in manual_interrupt()
1421 *(unsigned int *)port->writep = *port->data_in; in manual_interrupt()
1422 port->writep += 4; in manual_interrupt()
1427 if (port->writep >= port->flip + port->in_buffer_size) in manual_interrupt()
1428 port->writep = port->flip; in manual_interrupt()
1429 if (port->writep == port->readp) { in manual_interrupt()
1431 port->readp++; in manual_interrupt()
1433 if (port->readp >= port->flip + in manual_interrupt()
1434 port->in_buffer_size) in manual_interrupt()
1435 port->readp = port->flip; in manual_interrupt()
1437 if (sync_data_avail(port) >= port->inbufchunk) { in manual_interrupt()
1439 wake_up_interruptible(&port->in_wait_q); in manual_interrupt()
1444 if (*R_IRQ_MASK1_RD & (1 << port->transmitter_ready_bit)) { in manual_interrupt()
1445 if (port->out_count > 0) { in manual_interrupt()
1447 send_word(port); in manual_interrupt()
1452 port->transmitter_ready_bit; in manual_interrupt()
1454 wake_up_interruptible(&port->out_wait_q); in manual_interrupt()