termios: Add TERMIOS_IRQ_SERVER_DRIVEN

Add a new interrupt server driven Termios mode (TERMIOS_IRQ_DRIVEN).
This mode is identical to the interrupt driven mode except that a mutex
is used for device level locking. The intended use case for this mode
are device drivers that use the interrupt server, e.g. SPI or I2C
connected devices.

Update #2839.
This commit is contained in:
Alexander Krutwig
2016-10-17 14:15:34 +02:00
committed by Sebastian Huber
parent c3764ce805
commit e34fe384cb
2 changed files with 8 additions and 5 deletions

View File

@@ -57,7 +57,8 @@ struct rtems_termios_rawbuf {
typedef enum {
TERMIOS_POLLED,
TERMIOS_IRQ_DRIVEN,
TERMIOS_TASK_DRIVEN
TERMIOS_TASK_DRIVEN,
TERMIOS_IRQ_SERVER_DRIVEN
} rtems_termios_device_mode;
struct rtems_termios_tty;
@@ -74,7 +75,7 @@ typedef struct rtems_termios_device_context {
/* Used for TERMIOS_POLLED and TERMIOS_IRQ_DRIVEN */
rtems_interrupt_lock interrupt;
/* Used for TERMIOS_TASK_DRIVEN */
/* Used for TERMIOS_IRQ_SERVER_DRIVEN or TERMIOS_TASK_DRIVEN */
rtems_id mutex;
} lock;
@@ -161,8 +162,9 @@ typedef struct {
/**
* @brief Polled read.
*
* In case mode is TERMIOS_IRQ_DRIVEN or TERMIOS_TASK_DRIVEN, then data is
* received via rtems_termios_enqueue_raw_characters().
* 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.
*

View File

@@ -275,7 +275,8 @@ drainOutput (struct rtems_termios_tty *tty)
static bool
needDeviceMutex (rtems_termios_tty *tty)
{
return tty->handler.mode == TERMIOS_TASK_DRIVEN;
return tty->handler.mode == TERMIOS_IRQ_SERVER_DRIVEN
|| tty->handler.mode == TERMIOS_TASK_DRIVEN;
}
static void