Lines Matching refs:sport
95 struct sbd_port sport[2];
116 static u64 __read_sbdchn(struct sbd_port *sport, int reg)
118 void __iomem *csr = sport->port.membase + reg;
123 static u64 __read_sbdshr(struct sbd_port *sport, int reg)
125 void __iomem *csr = sport->memctrl + reg;
130 static void __write_sbdchn(struct sbd_port *sport, int reg, u64 value)
132 void __iomem *csr = sport->port.membase + reg;
137 static void __write_sbdshr(struct sbd_port *sport, int reg, u64 value)
139 void __iomem *csr = sport->memctrl + reg;
148 static void __war_sbd1956(struct sbd_port *sport)
150 __read_sbdchn(sport, R_DUART_MODE_REG_1);
151 __read_sbdchn(sport, R_DUART_MODE_REG_2);
154 static unsigned char read_sbdchn(struct sbd_port *sport, int reg)
158 retval = __read_sbdchn(sport, reg);
160 __war_sbd1956(sport);
164 static unsigned char read_sbdshr(struct sbd_port *sport, int reg)
168 retval = __read_sbdshr(sport, reg);
170 __war_sbd1956(sport);
174 static void write_sbdchn(struct sbd_port *sport, int reg, unsigned int value)
176 __write_sbdchn(sport, reg, value);
178 __war_sbd1956(sport);
181 static void write_sbdshr(struct sbd_port *sport, int reg, unsigned int value)
183 __write_sbdshr(sport, reg, value);
185 __war_sbd1956(sport);
189 static int sbd_receive_ready(struct sbd_port *sport)
191 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_RX_RDY;
194 static int sbd_receive_drain(struct sbd_port *sport)
198 while (sbd_receive_ready(sport) && --loops)
199 read_sbdchn(sport, R_DUART_RX_HOLD);
203 static int __maybe_unused sbd_transmit_ready(struct sbd_port *sport)
205 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_TX_RDY;
208 static int __maybe_unused sbd_transmit_drain(struct sbd_port *sport)
212 while (!sbd_transmit_ready(sport) && --loops)
217 static int sbd_transmit_empty(struct sbd_port *sport)
219 return read_sbdchn(sport, R_DUART_STATUS) & M_DUART_TX_EMT;
222 static int sbd_line_drain(struct sbd_port *sport)
226 while (!sbd_transmit_empty(sport) && --loops)
234 struct sbd_port *sport = to_sport(uport);
236 return sbd_transmit_empty(sport) ? TIOCSER_TEMT : 0;
241 struct sbd_port *sport = to_sport(uport);
244 status = read_sbdshr(sport, R_DUART_IN_PORT);
255 struct sbd_port *sport = to_sport(uport);
269 mode2 = read_sbdchn(sport, R_DUART_MODE_REG_2);
276 write_sbdshr(sport, R_DUART_CLEAR_OPR, clr);
277 write_sbdshr(sport, R_DUART_SET_OPR, set);
278 write_sbdchn(sport, R_DUART_MODE_REG_2, mode2);
283 struct sbd_port *sport = to_sport(uport);
285 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS);
286 sport->tx_stopped = 1;
291 struct sbd_port *sport = to_sport(uport);
295 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
297 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
300 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_EN);
301 sport->tx_stopped = 0;
306 struct sbd_port *sport = to_sport(uport);
308 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), 0);
313 struct sbd_port *sport = to_sport(uport);
315 write_sbdchn(sport, R_DUART_AUXCTL_X,
321 struct sbd_port *sport = to_sport(uport);
324 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_START_BREAK);
326 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_STOP_BREAK);
330 static void sbd_receive_chars(struct sbd_port *sport)
332 struct uart_port *uport = &sport->port;
339 status = read_sbdchn(sport, R_DUART_STATUS);
343 ch = read_sbdchn(sport, R_DUART_RX_HOLD);
382 static void sbd_transmit_chars(struct sbd_port *sport)
384 struct uart_port *uport = &sport->port;
385 struct circ_buf *xmit = &sport->port.state->xmit;
390 if (sport->port.x_char) {
391 write_sbdchn(sport, R_DUART_TX_HOLD, sport->port.x_char);
392 sport->port.icount.tx++;
393 sport->port.x_char = 0;
398 stop_tx = (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port));
402 write_sbdchn(sport, R_DUART_TX_HOLD, xmit->buf[xmit->tail]);
403 uart_xmit_advance(&sport->port, 1);
406 uart_write_wakeup(&sport->port);
412 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
414 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
418 static void sbd_status_handle(struct sbd_port *sport)
420 struct uart_port *uport = &sport->port;
423 delta = read_sbdshr(sport, R_DUART_INCHREG((uport->line) % 2));
439 struct sbd_port *sport = dev_id;
440 struct uart_port *uport = &sport->port;
446 intstat = read_sbdshr(sport,
448 intstat &= read_sbdshr(sport,
455 sbd_receive_chars(sport);
457 sbd_status_handle(sport);
459 sbd_transmit_chars(sport);
470 struct sbd_port *sport = to_sport(uport);
474 ret = request_irq(sport->port.irq, sbd_interrupt,
475 IRQF_SHARED, "sb1250-duart", sport);
480 sbd_receive_drain(sport);
483 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT);
484 read_sbdshr(sport, R_DUART_INCHREG((uport->line) % 2));
487 mode1 = read_sbdchn(sport, R_DUART_MODE_REG_1);
489 write_sbdchn(sport, R_DUART_MODE_REG_1, mode1);
492 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_EN);
493 sport->tx_stopped = 1;
496 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2),
504 struct sbd_port *sport = to_sport(uport);
506 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_DIS);
507 sport->tx_stopped = 1;
508 free_irq(sport->port.irq, sport);
512 static void sbd_init_port(struct sbd_port *sport)
514 struct uart_port *uport = &sport->port;
516 if (sport->initialised)
520 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_TX);
521 write_sbdchn(sport, R_DUART_CMD, V_DUART_MISC_CMD_RESET_RX);
522 write_sbdchn(sport, R_DUART_MODE_REG_1, V_DUART_BITS_PER_CHAR_8);
523 write_sbdchn(sport, R_DUART_MODE_REG_2, 0);
524 write_sbdchn(sport, R_DUART_FULL_CTL,
526 write_sbdchn(sport, R_DUART_OPCR_X, 0);
527 write_sbdchn(sport, R_DUART_AUXCTL_X, 0);
528 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), 0);
530 sport->initialised = 1;
536 struct sbd_port *sport = to_sport(uport);
615 if (sport->tx_stopped)
620 oldmode1 = read_sbdchn(sport, R_DUART_MODE_REG_1) & mode1mask;
621 oldmode2 = read_sbdchn(sport, R_DUART_MODE_REG_2) & mode2mask;
622 oldaux = read_sbdchn(sport, R_DUART_AUXCTL_X) & auxmask;
624 if (!sport->tx_stopped)
625 sbd_line_drain(sport);
626 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS | M_DUART_RX_DIS);
628 write_sbdchn(sport, R_DUART_MODE_REG_1, mode1 | oldmode1);
629 write_sbdchn(sport, R_DUART_MODE_REG_2, mode2 | oldmode2);
630 write_sbdchn(sport, R_DUART_CLK_SEL, brg);
631 write_sbdchn(sport, R_DUART_AUXCTL_X, aux | oldaux);
633 write_sbdchn(sport, R_DUART_CMD, command);
646 struct sbd_port *sport = to_sport(uport);
647 struct sbd_duart *duart = sport->duart;
649 iounmap(sport->memctrl);
650 sport->memctrl = NULL;
662 struct sbd_port *sport = to_sport(uport);
663 struct sbd_duart *duart = sport->duart;
673 if (!sport->memctrl)
674 sport->memctrl = ioremap(duart->mapctrl,
676 if (!sport->memctrl) {
723 struct sbd_port *sport = to_sport(uport);
731 sbd_init_port(sport);
798 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
799 struct uart_port *uport = &sport->port;
801 sport->duart = &sbd_duarts[chip];
825 struct sbd_port *sport = to_sport(uport);
827 sbd_transmit_drain(sport);
828 write_sbdchn(sport, R_DUART_TX_HOLD, ch);
836 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
837 struct uart_port *uport = &sport->port;
843 mask = read_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2));
844 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2),
846 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_EN);
849 uart_console_write(&sport->port, s, count, sbd_console_putchar);
853 sbd_line_drain(sport);
854 if (sport->tx_stopped)
855 write_sbdchn(sport, R_DUART_CMD, M_DUART_TX_DIS);
856 write_sbdshr(sport, R_DUART_IMRREG((uport->line) % 2), mask);
864 struct sbd_port *sport = &sbd_duarts[chip].sport[side];
865 struct uart_port *uport = &sport->port;
872 if (!sport->duart)
879 sbd_init_port(sport);
936 struct sbd_port *sport = &duart->sport[i % DUART_MAX_SIDE];
937 struct uart_port *uport = &sport->port;
939 if (sport->duart)
953 struct sbd_port *sport = &duart->sport[i % DUART_MAX_SIDE];
954 struct uart_port *uport = &sport->port;
956 if (sport->duart)