2008-05-22 Joel Sherrill <joel.sherrill@oarcorp.com>

* libcsupport/Makefile.am, libcsupport/preinstall.am,
	libcsupport/include/rtems/termiostypes.h: Move termios helper
	routines from libchip to libcsupport. Add routine which makes it easy
	for a termios device driver to inform termios of its default baud
	rate. This avoids inconsistencies in later termios settings changes.
This commit is contained in:
Joel Sherrill
2008-05-22 20:16:08 +00:00
parent aefbb573e0
commit b6be421739
4 changed files with 123 additions and 94 deletions

View File

@@ -1,3 +1,11 @@
2008-05-22 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/Makefile.am, libcsupport/preinstall.am,
libcsupport/include/rtems/termiostypes.h: Move termios helper
routines from libchip to libcsupport. Add routine which makes it easy
for a termios device driver to inform termios of its default baud
rate. This avoids inconsistencies in later termios settings changes.
2008-05-22 Joel Sherrill <joel.sherrill@OARcorp.com> 2008-05-22 Joel Sherrill <joel.sherrill@OARcorp.com>
* libcsupport/include/rtems/watchdogdrv.h: Finish writing comments. * libcsupport/include/rtems/watchdogdrv.h: Finish writing comments.

View File

@@ -52,7 +52,9 @@ BASE_FS_C_FILES = src/base_fs.c src/mount.c src/unmount.c src/libio.c \
TERMIOS_C_FILES = src/cfgetispeed.c src/cfgetospeed.c src/cfsetispeed.c \ TERMIOS_C_FILES = src/cfgetispeed.c src/cfgetospeed.c src/cfsetispeed.c \
src/cfsetospeed.c src/tcgetattr.c src/tcsetattr.c src/tcdrain.c \ src/cfsetospeed.c src/tcgetattr.c src/tcsetattr.c src/tcdrain.c \
src/tcflow.c src/tcflush.c src/tcgetprgrp.c src/tcsendbreak.c \ src/tcflow.c src/tcflush.c src/tcgetprgrp.c src/tcsendbreak.c \
src/tcsetpgrp.c src/termios.c src/termiosinitialize.c src/tcsetpgrp.c src/termios.c src/termiosinitialize.c \
src/termios_baud2index.c src/termios_baud2num.c src/termios_num2baud.c \
src/termios_setinitialbaud.c
SYSTEM_CALL_C_FILES = src/open.c src/close.c src/read.c src/write.c \ SYSTEM_CALL_C_FILES = src/open.c src/close.c src/read.c src/write.c \
src/write_r.c \ src/write_r.c \

View File

@@ -5,7 +5,7 @@
/* /*
* RTEMS termios device support internal data structures * RTEMS termios device support internal data structures
* *
* COPYRIGHT (c) 1989-2000. * COPYRIGHT (c) 1989-2008.
* On-Line Applications Research Corporation (OAR). * On-Line Applications Research Corporation (OAR).
* *
* The license and distribution terms for this file may be * The license and distribution terms for this file may be
@@ -15,8 +15,8 @@
* $Id$ * $Id$
*/ */
#ifndef TERMIOSTYPES_H #ifndef __TERMIOSTYPES_H
#define TERMIOSTYPES_H #define __TERMIOSTYPES_H
#include <rtems.h> #include <rtems.h>
#include <rtems/libio.h> #include <rtems/libio.h>
@@ -38,97 +38,99 @@ struct ttywakeup {
*/ */
struct rtems_termios_rawbuf { struct rtems_termios_rawbuf {
char *theBuf; char *theBuf;
volatile unsigned int Head; volatile unsigned int Head;
volatile unsigned int Tail; volatile unsigned int Tail;
volatile unsigned int Size; volatile unsigned int Size;
rtems_id Semaphore; rtems_id Semaphore;
}; };
/* /*
* Variables associated with each termios instance. * Variables associated with each termios instance.
* One structure for each hardware I/O device. * One structure for each hardware I/O device.
*/ */
struct rtems_termios_tty { struct rtems_termios_tty {
/* /*
* Linked-list of active TERMIOS devices * Linked-list of active TERMIOS devices
*/ */
struct rtems_termios_tty *forw; struct rtems_termios_tty *forw;
struct rtems_termios_tty *back; struct rtems_termios_tty *back;
/* /*
* How many times has this device been opened * How many times has this device been opened
*/ */
int refcount; int refcount;
/* /*
* This device * This device
*/ */
rtems_device_major_number major; rtems_device_major_number major;
rtems_device_major_number minor; rtems_device_major_number minor;
/* /*
* Mutual-exclusion semaphores * Mutual-exclusion semaphores
*/ */
rtems_id isem; rtems_id isem;
rtems_id osem; rtems_id osem;
/* /*
* The canonical (cooked) character buffer * The canonical (cooked) character buffer
*/ */
char *cbuf; char *cbuf;
int ccount; int ccount;
int cindex; int cindex;
/* /*
* Keep track of cursor (printhead) position * Keep track of cursor (printhead) position
*/ */
int column; int column;
int read_start_column; int read_start_column;
/* /*
* The ioctl settings * The ioctl settings
*/ */
struct termios termios; struct termios termios;
rtems_interval vtimeTicks; rtems_interval vtimeTicks;
/* /*
* Raw input character buffer * Raw input character buffer
*/ */
struct rtems_termios_rawbuf rawInBuf; struct rtems_termios_rawbuf rawInBuf;
uint32_t rawInBufSemaphoreOptions; uint32_t rawInBufSemaphoreOptions;
rtems_interval rawInBufSemaphoreTimeout; rtems_interval rawInBufSemaphoreTimeout;
rtems_interval rawInBufSemaphoreFirstTimeout; rtems_interval rawInBufSemaphoreFirstTimeout;
unsigned int rawInBufDropped; /* Statistics */ unsigned int rawInBufDropped; /* Statistics */
/* /*
* Raw output character buffer * Raw output character buffer
*/ */
struct rtems_termios_rawbuf rawOutBuf; struct rtems_termios_rawbuf rawOutBuf;
int t_dqlen; /* count of characters dequeued from device */ int t_dqlen; /* count of characters dequeued from device */
enum {rob_idle, rob_busy, rob_wait } rawOutBufState; enum {rob_idle, rob_busy, rob_wait } rawOutBufState;
/* /*
* Callbacks to device-specific routines * Callbacks to device-specific routines
*/ */
rtems_termios_callbacks device; rtems_termios_callbacks device;
volatile unsigned int flow_ctrl; volatile unsigned int flow_ctrl;
unsigned int lowwater,highwater; unsigned int lowwater,highwater;
/* /*
* I/O task IDs (for task-driven drivers) * I/O task IDs (for task-driven drivers)
*/ */
rtems_id rxTaskId; rtems_id rxTaskId;
rtems_id txTaskId; rtems_id txTaskId;
/*
* line discipline related stuff /*
*/ * line discipline related stuff
int t_line; /* id of line discipline */ */
void *t_sc; /* hook for discipline-specific data structure */ int t_line; /* id of line discipline */
/* void *t_sc; /* hook for discipline-specific data structure */
* Wakeup callback variables
*/ /*
struct ttywakeup tty_snd; * Wakeup callback variables
struct ttywakeup tty_rcv; */
int tty_rcvwakeup; struct ttywakeup tty_snd;
struct ttywakeup tty_rcv;
int tty_rcvwakeup;
}; };
struct rtems_termios_linesw { struct rtems_termios_linesw {
@@ -150,32 +152,53 @@ struct rtems_termios_linesw {
#define TERMIOS_IRQ_DRIVEN 1 #define TERMIOS_IRQ_DRIVEN 1
#define TERMIOS_TASK_DRIVEN 2 #define TERMIOS_TASK_DRIVEN 2
/* /*
* FIXME: this should move to termios.h! * FIXME: this should move to termios.h!
*/ */
void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty); void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty);
/* /*
* FIXME: this should move to termios.h! * FIXME: this should move to termios.h!
* put a string to output ring buffer * put a string to output ring buffer
*/ */
void rtems_termios_puts (const void *buf, void rtems_termios_puts (
int len, const void *buf,
struct rtems_termios_tty *tty); int len,
struct rtems_termios_tty *tty
);
/* /*
* global hooks for line disciplines * global hooks for line disciplines
*/ */
extern struct rtems_termios_linesw rtems_termios_linesw[]; extern struct rtems_termios_linesw rtems_termios_linesw[];
extern int rtems_termios_nlinesw; extern int rtems_termios_nlinesw;
#define TTYDISC 0 /* termios tty line discipline */ #define TTYDISC 0 /* termios tty line discipline */
#define TABLDISC 3 /* tablet discipline */ #define TABLDISC 3 /* tablet discipline */
#define SLIPDISC 4 /* serial IP discipline */ #define SLIPDISC 4 /* serial IP discipline */
#define PPPDISC 5 /* PPP discipline */ #define PPPDISC 5 /* PPP discipline */
#define MAXLDISC 8 #define MAXLDISC 8
/* convert xxx integer to equivalent Bxxx constant */
int termios_number_to_baud(int baud);
/* convert Bxxx constant to xxx integer */
int termios_baud_to_number(int termios_baud);
/* convert Bxxx constant to index */
int termios_baud_to_index(int termios_baud);
/*
* This method is used by a driver to tell termios its
* initial baud rate. This is especially important when
* the device driver does not set the baud to the default
* of B9600.
*/
int rtems_termios_set_initial_baud(
struct rtems_termios_tty *ttyp,
int baud
);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* TERMIOSTYPES_H */ #endif /* TERMIOSTYPES_H */

View File

@@ -68,10 +68,6 @@ $(PROJECT_INCLUDE)/rtems/vmeintr.h: include/vmeintr.h $(PROJECT_INCLUDE)/rtems/$
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/vmeintr.h $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/vmeintr.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/vmeintr.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/vmeintr.h
$(PROJECT_INCLUDE)/rtems/watchdogdrv.h: include/rtems/watchdogdrv.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/watchdogdrv.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/watchdogdrv.h
$(PROJECT_INCLUDE)/rtems/motorola/$(dirstamp): $(PROJECT_INCLUDE)/rtems/motorola/$(dirstamp):
@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems/motorola @$(MKDIR_P) $(PROJECT_INCLUDE)/rtems/motorola
@: > $(PROJECT_INCLUDE)/rtems/motorola/$(dirstamp) @: > $(PROJECT_INCLUDE)/rtems/motorola/$(dirstamp)