aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Slaby <jirislaby@gmail.com>2008-04-30 03:53:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 11:29:42 -0400
commitb4173f45758a5b5185acb302c507289e661d9419 (patch)
treeb1aa5c97946790af7c39686bc16b394e8e76ebcd
parent5292bcd38e4bcd147905941b5e37b5b0da1a5577 (diff)
Char: moxa, remove port->port
We don't need to hold a reference to port index. In most cases we need port structure anyway and index is available in port->tty->index. Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Tested-by: Oyvind Aabling <Oyvind.Aabling@uni-c.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/char/moxa.c354
1 files changed, 163 insertions, 191 deletions
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c
index fa58fa14b4cf..ae5433c58161 100644
--- a/drivers/char/moxa.c
+++ b/drivers/char/moxa.c
@@ -128,8 +128,8 @@ struct moxaq_str {
128}; 128};
129 129
130struct moxa_port { 130struct moxa_port {
131 struct moxa_board_conf *board;
131 int type; 132 int type;
132 int port;
133 int close_delay; 133 int close_delay;
134 unsigned short closing_wait; 134 unsigned short closing_wait;
135 int count; 135 int count;
@@ -218,34 +218,32 @@ static void moxa_receive_data(struct moxa_port *);
218/* 218/*
219 * moxa board interface functions: 219 * moxa board interface functions:
220 */ 220 */
221static int MoxaDriverIoctl(unsigned int, unsigned long, int); 221static int MoxaDriverIoctl(struct tty_struct *, unsigned int, unsigned long);
222static int MoxaDriverPoll(void); 222static int MoxaDriverPoll(void);
223static int MoxaPortsOfCard(int); 223static int MoxaPortsOfCard(int);
224static int MoxaPortIsValid(int); 224static int MoxaPortIsValid(int);
225static void MoxaPortEnable(int); 225static void MoxaPortEnable(struct moxa_port *);
226static void MoxaPortDisable(int); 226static void MoxaPortDisable(struct moxa_port *);
227static long MoxaPortGetMaxBaud(int); 227static int MoxaPortSetTermio(struct moxa_port *, struct ktermios *, speed_t);
228static long MoxaPortSetBaud(int, long); 228static int MoxaPortGetLineOut(struct moxa_port *, int *, int *);
229static int MoxaPortSetTermio(int, struct ktermios *, speed_t); 229static void MoxaPortLineCtrl(struct moxa_port *, int, int);
230static int MoxaPortGetLineOut(int, int *, int *); 230static void MoxaPortFlowCtrl(struct moxa_port *, int, int, int, int, int);
231static void MoxaPortLineCtrl(int, int, int); 231static int MoxaPortLineStatus(struct moxa_port *);
232static void MoxaPortFlowCtrl(int, int, int, int, int, int); 232static int MoxaPortDCDChange(struct moxa_port *);
233static int MoxaPortLineStatus(int); 233static int MoxaPortDCDON(struct moxa_port *);
234static int MoxaPortDCDChange(int); 234static void MoxaPortFlushData(struct moxa_port *, int);
235static int MoxaPortDCDON(int); 235static int MoxaPortWriteData(struct moxa_port *, unsigned char *, int);
236static void MoxaPortFlushData(int, int); 236static int MoxaPortReadData(struct moxa_port *, struct tty_struct *tty);
237static int MoxaPortWriteData(int, unsigned char *, int); 237static int MoxaPortTxQueue(struct moxa_port *);
238static int MoxaPortReadData(int, struct tty_struct *tty); 238static int MoxaPortRxQueue(struct moxa_port *);
239static int MoxaPortTxQueue(int); 239static int MoxaPortTxFree(struct moxa_port *);
240static int MoxaPortRxQueue(int); 240static void MoxaPortTxDisable(struct moxa_port *);
241static int MoxaPortTxFree(int); 241static void MoxaPortTxEnable(struct moxa_port *);
242static void MoxaPortTxDisable(int); 242static int MoxaPortResetBrkCnt(struct moxa_port *);
243static void MoxaPortTxEnable(int); 243static void MoxaPortSendBreak(struct moxa_port *, int);
244static int MoxaPortResetBrkCnt(int);
245static void MoxaPortSendBreak(int, int);
246static int moxa_get_serial_info(struct moxa_port *, struct serial_struct __user *); 244static int moxa_get_serial_info(struct moxa_port *, struct serial_struct __user *);
247static int moxa_set_serial_info(struct moxa_port *, struct serial_struct __user *); 245static int moxa_set_serial_info(struct moxa_port *, struct serial_struct __user *);
248static void MoxaSetFifo(int port, int enable); 246static void MoxaSetFifo(struct moxa_port *port, int enable);
249 247
250static const struct tty_operations moxa_ops = { 248static const struct tty_operations moxa_ops = {
251 .open = moxa_open, 249 .open = moxa_open,
@@ -515,6 +513,7 @@ static int moxa_load_code(struct moxa_board_conf *brd, const void *ptr,
515 case MOXA_BOARD_CP204J: 513 case MOXA_BOARD_CP204J:
516 port = brd->ports; 514 port = brd->ports;
517 for (i = 0; i < brd->numPorts; i++, port++) { 515 for (i = 0; i < brd->numPorts; i++, port++) {
516 port->board = brd;
518 port->chkPort = 1; 517 port->chkPort = 1;
519 port->curBaud = 9600L; 518 port->curBaud = 9600L;
520 port->DCDState = 0; 519 port->DCDState = 0;
@@ -534,6 +533,7 @@ static int moxa_load_code(struct moxa_board_conf *brd, const void *ptr,
534 default: 533 default:
535 port = brd->ports; 534 port = brd->ports;
536 for (i = 0; i < brd->numPorts; i++, port++) { 535 for (i = 0; i < brd->numPorts; i++, port++) {
536 port->board = brd;
537 port->chkPort = 1; 537 port->chkPort = 1;
538 port->curBaud = 9600L; 538 port->curBaud = 9600L;
539 port->DCDState = 0; 539 port->DCDState = 0;
@@ -822,7 +822,6 @@ static int __init moxa_init(void)
822 822
823 for (i = 0, ch = moxa_ports; i < MAX_PORTS; i++, ch++) { 823 for (i = 0, ch = moxa_ports; i < MAX_PORTS; i++, ch++) {
824 ch->type = PORT_16550A; 824 ch->type = PORT_16550A;
825 ch->port = i;
826 ch->close_delay = 5 * HZ / 10; 825 ch->close_delay = 5 * HZ / 10;
827 ch->closing_wait = 30 * HZ; 826 ch->closing_wait = 30 * HZ;
828 ch->cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL; 827 ch->cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL;
@@ -939,8 +938,8 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
939 if (!(ch->asyncflags & ASYNC_INITIALIZED)) { 938 if (!(ch->asyncflags & ASYNC_INITIALIZED)) {
940 ch->statusflags = 0; 939 ch->statusflags = 0;
941 moxa_set_tty_param(tty, tty->termios); 940 moxa_set_tty_param(tty, tty->termios);
942 MoxaPortLineCtrl(ch->port, 1, 1); 941 MoxaPortLineCtrl(ch, 1, 1);
943 MoxaPortEnable(ch->port); 942 MoxaPortEnable(ch);
944 ch->asyncflags |= ASYNC_INITIALIZED; 943 ch->asyncflags |= ASYNC_INITIALIZED;
945 } 944 }
946 retval = moxa_block_till_ready(tty, filp, ch); 945 retval = moxa_block_till_ready(tty, filp, ch);
@@ -948,9 +947,9 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
948 moxa_unthrottle(tty); 947 moxa_unthrottle(tty);
949 948
950 if (ch->type == PORT_16550A) { 949 if (ch->type == PORT_16550A) {
951 MoxaSetFifo(ch->port, 1); 950 MoxaSetFifo(ch, 1);
952 } else { 951 } else {
953 MoxaSetFifo(ch->port, 0); 952 MoxaSetFifo(ch, 0);
954 } 953 }
955 954
956 return (retval); 955 return (retval);
@@ -997,10 +996,10 @@ static void moxa_close(struct tty_struct *tty, struct file *filp)
997 if (ch->asyncflags & ASYNC_INITIALIZED) { 996 if (ch->asyncflags & ASYNC_INITIALIZED) {
998 moxa_setup_empty_event(tty); 997 moxa_setup_empty_event(tty);
999 tty_wait_until_sent(tty, 30 * HZ); /* 30 seconds timeout */ 998 tty_wait_until_sent(tty, 30 * HZ); /* 30 seconds timeout */
1000 del_timer_sync(&moxa_ports[ch->port].emptyTimer); 999 del_timer_sync(&ch->emptyTimer);
1001 } 1000 }
1002 moxa_shut_down(ch); 1001 moxa_shut_down(ch);
1003 MoxaPortFlushData(port, 2); 1002 MoxaPortFlushData(ch, 2);
1004 1003
1005 if (tty->driver->flush_buffer) 1004 if (tty->driver->flush_buffer)
1006 tty->driver->flush_buffer(tty); 1005 tty->driver->flush_buffer(tty);
@@ -1022,17 +1021,15 @@ static void moxa_close(struct tty_struct *tty, struct file *filp)
1022static int moxa_write(struct tty_struct *tty, 1021static int moxa_write(struct tty_struct *tty,
1023 const unsigned char *buf, int count) 1022 const unsigned char *buf, int count)
1024{ 1023{
1025 struct moxa_port *ch; 1024 struct moxa_port *ch = tty->driver_data;
1026 int len, port;
1027 unsigned long flags; 1025 unsigned long flags;
1026 int len;
1028 1027
1029 ch = (struct moxa_port *) tty->driver_data;
1030 if (ch == NULL) 1028 if (ch == NULL)
1031 return (0); 1029 return 0;
1032 port = ch->port;
1033 1030
1034 spin_lock_irqsave(&moxa_lock, flags); 1031 spin_lock_irqsave(&moxa_lock, flags);
1035 len = MoxaPortWriteData(port, (unsigned char *) buf, count); 1032 len = MoxaPortWriteData(ch, (unsigned char *) buf, count);
1036 spin_unlock_irqrestore(&moxa_lock, flags); 1033 spin_unlock_irqrestore(&moxa_lock, flags);
1037 1034
1038 /********************************************* 1035 /*********************************************
@@ -1049,26 +1046,26 @@ static int moxa_write_room(struct tty_struct *tty)
1049 1046
1050 if (tty->stopped) 1047 if (tty->stopped)
1051 return (0); 1048 return (0);
1052 ch = (struct moxa_port *) tty->driver_data; 1049 ch = tty->driver_data;
1053 if (ch == NULL) 1050 if (ch == NULL)
1054 return (0); 1051 return (0);
1055 return (MoxaPortTxFree(ch->port)); 1052 return MoxaPortTxFree(ch);
1056} 1053}
1057 1054
1058static void moxa_flush_buffer(struct tty_struct *tty) 1055static void moxa_flush_buffer(struct tty_struct *tty)
1059{ 1056{
1060 struct moxa_port *ch = (struct moxa_port *) tty->driver_data; 1057 struct moxa_port *ch = tty->driver_data;
1061 1058
1062 if (ch == NULL) 1059 if (ch == NULL)
1063 return; 1060 return;
1064 MoxaPortFlushData(ch->port, 1); 1061 MoxaPortFlushData(ch, 1);
1065 tty_wakeup(tty); 1062 tty_wakeup(tty);
1066} 1063}
1067 1064
1068static int moxa_chars_in_buffer(struct tty_struct *tty) 1065static int moxa_chars_in_buffer(struct tty_struct *tty)
1069{ 1066{
1067 struct moxa_port *ch = tty->driver_data;
1070 int chars; 1068 int chars;
1071 struct moxa_port *ch = (struct moxa_port *) tty->driver_data;
1072 1069
1073 /* 1070 /*
1074 * Sigh...I have to check if driver_data is NULL here, because 1071 * Sigh...I have to check if driver_data is NULL here, because
@@ -1078,7 +1075,7 @@ static int moxa_chars_in_buffer(struct tty_struct *tty)
1078 */ 1075 */
1079 if (ch == NULL) 1076 if (ch == NULL)
1080 return (0); 1077 return (0);
1081 chars = MoxaPortTxQueue(ch->port); 1078 chars = MoxaPortTxQueue(ch);
1082 if (chars) { 1079 if (chars) {
1083 /* 1080 /*
1084 * Make it possible to wakeup anything waiting for output 1081 * Make it possible to wakeup anything waiting for output
@@ -1100,16 +1097,13 @@ static void moxa_flush_chars(struct tty_struct *tty)
1100 1097
1101static void moxa_put_char(struct tty_struct *tty, unsigned char c) 1098static void moxa_put_char(struct tty_struct *tty, unsigned char c)
1102{ 1099{
1103 struct moxa_port *ch; 1100 struct moxa_port *ch = tty->driver_data;
1104 int port;
1105 unsigned long flags; 1101 unsigned long flags;
1106 1102
1107 ch = (struct moxa_port *) tty->driver_data;
1108 if (ch == NULL) 1103 if (ch == NULL)
1109 return; 1104 return;
1110 port = ch->port;
1111 spin_lock_irqsave(&moxa_lock, flags); 1105 spin_lock_irqsave(&moxa_lock, flags);
1112 MoxaPortWriteData(port, &c, 1); 1106 MoxaPortWriteData(ch, &c, 1);
1113 spin_unlock_irqrestore(&moxa_lock, flags); 1107 spin_unlock_irqrestore(&moxa_lock, flags);
1114 /************************************************ 1108 /************************************************
1115 if ( !(ch->statusflags & LOWWAIT) && (MoxaPortTxFree(port) <= 100) ) 1109 if ( !(ch->statusflags & LOWWAIT) && (MoxaPortTxFree(port) <= 100) )
@@ -1119,20 +1113,18 @@ static void moxa_put_char(struct tty_struct *tty, unsigned char c)
1119 1113
1120static int moxa_tiocmget(struct tty_struct *tty, struct file *file) 1114static int moxa_tiocmget(struct tty_struct *tty, struct file *file)
1121{ 1115{
1122 struct moxa_port *ch = (struct moxa_port *) tty->driver_data; 1116 struct moxa_port *ch = tty->driver_data;
1123 int port;
1124 int flag = 0, dtr, rts; 1117 int flag = 0, dtr, rts;
1125 1118
1126 port = tty->index; 1119 if ((tty->index != MAX_PORTS) && (!ch))
1127 if ((port != MAX_PORTS) && (!ch))
1128 return (-EINVAL); 1120 return (-EINVAL);
1129 1121
1130 MoxaPortGetLineOut(ch->port, &dtr, &rts); 1122 MoxaPortGetLineOut(ch, &dtr, &rts);
1131 if (dtr) 1123 if (dtr)
1132 flag |= TIOCM_DTR; 1124 flag |= TIOCM_DTR;
1133 if (rts) 1125 if (rts)
1134 flag |= TIOCM_RTS; 1126 flag |= TIOCM_RTS;
1135 dtr = MoxaPortLineStatus(ch->port); 1127 dtr = MoxaPortLineStatus(ch);
1136 if (dtr & 1) 1128 if (dtr & 1)
1137 flag |= TIOCM_CTS; 1129 flag |= TIOCM_CTS;
1138 if (dtr & 2) 1130 if (dtr & 2)
@@ -1145,7 +1137,7 @@ static int moxa_tiocmget(struct tty_struct *tty, struct file *file)
1145static int moxa_tiocmset(struct tty_struct *tty, struct file *file, 1137static int moxa_tiocmset(struct tty_struct *tty, struct file *file,
1146 unsigned int set, unsigned int clear) 1138 unsigned int set, unsigned int clear)
1147{ 1139{
1148 struct moxa_port *ch = (struct moxa_port *) tty->driver_data; 1140 struct moxa_port *ch = tty->driver_data;
1149 int port; 1141 int port;
1150 int dtr, rts; 1142 int dtr, rts;
1151 1143
@@ -1153,7 +1145,7 @@ static int moxa_tiocmset(struct tty_struct *tty, struct file *file,
1153 if ((port != MAX_PORTS) && (!ch)) 1145 if ((port != MAX_PORTS) && (!ch))
1154 return (-EINVAL); 1146 return (-EINVAL);
1155 1147
1156 MoxaPortGetLineOut(ch->port, &dtr, &rts); 1148 MoxaPortGetLineOut(ch, &dtr, &rts);
1157 if (set & TIOCM_RTS) 1149 if (set & TIOCM_RTS)
1158 rts = 1; 1150 rts = 1;
1159 if (set & TIOCM_DTR) 1151 if (set & TIOCM_DTR)
@@ -1162,14 +1154,14 @@ static int moxa_tiocmset(struct tty_struct *tty, struct file *file,
1162 rts = 0; 1154 rts = 0;
1163 if (clear & TIOCM_DTR) 1155 if (clear & TIOCM_DTR)
1164 dtr = 0; 1156 dtr = 0;
1165 MoxaPortLineCtrl(ch->port, dtr, rts); 1157 MoxaPortLineCtrl(ch, dtr, rts);
1166 return 0; 1158 return 0;
1167} 1159}
1168 1160
1169static int moxa_ioctl(struct tty_struct *tty, struct file *file, 1161static int moxa_ioctl(struct tty_struct *tty, struct file *file,
1170 unsigned int cmd, unsigned long arg) 1162 unsigned int cmd, unsigned long arg)
1171{ 1163{
1172 struct moxa_port *ch = (struct moxa_port *) tty->driver_data; 1164 struct moxa_port *ch = tty->driver_data;
1173 register int port; 1165 register int port;
1174 void __user *argp = (void __user *)arg; 1166 void __user *argp = (void __user *)arg;
1175 int retval; 1167 int retval;
@@ -1186,7 +1178,7 @@ static int moxa_ioctl(struct tty_struct *tty, struct file *file,
1186 moxa_setup_empty_event(tty); 1178 moxa_setup_empty_event(tty);
1187 tty_wait_until_sent(tty, 0); 1179 tty_wait_until_sent(tty, 0);
1188 if (!arg) 1180 if (!arg)
1189 MoxaPortSendBreak(ch->port, 0); 1181 MoxaPortSendBreak(ch, 0);
1190 return (0); 1182 return (0);
1191 case TCSBRKP: /* support for POSIX tcsendbreak() */ 1183 case TCSBRKP: /* support for POSIX tcsendbreak() */
1192 retval = tty_check_change(tty); 1184 retval = tty_check_change(tty);
@@ -1194,7 +1186,7 @@ static int moxa_ioctl(struct tty_struct *tty, struct file *file,
1194 return (retval); 1186 return (retval);
1195 moxa_setup_empty_event(tty); 1187 moxa_setup_empty_event(tty);
1196 tty_wait_until_sent(tty, 0); 1188 tty_wait_until_sent(tty, 0);
1197 MoxaPortSendBreak(ch->port, arg); 1189 MoxaPortSendBreak(ch, arg);
1198 return (0); 1190 return (0);
1199 case TIOCGSOFTCAR: 1191 case TIOCGSOFTCAR:
1200 return put_user(C_CLOCAL(tty) ? 1 : 0, (int __user *)argp); 1192 return put_user(C_CLOCAL(tty) ? 1 : 0, (int __user *)argp);
@@ -1215,7 +1207,7 @@ static int moxa_ioctl(struct tty_struct *tty, struct file *file,
1215 case TIOCSSERIAL: 1207 case TIOCSSERIAL:
1216 return moxa_set_serial_info(ch, argp); 1208 return moxa_set_serial_info(ch, argp);
1217 default: 1209 default:
1218 retval = MoxaDriverIoctl(cmd, arg, port); 1210 retval = MoxaDriverIoctl(tty, cmd, arg);
1219 } 1211 }
1220 return (retval); 1212 return (retval);
1221} 1213}
@@ -1253,7 +1245,7 @@ static void moxa_stop(struct tty_struct *tty)
1253 1245
1254 if (ch == NULL) 1246 if (ch == NULL)
1255 return; 1247 return;
1256 MoxaPortTxDisable(ch->port); 1248 MoxaPortTxDisable(ch);
1257 ch->statusflags |= TXSTOPPED; 1249 ch->statusflags |= TXSTOPPED;
1258} 1250}
1259 1251
@@ -1268,7 +1260,7 @@ static void moxa_start(struct tty_struct *tty)
1268 if (!(ch->statusflags & TXSTOPPED)) 1260 if (!(ch->statusflags & TXSTOPPED))
1269 return; 1261 return;
1270 1262
1271 MoxaPortTxEnable(ch->port); 1263 MoxaPortTxEnable(ch);
1272 ch->statusflags &= ~TXSTOPPED; 1264 ch->statusflags &= ~TXSTOPPED;
1273} 1265}
1274 1266
@@ -1306,25 +1298,25 @@ static void moxa_poll(unsigned long ignored)
1306 if ((ch->asyncflags & ASYNC_INITIALIZED) == 0) 1298 if ((ch->asyncflags & ASYNC_INITIALIZED) == 0)
1307 continue; 1299 continue;
1308 if (!(ch->statusflags & THROTTLE) && 1300 if (!(ch->statusflags & THROTTLE) &&
1309 (MoxaPortRxQueue(ch->port) > 0)) 1301 (MoxaPortRxQueue(ch) > 0))
1310 moxa_receive_data(ch); 1302 moxa_receive_data(ch);
1311 if ((tp = ch->tty) == 0) 1303 if ((tp = ch->tty) == 0)
1312 continue; 1304 continue;
1313 if (ch->statusflags & LOWWAIT) { 1305 if (ch->statusflags & LOWWAIT) {
1314 if (MoxaPortTxQueue(ch->port) <= WAKEUP_CHARS) { 1306 if (MoxaPortTxQueue(ch) <= WAKEUP_CHARS) {
1315 if (!tp->stopped) { 1307 if (!tp->stopped) {
1316 ch->statusflags &= ~LOWWAIT; 1308 ch->statusflags &= ~LOWWAIT;
1317 tty_wakeup(tp); 1309 tty_wakeup(tp);
1318 } 1310 }
1319 } 1311 }
1320 } 1312 }
1321 if (!I_IGNBRK(tp) && (MoxaPortResetBrkCnt(ch->port) > 0)) { 1313 if (!I_IGNBRK(tp) && (MoxaPortResetBrkCnt(ch) > 0)) {
1322 tty_insert_flip_char(tp, 0, TTY_BREAK); 1314 tty_insert_flip_char(tp, 0, TTY_BREAK);
1323 tty_schedule_flip(tp); 1315 tty_schedule_flip(tp);
1324 } 1316 }
1325 if (MoxaPortDCDChange(ch->port)) { 1317 if (MoxaPortDCDChange(ch)) {
1326 if (ch->asyncflags & ASYNC_CHECK_CD) { 1318 if (ch->asyncflags & ASYNC_CHECK_CD) {
1327 if (MoxaPortDCDON(ch->port)) 1319 if (MoxaPortDCDON(ch))
1328 wake_up_interruptible(&ch->open_wait); 1320 wake_up_interruptible(&ch->open_wait);
1329 else { 1321 else {
1330 tty_hangup(tp); 1322 tty_hangup(tp);
@@ -1365,8 +1357,8 @@ static void moxa_set_tty_param(struct tty_struct *tty, struct ktermios *old_term
1365 1357
1366 /* Clear the features we don't support */ 1358 /* Clear the features we don't support */
1367 ts->c_cflag &= ~CMSPAR; 1359 ts->c_cflag &= ~CMSPAR;
1368 MoxaPortFlowCtrl(ch->port, rts, cts, txflow, rxflow, xany); 1360 MoxaPortFlowCtrl(ch, rts, cts, txflow, rxflow, xany);
1369 baud = MoxaPortSetTermio(ch->port, ts, tty_get_baud_rate(tty)); 1361 baud = MoxaPortSetTermio(ch, ts, tty_get_baud_rate(tty));
1370 if (baud == -1) 1362 if (baud == -1)
1371 baud = tty_termios_baud_rate(old_termios); 1363 baud = tty_termios_baud_rate(old_termios);
1372 /* Not put the baud rate into the termios data */ 1364 /* Not put the baud rate into the termios data */
@@ -1411,7 +1403,7 @@ static int moxa_block_till_ready(struct tty_struct *tty, struct file *filp,
1411 retval = 0; 1403 retval = 0;
1412 add_wait_queue(&ch->open_wait, &wait); 1404 add_wait_queue(&ch->open_wait, &wait);
1413 pr_debug("block_til_ready before block: ttys%d, count = %d\n", 1405 pr_debug("block_til_ready before block: ttys%d, count = %d\n",
1414 ch->port, ch->count); 1406 tty->index, ch->count);
1415 spin_lock_irqsave(&moxa_lock, flags); 1407 spin_lock_irqsave(&moxa_lock, flags);
1416 if (!tty_hung_up_p(filp)) 1408 if (!tty_hung_up_p(filp))
1417 ch->count--; 1409 ch->count--;
@@ -1433,7 +1425,7 @@ static int moxa_block_till_ready(struct tty_struct *tty, struct file *filp,
1433 break; 1425 break;
1434 } 1426 }
1435 if (!(ch->asyncflags & ASYNC_CLOSING) && (do_clocal || 1427 if (!(ch->asyncflags & ASYNC_CLOSING) && (do_clocal ||
1436 MoxaPortDCDON(ch->port))) 1428 MoxaPortDCDON(ch)))
1437 break; 1429 break;
1438 1430
1439 if (signal_pending(current)) { 1431 if (signal_pending(current)) {
@@ -1451,7 +1443,7 @@ static int moxa_block_till_ready(struct tty_struct *tty, struct file *filp,
1451 ch->blocked_open--; 1443 ch->blocked_open--;
1452 spin_unlock_irqrestore(&moxa_lock, flags); 1444 spin_unlock_irqrestore(&moxa_lock, flags);
1453 pr_debug("block_til_ready after blocking: ttys%d, count = %d\n", 1445 pr_debug("block_til_ready after blocking: ttys%d, count = %d\n",
1454 ch->port, ch->count); 1446 tty->index, ch->count);
1455 if (retval) 1447 if (retval)
1456 return (retval); 1448 return (retval);
1457 /* FIXME: review to see if we need to use set_bit on these */ 1449 /* FIXME: review to see if we need to use set_bit on these */
@@ -1466,7 +1458,7 @@ static void moxa_setup_empty_event(struct tty_struct *tty)
1466 1458
1467 spin_lock_irqsave(&moxa_lock, flags); 1459 spin_lock_irqsave(&moxa_lock, flags);
1468 ch->statusflags |= EMPTYWAIT; 1460 ch->statusflags |= EMPTYWAIT;
1469 mod_timer(&moxa_ports[ch->port].emptyTimer, jiffies + HZ); 1461 mod_timer(&ch->emptyTimer, jiffies + HZ);
1470 spin_unlock_irqrestore(&moxa_lock, flags); 1462 spin_unlock_irqrestore(&moxa_lock, flags);
1471} 1463}
1472 1464
@@ -1476,13 +1468,12 @@ static void moxa_check_xmit_empty(unsigned long data)
1476 1468
1477 ch = (struct moxa_port *) data; 1469 ch = (struct moxa_port *) data;
1478 if (ch->tty && (ch->statusflags & EMPTYWAIT)) { 1470 if (ch->tty && (ch->statusflags & EMPTYWAIT)) {
1479 if (MoxaPortTxQueue(ch->port) == 0) { 1471 if (MoxaPortTxQueue(ch) == 0) {
1480 ch->statusflags &= ~EMPTYWAIT; 1472 ch->statusflags &= ~EMPTYWAIT;
1481 tty_wakeup(ch->tty); 1473 tty_wakeup(ch->tty);
1482 return; 1474 return;
1483 } 1475 }
1484 mod_timer(&moxa_ports[ch->port].emptyTimer, 1476 mod_timer(&ch->emptyTimer, round_jiffies(jiffies + HZ));
1485 round_jiffies(jiffies + HZ));
1486 } else 1477 } else
1487 ch->statusflags &= ~EMPTYWAIT; 1478 ch->statusflags &= ~EMPTYWAIT;
1488} 1479}
@@ -1496,13 +1487,13 @@ static void moxa_shut_down(struct moxa_port *ch)
1496 1487
1497 tp = ch->tty; 1488 tp = ch->tty;
1498 1489
1499 MoxaPortDisable(ch->port); 1490 MoxaPortDisable(ch);
1500 1491
1501 /* 1492 /*
1502 * If we're a modem control device and HUPCL is on, drop RTS & DTR. 1493 * If we're a modem control device and HUPCL is on, drop RTS & DTR.
1503 */ 1494 */
1504 if (tp->termios->c_cflag & HUPCL) 1495 if (tp->termios->c_cflag & HUPCL)
1505 MoxaPortLineCtrl(ch->port, 0, 0); 1496 MoxaPortLineCtrl(ch, 0, 0);
1506 1497
1507 ch->asyncflags &= ~ASYNC_INITIALIZED; 1498 ch->asyncflags &= ~ASYNC_INITIALIZED;
1508} 1499}
@@ -1521,11 +1512,11 @@ static void moxa_receive_data(struct moxa_port *ch)
1521 if ( !tp || !ts || !(ts->c_cflag & CREAD) ) { 1512 if ( !tp || !ts || !(ts->c_cflag & CREAD) ) {
1522 *****************************************************/ 1513 *****************************************************/
1523 if (!tp || !ts) { 1514 if (!tp || !ts) {
1524 MoxaPortFlushData(ch->port, 0); 1515 MoxaPortFlushData(ch, 0);
1525 return; 1516 return;
1526 } 1517 }
1527 spin_lock_irqsave(&moxa_lock, flags); 1518 spin_lock_irqsave(&moxa_lock, flags);
1528 MoxaPortReadData(ch->port, tp); 1519 MoxaPortReadData(ch, tp);
1529 spin_unlock_irqrestore(&moxa_lock, flags); 1520 spin_unlock_irqrestore(&moxa_lock, flags);
1530 tty_schedule_flip(tp); 1521 tty_schedule_flip(tp);
1531} 1522}
@@ -1567,27 +1558,28 @@ static void moxa_low_water_check(void __iomem *);
1567#define MOXA_GET_CUMAJOR (MOXA + 64) 1558#define MOXA_GET_CUMAJOR (MOXA + 64)
1568#define MOXA_GETMSTATUS (MOXA + 65) 1559#define MOXA_GETMSTATUS (MOXA + 65)
1569 1560
1570void MoxaPortFlushData(int port, int mode) 1561static void MoxaPortFlushData(struct moxa_port *port, int mode)
1571{ 1562{
1572 void __iomem *ofsAddr; 1563 void __iomem *ofsAddr;
1573 if ((mode < 0) || (mode > 2)) 1564 if ((mode < 0) || (mode > 2))
1574 return; 1565 return;
1575 ofsAddr = moxa_ports[port].tableAddr; 1566 ofsAddr = port->tableAddr;
1576 moxafunc(ofsAddr, FC_FlushQueue, mode); 1567 moxafunc(ofsAddr, FC_FlushQueue, mode);
1577 if (mode != 1) { 1568 if (mode != 1) {
1578 moxa_ports[port].lowChkFlag = 0; 1569 port->lowChkFlag = 0;
1579 moxa_low_water_check(ofsAddr); 1570 moxa_low_water_check(ofsAddr);
1580 } 1571 }
1581} 1572}
1582 1573
1583int MoxaDriverIoctl(unsigned int cmd, unsigned long arg, int port) 1574static int MoxaDriverIoctl(struct tty_struct *tty, unsigned int cmd,
1575 unsigned long arg)
1584{ 1576{
1577 struct moxa_port *port = tty->driver_data;
1585 int i; 1578 int i;
1586 int status; 1579 int status;
1587 int MoxaPortTxQueue(int), MoxaPortRxQueue(int);
1588 void __user *argp = (void __user *)arg; 1580 void __user *argp = (void __user *)arg;
1589 1581
1590 if (port == MAX_PORTS) { 1582 if (tty->index == MAX_PORTS) {
1591 if ((cmd != MOXA_GET_CONF) && (cmd != MOXA_GETDATACOUNT) && 1583 if ((cmd != MOXA_GET_CONF) && (cmd != MOXA_GETDATACOUNT) &&
1592 (cmd != MOXA_GET_IOQUEUE) && (cmd != MOXA_GET_MAJOR) && 1584 (cmd != MOXA_GET_IOQUEUE) && (cmd != MOXA_GET_MAJOR) &&
1593 (cmd != MOXA_GET_CUMAJOR) && (cmd != MOXA_GETMSTATUS)) 1585 (cmd != MOXA_GET_CUMAJOR) && (cmd != MOXA_GETMSTATUS))
@@ -1609,8 +1601,8 @@ int MoxaDriverIoctl(unsigned int cmd, unsigned long arg, int port)
1609 for (i = 0; i < MAX_PORTS; i++, argm++) { 1601 for (i = 0; i < MAX_PORTS; i++, argm++) {
1610 memset(&tmp, 0, sizeof(tmp)); 1602 memset(&tmp, 0, sizeof(tmp));
1611 if (moxa_ports[i].chkPort) { 1603 if (moxa_ports[i].chkPort) {
1612 tmp.inq = MoxaPortRxQueue(i); 1604 tmp.inq = MoxaPortRxQueue(&moxa_ports[i]);
1613 tmp.outq = MoxaPortTxQueue(i); 1605 tmp.outq = MoxaPortTxQueue(&moxa_ports[i]);
1614 } 1606 }
1615 if (copy_to_user(argm, &tmp, sizeof(tmp))) 1607 if (copy_to_user(argm, &tmp, sizeof(tmp)))
1616 return -EFAULT; 1608 return -EFAULT;
@@ -1642,7 +1634,7 @@ int MoxaDriverIoctl(unsigned int cmd, unsigned long arg, int port)
1642 if (!p->chkPort) { 1634 if (!p->chkPort) {
1643 goto copy; 1635 goto copy;
1644 } else { 1636 } else {
1645 status = MoxaPortLineStatus(p->port); 1637 status = MoxaPortLineStatus(p);
1646 if (status & 1) 1638 if (status & 1)
1647 tmp.cts = 1; 1639 tmp.cts = 1;
1648 if (status & 2) 1640 if (status & 2)
@@ -2016,7 +2008,7 @@ int MoxaPortsOfCard(int cardno)
2016 * send out a about 250 ms BREAK signal. 2008 * send out a about 250 ms BREAK signal.
2017 * 2009 *
2018 */ 2010 */
2019int MoxaPortIsValid(int port) 2011static int MoxaPortIsValid(int port)
2020{ 2012{
2021 if (moxaCard == 0) 2013 if (moxaCard == 0)
2022 return (0); 2014 return (0);
@@ -2025,17 +2017,16 @@ int MoxaPortIsValid(int port)
2025 return (1); 2017 return (1);
2026} 2018}
2027 2019
2028void MoxaPortEnable(int port) 2020static void MoxaPortEnable(struct moxa_port *port)
2029{ 2021{
2030 void __iomem *ofsAddr; 2022 void __iomem *ofsAddr;
2031 int MoxaPortLineStatus(int);
2032 short lowwater = 512; 2023 short lowwater = 512;
2033 2024
2034 ofsAddr = moxa_ports[port].tableAddr; 2025 ofsAddr = port->tableAddr;
2035 writew(lowwater, ofsAddr + Low_water); 2026 writew(lowwater, ofsAddr + Low_water);
2036 moxa_ports[port].breakCnt = 0; 2027 port->breakCnt = 0;
2037 if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) || 2028 if (port->board->boardType == MOXA_BOARD_C320_ISA ||
2038 (moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) { 2029 port->board->boardType == MOXA_BOARD_C320_PCI) {
2039 moxafunc(ofsAddr, FC_SetBreakIrq, 0); 2030 moxafunc(ofsAddr, FC_SetBreakIrq, 0);
2040 } else { 2031 } else {
2041 writew(readw(ofsAddr + HostStat) | WakeupBreak, ofsAddr + HostStat); 2032 writew(readw(ofsAddr + HostStat) | WakeupBreak, ofsAddr + HostStat);
@@ -2048,9 +2039,9 @@ void MoxaPortEnable(int port)
2048 MoxaPortLineStatus(port); 2039 MoxaPortLineStatus(port);
2049} 2040}
2050 2041
2051void MoxaPortDisable(int port) 2042static void MoxaPortDisable(struct moxa_port *port)
2052{ 2043{
2053 void __iomem *ofsAddr = moxa_ports[port].tableAddr; 2044 void __iomem *ofsAddr = port->tableAddr;
2054 2045
2055 moxafunc(ofsAddr, FC_SetFlowCtl, 0); /* disable flow control */ 2046 moxafunc(ofsAddr, FC_SetFlowCtl, 0); /* disable flow control */
2056 moxafunc(ofsAddr, FC_ClrLineIrq, Magic_code); 2047 moxafunc(ofsAddr, FC_ClrLineIrq, Magic_code);
@@ -2058,17 +2049,17 @@ void MoxaPortDisable(int port)
2058 moxafunc(ofsAddr, FC_DisableCH, Magic_code); 2049 moxafunc(ofsAddr, FC_DisableCH, Magic_code);
2059} 2050}
2060 2051
2061long MoxaPortGetMaxBaud(int port) 2052static long MoxaPortGetMaxBaud(struct moxa_port *port)
2062{ 2053{
2063 if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) || 2054 if (port->board->boardType == MOXA_BOARD_C320_ISA ||
2064 (moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) 2055 port->board->boardType == MOXA_BOARD_C320_PCI)
2065 return (460800L); 2056 return (460800L);
2066 else 2057 else
2067 return (921600L); 2058 return (921600L);
2068} 2059}
2069 2060
2070 2061
2071long MoxaPortSetBaud(int port, long baud) 2062static long MoxaPortSetBaud(struct moxa_port *port, long baud)
2072{ 2063{
2073 void __iomem *ofsAddr; 2064 void __iomem *ofsAddr;
2074 long max, clock; 2065 long max, clock;
@@ -2076,7 +2067,7 @@ long MoxaPortSetBaud(int port, long baud)
2076 2067
2077 if ((baud < 50L) || ((max = MoxaPortGetMaxBaud(port)) == 0)) 2068 if ((baud < 50L) || ((max = MoxaPortGetMaxBaud(port)) == 0))
2078 return (0); 2069 return (0);
2079 ofsAddr = moxa_ports[port].tableAddr; 2070 ofsAddr = port->tableAddr;
2080 if (baud > max) 2071 if (baud > max)
2081 baud = max; 2072 baud = max;
2082 if (max == 38400L) 2073 if (max == 38400L)
@@ -2088,19 +2079,20 @@ long MoxaPortSetBaud(int port, long baud)
2088 val = clock / baud; 2079 val = clock / baud;
2089 moxafunc(ofsAddr, FC_SetBaud, val); 2080 moxafunc(ofsAddr, FC_SetBaud, val);
2090 baud = clock / val; 2081 baud = clock / val;
2091 moxa_ports[port].curBaud = baud; 2082 port->curBaud = baud;
2092 return (baud); 2083 return (baud);
2093} 2084}
2094 2085
2095int MoxaPortSetTermio(int port, struct ktermios *termio, speed_t baud) 2086static int MoxaPortSetTermio(struct moxa_port *port, struct ktermios *termio,
2087 speed_t baud)
2096{ 2088{
2097 void __iomem *ofsAddr; 2089 void __iomem *ofsAddr;
2098 tcflag_t cflag; 2090 tcflag_t cflag;
2099 tcflag_t mode = 0; 2091 tcflag_t mode = 0;
2100 2092
2101 if (moxa_ports[port].chkPort == 0 || termio == 0) 2093 if (port->chkPort == 0 || termio == 0)
2102 return (-1); 2094 return (-1);
2103 ofsAddr = moxa_ports[port].tableAddr; 2095 ofsAddr = port->tableAddr;
2104 cflag = termio->c_cflag; /* termio->c_cflag */ 2096 cflag = termio->c_cflag; /* termio->c_cflag */
2105 2097
2106 mode = termio->c_cflag & CSIZE; 2098 mode = termio->c_cflag & CSIZE;
@@ -2131,8 +2123,8 @@ int MoxaPortSetTermio(int port, struct ktermios *termio, speed_t baud)
2131 2123
2132 moxafunc(ofsAddr, FC_SetDataMode, (ushort) mode); 2124 moxafunc(ofsAddr, FC_SetDataMode, (ushort) mode);
2133 2125
2134 if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) || 2126 if (port->board->boardType == MOXA_BOARD_C320_ISA ||
2135 (moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) { 2127 port->board->boardType == MOXA_BOARD_C320_PCI) {
2136 if (baud >= 921600L) 2128 if (baud >= 921600L)
2137 return (-1); 2129 return (-1);
2138 } 2130 }
@@ -2148,48 +2140,37 @@ int MoxaPortSetTermio(int port, struct ktermios *termio, speed_t baud)
2148 return (baud); 2140 return (baud);
2149} 2141}
2150 2142
2151int MoxaPortGetLineOut(int port, int *dtrState, int *rtsState) 2143static int MoxaPortGetLineOut(struct moxa_port *port, int *dtrState,
2144 int *rtsState)
2152{ 2145{
2153 2146
2154 if (!MoxaPortIsValid(port)) 2147 if (!MoxaPortIsValid(port->tty->index))
2155 return (-1); 2148 return (-1);
2156 if (dtrState) { 2149 if (dtrState)
2157 if (moxa_ports[port].lineCtrl & DTR_ON) 2150 *dtrState = !!(port->lineCtrl & DTR_ON);
2158 *dtrState = 1; 2151 if (rtsState)
2159 else 2152 *rtsState = !!(port->lineCtrl & RTS_ON);
2160 *dtrState = 0; 2153
2161 }
2162 if (rtsState) {
2163 if (moxa_ports[port].lineCtrl & RTS_ON)
2164 *rtsState = 1;
2165 else
2166 *rtsState = 0;
2167 }
2168 return (0); 2154 return (0);
2169} 2155}
2170 2156
2171void MoxaPortLineCtrl(int port, int dtr, int rts) 2157static void MoxaPortLineCtrl(struct moxa_port *port, int dtr, int rts)
2172{ 2158{
2173 void __iomem *ofsAddr; 2159 int mode = 0;
2174 int mode;
2175 2160
2176 ofsAddr = moxa_ports[port].tableAddr;
2177 mode = 0;
2178 if (dtr) 2161 if (dtr)
2179 mode |= DTR_ON; 2162 mode |= DTR_ON;
2180 if (rts) 2163 if (rts)
2181 mode |= RTS_ON; 2164 mode |= RTS_ON;
2182 moxa_ports[port].lineCtrl = mode; 2165 port->lineCtrl = mode;
2183 moxafunc(ofsAddr, FC_LineControl, mode); 2166 moxafunc(port->tableAddr, FC_LineControl, mode);
2184} 2167}
2185 2168
2186void MoxaPortFlowCtrl(int port, int rts, int cts, int txflow, int rxflow, int txany) 2169static void MoxaPortFlowCtrl(struct moxa_port *port, int rts, int cts,
2170 int txflow, int rxflow, int txany)
2187{ 2171{
2188 void __iomem *ofsAddr; 2172 int mode = 0;
2189 int mode;
2190 2173
2191 ofsAddr = moxa_ports[port].tableAddr;
2192 mode = 0;
2193 if (rts) 2174 if (rts)
2194 mode |= RTS_FlowCtl; 2175 mode |= RTS_FlowCtl;
2195 if (cts) 2176 if (cts)
@@ -2200,17 +2181,17 @@ void MoxaPortFlowCtrl(int port, int rts, int cts, int txflow, int rxflow, int tx
2200 mode |= Rx_FlowCtl; 2181 mode |= Rx_FlowCtl;
2201 if (txany) 2182 if (txany)
2202 mode |= IXM_IXANY; 2183 mode |= IXM_IXANY;
2203 moxafunc(ofsAddr, FC_SetFlowCtl, mode); 2184 moxafunc(port->tableAddr, FC_SetFlowCtl, mode);
2204} 2185}
2205 2186
2206int MoxaPortLineStatus(int port) 2187static int MoxaPortLineStatus(struct moxa_port *port)
2207{ 2188{
2208 void __iomem *ofsAddr; 2189 void __iomem *ofsAddr;
2209 int val; 2190 int val;
2210 2191
2211 ofsAddr = moxa_ports[port].tableAddr; 2192 ofsAddr = port->tableAddr;
2212 if ((moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_ISA) || 2193 if (port->board->boardType == MOXA_BOARD_C320_ISA ||
2213 (moxa_boards[port / MAX_PORTS_PER_BOARD].boardType == MOXA_BOARD_C320_PCI)) { 2194 port->board->boardType == MOXA_BOARD_C320_PCI) {
2214 moxafunc(ofsAddr, FC_LineStatus, 0); 2195 moxafunc(ofsAddr, FC_LineStatus, 0);
2215 val = readw(ofsAddr + FuncArg); 2196 val = readw(ofsAddr + FuncArg);
2216 } else { 2197 } else {
@@ -2219,42 +2200,43 @@ int MoxaPortLineStatus(int port)
2219 val &= 0x0B; 2200 val &= 0x0B;
2220 if (val & 8) { 2201 if (val & 8) {
2221 val |= 4; 2202 val |= 4;
2222 if ((moxa_ports[port].DCDState & DCD_oldstate) == 0) 2203 if ((port->DCDState & DCD_oldstate) == 0)
2223 moxa_ports[port].DCDState = (DCD_oldstate | DCD_changed); 2204 port->DCDState = (DCD_oldstate | DCD_changed);
2224 } else { 2205 } else {
2225 if (moxa_ports[port].DCDState & DCD_oldstate) 2206 if (port->DCDState & DCD_oldstate)
2226 moxa_ports[port].DCDState = DCD_changed; 2207 port->DCDState = DCD_changed;
2227 } 2208 }
2228 val &= 7; 2209 val &= 7;
2229 return (val); 2210 return (val);
2230} 2211}
2231 2212
2232int MoxaPortDCDChange(int port) 2213static int MoxaPortDCDChange(struct moxa_port *port)
2233{ 2214{
2234 int n; 2215 int n;
2235 2216
2236 if (moxa_ports[port].chkPort == 0) 2217 if (port->chkPort == 0)
2237 return (0); 2218 return (0);
2238 n = moxa_ports[port].DCDState; 2219 n = port->DCDState;
2239 moxa_ports[port].DCDState &= ~DCD_changed; 2220 port->DCDState &= ~DCD_changed;
2240 n &= DCD_changed; 2221 n &= DCD_changed;
2241 return (n); 2222 return (n);
2242} 2223}
2243 2224
2244int MoxaPortDCDON(int port) 2225static int MoxaPortDCDON(struct moxa_port *port)
2245{ 2226{
2246 int n; 2227 int n;
2247 2228
2248 if (moxa_ports[port].chkPort == 0) 2229 if (port->chkPort == 0)
2249 return (0); 2230 return (0);
2250 if (moxa_ports[port].DCDState & DCD_oldstate) 2231 if (port->DCDState & DCD_oldstate)
2251 n = 1; 2232 n = 1;
2252 else 2233 else
2253 n = 0; 2234 n = 0;
2254 return (n); 2235 return (n);
2255} 2236}
2256 2237
2257int MoxaPortWriteData(int port, unsigned char * buffer, int len) 2238static int MoxaPortWriteData(struct moxa_port *port, unsigned char *buffer,
2239 int len)
2258{ 2240{
2259 int c, total, i; 2241 int c, total, i;
2260 ushort tail; 2242 ushort tail;
@@ -2263,8 +2245,8 @@ int MoxaPortWriteData(int port, unsigned char * buffer, int len)
2263 ushort pageno, pageofs, bufhead; 2245 ushort pageno, pageofs, bufhead;
2264 void __iomem *baseAddr, *ofsAddr, *ofs; 2246 void __iomem *baseAddr, *ofsAddr, *ofs;
2265 2247
2266 ofsAddr = moxa_ports[port].tableAddr; 2248 ofsAddr = port->tableAddr;
2267 baseAddr = moxa_boards[port / MAX_PORTS_PER_BOARD].basemem; 2249 baseAddr = port->board->basemem;
2268 tx_mask = readw(ofsAddr + TX_mask); 2250 tx_mask = readw(ofsAddr + TX_mask);
2269 spage = readw(ofsAddr + Page_txb); 2251 spage = readw(ofsAddr + Page_txb);
2270 epage = readw(ofsAddr + EndPage_txb); 2252 epage = readw(ofsAddr + EndPage_txb);
@@ -2274,7 +2256,7 @@ int MoxaPortWriteData(int port, unsigned char * buffer, int len)
2274 : (head - tail + tx_mask); 2256 : (head - tail + tx_mask);
2275 if (c > len) 2257 if (c > len)
2276 c = len; 2258 c = len;
2277 moxaLog.txcnt[port] += c; 2259 moxaLog.txcnt[port->tty->index] += c;
2278 total = c; 2260 total = c;
2279 if (spage == epage) { 2261 if (spage == epage) {
2280 bufhead = readw(ofsAddr + Ofs_txb); 2262 bufhead = readw(ofsAddr + Ofs_txb);
@@ -2318,7 +2300,7 @@ int MoxaPortWriteData(int port, unsigned char * buffer, int len)
2318 return (total); 2300 return (total);
2319} 2301}
2320 2302
2321int MoxaPortReadData(int port, struct tty_struct *tty) 2303static int MoxaPortReadData(struct moxa_port *port, struct tty_struct *tty)
2322{ 2304{
2323 register ushort head, pageofs; 2305 register ushort head, pageofs;
2324 int i, count, cnt, len, total, remain; 2306 int i, count, cnt, len, total, remain;
@@ -2326,8 +2308,8 @@ int MoxaPortReadData(int port, struct tty_struct *tty)
2326 ushort pageno, bufhead; 2308 ushort pageno, bufhead;
2327 void __iomem *baseAddr, *ofsAddr, *ofs; 2309 void __iomem *baseAddr, *ofsAddr, *ofs;
2328 2310
2329 ofsAddr = moxa_ports[port].tableAddr; 2311 ofsAddr = port->tableAddr;
2330 baseAddr = moxa_boards[port / MAX_PORTS_PER_BOARD].basemem; 2312 baseAddr = port->board->basemem;
2331 head = readw(ofsAddr + RXrptr); 2313 head = readw(ofsAddr + RXrptr);
2332 tail = readw(ofsAddr + RXwptr); 2314 tail = readw(ofsAddr + RXwptr);
2333 rx_mask = readw(ofsAddr + RX_mask); 2315 rx_mask = readw(ofsAddr + RX_mask);
@@ -2340,7 +2322,7 @@ int MoxaPortReadData(int port, struct tty_struct *tty)
2340 2322
2341 total = count; 2323 total = count;
2342 remain = count - total; 2324 remain = count - total;
2343 moxaLog.rxcnt[port] += total; 2325 moxaLog.rxcnt[port->tty->index] += total;
2344 count = total; 2326 count = total;
2345 if (spage == epage) { 2327 if (spage == epage) {
2346 bufhead = readw(ofsAddr + Ofs_rxb); 2328 bufhead = readw(ofsAddr + Ofs_rxb);
@@ -2382,19 +2364,18 @@ int MoxaPortReadData(int port, struct tty_struct *tty)
2382 } 2364 }
2383 if ((readb(ofsAddr + FlagStat) & Xoff_state) && (remain < LowWater)) { 2365 if ((readb(ofsAddr + FlagStat) & Xoff_state) && (remain < LowWater)) {
2384 moxaLowWaterChk = 1; 2366 moxaLowWaterChk = 1;
2385 moxa_ports[port].lowChkFlag = 1; 2367 port->lowChkFlag = 1;
2386 } 2368 }
2387 return (total); 2369 return (total);
2388} 2370}
2389 2371
2390 2372
2391int MoxaPortTxQueue(int port) 2373static int MoxaPortTxQueue(struct moxa_port *port)
2392{ 2374{
2393 void __iomem *ofsAddr; 2375 void __iomem *ofsAddr = port->tableAddr;
2394 ushort rptr, wptr, mask; 2376 ushort rptr, wptr, mask;
2395 int len; 2377 int len;
2396 2378
2397 ofsAddr = moxa_ports[port].tableAddr;
2398 rptr = readw(ofsAddr + TXrptr); 2379 rptr = readw(ofsAddr + TXrptr);
2399 wptr = readw(ofsAddr + TXwptr); 2380 wptr = readw(ofsAddr + TXwptr);
2400 mask = readw(ofsAddr + TX_mask); 2381 mask = readw(ofsAddr + TX_mask);
@@ -2402,13 +2383,12 @@ int MoxaPortTxQueue(int port)
2402 return (len); 2383 return (len);
2403} 2384}
2404 2385
2405int MoxaPortTxFree(int port) 2386static int MoxaPortTxFree(struct moxa_port *port)
2406{ 2387{
2407 void __iomem *ofsAddr; 2388 void __iomem *ofsAddr = port->tableAddr;
2408 ushort rptr, wptr, mask; 2389 ushort rptr, wptr, mask;
2409 int len; 2390 int len;
2410 2391
2411 ofsAddr = moxa_ports[port].tableAddr;
2412 rptr = readw(ofsAddr + TXrptr); 2392 rptr = readw(ofsAddr + TXrptr);
2413 wptr = readw(ofsAddr + TXwptr); 2393 wptr = readw(ofsAddr + TXwptr);
2414 mask = readw(ofsAddr + TX_mask); 2394 mask = readw(ofsAddr + TX_mask);
@@ -2416,13 +2396,12 @@ int MoxaPortTxFree(int port)
2416 return (len); 2396 return (len);
2417} 2397}
2418 2398
2419int MoxaPortRxQueue(int port) 2399static int MoxaPortRxQueue(struct moxa_port *port)
2420{ 2400{
2421 void __iomem *ofsAddr; 2401 void __iomem *ofsAddr = port->tableAddr;
2422 ushort rptr, wptr, mask; 2402 ushort rptr, wptr, mask;
2423 int len; 2403 int len;
2424 2404
2425 ofsAddr = moxa_ports[port].tableAddr;
2426 rptr = readw(ofsAddr + RXrptr); 2405 rptr = readw(ofsAddr + RXrptr);
2427 wptr = readw(ofsAddr + RXwptr); 2406 wptr = readw(ofsAddr + RXwptr);
2428 mask = readw(ofsAddr + RX_mask); 2407 mask = readw(ofsAddr + RX_mask);
@@ -2431,37 +2410,30 @@ int MoxaPortRxQueue(int port)
2431} 2410}
2432 2411
2433 2412
2434void MoxaPortTxDisable(int port) 2413static void MoxaPortTxDisable(struct moxa_port *port)
2435{ 2414{
2436 void __iomem *ofsAddr; 2415 moxafunc(port->tableAddr, FC_SetXoffState, Magic_code);
2437
2438 ofsAddr = moxa_ports[port].tableAddr;
2439 moxafunc(ofsAddr, FC_SetXoffState, Magic_code);
2440} 2416}
2441 2417
2442void MoxaPortTxEnable(int port) 2418static void MoxaPortTxEnable(struct moxa_port *port)
2443{ 2419{
2444 void __iomem *ofsAddr; 2420 moxafunc(port->tableAddr, FC_SetXonState, Magic_code);
2445
2446 ofsAddr = moxa_ports[port].tableAddr;
2447 moxafunc(ofsAddr, FC_SetXonState, Magic_code);
2448} 2421}
2449 2422
2450 2423
2451int MoxaPortResetBrkCnt(int port) 2424static int MoxaPortResetBrkCnt(struct moxa_port *port)
2452{ 2425{
2453 ushort cnt; 2426 ushort cnt;
2454 cnt = moxa_ports[port].breakCnt; 2427 cnt = port->breakCnt;
2455 moxa_ports[port].breakCnt = 0; 2428 port->breakCnt = 0;
2456 return (cnt); 2429 return (cnt);
2457} 2430}
2458 2431
2459 2432
2460void MoxaPortSendBreak(int port, int ms100) 2433static void MoxaPortSendBreak(struct moxa_port *port, int ms100)
2461{ 2434{
2462 void __iomem *ofsAddr; 2435 void __iomem *ofsAddr = port->tableAddr;
2463 2436
2464 ofsAddr = moxa_ports[port].tableAddr;
2465 if (ms100) { 2437 if (ms100) {
2466 moxafunc(ofsAddr, FC_SendBreak, Magic_code); 2438 moxafunc(ofsAddr, FC_SendBreak, Magic_code);
2467 msleep(ms100 * 10); 2439 msleep(ms100 * 10);
@@ -2479,7 +2451,7 @@ static int moxa_get_serial_info(struct moxa_port *info,
2479 2451
2480 memset(&tmp, 0, sizeof(tmp)); 2452 memset(&tmp, 0, sizeof(tmp));
2481 tmp.type = info->type; 2453 tmp.type = info->type;
2482 tmp.line = info->port; 2454 tmp.line = info->tty->index;
2483 tmp.port = 0; 2455 tmp.port = 0;
2484 tmp.irq = 0; 2456 tmp.irq = 0;
2485 tmp.flags = info->asyncflags; 2457 tmp.flags = info->asyncflags;
@@ -2522,9 +2494,9 @@ static int moxa_set_serial_info(struct moxa_port *info,
2522 new_serial.flags |= (info->asyncflags & ASYNC_FLAGS); 2494 new_serial.flags |= (info->asyncflags & ASYNC_FLAGS);
2523 2495
2524 if (new_serial.type == PORT_16550A) { 2496 if (new_serial.type == PORT_16550A) {
2525 MoxaSetFifo(info->port, 1); 2497 MoxaSetFifo(info, 1);
2526 } else { 2498 } else {
2527 MoxaSetFifo(info->port, 0); 2499 MoxaSetFifo(info, 0);
2528 } 2500 }
2529 2501
2530 info->type = new_serial.type; 2502 info->type = new_serial.type;
@@ -2572,9 +2544,9 @@ static void moxa_low_water_check(void __iomem *ofsAddr)
2572 } 2544 }
2573} 2545}
2574 2546
2575static void MoxaSetFifo(int port, int enable) 2547static void MoxaSetFifo(struct moxa_port *port, int enable)
2576{ 2548{
2577 void __iomem *ofsAddr = moxa_ports[port].tableAddr; 2549 void __iomem *ofsAddr = port->tableAddr;
2578 2550
2579 if (!enable) { 2551 if (!enable) {
2580 moxafunc(ofsAddr, FC_SetRxFIFOTrig, 0); 2552 moxafunc(ofsAddr, FC_SetRxFIFOTrig, 0);