summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/include/rtems/termiostypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libcsupport/include/rtems/termiostypes.h')
-rw-r--r--cpukit/libcsupport/include/rtems/termiostypes.h602
1 files changed, 0 insertions, 602 deletions
diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h
deleted file mode 100644
index b3cac66e92..0000000000
--- a/cpukit/libcsupport/include/rtems/termiostypes.h
+++ /dev/null
@@ -1,602 +0,0 @@
-/**
- * @file rtems/termiostypes.h
- *
- * RTEMS termios device support internal data structures
- */
-
-/*
- * COPYRIGHT (c) 1989-2011.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef __TERMIOSTYPES_H
-#define __TERMIOSTYPES_H
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/assoc.h>
-#include <rtems/chain.h>
-#include <sys/ioccom.h>
-#include <stdint.h>
-#include <termios.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup TermiostypesSupport RTEMS Termios Device Support
- *
- * @ingroup libcsupport
- *
- * @brief RTEMS Termios Device Support Internal Data Structures
- */
-
-/*
- * Wakeup callback data structure
- */
-struct ttywakeup {
- void (*sw_pfn)(struct termios *tty, void *arg);
- void *sw_arg;
-};
-
-/*
- * Variables associated with the character buffer
- */
-struct rtems_termios_rawbuf {
- char *theBuf;
- volatile unsigned int Head;
- volatile unsigned int Tail;
- volatile unsigned int Size;
- rtems_id Semaphore;
-};
-
-typedef enum {
- TERMIOS_POLLED,
- TERMIOS_IRQ_DRIVEN,
- TERMIOS_TASK_DRIVEN,
- TERMIOS_IRQ_SERVER_DRIVEN
-} rtems_termios_device_mode;
-
-struct rtems_termios_tty;
-
-/**
- * @brief Termios device context.
- *
- * @see RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER(),
- * rtems_termios_device_context_initialize() and
- * rtems_termios_device_install().
- */
-typedef struct rtems_termios_device_context {
- union {
- /* Used for TERMIOS_POLLED and TERMIOS_IRQ_DRIVEN */
- rtems_interrupt_lock interrupt;
-
- /* Used for TERMIOS_IRQ_SERVER_DRIVEN or TERMIOS_TASK_DRIVEN */
- rtems_id mutex;
- } lock;
-
- void ( *lock_acquire )(
- struct rtems_termios_device_context *,
- rtems_interrupt_lock_context *
- );
-
- void ( *lock_release )(
- struct rtems_termios_device_context *,
- rtems_interrupt_lock_context *
- );
-} rtems_termios_device_context;
-
-void rtems_termios_device_lock_acquire_default(
- rtems_termios_device_context *ctx,
- rtems_interrupt_lock_context *lock_context
-);
-
-void rtems_termios_device_lock_release_default(
- rtems_termios_device_context *ctx,
- rtems_interrupt_lock_context *lock_context
-);
-
-/**
- * @brief Initializes a device context.
- *
- * @param[in] context The Termios device context.
- * @param[in] name The name for the interrupt lock. This name must be a
- * string persistent throughout the life time of this lock. The name is only
- * used if profiling is enabled.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_context_initialize(
- rtems_termios_device_context *context,
- const char *name
-)
-{
- rtems_interrupt_lock_initialize( &context->lock.interrupt, name );
- context->lock_acquire = rtems_termios_device_lock_acquire_default;
- context->lock_release = rtems_termios_device_lock_release_default;
-}
-
-/**
- * @brief Initializer for static initialization of Termios device contexts.
- *
- * @param name The name for the interrupt lock. It must be a string. The name
- * is only used if profiling is enabled.
- */
-#define RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( name ) \
- { \
- { RTEMS_INTERRUPT_LOCK_INITIALIZER( name ) }, \
- rtems_termios_device_lock_acquire_default, \
- rtems_termios_device_lock_release_default \
- }
-
-/**
- * @brief Termios device handler.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct {
- /**
- * @brief First open of this device.
- *
- * @param[in] tty The Termios control. This parameter may be passed to
- * interrupt service routines since it must be provided for the
- * rtems_termios_enqueue_raw_characters() and
- * rtems_termios_dequeue_characters() functions.
- * @param[in] context The Termios device context.
- * @param[in] term The current Termios attributes.
- * @param[in] args The open/close arguments. This is parameter provided to
- * support legacy drivers. It must not be used by new drivers.
- *
- * @retval true Successful operation.
- * @retval false Cannot open device.
- *
- * @see rtems_termios_get_device_context() and rtems_termios_set_best_baud().
- */
- bool (*first_open)(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *context,
- struct termios *term,
- rtems_libio_open_close_args_t *args
- );
-
- /**
- * @brief Last close of this device.
- *
- * @param[in] tty The Termios control.
- * @param[in] context The Termios device context.
- * @param[in] args The open/close arguments. This is parameter provided to
- * support legacy drivers. It must not be used by new drivers.
- */
- void (*last_close)(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *context,
- rtems_libio_open_close_args_t *args
- );
-
- /**
- * @brief Polled read.
- *
- * In case mode is TERMIOS_IRQ_DRIVEN, TERMIOS_IRQ_SERVER_DRIVEN or
- * TERMIOS_TASK_DRIVEN, then data is received via
- * rtems_termios_enqueue_raw_characters().
- *
- * @param[in] context The Termios device context.
- *
- * @retval char The received data encoded as unsigned char.
- * @retval -1 No data currently available.
- */
- int (*poll_read)(rtems_termios_device_context *context);
-
- /**
- * @brief Polled write in case mode is TERMIOS_POLLED or write support
- * otherwise.
- *
- * @param[in] context The Termios device context.
- * @param[in] buf The output buffer.
- * @param[in] len The output buffer length in characters.
- */
- void (*write)(
- rtems_termios_device_context *context,
- const char *buf,
- size_t len
- );
-
- /**
- * @brief Set attributes after a Termios settings change.
- *
- * @param[in] context The Termios device context.
- * @param[in] term The new Termios attributes.
- *
- * @retval true Successful operation.
- * @retval false Invalid attributes.
- */
- bool (*set_attributes)(
- rtems_termios_device_context *context,
- const struct termios *term
- );
-
- /**
- * @brief IO control handler.
- *
- * Invoked in case the Termios layer cannot deal with the IO request.
- *
- * @param[in] context The Termios device context.
- * @param[in] request The IO control request.
- * @param[in] buffer The IO control buffer.
- */
- int (*ioctl)(
- rtems_termios_device_context *context,
- ioctl_command_t request,
- void *buffer
- );
-
- /**
- * @brief Termios device mode.
- */
- rtems_termios_device_mode mode;
-} rtems_termios_device_handler;
-
-/**
- * @brief Termios device flow control handler.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct {
- /**
- * @brief Indicate to stop remote transmitter.
- *
- * @param[in] context The Termios device context.
- */
- void (*stop_remote_tx)(rtems_termios_device_context *context);
-
- /**
- * @brief Indicate to start remote transmitter.
- *
- * @param[in] context The Termios device context.
- */
- void (*start_remote_tx)(rtems_termios_device_context *context);
-} rtems_termios_device_flow;
-
-/**
- * @brief Termios device node for installed devices.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct rtems_termios_device_node {
- rtems_chain_node node;
- rtems_device_major_number major;
- rtems_device_minor_number minor;
- const rtems_termios_device_handler *handler;
- const rtems_termios_device_flow *flow;
- rtems_termios_device_context *context;
- struct rtems_termios_tty *tty;
-} rtems_termios_device_node;
-
-/*
- * Variables associated with each termios instance.
- * One structure for each hardware I/O device.
- */
-typedef struct rtems_termios_tty {
- /*
- * Linked-list of active TERMIOS devices
- */
- struct rtems_termios_tty *forw;
- struct rtems_termios_tty *back;
-
- /*
- * How many times has this device been opened
- */
- int refcount;
-
- /*
- * This device
- */
- rtems_device_major_number major;
- rtems_device_minor_number minor;
-
- /*
- * Mutual-exclusion semaphores
- */
- rtems_id isem;
- rtems_id osem;
-
- /*
- * The canonical (cooked) character buffer
- */
- char *cbuf;
- int ccount;
- int cindex;
-
- /*
- * Keep track of cursor (printhead) position
- */
- int column;
- int read_start_column;
-
- /*
- * The ioctl settings
- */
- struct termios termios;
- rtems_interval vtimeTicks;
-
- /*
- * Raw input character buffer
- */
- struct rtems_termios_rawbuf rawInBuf;
- uint32_t rawInBufSemaphoreOptions;
- rtems_interval rawInBufSemaphoreTimeout;
- rtems_interval rawInBufSemaphoreFirstTimeout;
- unsigned int rawInBufDropped; /* Statistics */
-
- /*
- * Raw output character buffer
- */
- struct rtems_termios_rawbuf rawOutBuf;
- int t_dqlen; /* count of characters dequeued from device */
- enum {rob_idle, rob_busy, rob_wait } rawOutBufState;
-
- /*
- * Callbacks to device-specific routines
- */
- rtems_termios_callbacks device;
-
- /**
- * @brief Context for legacy devices using the callbacks.
- */
- rtems_termios_device_context legacy_device_context;
-
- /**
- * @brief The device handler.
- */
- rtems_termios_device_handler handler;
-
- /**
- * @brief The device flow control handler.
- */
- rtems_termios_device_flow flow;
-
- volatile unsigned int flow_ctrl;
- unsigned int lowwater,highwater;
-
- /*
- * I/O task IDs (for task-driven drivers)
- */
- rtems_id rxTaskId;
- rtems_id txTaskId;
-
- /*
- * line discipline related stuff
- */
- int t_line; /* id of line discipline */
- void *t_sc; /* hook for discipline-specific data structure */
-
- /*
- * Wakeup callback variables
- */
- struct ttywakeup tty_snd;
- struct ttywakeup tty_rcv;
- bool tty_rcvwakeup;
-
- /**
- * @brief Corresponding device node.
- */
- rtems_termios_device_node *device_node;
-
- /**
- * @brief Context for device driver.
- */
- rtems_termios_device_context *device_context;
-} rtems_termios_tty;
-
-/**
- * @brief Installs a Termios device.
- *
- * The installed Termios device may be removed via unlink().
- *
- * @param[in] device_file The device file path.
- * @param[in] handler The device handler. It must be persistent throughout the
- * installed time of the device.
- * @param[in] flow The device flow control handler. The device flow control
- * handler are optional and may be @c NULL. If present must be persistent
- * throughout the installed time of the device.
- * @param[in] context The device context. It must be persistent throughout the
- * installed time of the device.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_NO_MEMORY Not enough memory to create a device node.
- * @retval RTEMS_UNSATISFIED Creation of the device file failed.
- * @retval RTEMS_INCORRECT_STATE Termios is not initialized.
- *
- * @see rtems_termios_get_device_context().
- */
-rtems_status_code rtems_termios_device_install(
- const char *device_file,
- const rtems_termios_device_handler *handler,
- const rtems_termios_device_flow *flow,
- rtems_termios_device_context *context
-);
-
-/**
- * @brief Returns the device context of an installed Termios device.
- *
- * @param[in] tty The Termios control.
- */
-RTEMS_INLINE_ROUTINE void *rtems_termios_get_device_context(
- const rtems_termios_tty *tty
-)
-{
- return tty->device_context;
-}
-
-/**
- * @brief Acquires the device lock.
- *
- * @param[in] context The device context.
- * @param[in] lock_context The local interrupt lock context for an acquire and
- * release pair.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_lock_acquire(
- rtems_termios_device_context *context,
- rtems_interrupt_lock_context *lock_context
-)
-{
- ( *context->lock_acquire )( context, lock_context );
-}
-
-/**
- * @brief Releases the device lock.
- *
- * @param[in] context The device context.
- * @param[in] lock_context The local interrupt lock context for an acquire and
- * release pair.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_lock_release(
- rtems_termios_device_context *context,
- rtems_interrupt_lock_context *lock_context
-)
-{
- ( *context->lock_release )( context, lock_context );
-}
-
-/**
- * @brief Sets the best baud value in the Termios control.
- *
- * The valid Termios baud values are between 0 and 460800. The Termios baud
- * value is chosen which minimizes the difference to the value specified.
- *
- * @param[in] term The Termios attributes.
- * @param[in] baud The current baud setting of the device.
- */
-void rtems_termios_set_best_baud(
- struct termios *term,
- uint32_t baud
-);
-
-struct rtems_termios_linesw {
- int (*l_open) (struct rtems_termios_tty *tp);
- int (*l_close)(struct rtems_termios_tty *tp);
- int (*l_read )(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
- int (*l_write)(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
- int (*l_rint )(int c,struct rtems_termios_tty *tp);
- int (*l_start)(struct rtems_termios_tty *tp);
- int (*l_ioctl)(struct rtems_termios_tty *tp,rtems_libio_ioctl_args_t *args);
- int (*l_modem)(struct rtems_termios_tty *tp,int flags);
-};
-
-/*
- * FIXME: this should move to termios.h!
- */
-void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty);
-
-/*
- * FIXME: this should move to termios.h!
- * put a string to output ring buffer
- */
-void rtems_termios_puts (
- const void *buf,
- size_t len,
- struct rtems_termios_tty *tty
-);
-
-/*
- * global hooks for line disciplines
- */
-extern struct rtems_termios_linesw rtems_termios_linesw[];
-extern int rtems_termios_nlinesw;
-
-#define TTYDISC 0 /* termios tty line discipline */
-#define TABLDISC 3 /* tablet discipline */
-#define SLIPDISC 4 /* serial IP discipline */
-#define PPPDISC 5 /* PPP discipline */
-#define MAXLDISC 8
-
-/* baudrate xxx integer type */
-typedef uint32_t rtems_termios_baud_t;
-
-/**
- * @brief RTEMS Termios Baud Table
- */
-extern const rtems_assoc_t rtems_termios_baud_table [];
-
-/**
- * @brief Converts the Integral Baud value @a baud to the Termios Control Flag
- * Representation
- *
- * @retval B0 Invalid baud value or a baud value of 0.
- * @retval other Baud constant according to @a baud.
- */
-speed_t rtems_termios_number_to_baud(rtems_termios_baud_t baud);
-
-/**
- * @brief Converts the baud flags to an integral baud value.
- *
- * @retval 0 Invalid baud value or a baud value of @c B0.
- * @retval other Integral baud value.
- */
-rtems_termios_baud_t rtems_termios_baud_to_number(speed_t baud);
-
-/**
- * @brief Convert Bxxx Constant to Index
- */
-int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud);
-
-/**
- * @brief Sets the initial @a baud in the Termios context @a tty.
- *
- * @retval 0 Successful operation.
- * @retval -1 Invalid baud value.
- */
-int rtems_termios_set_initial_baud(
- struct rtems_termios_tty *tty,
- rtems_termios_baud_t baud
-);
-
-/**
- * @brief Termios kqueue() filter filesystem node handler
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_kqfilter(
- rtems_libio_t *iop,
- struct knote *kn
-);
-
-/**
- * @brief Termios mmap() filter filesystem node handler
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_mmap(
- rtems_libio_t *iop,
- void **addr,
- size_t len,
- int prot,
- off_t off
-);
-
-/**
- * @brief Termios poll() filesystem node handler.
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_poll(
- rtems_libio_t *iop,
- int events
-);
-
-#define RTEMS_IO_SNDWAKEUP _IOW('t', 11, struct ttywakeup ) /* send tty wakeup */
-#define RTEMS_IO_RCVWAKEUP _IOW('t', 12, struct ttywakeup ) /* recv tty wakeup */
-
-#define OLCUC 0x00000100 /* map lower case to upper case on output */
-#define IUCLC 0x00004000 /* map upper case to lower case on input */
-
-#define RTEMS_TERMIOS_NUMBER_BAUD_RATES 25
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TERMIOSTYPES_H */