This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] PowerPC: Fix termios definitions
- From: "Carlos O'Donell" <carlos at redhat dot com>
- To: Adhemerval Zanella <azanella at linux dot vnet dot ibm dot com>, "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Thu, 31 Jul 2014 21:52:10 -0400
- Subject: Re: [PATCH] PowerPC: Fix termios definitions
- Authentication-results: sourceware.org; auth=none
- References: <53D109AE dot 7070006 at linux dot vnet dot ibm dot com>
On 07/24/2014 09:27 AM, Adhemerval Zanella wrote:
> This patch fixes the incorrect guard by __USE_MISC of struct winsize and
> struct termios in powerpc termios header. Current states leads to build
> failures if the program defines _XOPEN_SOURCE, but not _DEFAULT_SOURCE
> or either _BSD_SOURCE or _SVID_SOURCE. Without any definition,
> __USE_MISC will not be defined and neither the struct definitions.
Is struct termios a real problem?
Isn't the minimal fix to just move winsize into the ppc-specific
ioctl-types.h like it is for all other machines?
I don't care really, moving both makes ioctl-types.h match the
generic Linux version and that's very good for ppc64le.
OK to checkin if you make it match the generic ioctl-types.h more
e.g. add the missing comments for winsize.
> This patches moves powerpc termios.h definitions to powerpc specific
> ioctl-types.h. It similar to linux default one, however powerpc
> struct termio defines ten control characters fields (c_cc), instead of
> linux default one of eight. I see a cleanup is possible on this,
> however due 2.20 release, I took the more conservative approach.
>
> It has been reported by Fedora 21 build system [1] and I want to push
> it to 2.20. Tested on powerpc64 and powerpc64le.
>
> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1122714
>
> --
>
> * sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h (struct winsize):
> Moved definition from termios.h.
> (struct termio): Likewise.
> (NCC, TIOCM_LE, TIOCM_DTR, TIOCM_RTS, TIOCM_ST, TIOCM_SR, TIOCM_CTS,
> TIOCM_CAR, TIOCM_RNG, TIOCM_DSR, TIOCM_CD, TIOCM_RI, N_TTY, N_SLIP,
> N_MOUSE, N_PPP, N_STRIP, N_AX25, N_X25, N_6PACK, N_MASC, N_R3964,
> N_PROFIBUS_FDL, N_IRDA, N_SMSBLOCK, N_HDLC, N_SYNC_PPP, N_HCI):
> Likewise.
> * sysdeps/unix/sysv/linux/powerpc/bits/termios.h (struct winsize):
> Moved definition to termios.h.
> (struct termio): Likewise.
> (NCC, TIOCM_LE, TIOCM_DTR, TIOCM_RTS, TIOCM_ST, TIOCM_SR, TIOCM_CTS,
> TIOCM_CAR, TIOCM_RNG, TIOCM_DSR, TIOCM_CD, TIOCM_RI, N_TTY, N_SLIP,
> N_MOUSE, N_PPP, N_STRIP, N_AX25, N_X25, N_6PACK, N_MASC, N_R3964,
> N_PROFIBUS_FDL, N_IRDA, N_SMSBLOCK, N_HDLC, N_SYNC_PPP, N_HCI):
> Likewise.
>
> ---
>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h b/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h
> index 87b8265..058d4a2 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h
> @@ -2,4 +2,57 @@
> # error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
> #endif
>
> -#include <termios.h>
> +/* Get definition of constants for use with `ioctl'. */
> +#include <asm/ioctls.h>
> +
> +struct winsize
> + {
> + unsigned short int ws_row;
> + unsigned short int ws_col;
> + unsigned short int ws_xpixel;
> + unsigned short int ws_ypixel;
> + };
> +
Could you make this match bits/ioctl-types.h as much as
possible?
That way when I do a diff against bits/ioctl-types.h it
shows what's different and what's not.
> +#define NCC 10
> +struct termio
OK.
> + {
> + unsigned short int c_iflag; /* input mode flags */
> + unsigned short int c_oflag; /* output mode flags */
> + unsigned short int c_cflag; /* control mode flags */
> + unsigned short int c_lflag; /* local mode flags */
> + unsigned char c_line; /* line discipline */
> + unsigned char c_cc[NCC]; /* control characters */
> +};
> +
OK. Again make sure a diff against the power version shows
as the difference only those changes if possible.
> +/* modem lines */
> +#define TIOCM_LE 0x001
> +#define TIOCM_DTR 0x002
> +#define TIOCM_RTS 0x004
> +#define TIOCM_ST 0x008
> +#define TIOCM_SR 0x010
> +#define TIOCM_CTS 0x020
> +#define TIOCM_CAR 0x040
> +#define TIOCM_RNG 0x080
> +#define TIOCM_DSR 0x100
> +#define TIOCM_CD TIOCM_CAR
> +#define TIOCM_RI TIOCM_RNG
> +
OK.
> +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
> +
> +/* line disciplines */
> +#define N_TTY 0
> +#define N_SLIP 1
> +#define N_MOUSE 2
> +#define N_PPP 3
> +#define N_STRIP 4
> +#define N_AX25 5
> +#define N_X25 6 /* X.25 async */
> +#define N_6PACK 7
> +#define N_MASC 8 /* Mobitex module */
> +#define N_R3964 9 /* Simatic R3964 module */
> +#define N_PROFIBUS_FDL 10 /* Profibus */
> +#define N_IRDA 11 /* Linux IR */
> +#define N_SMSBLOCK 12 /* SMS block mode */
> +#define N_HDLC 13 /* synchronous HDLC */
> +#define N_SYNC_PPP 14 /* synchronous PPP */
> +#define N_HCI 15 /* Bluetooth HCI UART */
OK.
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/termios.h b/sysdeps/unix/sysv/linux/powerpc/bits/termios.h
> index b971d3c..def6e51 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/termios.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/termios.h
> @@ -261,24 +261,6 @@ struct ltchars {
> #define TIOCPKT_NOSTOP 16
> #define TIOCPKT_DOSTOP 32
>
> -
> -struct winsize {
> - unsigned short ws_row;
> - unsigned short ws_col;
> - unsigned short ws_xpixel;
> - unsigned short ws_ypixel;
> -};
> -
> -#define NCC 10
> -struct termio {
> - unsigned short c_iflag; /* input mode flags */
> - unsigned short c_oflag; /* output mode flags */
> - unsigned short c_cflag; /* control mode flags */
> - unsigned short c_lflag; /* local mode flags */
> - unsigned char c_line; /* line discipline */
> - unsigned char c_cc[NCC]; /* control characters */
> -};
> -
> /* c_cc characters */
> #define _VINTR 0
> #define _VQUIT 1
> @@ -291,38 +273,7 @@ struct termio {
> #define _VEOL2 8
> #define _VSWTC 9
>
> -/* modem lines */
> -#define TIOCM_LE 0x001
> -#define TIOCM_DTR 0x002
> -#define TIOCM_RTS 0x004
> -#define TIOCM_ST 0x008
> -#define TIOCM_SR 0x010
> -#define TIOCM_CTS 0x020
> -#define TIOCM_CAR 0x040
> -#define TIOCM_RNG 0x080
> -#define TIOCM_DSR 0x100
> -#define TIOCM_CD TIOCM_CAR
> -#define TIOCM_RI TIOCM_RNG
> -
> /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
> #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
>
> -/* line disciplines */
> -#define N_TTY 0
> -#define N_SLIP 1
> -#define N_MOUSE 2
> -#define N_PPP 3
> -#define N_STRIP 4
> -#define N_AX25 5
> -#define N_X25 6 /* X.25 async */
> -#define N_6PACK 7
> -#define N_MASC 8 /* Mobitex module */
> -#define N_R3964 9 /* Simatic R3964 module */
> -#define N_PROFIBUS_FDL 10 /* Profibus */
> -#define N_IRDA 11 /* Linux IR */
> -#define N_SMSBLOCK 12 /* SMS block mode */
> -#define N_HDLC 13 /* synchronous HDLC */
> -#define N_SYNC_PPP 14 /* synchronous PPP */
> -#define N_HCI 15 /* Bluetooth HCI UART */
> -
> #endif /* __USE_MISC */
>
OK.
Cheers,
Carlos.