Skip to contentSkip to conversation

ioctl_tty.2: Document ioctls: TCGETS2, TCSETS2, TCSETSW2, TCSETSF2

PATCH Superseded Pali Rohár 2 participants 11 messages Jul 25, 2021 – Jul 30, 2021 Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ioctl_tty.2: Document ioctls: TCGETS2, TCSETS2, TCSETSW2, TCSETSF2

---
 man2/ioctl_tty.2 | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
man2/ioctl_tty.2 +29 -0
index c8269070180f..0c3a8ec24c76 100644
@@ -77,6 +77,35 @@ The following four ioctls are just like
 .BR TCSETSW ,
 .BR TCSETSF ,
 except that they take a
+.I "struct termios2\ *"
+instead of a
+.IR "struct termios\ *" .
+.I "struct termios2\ *"
+is defined in header file
+.IR "<asm/termbits.h>" .
+If struct member
+.B c_cflag
+contains
+.B BOTHER
+then baudrate is stored in struct members
+.BR c_ispeed " and " c_ospeed
+as integer values.
+These ioctls are not supported on all architectures.
+.IP
+.BI "TCGETS2	struct termios2 *" argp
+.IP
+.BI "TCSETS2	const struct termios2 *" argp
+.IP
+.BI "TCSETSW2	const struct termios2 *" argp
+.IP
+.BI "TCSETSF2	const struct termios2 *" argp
+.PP
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
 .I "struct termio\ *"
 instead of a
 .IR "struct termios\ *" .
Signature · 1 line
2.20.1
#1 lore raw

Hi Pali,

Quoted 2 lines · Pali Rohár

---

Please see some comments below.

Thanks,

Alex

Quoted 8 lines
  man2/ioctl_tty.2 | 29 +++++++++++++++++++++++++++++
  1 file changed, 29 insertions(+)
man2/ioctl_tty.2 +0 -0
index c8269070180f..0c3a8ec24c76 100644

man2/ioctl_tty.2 The following four ioctls are just like · line 84

Quoted 8 lines
man2/ioctl_tty.2 +5 -0
@@ -77,6 +77,35 @@ The following four ioctls are just like
  .BR TCSETSW ,
  .BR TCSETSF ,
  except that they take a
+.I "struct termios2\ *"
+instead of a
+.IR "struct termios\ *" .
+.I "struct termios2\ *"
+is defined in header file

Maybe s/in/in the/ ?

man2/ioctl_tty.2 The following four ioctls are just like · line 85

Quoted 1 line
man2/ioctl_tty.2 +1 -0
+.IR "<asm/termbits.h>" .

Quotes are unnecessary here.

man2/ioctl_tty.2 The following four ioctls are just like · line 91

Quoted 6 lines
man2/ioctl_tty.2 +6 -0
+If struct member
+.B c_cflag
+contains
+.B BOTHER
+then baudrate is stored in struct members
+.BR c_ispeed " and " c_ospeed

We always break this into:

.B c_ispeed
and
.B c_ospeed

man2/ioctl_tty.2 The following four ioctls are just like · line 95

Quoted 4 lines
man2/ioctl_tty.2 +4 -0
+as integer values.
+These ioctls are not supported on all architectures.
+.IP
+.BI "TCGETS2	struct termios2 *" argp

Please follow the same style as in the rest of the page:

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Quoted 17 lines
man2/ioctl_tty.2 +13 -0
+.IP
+.BI "TCSETS2	const struct termios2 *" argp
+.IP
+.BI "TCSETSW2	const struct termios2 *" argp
+.IP
+.BI "TCSETSF2	const struct termios2 *" argp
+.PP
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
  .I "struct termio\ *"
  instead of a
  .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#2 lore raw

Hello!

Quoted 16 lines · On Thursday 29 July 2021 13:30:11 Alejandro Colomar (man-pages) wrote:

Hi Pali,

Quoted 2 lines · Pali Rohár

---

Please see some comments below.

Thanks,

Alex

Quoted 3 lines
  man2/ioctl_tty.2 | 29 +++++++++++++++++++++++++++++
  1 file changed, 29 insertions(+)
Quoted 15 lines

man2/ioctl_tty.2 The following four ioctls are just like · line 84

Quoted 13 lines
man2/ioctl_tty.2 +5 -0
index c8269070180f..0c3a8ec24c76 100644
@@ -77,6 +77,35 @@ The following four ioctls are just like
  .BR TCSETSW ,
  .BR TCSETSF ,
  except that they take a
+.I "struct termios2\ *"
+instead of a
+.IR "struct termios\ *" .
+.I "struct termios2\ *"
+is defined in header file

Maybe s/in/in the/ ?

Ok, I will change it.

Quoted 3 lines

man2/ioctl_tty.2 The following four ioctls are just like · line 85

Quoted 1 line
man2/ioctl_tty.2 +1 -0
+.IR "<asm/termbits.h>" .

Quotes are unnecessary here.

Ok.

Quoted 9 lines

man2/ioctl_tty.2 The following four ioctls are just like · line 91

Quoted 6 lines
man2/ioctl_tty.2 +6 -0
+If struct member
+.B c_cflag
+contains
+.B BOTHER
+then baudrate is stored in struct members
+.BR c_ispeed " and " c_ospeed

We always break this into:

Quoted 3 lines

.B c_ispeed
and
.B c_ospeed

Ok.

Quoted 7 lines

man2/ioctl_tty.2 The following four ioctls are just like · line 95

Quoted 4 lines
man2/ioctl_tty.2 +4 -0
+as integer values.
+These ioctls are not supported on all architectures.
+.IP
+.BI "TCGETS2	struct termios2 *" argp

Please follow the same style as in the rest of the page:

Quoted 6 lines

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Few lines below in this file is:

.IR "struct termios\ *" .
.IP
.BI "TCGETA struct termio *" argp
.IP
.BI "TCSETA const struct termio *" argp
.IP
.BI "TCSETAW const struct termio *" argp
.IP
.BI "TCSETAF const struct termio *" argp

Therefore I used same style for TCGETS2...

So, how should I format this part to be consistent?

Quoted 23 lines
Quoted 17 lines
man2/ioctl_tty.2 +13 -0
+.IP
+.BI "TCSETS2	const struct termios2 *" argp
+.IP
+.BI "TCSETSW2	const struct termios2 *" argp
+.IP
+.BI "TCSETSF2	const struct termios2 *" argp
+.PP
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
  .I "struct termio\ *"
  instead of a
  .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#3 lore raw

Hi Pali,

Quoted 2 lines · Pali Rohár
Quoted 2 lines
Quoted 2 lines

+.IR "<asm/termbits.h>" .

Is that the header that the user should include?
I don't know. I typically avoid 'asm/' includes, but maybe in this case it's the correct one. Shouldn't the user maybe include <linux/termios.h>?

user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
Quoted 25 lines
Quoted 4 lines
Quoted 3 lines

+These ioctls are not supported on all architectures. +.IP
+.BI "TCGETS2 struct termios2 *" argp

Quoted 8 lines

Please follow the same style as in the rest of the page:

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Few lines below in this file is:

.IR "struct termios\ *" .
.IP
.BI "TCGETA struct termio *" argp
.IP
.BI "TCSETA const struct termio *" argp
.IP
.BI "TCSETAW const struct termio *" argp
.IP
.BI "TCSETAF const struct termio *" argp

Quoted 3 lines

Therefore I used same style for TCGETS2...

So, how should I format this part to be consistent?

Hmm, sorry, I didn't see those.
So there's a mix in the file.
The more correct form is the one I used, so please use that one (the one with .TP)

Thanks,

Alex

Quoted 24 lines
Quoted 24 lines
Quoted 18 lines

+.IP
+.BI "TCSETS2 const struct termios2 *" argp
+.IP
+.BI "TCSETSW2 const struct termios2 *" argp
+.IP
+.BI "TCSETSF2 const struct termios2 *" argp
+.PP

man2/ioctl_tty.2 +6 -0
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
   .I "struct termio\ *"
   instead of a
   .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#4 lore raw

Hello!

Quoted 7 lines · On Friday 30 July 2021 01:39:11 Alejandro Colomar (man-pages) wrote:

Hi Pali,

Quoted 2 lines · Pali Rohár
Quoted 2 lines
Quoted 2 lines

+.IR "<asm/termbits.h>" .

Is that the header that the user should include?

Yes.

Quoted 2 lines

I don't know. I typically avoid 'asm/' includes, but maybe in this case it's the correct one. Shouldn't the user maybe include <linux/termios.h>?

Problem is that you cannot include <linux/termios.h> together with <sys/ioctl.h>. It cause redefinition of symbols and compile errors.

And without <sys/ioctl.h> you cannot call ioctl() function which basically means that you cannot use TCGETS2 (as it is ioctl).

Probably this is a bug in glibc header files...

So currently it is needed to include <asm/termbits.h> file to use TCGETS2 ioctl. I'm not sure if it is "correct", but it is the only possible option for now about which I know (unless you want to copy+paste structures and macros from that file into your program, to avoid inclusion of asm/* files).

If you want, I can send a patch for ioctl_tty.2 example section with simple C program to show how to use TCGETS2/TCSETS2 ioctl.

Quoted 39 lines
user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
Quoted 25 lines
Quoted 4 lines
Quoted 3 lines

+These ioctls are not supported on all architectures. +.IP
+.BI "TCGETS2 struct termios2 *" argp

Quoted 8 lines

Please follow the same style as in the rest of the page:

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Few lines below in this file is:

.IR "struct termios\ *" .
.IP
.BI "TCGETA struct termio *" argp
.IP
.BI "TCSETA const struct termio *" argp
.IP
.BI "TCSETAW const struct termio *" argp
.IP
.BI "TCSETAF const struct termio *" argp

Quoted 6 lines
Quoted 3 lines

Therefore I used same style for TCGETS2...

So, how should I format this part to be consistent?

Hmm, sorry, I didn't see those.

Ah, now I see that Michael one hour later (after I sent this patch) fixed above style to another. See commit aceee9e827e6.

But changed it to another new style:

.RS
.TS
lb l.
TCGETA \fBstruct termio *\fPargp
TCSETA \fBconst struct termio *\fPargp
TCSETAW \fBconst struct termio *\fPargp
TCSETAF \fBconst struct termio *\fPargp
.TE
.RE

Quoted 3 lines

So there's a mix in the file.
The more correct form is the one I used, so please use that one (the one with .TP)

So, could you check with Michael which style to use? Because now there are 3 different (yours, Michael's and the one which was there before) and I'm really not sure what is correct...

Quoted 36 lines

Thanks,

Alex

Quoted 24 lines
Quoted 24 lines
Quoted 18 lines

+.IP
+.BI "TCSETS2 const struct termios2 *" argp
+.IP
+.BI "TCSETSW2 const struct termios2 *" argp
+.IP
+.BI "TCSETSF2 const struct termios2 *" argp
+.PP

man2/ioctl_tty.2 +6 -0
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
   .I "struct termio\ *"
   instead of a
   .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#5 lore raw

CC += glibc

Quoted 13 lines · Pali Rohár

Hello!

Quoted 7 lines · On Friday 30 July 2021 01:39:11 Alejandro Colomar (man-pages) wrote:

Hi Pali,

Quoted 2 lines · Pali Rohár
Quoted 2 lines
Quoted 2 lines

+.IR "<asm/termbits.h>" .

Is that the header that the user should include?

Yes.

Quoted 8 lines
Quoted 2 lines

I don't know. I typically avoid 'asm/' includes, but maybe in this case it's the correct one. Shouldn't the user maybe include <linux/termios.h>?

Problem is that you cannot include <linux/termios.h> together with <sys/ioctl.h>. It cause redefinition of symbols and compile errors.

And without <sys/ioctl.h> you cannot call ioctl() function which basically means that you cannot use TCGETS2 (as it is ioctl).

Seems fair.

Quoted 2 lines

Probably this is a bug in glibc header files...

I CCed glibc just in case they want to comment.

Quoted 6 lines

So currently it is needed to include <asm/termbits.h> file to use TCGETS2 ioctl. I'm not sure if it is "correct", but it is the only possible option for now about which I know (unless you want to copy+paste structures and macros from that file into your program, to avoid inclusion of asm/* files).

Re copy&paste: no thanks :)

Quoted 3 lines

If you want, I can send a patch for ioctl_tty.2 example section with simple C program to show how to use TCGETS2/TCSETS2 ioctl.

Great! Please CC glibc in the patch.

Quoted 62 lines
Quoted 40 lines
user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
Quoted 25 lines
Quoted 4 lines
Quoted 3 lines

+These ioctls are not supported on all architectures. +.IP
+.BI "TCGETS2 struct termios2 *" argp

Quoted 8 lines

Please follow the same style as in the rest of the page:

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Few lines below in this file is:

.IR "struct termios\ *" .
.IP
.BI "TCGETA struct termio *" argp
.IP
.BI "TCSETA const struct termio *" argp
.IP
.BI "TCSETAW const struct termio *" argp
.IP
.BI "TCSETAF const struct termio *" argp

Quoted 6 lines
Quoted 3 lines

Therefore I used same style for TCGETS2...

So, how should I format this part to be consistent?

Hmm, sorry, I didn't see those.

Ah, now I see that Michael one hour later (after I sent this patch) fixed above style to another. See commit aceee9e827e6.

But changed it to another new style:

.RS
.TS
lb l.
TCGETA \fBstruct termio *\fPargp
TCSETA \fBconst struct termio *\fPargp
TCSETAW \fBconst struct termio *\fPargp
TCSETAF \fBconst struct termio *\fPargp
.TE
.RE

Quoted 7 lines
Quoted 3 lines

So there's a mix in the file.
The more correct form is the one I used, so please use that one (the one with .TP)

So, could you check with Michael which style to use? Because now there are 3 different (yours, Michael's and the one which was there before) and I'm really not sure what is correct...

Sorry, I was also confused, as I had Michael's version, and didn't see the table he reformatted, which I now understand was what you were doing (in the old format). So if what you wrote corresponds to what Michael reformatted, please use Michael's new format (the table).

Thanks,

Alex

Quoted 37 lines
Quoted 37 lines

Thanks,

Alex

Quoted 24 lines
Quoted 24 lines
Quoted 18 lines

+.IP
+.BI "TCSETS2 const struct termios2 *" argp
+.IP
+.BI "TCSETSW2 const struct termios2 *" argp
+.IP
+.BI "TCSETSF2 const struct termios2 *" argp
+.PP

man2/ioctl_tty.2 +6 -0
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
    .I "struct termio\ *"
    instead of a
    .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#6 lore raw
Quoted 117 lines · On Friday 30 July 2021 09:04:46 Alejandro Colomar (man-pages) wrote:

CC += glibc

Quoted 13 lines · Pali Rohár

Hello!

Quoted 7 lines · On Friday 30 July 2021 01:39:11 Alejandro Colomar (man-pages) wrote:

Hi Pali,

Quoted 2 lines · Pali Rohár
Quoted 2 lines
Quoted 2 lines

+.IR "<asm/termbits.h>" .

Is that the header that the user should include?

Yes.

Quoted 8 lines
Quoted 2 lines

I don't know. I typically avoid 'asm/' includes, but maybe in this case it's the correct one. Shouldn't the user maybe include <linux/termios.h>?

Problem is that you cannot include <linux/termios.h> together with <sys/ioctl.h>. It cause redefinition of symbols and compile errors.

And without <sys/ioctl.h> you cannot call ioctl() function which basically means that you cannot use TCGETS2 (as it is ioctl).

Seems fair.

Quoted 2 lines

Probably this is a bug in glibc header files...

I CCed glibc just in case they want to comment.

Quoted 6 lines

So currently it is needed to include <asm/termbits.h> file to use TCGETS2 ioctl. I'm not sure if it is "correct", but it is the only possible option for now about which I know (unless you want to copy+paste structures and macros from that file into your program, to avoid inclusion of asm/* files).

Re copy&paste: no thanks :)

Quoted 3 lines

If you want, I can send a patch for ioctl_tty.2 example section with simple C program to show how to use TCGETS2/TCSETS2 ioctl.

Great! Please CC glibc in the patch.

Quoted 62 lines
Quoted 40 lines
user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
Quoted 25 lines
Quoted 4 lines
Quoted 3 lines

+These ioctls are not supported on all architectures. +.IP
+.BI "TCGETS2 struct termios2 *" argp

Quoted 8 lines

Please follow the same style as in the rest of the page:

.TP
.B TCGETS2
Argument:
.BI "struct termios2 *" argp

Unless there's a good reason not to.

Few lines below in this file is:

.IR "struct termios\ *" .
.IP
.BI "TCGETA struct termio *" argp
.IP
.BI "TCSETA const struct termio *" argp
.IP
.BI "TCSETAW const struct termio *" argp
.IP
.BI "TCSETAF const struct termio *" argp

Quoted 6 lines
Quoted 3 lines

Therefore I used same style for TCGETS2...

So, how should I format this part to be consistent?

Hmm, sorry, I didn't see those.

Ah, now I see that Michael one hour later (after I sent this patch) fixed above style to another. See commit aceee9e827e6.

But changed it to another new style:

.RS
.TS
lb l.
TCGETA \fBstruct termio *\fPargp
TCSETA \fBconst struct termio *\fPargp
TCSETAW \fBconst struct termio *\fPargp
TCSETAF \fBconst struct termio *\fPargp
.TE
.RE

Quoted 7 lines
Quoted 3 lines

So there's a mix in the file.
The more correct form is the one I used, so please use that one (the one with .TP)

So, could you check with Michael which style to use? Because now there are 3 different (yours, Michael's and the one which was there before) and I'm really not sure what is correct...

Quoted 8 lines

Sorry, I was also confused, as I had Michael's version, and didn't see the table he reformatted, which I now understand was what you were doing (in the old format). So if what you wrote corresponds to what Michael reformatted, please use Michael's new format (the table).

Thanks,

Alex

Hello! Now I sent a new version and reformatted this part according to Michael style.

Quoted 43 lines
Quoted 37 lines
Quoted 37 lines

Thanks,

Alex

Quoted 24 lines
Quoted 24 lines
Quoted 18 lines

+.IP
+.BI "TCSETS2 const struct termios2 *" argp
+.IP
+.BI "TCSETSW2 const struct termios2 *" argp
+.IP
+.BI "TCSETSF2 const struct termios2 *" argp
+.PP

man2/ioctl_tty.2 +6 -0
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
    .I "struct termio\ *"
    instead of a
    .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#7 lore raw
In reply to Alejandro Colomar (man-pages)
Quoted 2 lines · On Friday 30 July 2021 01:39:11 Alejandro Colomar (man-pages) wrote:
user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {

You have there a mistake. It is 'struct termios2', not 'struct termios'.

And for 'struct termios' it is more complicated as there are two different 'struct termios'. One in file <bits/termios.h> (included from <termios.h>) and one in file <asm-generic/termbits.h> (included from <linux/termios.h>).

Function tcsetattr() uses 'struct termios' from <bits/termios.h> and ioctl TCSETS uses 'struct termios' from <asm-generic/termbits.h>.

Quoted 10 lines
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
#8 lore raw

Hi Pali,

Quoted 6 lines · Pali Rohár
Quoted 2 lines · On Friday 30 July 2021 01:39:11 Alejandro Colomar (man-pages) wrote:
user@sqli:/usr/include$ grep -rn 'struct termios {'
asm-generic/termbits.h:12:struct termios {

You have there a mistake. It is 'struct termios2', not 'struct termios'.

Quoted 7 lines

And for 'struct termios' it is more complicated as there are two different 'struct termios'. One in file <bits/termios.h> (included from <termios.h>) and one in file <asm-generic/termbits.h> (included from <linux/termios.h>).

Function tcsetattr() uses 'struct termios' from <bits/termios.h> and ioctl TCSETS uses 'struct termios' from <asm-generic/termbits.h>.

Right.

Anyway, it is in the same header:

user@sqli:/usr/include$ grep -rn 'struct termios2' | grep -v define
asm-generic/termbits.h:21:struct termios2 {

Regards,

Alex

Quoted 11 lines
Quoted 11 lines
user@sqli:/usr/include$ grep -rn '<asm-generic/termbits.h>'
x86_64-linux-gnu/asm/termbits.h:1:#include <asm-generic/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm/termbits.h>'
asm-generic/termios.h:12:#include <asm/termbits.h>
user@sqli:/usr/include$ grep -rn '<asm-generic/termios.h>'
x86_64-linux-gnu/asm/termios.h:1:#include <asm-generic/termios.h>
user@sqli:/usr/include$ grep -rn '<asm/termios.h>'
linux/termios.h:6:#include <asm/termios.h>
user@sqli:/usr/include$ grep -rn '<linux/termios.h>'
user@sqli:/usr/include$
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
#9 lore raw

PATCH v2 1/1 ioctl_tty.2: Document ioctls: TCGETS2, TCSETS2, TCSETSW2, TCSETSF2

In reply to Pali Rohár

---
Changes in v2:
* Remove information about asm/termbits.h (will be in followup patch)
* Style fixes

---
 man2/ioctl_tty.2 | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
man2/ioctl_tty.2 +29 -0
index 2a0effdae8ab..c1875530f0b1 100644
@@ -77,6 +77,35 @@ The following four ioctls are just like
 .BR TCSETSW ,
 .BR TCSETSF ,
 except that they take a
+.I "struct termios2\ *"
+instead of a
+.IR "struct termios\ *" .
+If struct member
+.B c_cflag
+contains
+.B BOTHER
+then baudrate is stored in struct members
+.B c_ispeed
+and
+.B c_ospeed
+as integer values.
+These ioctls are not supported on all architectures.
+.RS
+.TS
+lb l.
+TCGETS2	\fBstruct termios2 *\fPargp
+TCSETS2	\fBconst struct termios2 *\fPargp
+TCSETSW2	\fBconst struct termios2 *\fPargp
+TCSETSF2	\fBconst struct termios2 *\fPargp
+.TE
+.RE
+.PP
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
 .I "struct termio\ *"
 instead of a
 .IR "struct termios\ *" .
Signature · 1 line
2.20.1
#10 lore raw

Hi Pali,

Quoted 2 lines · Pali Rohár

Patch applied. Thanks,

Alex

Quoted 49 lines

---
Changes in v2:
* Remove information about asm/termbits.h (will be in followup patch)
* Style fixes

---
  man2/ioctl_tty.2 | 29 +++++++++++++++++++++++++++++
  1 file changed, 29 insertions(+)
man2/ioctl_tty.2 +29 -0
index 2a0effdae8ab..c1875530f0b1 100644
@@ -77,6 +77,35 @@ The following four ioctls are just like
  .BR TCSETSW ,
  .BR TCSETSF ,
  except that they take a
+.I "struct termios2\ *"
+instead of a
+.IR "struct termios\ *" .
+If struct member
+.B c_cflag
+contains
+.B BOTHER
+then baudrate is stored in struct members
+.B c_ispeed
+and
+.B c_ospeed
+as integer values.
+These ioctls are not supported on all architectures.
+.RS
+.TS
+lb l.
+TCGETS2	\fBstruct termios2 *\fPargp
+TCSETS2	\fBconst struct termios2 *\fPargp
+TCSETSW2	\fBconst struct termios2 *\fPargp
+TCSETSF2	\fBconst struct termios2 *\fPargp
+.TE
+.RE
+.PP
+The following four ioctls are just like
+.BR TCGETS ,
+.BR TCSETS ,
+.BR TCSETSW ,
+.BR TCSETSF ,
+except that they take a
  .I "struct termio\ *"
  instead of a
  .IR "struct termios\ *" .
Signature · 3 lines
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/