#ifndef __ASM_GENERIC_TERMBITS_H
#define __ASM_GENERIC_TERMBITS_H

#include <linux/posix_types.h>

typedef unsigned char        cc_t;
typedef unsigned int        speed_t;
typedef unsigned int        tcflag_t;

#define NCCS 19
struct termios {
        tcflag_t c_iflag;                /* input mode flags */
        tcflag_t c_oflag;                /* output mode flags */
        tcflag_t c_cflag;                /* control mode flags */
        tcflag_t c_lflag;                /* local mode flags */
        cc_t c_line;                        /* line discipline */
        cc_t c_cc[NCCS];                /* control characters */
};

struct termios2 {
        tcflag_t c_iflag;                /* input mode flags */
        tcflag_t c_oflag;                /* output mode flags */
        tcflag_t c_cflag;                /* control mode flags */
        tcflag_t c_lflag;                /* local mode flags */
        cc_t c_line;                        /* line discipline */
        cc_t c_cc[NCCS];                /* control characters */
        speed_t c_ispeed;                /* input speed */
        speed_t c_ospeed;                /* output speed */
};

struct ktermios {
        tcflag_t c_iflag;                /* input mode flags */
        tcflag_t c_oflag;                /* output mode flags */
        tcflag_t c_cflag;                /* control mode flags */
        tcflag_t c_lflag;                /* local mode flags */
        cc_t c_line;                        /* line discipline */
        cc_t c_cc[NCCS];                /* control characters */
        speed_t c_ispeed;                /* input speed */
        speed_t c_ospeed;                /* output speed */
};

/* c_cc characters */
#define VINTR 0
#define VQUIT 1
#define VERASE 2
#define VKILL 3
#define VEOF 4
#define VTIME 5
#define VMIN 6
#define VSWTC 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VEOL 11
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE 14
#define VLNEXT 15
#define VEOL2 16

/* c_iflag bits */
#define IGNBRK        0000001
#define BRKINT        0000002
#define IGNPAR        0000004
#define PARMRK        0000010
#define INPCK        0000020
#define ISTRIP        0000040
#define INLCR        0000100
#define IGNCR        0000200
#define ICRNL        0000400
#define IUCLC        0001000
#define IXON        0002000
#define IXANY        0004000
#define IXOFF        0010000
#define IMAXBEL        0020000
#define IUTF8        0040000

/* c_oflag bits */
#define OPOST        0000001
#define OLCUC        0000002
#define ONLCR        0000004
#define OCRNL        0000010
#define ONOCR        0000020
#define ONLRET        0000040
#define OFILL        0000100
#define OFDEL        0000200
#define NLDLY        0000400
#define   NL0        0000000
#define   NL1        0000400
#define CRDLY        0003000
#define   CR0        0000000
#define   CR1        0001000
#define   CR2        0002000
#define   CR3        0003000
#define TABDLY        0014000
#define   TAB0        0000000
#define   TAB1        0004000
#define   TAB2        0010000
#define   TAB3        0014000
#define   XTABS        0014000
#define BSDLY        0020000
#define   BS0        0000000
#define   BS1        0020000
#define VTDLY        0040000
#define   VT0        0000000
#define   VT1        0040000
#define FFDLY        0100000
#define   FF0        0000000
#define   FF1        0100000

/* c_cflag bit meaning */
#define CBAUD        0010017
#define  B0        0000000                /* hang up */
#define  B50        0000001
#define  B75        0000002
#define  B110        0000003
#define  B134        0000004
#define  B150        0000005
#define  B200        0000006
#define  B300        0000007
#define  B600        0000010
#define  B1200        0000011
#define  B1800        0000012
#define  B2400        0000013
#define  B4800        0000014
#define  B9600        0000015
#define  B19200        0000016
#define  B38400        0000017
#define EXTA B19200
#define EXTB B38400
#define CSIZE        0000060
#define   CS5        0000000
#define   CS6        0000020
#define   CS7        0000040
#define   CS8        0000060
#define CSTOPB        0000100
#define CREAD        0000200
#define PARENB        0000400
#define PARODD        0001000
#define HUPCL        0002000
#define CLOCAL        0004000
#define CBAUDEX 0010000
#define    BOTHER 0010000
#define    B57600 0010001
#define   B115200 0010002
#define   B230400 0010003
#define   B460800 0010004
#define   B500000 0010005
#define   B576000 0010006
#define   B921600 0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017
#define CIBAUD          002003600000        /* input baud rate */
#define CMSPAR          010000000000        /* mark or space (stick) parity */
#define CRTSCTS          020000000000        /* flow control */

#define IBSHIFT          16                /* Shift from CBAUD to CIBAUD */

/* c_lflag bits */
#define ISIG        0000001
#define ICANON        0000002
#define XCASE        0000004
#define ECHO        0000010
#define ECHOE        0000020
#define ECHOK        0000040
#define ECHONL        0000100
#define NOFLSH        0000200
#define TOSTOP        0000400
#define ECHOCTL        0001000
#define ECHOPRT        0002000
#define ECHOKE        0004000
#define FLUSHO        0010000
#define PENDIN        0040000
#define IEXTEN        0100000

/* tcflow() and TCXONC use these */
#define        TCOOFF                0
#define        TCOON                1
#define        TCIOFF                2
#define        TCION                3

/* tcflush() and TCFLSH use these */
#define        TCIFLUSH        0
#define        TCOFLUSH        1
#define        TCIOFLUSH        2

/* tcsetattr uses these */
#define        TCSANOW                0
#define        TCSADRAIN        1
#define        TCSAFLUSH        2

#endif /* __ASM_GENERIC_TERMBITS_H */