+extern struct serial *serial_fdopen (const int fd);
+
+/* Push out all buffers, close the device and unref SCB. */
+
+extern void serial_close (struct serial *scb);
+
+/* Increment reference count of SCB. */
+
+extern void serial_ref (struct serial *scb);
+
+/* Decrement reference count of SCB. */
+
+extern void serial_unref (struct serial *scb);
+
+/* Create a pipe, and put the read end in FILDES[0], and the write end
+ in FILDES[1]. Returns 0 for success, negative value for error (in
+ which case errno contains the error). */
+
+extern int gdb_pipe (int fildes[2]);
+
+/* Create a pipe with each end wrapped in a `struct serial' interface.
+ Put the read end in scbs[0], and the write end in scbs[1]. Returns
+ 0 for success, negative value for error (in which case errno
+ contains the error). */
+
+extern int serial_pipe (struct serial *scbs[2]);
+
+/* Push out all buffers and destroy SCB without closing the device. */
+
+extern void serial_un_fdopen (struct serial *scb);
+
+/* Read one char from the serial device with TIMEOUT seconds to wait
+ or -1 to wait forever. Use timeout of 0 to effect a poll.
+ Infinite waits are not permitted. Returns unsigned char if ok, else
+ one of the following codes. Note that all error return-codes are
+ guaranteed to be < 0. */
+
+enum serial_rc {
+ SERIAL_ERROR = -1, /* General error. */
+ SERIAL_TIMEOUT = -2, /* Timeout or data-not-ready during read.
+ Unfortunately, through
+ deprecated_ui_loop_hook (), this can also
+ be a QUIT indication. */
+ SERIAL_EOF = -3 /* General end-of-file or remote target
+ connection closed, indication. Includes
+ things like the line dropping dead. */
+};
+
+extern int serial_readchar (struct serial *scb, int timeout);
+
+/* Write COUNT bytes from BUF to the port SCB. Returns 0 for
+ success, non-zero for failure. */
+
+extern int serial_write (struct serial *scb, const void *buf, size_t count);
+
+/* Write a printf style string onto the serial port. */
+
+extern void serial_printf (struct serial *desc,
+ const char *,...) ATTRIBUTE_PRINTF (2, 3);
+
+/* Allow pending output to drain. */
+
+extern int serial_drain_output (struct serial *);
+
+/* Flush (discard) pending output. Might also flush input (if this
+ system can't flush only output). */
+
+extern int serial_flush_output (struct serial *);
+
+/* Flush pending input. Might also flush output (if this system can't
+ flush only input). */
+
+extern int serial_flush_input (struct serial *);
+
+/* Send a break between 0.25 and 0.5 seconds long. */
+
+extern int serial_send_break (struct serial *scb);
+
+/* Turn the port into raw mode. */
+
+extern void serial_raw (struct serial *scb);
+
+/* Return a pointer to a newly malloc'd ttystate containing the state
+ of the tty. */
+
+extern serial_ttystate serial_get_tty_state (struct serial *scb);
+
+/* Return a pointer to a newly malloc'd ttystate containing a copy
+ of the state in TTYSTATE. */
+
+extern serial_ttystate serial_copy_tty_state (struct serial *scb,
+ serial_ttystate ttystate);
+
+/* Set the state of the tty to TTYSTATE. The change is immediate.
+ When changing to or from raw mode, input might be discarded.
+ Returns 0 for success, negative value for error (in which case
+ errno contains the error). */
+
+extern int serial_set_tty_state (struct serial *scb, serial_ttystate ttystate);
+
+/* printf_filtered a user-comprehensible description of ttystate on
+ the specified STREAM. FIXME: At present this sends output to the
+ default stream - GDB_STDOUT. */
+
+extern void serial_print_tty_state (struct serial *scb,
+ serial_ttystate ttystate,
+ struct ui_file *);
+
+/* Set the baudrate to the decimal value supplied. Returns 0 for
+ success, -1 for failure. */
+
+extern int serial_setbaudrate (struct serial *scb, int rate);
+
+/* Set the number of stop bits to the value specified. Returns 0 for
+ success, -1 for failure. */
+
+#define SERIAL_1_STOPBITS 1
+#define SERIAL_1_AND_A_HALF_STOPBITS 2 /* 1.5 bits, snicker... */
+#define SERIAL_2_STOPBITS 3
+
+extern int serial_setstopbits (struct serial *scb, int num);
+
+#define GDBPARITY_NONE 0
+#define GDBPARITY_ODD 1
+#define GDBPARITY_EVEN 2
+
+/* Set parity for serial port. Returns 0 for success, -1 for failure. */
+
+extern int serial_setparity (struct serial *scb, int parity);