123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- From ef37e5b112734f551132b613438788fd4ef8797a Mon Sep 17 00:00:00 2001
- From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
- Date: Fri, 12 Jul 2024 20:24:22 +0200
- Subject: [PATCH] pppd: workaround sparc <asm/termbits.h> issue
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- The SPARC version of the <asm/termbits.h> kernel header has an issue:
- it defines "struct termio", which conflicts with the definition in
- <bits/ioctl-types.h>, causing a build failure in pppd.
- This issue was fixed in the upstream Linux kernel in commit
- c32d18e7942d7589b62e301eb426b32623366565 ("sparc: move struct termio
- to asm/termios.h"), which is going to appear in Linux 6.10.
- In order to support building with older toolchains, this patch
- includes in the pppd source code a copy of the fixed SPARC
- <asm/termbits.h> in the pppd code base, and uses it if we're on SPARC
- with kernel headers older than 6.10.
- Fixes:
- In file included from termios_linux.h:39:
- /home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/asm/termbits.h:17:8: error: redefinition of ‘struct termio’
- 17 | struct termio {
- | ^~~~~~
- CC pppd-ipv6cp.o
- In file included from /home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/sys/ioctl.h:29,
- from sys-linux.c:76:
- /home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/bits/ioctl-types.h:36:8: note: originally defined here
- 36 | struct termio
- | ^~~~~~
- Upstream: https://github.com/ppp-project/ppp/pull/504
- Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
- ---
- pppd/sparc-termbits.h | 247 ++++++++++++++++++++++++++++++++++++++++++
- pppd/termios_linux.h | 6 +
- 2 files changed, 253 insertions(+)
- create mode 100644 pppd/sparc-termbits.h
- diff --git a/pppd/sparc-termbits.h b/pppd/sparc-termbits.h
- new file mode 100644
- index 0000000..f92a27a
- --- /dev/null
- +++ b/pppd/sparc-termbits.h
- @@ -0,0 +1,247 @@
- +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
- +#ifndef _SPARC_TERMBITS_H
- +#define _SPARC_TERMBITS_H
- +
- +#include <linux/posix_types.h>
- +
- +typedef unsigned char cc_t;
- +typedef unsigned int speed_t;
- +
- +#if defined(__sparc__) && defined(__arch64__)
- +typedef unsigned int tcflag_t;
- +#else
- +typedef unsigned long tcflag_t;
- +#endif
- +
- +#define NCCS 17
- +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+2]; /* 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+2]; /* 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 VEOL 5
- +#define VEOL2 6
- +#define VSWTC 7
- +#define VSTART 8
- +#define VSTOP 9
- +
- +
- +
- +#define VSUSP 10
- +#define VDSUSP 11 /* SunOS POSIX nicety I do believe... */
- +#define VREPRINT 12
- +#define VDISCARD 13
- +#define VWERASE 14
- +#define VLNEXT 15
- +
- +/* Kernel keeps vmin/vtime separated, user apps assume vmin/vtime is
- + * shared with eof/eol
- + */
- +#define VMIN VEOF
- +#define VTIME VEOL
- +
- +/* c_iflag bits */
- +#define IGNBRK 0x00000001
- +#define BRKINT 0x00000002
- +#define IGNPAR 0x00000004
- +#define PARMRK 0x00000008
- +#define INPCK 0x00000010
- +#define ISTRIP 0x00000020
- +#define INLCR 0x00000040
- +#define IGNCR 0x00000080
- +#define ICRNL 0x00000100
- +#define IUCLC 0x00000200
- +#define IXON 0x00000400
- +#define IXANY 0x00000800
- +#define IXOFF 0x00001000
- +#define IMAXBEL 0x00002000
- +#define IUTF8 0x00004000
- +
- +/* c_oflag bits */
- +#define OPOST 0x00000001
- +#define OLCUC 0x00000002
- +#define ONLCR 0x00000004
- +#define OCRNL 0x00000008
- +#define ONOCR 0x00000010
- +#define ONLRET 0x00000020
- +#define OFILL 0x00000040
- +#define OFDEL 0x00000080
- +#define NLDLY 0x00000100
- +#define NL0 0x00000000
- +#define NL1 0x00000100
- +#define CRDLY 0x00000600
- +#define CR0 0x00000000
- +#define CR1 0x00000200
- +#define CR2 0x00000400
- +#define CR3 0x00000600
- +#define TABDLY 0x00001800
- +#define TAB0 0x00000000
- +#define TAB1 0x00000800
- +#define TAB2 0x00001000
- +#define TAB3 0x00001800
- +#define XTABS 0x00001800
- +#define BSDLY 0x00002000
- +#define BS0 0x00000000
- +#define BS1 0x00002000
- +#define VTDLY 0x00004000
- +#define VT0 0x00000000
- +#define VT1 0x00004000
- +#define FFDLY 0x00008000
- +#define FF0 0x00000000
- +#define FF1 0x00008000
- +#define PAGEOUT 0x00010000 /* SUNOS specific */
- +#define WRAP 0x00020000 /* SUNOS specific */
- +
- +/* c_cflag bit meaning */
- +#define CBAUD 0x0000100f
- +#define B0 0x00000000 /* hang up */
- +#define B50 0x00000001
- +#define B75 0x00000002
- +#define B110 0x00000003
- +#define B134 0x00000004
- +#define B150 0x00000005
- +#define B200 0x00000006
- +#define B300 0x00000007
- +#define B600 0x00000008
- +#define B1200 0x00000009
- +#define B1800 0x0000000a
- +#define B2400 0x0000000b
- +#define B4800 0x0000000c
- +#define B9600 0x0000000d
- +#define B19200 0x0000000e
- +#define B38400 0x0000000f
- +#define EXTA B19200
- +#define EXTB B38400
- +#define CSIZE 0x00000030
- +#define CS5 0x00000000
- +#define CS6 0x00000010
- +#define CS7 0x00000020
- +#define CS8 0x00000030
- +#define CSTOPB 0x00000040
- +#define CREAD 0x00000080
- +#define PARENB 0x00000100
- +#define PARODD 0x00000200
- +#define HUPCL 0x00000400
- +#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
- +#define B460800 0x00001004
- +/* This is what we can do with the Zilogs. */
- +#define B76800 0x00001005
- +/* This is what we can do with the SAB82532. */
- +#define B153600 0x00001006
- +#define B307200 0x00001007
- +#define B614400 0x00001008
- +#define B921600 0x00001009
- +/* And these are the rest... */
- +#define B500000 0x0000100a
- +#define B576000 0x0000100b
- +#define B1000000 0x0000100c
- +#define B1152000 0x0000100d
- +#define B1500000 0x0000100e
- +#define B2000000 0x0000100f
- +/* These have totally bogus values and nobody uses them
- + so far. Later on we'd have to use say 0x10000x and
- + adjust CBAUD constant and drivers accordingly.
- +#define B2500000 0x00001010
- +#define B3000000 0x00001011
- +#define B3500000 0x00001012
- +#define B4000000 0x00001013 */
- +#define CIBAUD 0x100f0000 /* input baud rate (not used) */
- +#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
- +#define XCASE 0x00000004
- +#define ECHO 0x00000008
- +#define ECHOE 0x00000010
- +#define ECHOK 0x00000020
- +#define ECHONL 0x00000040
- +#define NOFLSH 0x00000080
- +#define TOSTOP 0x00000100
- +#define ECHOCTL 0x00000200
- +#define ECHOPRT 0x00000400
- +#define ECHOKE 0x00000800
- +#define DEFECHO 0x00001000 /* SUNOS thing, what is it? */
- +#define FLUSHO 0x00002000
- +#define PENDIN 0x00004000
- +#define IEXTEN 0x00008000
- +#define EXTPROC 0x00010000
- +
- +/* 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
- +#define TIOCM_OUT1 0x2000
- +#define TIOCM_OUT2 0x4000
- +#define TIOCM_LOOP 0x8000
- +
- +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
- +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
- +
- +
- +/* 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 /* _SPARC_TERMBITS_H */
- diff --git a/pppd/termios_linux.h b/pppd/termios_linux.h
- index a234d30..9812017 100644
- --- a/pppd/termios_linux.h
- +++ b/pppd/termios_linux.h
- @@ -32,7 +32,13 @@
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <asm/ioctls.h>
- +#include <linux/version.h>
- +
- +#if defined(__sparc__) && LINUX_VERSION_CODE < KERNEL_VERSION(6,10,0)
- +#include "sparc-termbits.h"
- +#else
- #include <asm/termbits.h>
- +#endif
-
- #if defined(BOTHER) && defined(TCGETS2)
- #define termios termios2
- --
- 2.45.2
|