Commit b4abdfa4fbf4afaa7540ddaf814236e7844935ff
1 parent
77f0435e
fix use of host serial port
Signed-off-by: David Ahern <daahern@cisco.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6556 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
19 additions
and
8 deletions
qemu-char.c
| @@ -1047,17 +1047,17 @@ static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg) | @@ -1047,17 +1047,17 @@ static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg) | ||
| 1047 | int *targ = (int *)arg; | 1047 | int *targ = (int *)arg; |
| 1048 | ioctl(s->fd_in, TIOCMGET, &sarg); | 1048 | ioctl(s->fd_in, TIOCMGET, &sarg); |
| 1049 | *targ = 0; | 1049 | *targ = 0; |
| 1050 | - if (sarg | TIOCM_CTS) | 1050 | + if (sarg & TIOCM_CTS) |
| 1051 | *targ |= CHR_TIOCM_CTS; | 1051 | *targ |= CHR_TIOCM_CTS; |
| 1052 | - if (sarg | TIOCM_CAR) | 1052 | + if (sarg & TIOCM_CAR) |
| 1053 | *targ |= CHR_TIOCM_CAR; | 1053 | *targ |= CHR_TIOCM_CAR; |
| 1054 | - if (sarg | TIOCM_DSR) | 1054 | + if (sarg & TIOCM_DSR) |
| 1055 | *targ |= CHR_TIOCM_DSR; | 1055 | *targ |= CHR_TIOCM_DSR; |
| 1056 | - if (sarg | TIOCM_RI) | 1056 | + if (sarg & TIOCM_RI) |
| 1057 | *targ |= CHR_TIOCM_RI; | 1057 | *targ |= CHR_TIOCM_RI; |
| 1058 | - if (sarg | TIOCM_DTR) | 1058 | + if (sarg & TIOCM_DTR) |
| 1059 | *targ |= CHR_TIOCM_DTR; | 1059 | *targ |= CHR_TIOCM_DTR; |
| 1060 | - if (sarg | TIOCM_RTS) | 1060 | + if (sarg & TIOCM_RTS) |
| 1061 | *targ |= CHR_TIOCM_RTS; | 1061 | *targ |= CHR_TIOCM_RTS; |
| 1062 | } | 1062 | } |
| 1063 | break; | 1063 | break; |
| @@ -1065,9 +1065,20 @@ static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg) | @@ -1065,9 +1065,20 @@ static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg) | ||
| 1065 | { | 1065 | { |
| 1066 | int sarg = *(int *)arg; | 1066 | int sarg = *(int *)arg; |
| 1067 | int targ = 0; | 1067 | int targ = 0; |
| 1068 | - if (sarg | CHR_TIOCM_DTR) | 1068 | + ioctl(s->fd_in, TIOCMGET, &targ); |
| 1069 | + targ &= ~(CHR_TIOCM_CTS | CHR_TIOCM_CAR | CHR_TIOCM_DSR | ||
| 1070 | + | CHR_TIOCM_RI | CHR_TIOCM_DTR | CHR_TIOCM_RTS); | ||
| 1071 | + if (sarg & CHR_TIOCM_CTS) | ||
| 1072 | + targ |= TIOCM_CTS; | ||
| 1073 | + if (sarg & CHR_TIOCM_CAR) | ||
| 1074 | + targ |= TIOCM_CAR; | ||
| 1075 | + if (sarg & CHR_TIOCM_DSR) | ||
| 1076 | + targ |= TIOCM_DSR; | ||
| 1077 | + if (sarg & CHR_TIOCM_RI) | ||
| 1078 | + targ |= TIOCM_RI; | ||
| 1079 | + if (sarg & CHR_TIOCM_DTR) | ||
| 1069 | targ |= TIOCM_DTR; | 1080 | targ |= TIOCM_DTR; |
| 1070 | - if (sarg | CHR_TIOCM_RTS) | 1081 | + if (sarg & CHR_TIOCM_RTS) |
| 1071 | targ |= TIOCM_RTS; | 1082 | targ |= TIOCM_RTS; |
| 1072 | ioctl(s->fd_in, TIOCMSET, &targ); | 1083 | ioctl(s->fd_in, TIOCMSET, &targ); |
| 1073 | } | 1084 | } |