Lines Matching refs:sport

104 	struct sbd_port		sport[2];
125 static u64 __read_sbdchn(struct sbd_port *sport, int reg)
127 void __iomem *csr = sport->port.membase + reg;
132 static u64 __read_sbdshr(struct sbd_port *sport, int reg)
134 void __iomem *csr = sport->memctrl + reg;
139 static void __write_sbdchn(struct sbd_port *sport, int reg, u64 value)
141 void __iomem *csr = sport->port.membase + reg;
146 static void __write_sbdshr(struct sbd_port *sport, int reg, u64 value)
148 void __iomem *csr = sport->memctrl + reg;
157 static void __war_sbd1956(struct sbd_port *sport)
159 __read_sbdchn(sport, R_DUART_MODE_REG_1);
160 __read_sbdchn(sport, R_DUART_MODE_REG_2);
163 static unsigned char read_sbdchn(struct sbd_port *sport, int reg)
167 retval = __read_sbdchn(sport, reg);
169 __war_sbd1956(sport);
173 static unsigned char read_sbdshr(struct sbd_port *sport, int reg)
177 retval = __read_sbdshr(sport, reg);
179 __war_sbd1956(sport);
183 static void write_sbdchn(struct sbd_port *sport, int reg, unsigned int value)
185 __write_sbdchn(sport, reg, value);
187 __war_sbd1956(sport);
190 static void write_sbdshr(struct sbd_port *sport, int reg, unsigned int value)
192 __write_sbdshr(sport, reg, value);
194 __war_sbd1956(sport);
198 static int sbd_receive_ready(struct sbd_port *sport)
200 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_RX_RDY;
203 static int sbd_receive_drain(struct sbd_port *sport)
207 while (sbd_receive_ready(sport) && --loops)
208 read_sbdchn(sport, R_DUART_RX_HOLD);
212 static int __maybe_unused sbd_transmit_ready(struct sbd_port *sport)
214 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_TX_RDY;
217 static int __maybe_unused sbd_transmit_drain(struct sbd_port *sport)
221 while (!sbd_transmit_ready(sport) && --loops)
226 static int sbd_transmit_empty(struct sbd_port *sport)
228 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_TX_EMT;
231 static int sbd_line_drain(struct sbd_port *sport)
235 while (!sbd_transmit_empty(sport) && --loops)
243 struct sbd_port *sport = to_sport(uport);
245 return sbd_transmit_empty(sport) ? TIOCSER_TEMT : 0;
250 struct sbd_port *sport = to_sport(uport);
253 status = read_sbdshr(sport, R_DUART_IN_PORT);
264 struct sbd_port *sport = to_sport(uport);
278 mode2 = read_sbdchn(sport, R_DUART_MODE_REG_2);
285 write_sbdshr(sport, R_DUART_CLEAR_OPR, clr);
286 write_sbdshr(sport, R_DUART_SET_OPR, set);
287 write_sbdchn(sport, R_DUART_MODE_REG_2, mode2);
292 struct sbd_port *sport = to_sport(uport);
294 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS);
295 sport->tx_stopped = 1;
300 struct sbd_port *sport = to_sport(uport);
304 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
306 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
309 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_EN);
310 sport->tx_stopped = 0;
315 struct sbd_port *sport = to_sport(uport);
317 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), 0);
322 struct sbd_port *sport = to_sport(uport);
324 write_sbdchn(sport, R_DUART_AUXCTL_X,
330 struct sbd_port *sport = to_sport(uport);
333 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_START_BREAK);
335 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_STOP_BREAK);
339 static void sbd_receive_chars(struct sbd_port *sport)
341 struct uart_port *uport = &sport->port;
347 status = read_sbdchn(sport, R_DUART_STATUS);
351 ch = read_sbdchn(sport, R_DUART_RX_HOLD);
390 static void sbd_transmit_chars(struct sbd_port *sport)
392 struct uart_port *uport = &sport->port;
393 struct circ_buf *xmit = &sport->port.state->xmit;
398 if (sport->port.x_char) {
399 write_sbdchn(sport, R_DUART_TX_HOLD, sport->port.x_char);
400 sport->port.icount.tx++;
401 sport->port.x_char = 0;
406 stop_tx = (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port));
410 write_sbdchn(sport, R_DUART_TX_HOLD, xmit->buf[xmit->tail]);
412 sport->port.icount.tx++;
415 uart_write_wakeup(&sport->port);
421 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
423 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
427 static void sbd_status_handle(struct sbd_port *sport)
429 struct uart_port *uport = &sport->port;
432 delta = read_sbdshr(sport, R_DUART_INCHREG((uport->line) % 2));
448 struct sbd_port *sport = dev_id;
449 struct uart_port *uport = &sport->port;
455 intstat = read_sbdshr(sport,
457 intstat &= read_sbdshr(sport,
464 sbd_receive_chars(sport);
466 sbd_status_handle(sport);
468 sbd_transmit_chars(sport);
479 struct sbd_port *sport = to_sport(uport);
483 ret = request_irq(sport->port.irq, sbd_interrupt,
484 IRQF_SHARED, "sb1250-duart", sport);
489 sbd_receive_drain(sport);
492 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT);
493 read_sbdshr(sport, R_DUART_INCHREG((uport->line) % 2));
496 mode1 = read_sbdchn(sport, R_DUART_MODE_REG_1);
498 write_sbdchn(sport, R_DUART_MODE_REG_1, mode1);
501 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_EN);
502 sport->tx_stopped = 1;
505 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2),
513 struct sbd_port *sport = to_sport(uport);
515 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_DIS);
516 sport->tx_stopped = 1;
517 free_irq(sport->port.irq, sport);
521 static void sbd_init_port(struct sbd_port *sport)
523 struct uart_port *uport = &sport->port;
525 if (sport->initialised)
529 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_TX);
530 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_RX);
531 write_sbdchn(sport, R_DUART_MODE_REG_1, V_DUART_BITS_PER_CHAR_8);
532 write_sbdchn(sport, R_DUART_MODE_REG_2, 0);
533 write_sbdchn(sport, R_DUART_FULL_CTL,
535 write_sbdchn(sport, R_DUART_OPCR_X, 0);
536 write_sbdchn(sport, R_DUART_AUXCTL_X, 0);
537 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), 0);
539 sport->initialised = 1;
545 struct sbd_port *sport = to_sport(uport);
624 if (sport->tx_stopped)
629 oldmode1 = read_sbdchn(sport, R_DUART_MODE_REG_1) & mode1mask;
630 oldmode2 = read_sbdchn(sport, R_DUART_MODE_REG_2) & mode2mask;
631 oldaux = read_sbdchn(sport, R_DUART_AUXCTL_X) & auxmask;
633 if (!sport->tx_stopped)
634 sbd_line_drain(sport);
635 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_DIS);
637 write_sbdchn(sport, R_DUART_MODE_REG_1, mode1 | oldmode1);
638 write_sbdchn(sport, R_DUART_MODE_REG_2, mode2 | oldmode2);
639 write_sbdchn(sport, R_DUART_CLK_SEL, brg);
640 write_sbdchn(sport, R_DUART_AUXCTL_X, aux | oldaux);
642 write_sbdchn(sport, R_DUART_CMD, command);
655 struct sbd_port *sport = to_sport(uport);
656 struct sbd_duart *duart = sport->duart;
659 iounmap(sport->memctrl);
660 sport->memctrl = NULL;
673 struct sbd_port *sport = to_sport(uport);
674 struct sbd_duart *duart = sport->duart;
684 if (!sport->memctrl)
685 sport->memctrl = ioremap_nocache(duart->mapctrl,
687 if (!sport->memctrl) {
736 struct sbd_port *sport = to_sport(uport);
744 sbd_init_port(sport);
811 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
812 struct uart_port *uport = &sport->port;
814 sport->duart = &sbd_duarts[chip];
837 struct sbd_port *sport = to_sport(uport);
839 sbd_transmit_drain(sport);
840 write_sbdchn(sport, R_DUART_TX_HOLD, ch);
848 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
849 struct uart_port *uport = &sport->port;
855 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
856 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2),
858 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_EN);
861 uart_console_write(&sport->port, s, count, sbd_console_putchar);
865 sbd_line_drain(sport);
866 if (sport->tx_stopped)
867 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS);
868 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
876 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
877 struct uart_port *uport = &sport->port;
884 if (!sport->duart)
891 sbd_init_port(sport);
948 struct sbd_port *sport = &duart->sport[i % DUART_MAX_SIDE];
949 struct uart_port *uport = &sport->port;
951 if (sport->duart)
965 struct sbd_port *sport = &duart->sport[i % DUART_MAX_SIDE];
966 struct uart_port *uport = &sport->port;
968 if (sport->duart)