Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 71248
b: refs/heads/master
c: 6050afb
h: refs/heads/master
v: v3
  • Loading branch information
David Miller committed Oct 18, 2007
1 parent 3a0d0e5 commit d32b6d1
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4209ab098c61b1a9684bb4d3fc287352fc2438c3
refs/heads/master: 6050afbbb01d1f5a867f7839be6460bac801f5bc
4 changes: 4 additions & 0 deletions trunk/include/asm-sparc/ioctls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 15 additions & 0 deletions trunk/include/asm-sparc/termbits.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
48 changes: 45 additions & 3 deletions trunk/include/asm-sparc/termios.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,56 @@ 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); \
get_user((k)->c_cflag, &(u)->c_cflag); \
get_user((k)->c_lflag, &(u)->c_lflag); \
get_user((k)->c_line, &(u)->c_line); \
copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
if((k)->c_lflag & ICANON) { \
if ((k)->c_lflag & ICANON) { \
get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
} else { \
Expand All @@ -124,15 +166,15 @@ 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); \
put_user((k)->c_cflag, &(u)->c_cflag); \
put_user((k)->c_lflag, &(u)->c_lflag); \
put_user((k)->c_line, &(u)->c_line); \
copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
if(!((k)->c_lflag & ICANON)) { \
if (!((k)->c_lflag & ICANON)) { \
put_user((k)->c_cc[VMIN], &(u)->c_cc[_VMIN]); \
put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
} else { \
Expand Down
4 changes: 4 additions & 0 deletions trunk/include/asm-sparc64/ioctls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 15 additions & 2 deletions trunk/include/asm-sparc64/termbits.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 */
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
42 changes: 42 additions & 0 deletions trunk/include/asm-sparc64/termios.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,52 @@ struct winsize {
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) \
({ \
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; \
})

#define kernel_termios_to_user_termios_1(u, k) \
({ \
int err; \
err = put_user((k)->c_iflag, &(u)->c_iflag); \
Expand Down

0 comments on commit d32b6d1

Please sign in to comment.