agetty: better support of the special system consoles on S390

That is that there are several consoles, the /dev/ttyS0 which
is type of ibm3215 and a dumb terminal, then there is the device
/dev/3270/tty1 which can handle ANSI color escape sequences and is
a ibm327x terminal, and the /dev/ttyS1 which is a vt220 terminal.

The macro is_speed() in agetty.c allows to distinguish between the
terminal line (/dev)3270/tty1 and the speed options on the command
line used in

/run/systemd/generator/getty.target.wants/serial-getty@3270-tty1.service

which is a symbolic link to /usr/lib/systemd/system/serial-getty@.service

Signed-off-by: Werner Fink <werner@suse.de>
This commit is contained in:
Werner Fink 2014-05-08 12:09:24 +02:00 committed by Karel Zak
parent 624b204d7b
commit f2bcda5183
2 changed files with 17 additions and 6 deletions

View File

@ -231,10 +231,16 @@ static void tcfinal(struct console *con)
setenv("TERM", "linux", 1);
return;
}
if (con->flags & CON_NOTTY)
if (con->flags & CON_NOTTY) {
setenv("TERM", "dumb", 1);
return;
}
#if defined (__s390__) || defined (__s390x__)
setenv("TERM", "dumb", 1);
#else
setenv("TERM", "vt102", 1);
#endif
tio = &con->tio;
fd = con->fd;

View File

@ -51,7 +51,8 @@
# define DEFAULT_VCTERM "linux"
# endif
# if defined (__s390__) || defined (__s390x__)
# define DEFAULT_TTYS0 "ibm327x"
# define DEFAULT_TTYS0 "dumb"
# define DEFAULT_TTY32 "ibm327x"
# define DEFAULT_TTYS1 "vt220"
# endif
# ifndef DEFAULT_STERM
@ -569,6 +570,8 @@ static void login_options_to_argv(char *argv[], int *argc,
*argc = i;
}
#define is_speed(str) (strlen((str)) == strspn((str), "0123456789,"))
/* Parse command-line arguments. */
static void parse_args(int argc, char **argv, struct options *op)
{
@ -747,7 +750,7 @@ static void parse_args(int argc, char **argv, struct options *op)
}
/* Accept "tty", "baudrate tty", and "tty baudrate". */
if ('0' <= argv[optind][0] && argv[optind][0] <= '9') {
if (is_speed(argv[optind])) {
/* Assume BSD style speed. */
parse_speeds(op, argv[optind++]);
if (argc < optind + 1) {
@ -759,7 +762,7 @@ static void parse_args(int argc, char **argv, struct options *op)
op->tty = argv[optind++];
if (argc > optind) {
char *v = argv[optind++];
if ('0' <= *v && *v <= '9')
if (is_speed(v))
parse_speeds(op, v);
else
op->speeds[op->numspeed++] = bcode("9600");
@ -1069,9 +1072,11 @@ static void open_tty(char *tty, struct termios *tp, struct options *op)
* higher. Whereas the second serial line on a S/390(x) is
* a real character terminal which is compatible with VT220.
*/
if (strcmp(op->tty, "ttyS0") == 0)
if (strcmp(op->tty, "ttyS0") == 0) /* linux/drivers/s390/char/con3215.c */
op->term = DEFAULT_TTYS0;
else if (strcmp(op->tty, "ttyS1") == 0)
else if (strncmp(op->tty, "3270/tty", 8) == 0) /* linux/drivers/s390/char/con3270.c */
op->term = DEFAULT_TTY32;
else if (strcmp(op->tty, "ttyS1") == 0) /* linux/drivers/s390/char/sclp_vt220.c */
op->term = DEFAULT_TTYS1;
}
#endif