mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
[PATCH] serial: Fix up offenders peering at baud bits directly
Stop some other people peering into the baud bits on their own and make them use the tty_get_baud_rate() helper as a preperation for the move to the new termios. Corrected dependancy previous one had on new termios structs Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
00988a3514
commit
c7bce3097c
@ -260,7 +260,7 @@ static void MoxaPortEnable(int);
|
|||||||
static void MoxaPortDisable(int);
|
static void MoxaPortDisable(int);
|
||||||
static long MoxaPortGetMaxBaud(int);
|
static long MoxaPortGetMaxBaud(int);
|
||||||
static long MoxaPortSetBaud(int, long);
|
static long MoxaPortSetBaud(int, long);
|
||||||
static int MoxaPortSetTermio(int, struct termios *);
|
static int MoxaPortSetTermio(int, struct termios *, speed_t);
|
||||||
static int MoxaPortGetLineOut(int, int *, int *);
|
static int MoxaPortGetLineOut(int, int *, int *);
|
||||||
static void MoxaPortLineCtrl(int, int, int);
|
static void MoxaPortLineCtrl(int, int, int);
|
||||||
static void MoxaPortFlowCtrl(int, int, int, int, int, int);
|
static void MoxaPortFlowCtrl(int, int, int, int, int, int);
|
||||||
@ -986,7 +986,7 @@ static void set_tty_param(struct tty_struct *tty)
|
|||||||
if (ts->c_iflag & IXANY)
|
if (ts->c_iflag & IXANY)
|
||||||
xany = 1;
|
xany = 1;
|
||||||
MoxaPortFlowCtrl(ch->port, rts, cts, txflow, rxflow, xany);
|
MoxaPortFlowCtrl(ch->port, rts, cts, txflow, rxflow, xany);
|
||||||
MoxaPortSetTermio(ch->port, ts);
|
MoxaPortSetTermio(ch->port, ts, tty_get_baud_rate(tty));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int block_till_ready(struct tty_struct *tty, struct file *filp,
|
static int block_till_ready(struct tty_struct *tty, struct file *filp,
|
||||||
@ -1900,9 +1900,10 @@ int MoxaPortsOfCard(int cardno)
|
|||||||
*
|
*
|
||||||
* Function 12: Configure the port.
|
* Function 12: Configure the port.
|
||||||
* Syntax:
|
* Syntax:
|
||||||
* int MoxaPortSetTermio(int port, struct termios *termio);
|
* int MoxaPortSetTermio(int port, struct termios *termio, speed_t baud);
|
||||||
* int port : port number (0 - 127)
|
* int port : port number (0 - 127)
|
||||||
* struct termios * termio : termio structure pointer
|
* struct termios * termio : termio structure pointer
|
||||||
|
* speed_t baud : baud rate
|
||||||
*
|
*
|
||||||
* return: -1 : this port is invalid or termio == NULL
|
* return: -1 : this port is invalid or termio == NULL
|
||||||
* 0 : setting O.K.
|
* 0 : setting O.K.
|
||||||
@ -2182,11 +2183,10 @@ long MoxaPortSetBaud(int port, long baud)
|
|||||||
return (baud);
|
return (baud);
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoxaPortSetTermio(int port, struct termios *termio)
|
int MoxaPortSetTermio(int port, struct termios *termio, speed_t baud)
|
||||||
{
|
{
|
||||||
void __iomem *ofsAddr;
|
void __iomem *ofsAddr;
|
||||||
tcflag_t cflag;
|
tcflag_t cflag;
|
||||||
long baud;
|
|
||||||
tcflag_t mode = 0;
|
tcflag_t mode = 0;
|
||||||
|
|
||||||
if (moxaChkPort[port] == 0 || termio == 0)
|
if (moxaChkPort[port] == 0 || termio == 0)
|
||||||
@ -2222,77 +2222,9 @@ int MoxaPortSetTermio(int port, struct termios *termio)
|
|||||||
|
|
||||||
moxafunc(ofsAddr, FC_SetDataMode, (ushort) mode);
|
moxafunc(ofsAddr, FC_SetDataMode, (ushort) mode);
|
||||||
|
|
||||||
cflag &= (CBAUD | CBAUDEX);
|
|
||||||
#ifndef B921600
|
|
||||||
#define B921600 (B460800+1)
|
|
||||||
#endif
|
|
||||||
switch (cflag) {
|
|
||||||
case B921600:
|
|
||||||
baud = 921600L;
|
|
||||||
break;
|
|
||||||
case B460800:
|
|
||||||
baud = 460800L;
|
|
||||||
break;
|
|
||||||
case B230400:
|
|
||||||
baud = 230400L;
|
|
||||||
break;
|
|
||||||
case B115200:
|
|
||||||
baud = 115200L;
|
|
||||||
break;
|
|
||||||
case B57600:
|
|
||||||
baud = 57600L;
|
|
||||||
break;
|
|
||||||
case B38400:
|
|
||||||
baud = 38400L;
|
|
||||||
break;
|
|
||||||
case B19200:
|
|
||||||
baud = 19200L;
|
|
||||||
break;
|
|
||||||
case B9600:
|
|
||||||
baud = 9600L;
|
|
||||||
break;
|
|
||||||
case B4800:
|
|
||||||
baud = 4800L;
|
|
||||||
break;
|
|
||||||
case B2400:
|
|
||||||
baud = 2400L;
|
|
||||||
break;
|
|
||||||
case B1800:
|
|
||||||
baud = 1800L;
|
|
||||||
break;
|
|
||||||
case B1200:
|
|
||||||
baud = 1200L;
|
|
||||||
break;
|
|
||||||
case B600:
|
|
||||||
baud = 600L;
|
|
||||||
break;
|
|
||||||
case B300:
|
|
||||||
baud = 300L;
|
|
||||||
break;
|
|
||||||
case B200:
|
|
||||||
baud = 200L;
|
|
||||||
break;
|
|
||||||
case B150:
|
|
||||||
baud = 150L;
|
|
||||||
break;
|
|
||||||
case B134:
|
|
||||||
baud = 134L;
|
|
||||||
break;
|
|
||||||
case B110:
|
|
||||||
baud = 110L;
|
|
||||||
break;
|
|
||||||
case B75:
|
|
||||||
baud = 75L;
|
|
||||||
break;
|
|
||||||
case B50:
|
|
||||||
baud = 50L;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
baud = 0;
|
|
||||||
}
|
|
||||||
if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) ||
|
if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) ||
|
||||||
(moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) {
|
(moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) {
|
||||||
if (baud == 921600L)
|
if (baud >= 921600L)
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
MoxaPortSetBaud(port, baud);
|
MoxaPortSetBaud(port, baud);
|
||||||
|
@ -2554,71 +2554,7 @@ static int mxser_change_speed(struct mxser_struct *info, struct termios *old_ter
|
|||||||
#define B921600 (B460800 +1)
|
#define B921600 (B460800 +1)
|
||||||
#endif
|
#endif
|
||||||
if (mxser_set_baud_method[info->port] == 0) {
|
if (mxser_set_baud_method[info->port] == 0) {
|
||||||
switch (cflag & (CBAUD | CBAUDEX)) {
|
baud = tty_get_baud_rate(info->tty);
|
||||||
case B921600:
|
|
||||||
baud = 921600;
|
|
||||||
break;
|
|
||||||
case B460800:
|
|
||||||
baud = 460800;
|
|
||||||
break;
|
|
||||||
case B230400:
|
|
||||||
baud = 230400;
|
|
||||||
break;
|
|
||||||
case B115200:
|
|
||||||
baud = 115200;
|
|
||||||
break;
|
|
||||||
case B57600:
|
|
||||||
baud = 57600;
|
|
||||||
break;
|
|
||||||
case B38400:
|
|
||||||
baud = 38400;
|
|
||||||
break;
|
|
||||||
case B19200:
|
|
||||||
baud = 19200;
|
|
||||||
break;
|
|
||||||
case B9600:
|
|
||||||
baud = 9600;
|
|
||||||
break;
|
|
||||||
case B4800:
|
|
||||||
baud = 4800;
|
|
||||||
break;
|
|
||||||
case B2400:
|
|
||||||
baud = 2400;
|
|
||||||
break;
|
|
||||||
case B1800:
|
|
||||||
baud = 1800;
|
|
||||||
break;
|
|
||||||
case B1200:
|
|
||||||
baud = 1200;
|
|
||||||
break;
|
|
||||||
case B600:
|
|
||||||
baud = 600;
|
|
||||||
break;
|
|
||||||
case B300:
|
|
||||||
baud = 300;
|
|
||||||
break;
|
|
||||||
case B200:
|
|
||||||
baud = 200;
|
|
||||||
break;
|
|
||||||
case B150:
|
|
||||||
baud = 150;
|
|
||||||
break;
|
|
||||||
case B134:
|
|
||||||
baud = 134;
|
|
||||||
break;
|
|
||||||
case B110:
|
|
||||||
baud = 110;
|
|
||||||
break;
|
|
||||||
case B75:
|
|
||||||
baud = 75;
|
|
||||||
break;
|
|
||||||
case B50:
|
|
||||||
baud = 50;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
baud = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
mxser_set_baud(info, baud);
|
mxser_set_baud(info, baud);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,26 +675,12 @@ static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
|
|||||||
port->COR2 = 0;
|
port->COR2 = 0;
|
||||||
port->MSVR = MSVR_RTS;
|
port->MSVR = MSVR_RTS;
|
||||||
|
|
||||||
baud = C_BAUD(tty);
|
baud = tty_get_baud_rate(tty);
|
||||||
|
|
||||||
if (baud & CBAUDEX) {
|
|
||||||
baud &= ~CBAUDEX;
|
|
||||||
if (baud < 1 || baud > 2)
|
|
||||||
port->tty->termios->c_cflag &= ~CBAUDEX;
|
|
||||||
else
|
|
||||||
baud += 15;
|
|
||||||
}
|
|
||||||
if (baud == 15) {
|
|
||||||
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
|
|
||||||
baud ++;
|
|
||||||
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
|
|
||||||
baud += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Select port on the board */
|
/* Select port on the board */
|
||||||
rc_out(bp, CD180_CAR, port_No(port));
|
rc_out(bp, CD180_CAR, port_No(port));
|
||||||
|
|
||||||
if (!baud_table[baud]) {
|
if (!baud) {
|
||||||
/* Drop DTR & exit */
|
/* Drop DTR & exit */
|
||||||
bp->DTR |= (1u << port_No(port));
|
bp->DTR |= (1u << port_No(port));
|
||||||
rc_out(bp, RC_DTR, bp->DTR);
|
rc_out(bp, RC_DTR, bp->DTR);
|
||||||
@ -710,7 +696,7 @@ static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Set baud rate for port */
|
/* Set baud rate for port */
|
||||||
tmp = (((RC_OSCFREQ + baud_table[baud]/2) / baud_table[baud] +
|
tmp = (((RC_OSCFREQ + baud/2) / baud +
|
||||||
CD180_TPC/2) / CD180_TPC);
|
CD180_TPC/2) / CD180_TPC);
|
||||||
|
|
||||||
rc_out(bp, CD180_RBPRH, (tmp >> 8) & 0xff);
|
rc_out(bp, CD180_RBPRH, (tmp >> 8) & 0xff);
|
||||||
@ -718,7 +704,7 @@ static void rc_change_speed(struct riscom_board *bp, struct riscom_port *port)
|
|||||||
rc_out(bp, CD180_RBPRL, tmp & 0xff);
|
rc_out(bp, CD180_RBPRL, tmp & 0xff);
|
||||||
rc_out(bp, CD180_TBPRL, tmp & 0xff);
|
rc_out(bp, CD180_TBPRL, tmp & 0xff);
|
||||||
|
|
||||||
baud = (baud_table[baud] + 5) / 10; /* Estimated CPS */
|
baud = (baud + 5) / 10; /* Estimated CPS */
|
||||||
|
|
||||||
/* Two timer ticks seems enough to wakeup something like SLIP driver */
|
/* Two timer ticks seems enough to wakeup something like SLIP driver */
|
||||||
tmp = ((baud + HZ/2) / HZ) * 2 - CD180_NFIFO;
|
tmp = ((baud + HZ/2) / HZ) * 2 - CD180_NFIFO;
|
||||||
|
Loading…
Reference in New Issue
Block a user