Commit 727dda800f5076ce6f4653393fab651706959c93

Authored by Greg Ungerer
Committed by Linus Torvalds
1 parent 9a9bb6fb34

[PATCH] m68knommu: fix compilation problems with 68328serial driver

Clean out the 68328serial driver:

. remove use of cli/sti
. fix usage of tty_* calls
. remove unused variables

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 1 changed file with 44 additions and 58 deletions Side-by-side Diff

drivers/serial/68328serial.c
... ... @@ -131,17 +131,6 @@
131 131 static int m68328_console_cbaud = DEFAULT_CBAUD;
132 132  
133 133  
134   -/*
135   - * tmp_buf is used as a temporary buffer by serial_write. We need to
136   - * lock it in case the memcpy_fromfs blocks while swapping in a page,
137   - * and some other program tries to do a serial write at the same time.
138   - * Since the lock will only come under contention when the system is
139   - * swapping and available memory is low, it makes sense to share one
140   - * buffer across all the serial ports, since it significantly saves
141   - * memory if large numbers of serial ports are open.
142   - */
143   -static unsigned char tmp_buf[SERIAL_XMIT_SIZE]; /* This is cheating */
144   -
145 134 static inline int serial_paranoia_check(struct m68k_serial *info,
146 135 char *name, const char *routine)
147 136 {
148 137  
149 138  
... ... @@ -211,16 +200,16 @@
211 200 if (serial_paranoia_check(info, tty->name, "rs_stop"))
212 201 return;
213 202  
214   - save_flags(flags); cli();
  203 + local_irq_save(flags);
215 204 uart->ustcnt &= ~USTCNT_TXEN;
216   - restore_flags(flags);
  205 + local_irq_restore(flags);
217 206 }
218 207  
219 208 static void rs_put_char(char ch)
220 209 {
221 210 int flags, loops = 0;
222 211  
223   - save_flags(flags); cli();
  212 + local_irq_save(flags);
224 213  
225 214 while (!(UTX & UTX_TX_AVAIL) && (loops < 1000)) {
226 215 loops++;
... ... @@ -229,7 +218,7 @@
229 218  
230 219 UTX_TXDATA = ch;
231 220 udelay(5);
232   - restore_flags(flags);
  221 + local_irq_restore(flags);
233 222 }
234 223  
235 224 static void rs_start(struct tty_struct *tty)
... ... @@ -241,7 +230,7 @@
241 230 if (serial_paranoia_check(info, tty->name, "rs_start"))
242 231 return;
243 232  
244   - save_flags(flags); cli();
  233 + local_irq_save(flags);
245 234 if (info->xmit_cnt && info->xmit_buf && !(uart->ustcnt & USTCNT_TXEN)) {
246 235 #ifdef USE_INTS
247 236 uart->ustcnt |= USTCNT_TXEN | USTCNT_TX_INTR_MASK;
... ... @@ -249,7 +238,7 @@
249 238 uart->ustcnt |= USTCNT_TXEN;
250 239 #endif
251 240 }
252   - restore_flags(flags);
  241 + local_irq_restore(flags);
253 242 }
254 243  
255 244 /* Drop into either the boot monitor or kadb upon receiving a break
... ... @@ -327,14 +316,6 @@
327 316 if(!tty)
328 317 goto clear_and_exit;
329 318  
330   - /*
331   - * Make sure that we do not overflow the buffer
332   - */
333   - if (tty_request_buffer_room(tty, 1) == 0) {
334   - tty_schedule_flip(tty);
335   - return;
336   - }
337   -
338 319 flag = TTY_NORMAL;
339 320  
340 321 if(rx & URX_PARITY_ERROR) {
... ... @@ -473,7 +454,7 @@
473 454 return -ENOMEM;
474 455 }
475 456  
476   - save_flags(flags); cli();
  457 + local_irq_save(flags);
477 458  
478 459 /*
479 460 * Clear the FIFO buffers and disable them
... ... @@ -506,7 +487,7 @@
506 487 change_speed(info);
507 488  
508 489 info->flags |= S_INITIALIZED;
509   - restore_flags(flags);
  490 + local_irq_restore(flags);
510 491 return 0;
511 492 }
512 493  
... ... @@ -523,7 +504,7 @@
523 504 if (!(info->flags & S_INITIALIZED))
524 505 return;
525 506  
526   - save_flags(flags); cli(); /* Disable interrupts */
  507 + local_irq_save(flags);
527 508  
528 509 if (info->xmit_buf) {
529 510 free_page((unsigned long) info->xmit_buf);
... ... @@ -534,7 +515,7 @@
534 515 set_bit(TTY_IO_ERROR, &info->tty->flags);
535 516  
536 517 info->flags &= ~S_INITIALIZED;
537   - restore_flags(flags);
  518 + local_irq_restore(flags);
538 519 }
539 520  
540 521 struct {
541 522  
542 523  
543 524  
... ... @@ -655,24 +636,24 @@
655 636 if (info == 0) return;
656 637 if (info->xmit_buf == 0) return;
657 638  
658   - save_flags(flags); cli();
  639 + local_irq_save(flags);
659 640 left = info->xmit_cnt;
660 641 while (left != 0) {
661 642 c = info->xmit_buf[info->xmit_tail];
662 643 info->xmit_tail = (info->xmit_tail+1) & (SERIAL_XMIT_SIZE-1);
663 644 info->xmit_cnt--;
664   - restore_flags(flags);
  645 + local_irq_restore(flags);
665 646  
666 647 rs_put_char(c);
667 648  
668   - save_flags(flags); cli();
  649 + local_irq_save(flags);
669 650 left = min(info->xmit_cnt, left-1);
670 651 }
671 652  
672 653 /* Last character is being transmitted now (hopefully). */
673 654 udelay(5);
674 655  
675   - restore_flags(flags);
  656 + local_irq_restore(flags);
676 657 return;
677 658 }
678 659  
679 660  
... ... @@ -720,11 +701,11 @@
720 701 #endif
721 702  
722 703 /* Enable transmitter */
723   - save_flags(flags); cli();
  704 + local_irq_save(flags);
724 705  
725 706 if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped ||
726 707 !info->xmit_buf) {
727   - restore_flags(flags);
  708 + local_irq_restore(flags);
728 709 return;
729 710 }
730 711  
... ... @@ -749,7 +730,7 @@
749 730 while (!(uart->utx.w & UTX_TX_AVAIL)) udelay(5);
750 731 }
751 732 #endif
752   - restore_flags(flags);
  733 + local_irq_restore(flags);
753 734 }
754 735  
755 736 extern void console_printn(const char * b, int count);
756 737  
757 738  
758 739  
759 740  
... ... @@ -768,18 +749,22 @@
768 749 if (!tty || !info->xmit_buf)
769 750 return 0;
770 751  
771   - save_flags(flags);
  752 + local_save_flags(flags);
772 753 while (1) {
773   - cli();
  754 + local_irq_disable();
774 755 c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
775 756 SERIAL_XMIT_SIZE - info->xmit_head));
  757 + local_irq_restore(flags);
  758 +
776 759 if (c <= 0)
777 760 break;
778 761  
779 762 memcpy(info->xmit_buf + info->xmit_head, buf, c);
  763 +
  764 + local_irq_disable();
780 765 info->xmit_head = (info->xmit_head + c) & (SERIAL_XMIT_SIZE-1);
781 766 info->xmit_cnt += c;
782   - restore_flags(flags);
  767 + local_irq_restore(flags);
783 768 buf += c;
784 769 count -= c;
785 770 total += c;
... ... @@ -787,7 +772,7 @@
787 772  
788 773 if (info->xmit_cnt && !tty->stopped && !tty->hw_stopped) {
789 774 /* Enable transmitter */
790   - cli();
  775 + local_irq_disable();
791 776 #ifndef USE_INTS
792 777 while(info->xmit_cnt) {
793 778 #endif
794 779  
... ... @@ -807,9 +792,9 @@
807 792 #ifndef USE_INTS
808 793 }
809 794 #endif
810   - restore_flags(flags);
  795 + local_irq_restore(flags);
811 796 }
812   - restore_flags(flags);
  797 +
813 798 return total;
814 799 }
815 800  
816 801  
817 802  
... ... @@ -838,12 +823,13 @@
838 823 static void rs_flush_buffer(struct tty_struct *tty)
839 824 {
840 825 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data;
  826 + unsigned long flags;
841 827  
842 828 if (serial_paranoia_check(info, tty->name, "rs_flush_buffer"))
843 829 return;
844   - cli();
  830 + local_irq_save(flags);
845 831 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
846   - sti();
  832 + local_irq_restore(flags);
847 833 tty_wakeup(tty);
848 834 }
849 835  
850 836  
851 837  
... ... @@ -973,14 +959,15 @@
973 959 m68328_uart *uart = &uart_addr[info->line];
974 960 #endif
975 961 unsigned char status;
  962 + unsigned long flags;
976 963  
977   - cli();
  964 + local_irq_save(flags);
978 965 #ifdef CONFIG_SERIAL_68328_RTS_CTS
979 966 status = (uart->utx.w & UTX_CTS_STAT) ? 1 : 0;
980 967 #else
981 968 status = 0;
982 969 #endif
983   - sti();
  970 + local_irq_restore(flags);
984 971 put_user(status,value);
985 972 return 0;
986 973 }
987 974  
... ... @@ -994,14 +981,13 @@
994 981 unsigned long flags;
995 982 if (!info->port)
996 983 return;
997   - save_flags(flags);
998   - cli();
  984 + local_irq_save(flags);
999 985 #ifdef USE_INTS
1000 986 uart->utx.w |= UTX_SEND_BREAK;
1001 987 msleep_interruptible(duration);
1002 988 uart->utx.w &= ~UTX_SEND_BREAK;
1003 989 #endif
1004   - restore_flags(flags);
  990 + local_irq_restore(flags);
1005 991 }
1006 992  
1007 993 static int rs_ioctl(struct tty_struct *tty, struct file * file,
... ... @@ -1060,7 +1046,7 @@
1060 1046 (struct serial_struct *) arg);
1061 1047 case TIOCSERGETLSR: /* Get line status register */
1062 1048 if (access_ok(VERIFY_WRITE, (void *) arg,
1063   - sizeof(unsigned int));
  1049 + sizeof(unsigned int)))
1064 1050 return get_lsr_info(info, (unsigned int *) arg);
1065 1051 return -EFAULT;
1066 1052 case TIOCSERGSTRUCT:
1067 1053  
... ... @@ -1113,10 +1099,10 @@
1113 1099 if (!info || serial_paranoia_check(info, tty->name, "rs_close"))
1114 1100 return;
1115 1101  
1116   - save_flags(flags); cli();
  1102 + local_irq_save(flags);
1117 1103  
1118 1104 if (tty_hung_up_p(filp)) {
1119   - restore_flags(flags);
  1105 + local_irq_restore(flags);
1120 1106 return;
1121 1107 }
1122 1108  
... ... @@ -1138,7 +1124,7 @@
1138 1124 info->count = 0;
1139 1125 }
1140 1126 if (info->count) {
1141   - restore_flags(flags);
  1127 + local_irq_restore(flags);
1142 1128 return;
1143 1129 }
1144 1130 info->flags |= S_CLOSING;
... ... @@ -1186,7 +1172,7 @@
1186 1172 }
1187 1173 info->flags &= ~(S_NORMAL_ACTIVE|S_CLOSING);
1188 1174 wake_up_interruptible(&info->close_wait);
1189   - restore_flags(flags);
  1175 + local_irq_restore(flags);
1190 1176 }
1191 1177  
1192 1178 /*
1193 1179  
... ... @@ -1262,9 +1248,9 @@
1262 1248 info->count--;
1263 1249 info->blocked_open++;
1264 1250 while (1) {
1265   - cli();
  1251 + local_irq_disable();
1266 1252 m68k_rtsdtr(info, 1);
1267   - sti();
  1253 + local_irq_enable();
1268 1254 current->state = TASK_INTERRUPTIBLE;
1269 1255 if (tty_hung_up_p(filp) ||
1270 1256 !(info->flags & S_INITIALIZED)) {
... ... @@ -1444,7 +1430,7 @@
1444 1430 return -ENOMEM;
1445 1431 }
1446 1432  
1447   - save_flags(flags); cli();
  1433 + local_irq_save(flags);
1448 1434  
1449 1435 for(i=0;i<NR_PORTS;i++) {
1450 1436  
... ... @@ -1489,7 +1475,7 @@
1489 1475 serial_pm[i]->data = info;
1490 1476 #endif
1491 1477 }
1492   - restore_flags(flags);
  1478 + local_irq_restore(flags);
1493 1479 return 0;
1494 1480 }
1495 1481