Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6050afbb authored by David Miller's avatar David Miller Committed by David S. Miller
Browse files

[SPARC]: Support for new termios.



[akpm@linux-foundation.org: coding-style tweaks]

Signed-off-by: default avatarDavid Miller <davem@davemloft.net>
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4209ab09
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -15,6 +15,10 @@
#define TCSETS		_IOW('T', 9, struct termios)
#define TCSETSW		_IOW('T', 10, struct termios)
#define TCSETSF		_IOW('T', 11, struct termios)
#define TCGETS2		_IOR('T', 12, struct termios2)
#define TCSETS2		_IOW('T', 13, struct termios2)
#define TCSETSW2	_IOW('T', 14, struct termios2)
#define TCSETSF2	_IOW('T', 15, struct termios2)

/* Note that all the ioctls that are not available in Linux have a 
 * double underscore on the front to: a) avoid some programs to
+15 −0
Original line number Diff line number Diff line
@@ -31,6 +31,18 @@ struct termios {
#endif
};

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 */
	cc_t _x_cc[2];                  /* padding to match ktermios */
	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 */
@@ -160,6 +172,7 @@ struct ktermios {
#define CLOCAL	  0x00000800
#define CBAUDEX   0x00001000
/* We'll never see these speeds with the Zilogs, but for completeness... */
#define  BOTHER   0x00001000
#define  B57600   0x00001001
#define  B115200  0x00001002
#define  B230400  0x00001003
@@ -189,6 +202,8 @@ struct ktermios {
#define CMSPAR	  0x40000000  /* mark or space (stick) parity */
#define CRTSCTS	  0x80000000  /* flow control */

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

/* c_lflag bits */
#define ISIG	0x00000001
#define ICANON	0x00000002
+45 −3
Original line number Diff line number Diff line
@@ -107,6 +107,48 @@ struct winsize {
})

#define user_termios_to_kernel_termios(k, u) \
({ \
	int err; \
	err  = get_user((k)->c_iflag, &(u)->c_iflag); \
	err |= get_user((k)->c_oflag, &(u)->c_oflag); \
	err |= get_user((k)->c_cflag, &(u)->c_cflag); \
	err |= get_user((k)->c_lflag, &(u)->c_lflag); \
	err |= get_user((k)->c_line,  &(u)->c_line); \
	err |= copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
	if ((k)->c_lflag & ICANON) { \
		err |= get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
		err |= get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
	} else { \
		err |= get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
		err |= get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
	} \
	err |= get_user((k)->c_ispeed,  &(u)->c_ispeed); \
	err |= get_user((k)->c_ospeed,  &(u)->c_ospeed); \
	err; \
})

#define kernel_termios_to_user_termios(u, k) \
({ \
	int err; \
	err  = put_user((k)->c_iflag, &(u)->c_iflag); \
	err |= put_user((k)->c_oflag, &(u)->c_oflag); \
	err |= put_user((k)->c_cflag, &(u)->c_cflag); \
	err |= put_user((k)->c_lflag, &(u)->c_lflag); \
	err |= put_user((k)->c_line, &(u)->c_line); \
	err |= copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
	if (!((k)->c_lflag & ICANON)) { \
		err |= put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
		err |= put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
	} else { \
		err |= put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
		err |= put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
	} \
	err |= put_user((k)->c_ispeed, &(u)->c_ispeed); \
	err |= put_user((k)->c_ospeed, &(u)->c_ospeed); \
	err; \
})

#define user_termios_to_kernel_termios_1(k, u) \
({ \
	get_user((k)->c_iflag, &(u)->c_iflag); \
	get_user((k)->c_oflag, &(u)->c_oflag); \
@@ -124,7 +166,7 @@ struct winsize {
	0; \
})

#define kernel_termios_to_user_termios(u, k) \
#define kernel_termios_to_user_termios_1(u, k) \
({ \
	put_user((k)->c_iflag, &(u)->c_iflag); \
	put_user((k)->c_oflag, &(u)->c_oflag); \
+4 −0
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@
#define TCSETS		_IOW('T', 9, struct termios)
#define TCSETSW		_IOW('T', 10, struct termios)
#define TCSETSF		_IOW('T', 11, struct termios)
#define TCGETS2		_IOR('T', 12, struct termios2)
#define TCSETS2		_IOW('T', 13, struct termios2)
#define TCSETSW2	_IOW('T', 14, struct termios2)
#define TCSETSF2	_IOW('T', 15, struct termios2)

/* Note that all the ioctls that are not available in Linux have a 
 * double underscore on the front to: a) avoid some programs to
+15 −2
Original line number Diff line number Diff line
@@ -5,8 +5,6 @@

typedef unsigned char   cc_t;
typedef unsigned int    speed_t;

/* XXX is this right for sparc64?  it was an unsigned long... XXX */
typedef unsigned int    tcflag_t;

#define NCC 8
@@ -33,6 +31,18 @@ struct termios {
#endif
};

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 */
	cc_t _x_cc[2];                  /* padding to match ktermios */
	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 */
@@ -161,6 +171,7 @@ struct ktermios {
#define HUPCL	  0x00000400
#define CLOCAL	  0x00000800
#define CBAUDEX   0x00001000
#define  BOTHER   0x00001000
#define  B57600   0x00001001
#define  B115200  0x00001002
#define  B230400  0x00001003
@@ -190,6 +201,8 @@ struct ktermios {
#define CMSPAR    0x40000000  /* mark or space (stick) parity */
#define CRTSCTS	  0x80000000  /* flow control */

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

/* c_lflag bits */
#define ISIG	0x00000001
#define ICANON	0x00000002
Loading