Lines Matching refs:port
33 static inline void serial_start_tx(struct serial_port *port) in serial_start_tx() argument
35 if ( port->driver->start_tx != NULL ) in serial_start_tx()
36 port->driver->start_tx(port); in serial_start_tx()
39 static inline void serial_stop_tx(struct serial_port *port) in serial_stop_tx() argument
41 if ( port->driver->stop_tx != NULL ) in serial_stop_tx()
42 port->driver->stop_tx(port); in serial_stop_tx()
45 void serial_rx_interrupt(struct serial_port *port, struct cpu_user_regs *regs) in serial_rx_interrupt() argument
51 spin_lock_irqsave(&port->rx_lock, flags); in serial_rx_interrupt()
53 if ( port->driver->getc(port, &c) ) in serial_rx_interrupt()
55 if ( port->rx != NULL ) in serial_rx_interrupt()
56 fn = port->rx; in serial_rx_interrupt()
57 else if ( (c & 0x80) && (port->rx_hi != NULL) ) in serial_rx_interrupt()
58 fn = port->rx_hi; in serial_rx_interrupt()
59 else if ( !(c & 0x80) && (port->rx_lo != NULL) ) in serial_rx_interrupt()
60 fn = port->rx_lo; in serial_rx_interrupt()
61 else if ( (port->rxbufp - port->rxbufc) != serial_rxbufsz ) in serial_rx_interrupt()
62 port->rxbuf[mask_serial_rxbuf_idx(port->rxbufp++)] = c; in serial_rx_interrupt()
65 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_rx_interrupt()
71 void serial_tx_interrupt(struct serial_port *port, struct cpu_user_regs *regs) in serial_tx_interrupt() argument
83 while ( !spin_trylock(&port->tx_lock) ) in serial_tx_interrupt()
85 if ( port->driver->tx_ready(port) <= 0 ) in serial_tx_interrupt()
90 if ( port->txbufc == port->txbufp ) in serial_tx_interrupt()
93 serial_stop_tx(port); in serial_tx_interrupt()
94 spin_unlock(&port->tx_lock); in serial_tx_interrupt()
99 if ( port->driver->tx_ready(port) ) in serial_tx_interrupt()
100 serial_start_tx(port); in serial_tx_interrupt()
102 for ( i = 0, n = port->driver->tx_ready(port); i < n; i++ ) in serial_tx_interrupt()
104 if ( port->txbufc == port->txbufp ) in serial_tx_interrupt()
106 port->driver->putc( in serial_tx_interrupt()
107 port, port->txbuf[mask_serial_txbuf_idx(port->txbufc++)]); in serial_tx_interrupt()
109 if ( i && port->driver->flush ) in serial_tx_interrupt()
110 port->driver->flush(port); in serial_tx_interrupt()
112 spin_unlock(&port->tx_lock); in serial_tx_interrupt()
118 static void __serial_putc(struct serial_port *port, char c) in __serial_putc() argument
120 if ( (port->txbuf != NULL) && !port->sync ) in __serial_putc()
124 if ( port->tx_quench ) in __serial_putc()
127 if ( (port->txbufp - port->txbufc) > (serial_txbufsz / 2) ) in __serial_putc()
129 port->tx_quench = 0; in __serial_putc()
132 if ( (port->txbufp - port->txbufc) == serial_txbufsz ) in __serial_putc()
134 if ( port->tx_log_everything ) in __serial_putc()
139 while ( (n = port->driver->tx_ready(port)) == 0 ) in __serial_putc()
144 serial_start_tx(port); in __serial_putc()
146 port->driver->putc( in __serial_putc()
147 port, in __serial_putc()
148 port->txbuf[mask_serial_txbuf_idx(port->txbufc++)]); in __serial_putc()
149 port->txbuf[mask_serial_txbuf_idx(port->txbufp++)] = c; in __serial_putc()
155 port->tx_quench = 1; in __serial_putc()
160 if ( ((port->txbufp - port->txbufc) == 0) && in __serial_putc()
161 port->driver->tx_ready(port) > 0 ) in __serial_putc()
164 serial_start_tx(port); in __serial_putc()
166 port->driver->putc(port, c); in __serial_putc()
171 port->txbuf[mask_serial_txbuf_idx(port->txbufp++)] = c; in __serial_putc()
174 else if ( port->driver->tx_ready ) in __serial_putc()
179 while ( !(n = port->driver->tx_ready(port)) ) in __serial_putc()
184 serial_start_tx(port); in __serial_putc()
185 port->driver->putc(port, c); in __serial_putc()
191 serial_start_tx(port); in __serial_putc()
192 port->driver->putc(port, c); in __serial_putc()
198 struct serial_port *port; in serial_putc() local
204 port = &com[handle & SERHND_IDX]; in serial_putc()
205 if ( !port->driver || !port->driver->putc ) in serial_putc()
208 spin_lock_irqsave(&port->tx_lock, flags); in serial_putc()
211 __serial_putc(port, '\r' | ((handle & SERHND_HI) ? 0x80 : 0x00)); in serial_putc()
218 __serial_putc(port, c); in serial_putc()
220 if ( port->driver->flush ) in serial_putc()
221 port->driver->flush(port); in serial_putc()
223 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_putc()
228 struct serial_port *port; in serial_puts() local
235 port = &com[handle & SERHND_IDX]; in serial_puts()
236 if ( !port->driver || !port->driver->putc ) in serial_puts()
239 spin_lock_irqsave(&port->tx_lock, flags); in serial_puts()
244 __serial_putc(port, '\r' | ((handle & SERHND_HI) ? 0x80 : 0x00)); in serial_puts()
251 __serial_putc(port, c); in serial_puts()
254 if ( port->driver->flush ) in serial_puts()
255 port->driver->flush(port); in serial_puts()
257 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_puts()
262 struct serial_port *port; in serial_getc() local
269 port = &com[handle & SERHND_IDX]; in serial_getc()
270 if ( !port->driver || !port->driver->getc ) in serial_getc()
276 spin_lock_irqsave(&port->rx_lock, flags); in serial_getc()
278 if ( port->rxbufp != port->rxbufc ) in serial_getc()
280 c = port->rxbuf[mask_serial_rxbuf_idx(port->rxbufc++)]; in serial_getc()
281 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_getc()
285 if ( port->driver->getc(port, &c) ) in serial_getc()
287 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_getc()
291 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_getc()
359 struct serial_port *port; in serial_set_rx_handler() local
365 port = &com[handle & SERHND_IDX]; in serial_set_rx_handler()
367 spin_lock_irqsave(&port->rx_lock, flags); in serial_set_rx_handler()
369 if ( port->rx != NULL ) in serial_set_rx_handler()
374 if ( port->rx_lo != NULL ) in serial_set_rx_handler()
376 port->rx_lo = fn; in serial_set_rx_handler()
380 if ( port->rx_hi != NULL ) in serial_set_rx_handler()
382 port->rx_hi = fn; in serial_set_rx_handler()
386 if ( (port->rx_hi != NULL) || (port->rx_lo != NULL) ) in serial_set_rx_handler()
388 port->rx = fn; in serial_set_rx_handler()
391 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_set_rx_handler()
395 spin_unlock_irqrestore(&port->rx_lock, flags); in serial_set_rx_handler()
402 struct serial_port *port; in serial_force_unlock() local
407 port = &com[handle & SERHND_IDX]; in serial_force_unlock()
409 spin_lock_init(&port->rx_lock); in serial_force_unlock()
410 spin_lock_init(&port->tx_lock); in serial_force_unlock()
417 struct serial_port *port; in serial_start_sync() local
423 port = &com[handle & SERHND_IDX]; in serial_start_sync()
425 spin_lock_irqsave(&port->tx_lock, flags); in serial_start_sync()
427 if ( port->sync++ == 0 ) in serial_start_sync()
429 while ( (port->txbufp - port->txbufc) != 0 ) in serial_start_sync()
433 while ( !(n = port->driver->tx_ready(port)) ) in serial_start_sync()
439 serial_start_tx(port); in serial_start_sync()
440 port->driver->putc( in serial_start_sync()
441 port, port->txbuf[mask_serial_txbuf_idx(port->txbufc++)]); in serial_start_sync()
443 if ( port->driver->flush ) in serial_start_sync()
444 port->driver->flush(port); in serial_start_sync()
447 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_start_sync()
452 struct serial_port *port; in serial_end_sync() local
458 port = &com[handle & SERHND_IDX]; in serial_end_sync()
460 spin_lock_irqsave(&port->tx_lock, flags); in serial_end_sync()
462 port->sync--; in serial_end_sync()
464 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_end_sync()
469 struct serial_port *port; in serial_start_log_everything() local
475 port = &com[handle & SERHND_IDX]; in serial_start_log_everything()
477 spin_lock_irqsave(&port->tx_lock, flags); in serial_start_log_everything()
478 port->tx_log_everything++; in serial_start_log_everything()
479 port->tx_quench = 0; in serial_start_log_everything()
480 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_start_log_everything()
485 struct serial_port *port; in serial_end_log_everything() local
491 port = &com[handle & SERHND_IDX]; in serial_end_log_everything()
493 spin_lock_irqsave(&port->tx_lock, flags); in serial_end_log_everything()
494 port->tx_log_everything--; in serial_end_log_everything()
495 spin_unlock_irqrestore(&port->tx_lock, flags); in serial_end_log_everything()
569 void __init serial_async_transmit(struct serial_port *port) in serial_async_transmit() argument
571 BUG_ON(!port->driver->tx_ready); in serial_async_transmit()
572 if ( port->txbuf != NULL ) in serial_async_transmit()
578 port->txbuf = alloc_xenheap_pages( in serial_async_transmit()