Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.17-rc4 2208 lines 55 kB view raw
1/* 2 * decserial.c: Serial port driver for IOASIC DECstations. 3 * 4 * Derived from drivers/sbus/char/sunserial.c by Paul Mackerras. 5 * Derived from drivers/macintosh/macserial.c by Harald Koerfgen. 6 * 7 * DECstation changes 8 * Copyright (C) 1998-2000 Harald Koerfgen 9 * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Maciej W. Rozycki 10 * 11 * For the rest of the code the original Copyright applies: 12 * Copyright (C) 1996 Paul Mackerras (Paul.Mackerras@cs.anu.edu.au) 13 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) 14 * 15 * 16 * Note: for IOASIC systems the wiring is as follows: 17 * 18 * mouse/keyboard: 19 * DIN-7 MJ-4 signal SCC 20 * 2 1 TxD <- A.TxD 21 * 3 4 RxD -> A.RxD 22 * 23 * EIA-232/EIA-423: 24 * DB-25 MMJ-6 signal SCC 25 * 2 2 TxD <- B.TxD 26 * 3 5 RxD -> B.RxD 27 * 4 RTS <- ~A.RTS 28 * 5 CTS -> ~B.CTS 29 * 6 6 DSR -> ~A.SYNC 30 * 8 CD -> ~B.DCD 31 * 12 DSRS(DCE) -> ~A.CTS (*) 32 * 15 TxC -> B.TxC 33 * 17 RxC -> B.RxC 34 * 20 1 DTR <- ~A.DTR 35 * 22 RI -> ~A.DCD 36 * 23 DSRS(DTE) <- ~B.RTS 37 * 38 * (*) EIA-232 defines the signal at this pin to be SCD, while DSRS(DCE) 39 * is shared with DSRS(DTE) at pin 23. 40 */ 41 42#include <linux/config.h> 43#include <linux/errno.h> 44#include <linux/signal.h> 45#include <linux/sched.h> 46#include <linux/timer.h> 47#include <linux/interrupt.h> 48#include <linux/tty.h> 49#include <linux/tty_flip.h> 50#include <linux/major.h> 51#include <linux/string.h> 52#include <linux/fcntl.h> 53#include <linux/mm.h> 54#include <linux/kernel.h> 55#include <linux/delay.h> 56#include <linux/init.h> 57#include <linux/ioport.h> 58#include <linux/spinlock.h> 59#ifdef CONFIG_SERIAL_DEC_CONSOLE 60#include <linux/console.h> 61#endif 62 63#include <asm/io.h> 64#include <asm/pgtable.h> 65#include <asm/irq.h> 66#include <asm/system.h> 67#include <asm/bootinfo.h> 68 69#include <asm/dec/interrupts.h> 70#include <asm/dec/ioasic_addrs.h> 71#include <asm/dec/machtype.h> 72#include <asm/dec/serial.h> 73#include <asm/dec/system.h> 74#include <asm/dec/tc.h> 75 76#ifdef CONFIG_KGDB 77#include <asm/kgdb.h> 78#endif 79#ifdef CONFIG_MAGIC_SYSRQ 80#include <linux/sysrq.h> 81#endif 82 83#include "zs.h" 84 85/* 86 * It would be nice to dynamically allocate everything that 87 * depends on NUM_SERIAL, so we could support any number of 88 * Z8530s, but for now... 89 */ 90#define NUM_SERIAL 2 /* Max number of ZS chips supported */ 91#define NUM_CHANNELS (NUM_SERIAL * 2) /* 2 channels per chip */ 92#define CHANNEL_A_NR (zs_parms->channel_a_offset > zs_parms->channel_b_offset) 93 /* Number of channel A in the chip */ 94#define ZS_CHAN_IO_SIZE 8 95#define ZS_CLOCK 7372800 /* Z8530 RTxC input clock rate */ 96 97#define RECOVERY_DELAY udelay(2) 98 99struct zs_parms { 100 unsigned long scc0; 101 unsigned long scc1; 102 int channel_a_offset; 103 int channel_b_offset; 104 int irq0; 105 int irq1; 106 int clock; 107}; 108 109static struct zs_parms *zs_parms; 110 111#ifdef CONFIG_MACH_DECSTATION 112static struct zs_parms ds_parms = { 113 scc0 : IOASIC_SCC0, 114 scc1 : IOASIC_SCC1, 115 channel_a_offset : 1, 116 channel_b_offset : 9, 117 irq0 : -1, 118 irq1 : -1, 119 clock : ZS_CLOCK 120}; 121#endif 122 123#ifdef CONFIG_MACH_DECSTATION 124#define DS_BUS_PRESENT (IOASIC) 125#else 126#define DS_BUS_PRESENT 0 127#endif 128 129#define BUS_PRESENT (DS_BUS_PRESENT) 130 131DEFINE_SPINLOCK(zs_lock); 132 133struct dec_zschannel zs_channels[NUM_CHANNELS]; 134struct dec_serial zs_soft[NUM_CHANNELS]; 135int zs_channels_found; 136struct dec_serial *zs_chain; /* list of all channels */ 137 138struct tty_struct zs_ttys[NUM_CHANNELS]; 139 140#ifdef CONFIG_SERIAL_DEC_CONSOLE 141static struct console sercons; 142#endif 143#if defined(CONFIG_SERIAL_DEC_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) && \ 144 !defined(MODULE) 145static unsigned long break_pressed; /* break, really ... */ 146#endif 147 148static unsigned char zs_init_regs[16] __initdata = { 149 0, /* write 0 */ 150 0, /* write 1 */ 151 0, /* write 2 */ 152 0, /* write 3 */ 153 (X16CLK), /* write 4 */ 154 0, /* write 5 */ 155 0, 0, 0, /* write 6, 7, 8 */ 156 (MIE | DLC | NV), /* write 9 */ 157 (NRZ), /* write 10 */ 158 (TCBR | RCBR), /* write 11 */ 159 0, 0, /* BRG time constant, write 12 + 13 */ 160 (BRSRC | BRENABL), /* write 14 */ 161 0 /* write 15 */ 162}; 163 164static struct tty_driver *serial_driver; 165 166/* serial subtype definitions */ 167#define SERIAL_TYPE_NORMAL 1 168 169/* number of characters left in xmit buffer before we ask for more */ 170#define WAKEUP_CHARS 256 171 172/* 173 * Debugging. 174 */ 175#undef SERIAL_DEBUG_OPEN 176#undef SERIAL_DEBUG_FLOW 177#undef SERIAL_DEBUG_THROTTLE 178#undef SERIAL_PARANOIA_CHECK 179 180#undef ZS_DEBUG_REGS 181 182#ifdef SERIAL_DEBUG_THROTTLE 183#define _tty_name(tty,buf) tty_name(tty,buf) 184#endif 185 186#define RS_STROBE_TIME 10 187#define RS_ISR_PASS_LIMIT 256 188 189static void probe_sccs(void); 190static void change_speed(struct dec_serial *info); 191static void rs_wait_until_sent(struct tty_struct *tty, int timeout); 192 193static inline int serial_paranoia_check(struct dec_serial *info, 194 char *name, const char *routine) 195{ 196#ifdef SERIAL_PARANOIA_CHECK 197 static const char *badmagic = 198 "Warning: bad magic number for serial struct %s in %s\n"; 199 static const char *badinfo = 200 "Warning: null mac_serial for %s in %s\n"; 201 202 if (!info) { 203 printk(badinfo, name, routine); 204 return 1; 205 } 206 if (info->magic != SERIAL_MAGIC) { 207 printk(badmagic, name, routine); 208 return 1; 209 } 210#endif 211 return 0; 212} 213 214/* 215 * This is used to figure out the divisor speeds and the timeouts 216 */ 217static int baud_table[] = { 218 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 219 9600, 19200, 38400, 57600, 115200, 0 }; 220 221/* 222 * Reading and writing Z8530 registers. 223 */ 224static inline unsigned char read_zsreg(struct dec_zschannel *channel, 225 unsigned char reg) 226{ 227 unsigned char retval; 228 229 if (reg != 0) { 230 *channel->control = reg & 0xf; 231 fast_iob(); RECOVERY_DELAY; 232 } 233 retval = *channel->control; 234 RECOVERY_DELAY; 235 return retval; 236} 237 238static inline void write_zsreg(struct dec_zschannel *channel, 239 unsigned char reg, unsigned char value) 240{ 241 if (reg != 0) { 242 *channel->control = reg & 0xf; 243 fast_iob(); RECOVERY_DELAY; 244 } 245 *channel->control = value; 246 fast_iob(); RECOVERY_DELAY; 247 return; 248} 249 250static inline unsigned char read_zsdata(struct dec_zschannel *channel) 251{ 252 unsigned char retval; 253 254 retval = *channel->data; 255 RECOVERY_DELAY; 256 return retval; 257} 258 259static inline void write_zsdata(struct dec_zschannel *channel, 260 unsigned char value) 261{ 262 *channel->data = value; 263 fast_iob(); RECOVERY_DELAY; 264 return; 265} 266 267static inline void load_zsregs(struct dec_zschannel *channel, 268 unsigned char *regs) 269{ 270/* ZS_CLEARERR(channel); 271 ZS_CLEARFIFO(channel); */ 272 /* Load 'em up */ 273 write_zsreg(channel, R3, regs[R3] & ~RxENABLE); 274 write_zsreg(channel, R5, regs[R5] & ~TxENAB); 275 write_zsreg(channel, R4, regs[R4]); 276 write_zsreg(channel, R9, regs[R9]); 277 write_zsreg(channel, R1, regs[R1]); 278 write_zsreg(channel, R2, regs[R2]); 279 write_zsreg(channel, R10, regs[R10]); 280 write_zsreg(channel, R11, regs[R11]); 281 write_zsreg(channel, R12, regs[R12]); 282 write_zsreg(channel, R13, regs[R13]); 283 write_zsreg(channel, R14, regs[R14]); 284 write_zsreg(channel, R15, regs[R15]); 285 write_zsreg(channel, R3, regs[R3]); 286 write_zsreg(channel, R5, regs[R5]); 287 return; 288} 289 290/* Sets or clears DTR/RTS on the requested line */ 291static inline void zs_rtsdtr(struct dec_serial *info, int which, int set) 292{ 293 unsigned long flags; 294 295 spin_lock_irqsave(&zs_lock, flags); 296 if (info->zs_channel != info->zs_chan_a) { 297 if (set) { 298 info->zs_chan_a->curregs[5] |= (which & (RTS | DTR)); 299 } else { 300 info->zs_chan_a->curregs[5] &= ~(which & (RTS | DTR)); 301 } 302 write_zsreg(info->zs_chan_a, 5, info->zs_chan_a->curregs[5]); 303 } 304 spin_unlock_irqrestore(&zs_lock, flags); 305} 306 307/* Utility routines for the Zilog */ 308static inline int get_zsbaud(struct dec_serial *ss) 309{ 310 struct dec_zschannel *channel = ss->zs_channel; 311 int brg; 312 313 /* The baud rate is split up between two 8-bit registers in 314 * what is termed 'BRG time constant' format in my docs for 315 * the chip, it is a function of the clk rate the chip is 316 * receiving which happens to be constant. 317 */ 318 brg = (read_zsreg(channel, 13) << 8); 319 brg |= read_zsreg(channel, 12); 320 return BRG_TO_BPS(brg, (zs_parms->clock/(ss->clk_divisor))); 321} 322 323/* On receive, this clears errors and the receiver interrupts */ 324static inline void rs_recv_clear(struct dec_zschannel *zsc) 325{ 326 write_zsreg(zsc, 0, ERR_RES); 327 write_zsreg(zsc, 0, RES_H_IUS); /* XXX this is unnecessary */ 328} 329 330/* 331 * ---------------------------------------------------------------------- 332 * 333 * Here starts the interrupt handling routines. All of the following 334 * subroutines are declared as inline and are folded into 335 * rs_interrupt(). They were separated out for readability's sake. 336 * 337 * - Ted Ts'o (tytso@mit.edu), 7-Mar-93 338 * ----------------------------------------------------------------------- 339 */ 340 341/* 342 * This routine is used by the interrupt handler to schedule 343 * processing in the software interrupt portion of the driver. 344 */ 345static void rs_sched_event(struct dec_serial *info, int event) 346{ 347 info->event |= 1 << event; 348 tasklet_schedule(&info->tlet); 349} 350 351static void receive_chars(struct dec_serial *info, struct pt_regs *regs) 352{ 353 struct tty_struct *tty = info->tty; 354 unsigned char ch, stat, flag; 355 356 while ((read_zsreg(info->zs_channel, R0) & Rx_CH_AV) != 0) { 357 358 stat = read_zsreg(info->zs_channel, R1); 359 ch = read_zsdata(info->zs_channel); 360 361 if (!tty && (!info->hook || !info->hook->rx_char)) 362 continue; 363 364 flag = TTY_NORMAL; 365 if (info->tty_break) { 366 info->tty_break = 0; 367 flag = TTY_BREAK; 368 if (info->flags & ZILOG_SAK) 369 do_SAK(tty); 370 /* Ignore the null char got when BREAK is removed. */ 371 if (ch == 0) 372 continue; 373 } else { 374 if (stat & Rx_OVR) { 375 flag = TTY_OVERRUN; 376 } else if (stat & FRM_ERR) { 377 flag = TTY_FRAME; 378 } else if (stat & PAR_ERR) { 379 flag = TTY_PARITY; 380 } 381 if (flag != TTY_NORMAL) 382 /* reset the error indication */ 383 write_zsreg(info->zs_channel, R0, ERR_RES); 384 } 385 386#if defined(CONFIG_SERIAL_DEC_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) && \ 387 !defined(MODULE) 388 if (break_pressed && info->line == sercons.index) { 389 /* Ignore the null char got when BREAK is removed. */ 390 if (ch == 0) 391 continue; 392 if (time_before(jiffies, break_pressed + HZ * 5)) { 393 handle_sysrq(ch, regs, NULL); 394 break_pressed = 0; 395 continue; 396 } 397 break_pressed = 0; 398 } 399#endif 400 401 if (info->hook && info->hook->rx_char) { 402 (*info->hook->rx_char)(ch, flag); 403 return; 404 } 405 406 tty_insert_flip_char(tty, ch, flag); 407 } 408 if (tty) 409 tty_flip_buffer_push(tty); 410} 411 412static void transmit_chars(struct dec_serial *info) 413{ 414 if ((read_zsreg(info->zs_channel, R0) & Tx_BUF_EMP) == 0) 415 return; 416 info->tx_active = 0; 417 418 if (info->x_char) { 419 /* Send next char */ 420 write_zsdata(info->zs_channel, info->x_char); 421 info->x_char = 0; 422 info->tx_active = 1; 423 return; 424 } 425 426 if ((info->xmit_cnt <= 0) || (info->tty && info->tty->stopped) 427 || info->tx_stopped) { 428 write_zsreg(info->zs_channel, R0, RES_Tx_P); 429 return; 430 } 431 /* Send char */ 432 write_zsdata(info->zs_channel, info->xmit_buf[info->xmit_tail++]); 433 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); 434 info->xmit_cnt--; 435 info->tx_active = 1; 436 437 if (info->xmit_cnt < WAKEUP_CHARS) 438 rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); 439} 440 441static void status_handle(struct dec_serial *info) 442{ 443 unsigned char stat; 444 445 /* Get status from Read Register 0 */ 446 stat = read_zsreg(info->zs_channel, R0); 447 448 if ((stat & BRK_ABRT) && !(info->read_reg_zero & BRK_ABRT)) { 449#if defined(CONFIG_SERIAL_DEC_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) && \ 450 !defined(MODULE) 451 if (info->line == sercons.index) { 452 if (!break_pressed) 453 break_pressed = jiffies; 454 } else 455#endif 456 info->tty_break = 1; 457 } 458 459 if (info->zs_channel != info->zs_chan_a) { 460 461 /* Check for DCD transitions */ 462 if (info->tty && !C_CLOCAL(info->tty) && 463 ((stat ^ info->read_reg_zero) & DCD) != 0 ) { 464 if (stat & DCD) { 465 wake_up_interruptible(&info->open_wait); 466 } else { 467 tty_hangup(info->tty); 468 } 469 } 470 471 /* Check for CTS transitions */ 472 if (info->tty && C_CRTSCTS(info->tty)) { 473 if ((stat & CTS) != 0) { 474 if (info->tx_stopped) { 475 info->tx_stopped = 0; 476 if (!info->tx_active) 477 transmit_chars(info); 478 } 479 } else { 480 info->tx_stopped = 1; 481 } 482 } 483 484 } 485 486 /* Clear status condition... */ 487 write_zsreg(info->zs_channel, R0, RES_EXT_INT); 488 info->read_reg_zero = stat; 489} 490 491/* 492 * This is the serial driver's generic interrupt routine 493 */ 494static irqreturn_t rs_interrupt(int irq, void *dev_id, struct pt_regs *regs) 495{ 496 struct dec_serial *info = (struct dec_serial *) dev_id; 497 irqreturn_t status = IRQ_NONE; 498 unsigned char zs_intreg; 499 int shift; 500 501 /* NOTE: The read register 3, which holds the irq status, 502 * does so for both channels on each chip. Although 503 * the status value itself must be read from the A 504 * channel and is only valid when read from channel A. 505 * Yes... broken hardware... 506 */ 507#define CHAN_IRQMASK (CHBRxIP | CHBTxIP | CHBEXT) 508 509 if (info->zs_chan_a == info->zs_channel) 510 shift = 3; /* Channel A */ 511 else 512 shift = 0; /* Channel B */ 513 514 for (;;) { 515 zs_intreg = read_zsreg(info->zs_chan_a, R3) >> shift; 516 if ((zs_intreg & CHAN_IRQMASK) == 0) 517 break; 518 519 status = IRQ_HANDLED; 520 521 if (zs_intreg & CHBRxIP) { 522 receive_chars(info, regs); 523 } 524 if (zs_intreg & CHBTxIP) { 525 transmit_chars(info); 526 } 527 if (zs_intreg & CHBEXT) { 528 status_handle(info); 529 } 530 } 531 532 /* Why do we need this ? */ 533 write_zsreg(info->zs_channel, 0, RES_H_IUS); 534 535 return status; 536} 537 538#ifdef ZS_DEBUG_REGS 539void zs_dump (void) { 540 int i, j; 541 for (i = 0; i < zs_channels_found; i++) { 542 struct dec_zschannel *ch = &zs_channels[i]; 543 if ((long)ch->control == UNI_IO_BASE+UNI_SCC1A_CTRL) { 544 for (j = 0; j < 15; j++) { 545 printk("W%d = 0x%x\t", 546 j, (int)ch->curregs[j]); 547 } 548 for (j = 0; j < 15; j++) { 549 printk("R%d = 0x%x\t", 550 j, (int)read_zsreg(ch,j)); 551 } 552 printk("\n\n"); 553 } 554 } 555} 556#endif 557 558/* 559 * ------------------------------------------------------------------- 560 * Here ends the serial interrupt routines. 561 * ------------------------------------------------------------------- 562 */ 563 564/* 565 * ------------------------------------------------------------ 566 * rs_stop() and rs_start() 567 * 568 * This routines are called before setting or resetting tty->stopped. 569 * ------------------------------------------------------------ 570 */ 571static void rs_stop(struct tty_struct *tty) 572{ 573 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 574 unsigned long flags; 575 576 if (serial_paranoia_check(info, tty->name, "rs_stop")) 577 return; 578 579#if 1 580 spin_lock_irqsave(&zs_lock, flags); 581 if (info->zs_channel->curregs[5] & TxENAB) { 582 info->zs_channel->curregs[5] &= ~TxENAB; 583 write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]); 584 } 585 spin_unlock_irqrestore(&zs_lock, flags); 586#endif 587} 588 589static void rs_start(struct tty_struct *tty) 590{ 591 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 592 unsigned long flags; 593 594 if (serial_paranoia_check(info, tty->name, "rs_start")) 595 return; 596 597 spin_lock_irqsave(&zs_lock, flags); 598#if 1 599 if (info->xmit_cnt && info->xmit_buf && !(info->zs_channel->curregs[5] & TxENAB)) { 600 info->zs_channel->curregs[5] |= TxENAB; 601 write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]); 602 } 603#else 604 if (info->xmit_cnt && info->xmit_buf && !info->tx_active) { 605 transmit_chars(info); 606 } 607#endif 608 spin_unlock_irqrestore(&zs_lock, flags); 609} 610 611/* 612 * This routine is used to handle the "bottom half" processing for the 613 * serial driver, known also the "software interrupt" processing. 614 * This processing is done at the kernel interrupt level, after the 615 * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON. This 616 * is where time-consuming activities which can not be done in the 617 * interrupt driver proper are done; the interrupt driver schedules 618 * them using rs_sched_event(), and they get done here. 619 */ 620 621static void do_softint(unsigned long private_) 622{ 623 struct dec_serial *info = (struct dec_serial *) private_; 624 struct tty_struct *tty; 625 626 tty = info->tty; 627 if (!tty) 628 return; 629 630 if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) { 631 tty_wakeup(tty); 632 wake_up_interruptible(&tty->write_wait); 633 } 634} 635 636static int zs_startup(struct dec_serial * info) 637{ 638 unsigned long flags; 639 640 if (info->flags & ZILOG_INITIALIZED) 641 return 0; 642 643 if (!info->xmit_buf) { 644 info->xmit_buf = (unsigned char *) get_zeroed_page(GFP_KERNEL); 645 if (!info->xmit_buf) 646 return -ENOMEM; 647 } 648 649 spin_lock_irqsave(&zs_lock, flags); 650 651#ifdef SERIAL_DEBUG_OPEN 652 printk("starting up ttyS%d (irq %d)...", info->line, info->irq); 653#endif 654 655 /* 656 * Clear the receive FIFO. 657 */ 658 ZS_CLEARFIFO(info->zs_channel); 659 info->xmit_fifo_size = 1; 660 661 /* 662 * Clear the interrupt registers. 663 */ 664 write_zsreg(info->zs_channel, R0, ERR_RES); 665 write_zsreg(info->zs_channel, R0, RES_H_IUS); 666 667 /* 668 * Set the speed of the serial port 669 */ 670 change_speed(info); 671 672 /* 673 * Turn on RTS and DTR. 674 */ 675 zs_rtsdtr(info, RTS | DTR, 1); 676 677 /* 678 * Finally, enable sequencing and interrupts 679 */ 680 info->zs_channel->curregs[R1] &= ~RxINT_MASK; 681 info->zs_channel->curregs[R1] |= (RxINT_ALL | TxINT_ENAB | 682 EXT_INT_ENAB); 683 info->zs_channel->curregs[R3] |= RxENABLE; 684 info->zs_channel->curregs[R5] |= TxENAB; 685 info->zs_channel->curregs[R15] |= (DCDIE | CTSIE | TxUIE | BRKIE); 686 write_zsreg(info->zs_channel, R1, info->zs_channel->curregs[R1]); 687 write_zsreg(info->zs_channel, R3, info->zs_channel->curregs[R3]); 688 write_zsreg(info->zs_channel, R5, info->zs_channel->curregs[R5]); 689 write_zsreg(info->zs_channel, R15, info->zs_channel->curregs[R15]); 690 691 /* 692 * And clear the interrupt registers again for luck. 693 */ 694 write_zsreg(info->zs_channel, R0, ERR_RES); 695 write_zsreg(info->zs_channel, R0, RES_H_IUS); 696 697 /* Save the current value of RR0 */ 698 info->read_reg_zero = read_zsreg(info->zs_channel, R0); 699 700 if (info->tty) 701 clear_bit(TTY_IO_ERROR, &info->tty->flags); 702 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; 703 704 info->flags |= ZILOG_INITIALIZED; 705 spin_unlock_irqrestore(&zs_lock, flags); 706 return 0; 707} 708 709/* 710 * This routine will shutdown a serial port; interrupts are disabled, and 711 * DTR is dropped if the hangup on close termio flag is on. 712 */ 713static void shutdown(struct dec_serial * info) 714{ 715 unsigned long flags; 716 717 if (!(info->flags & ZILOG_INITIALIZED)) 718 return; 719 720#ifdef SERIAL_DEBUG_OPEN 721 printk("Shutting down serial port %d (irq %d)....", info->line, 722 info->irq); 723#endif 724 725 spin_lock_irqsave(&zs_lock, flags); 726 727 if (info->xmit_buf) { 728 free_page((unsigned long) info->xmit_buf); 729 info->xmit_buf = 0; 730 } 731 732 info->zs_channel->curregs[1] = 0; 733 write_zsreg(info->zs_channel, 1, info->zs_channel->curregs[1]); /* no interrupts */ 734 735 info->zs_channel->curregs[3] &= ~RxENABLE; 736 write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]); 737 738 info->zs_channel->curregs[5] &= ~TxENAB; 739 write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]); 740 if (!info->tty || C_HUPCL(info->tty)) { 741 zs_rtsdtr(info, RTS | DTR, 0); 742 } 743 744 if (info->tty) 745 set_bit(TTY_IO_ERROR, &info->tty->flags); 746 747 info->flags &= ~ZILOG_INITIALIZED; 748 spin_unlock_irqrestore(&zs_lock, flags); 749} 750 751/* 752 * This routine is called to set the UART divisor registers to match 753 * the specified baud rate for a serial port. 754 */ 755static void change_speed(struct dec_serial *info) 756{ 757 unsigned cflag; 758 int i; 759 int brg, bits; 760 unsigned long flags; 761 762 if (!info->hook) { 763 if (!info->tty || !info->tty->termios) 764 return; 765 cflag = info->tty->termios->c_cflag; 766 if (!info->port) 767 return; 768 } else { 769 cflag = info->hook->cflags; 770 } 771 772 i = cflag & CBAUD; 773 if (i & CBAUDEX) { 774 i &= ~CBAUDEX; 775 if (i < 1 || i > 2) { 776 if (!info->hook) 777 info->tty->termios->c_cflag &= ~CBAUDEX; 778 else 779 info->hook->cflags &= ~CBAUDEX; 780 } else 781 i += 15; 782 } 783 784 spin_lock_irqsave(&zs_lock, flags); 785 info->zs_baud = baud_table[i]; 786 if (info->zs_baud) { 787 brg = BPS_TO_BRG(info->zs_baud, zs_parms->clock/info->clk_divisor); 788 info->zs_channel->curregs[12] = (brg & 255); 789 info->zs_channel->curregs[13] = ((brg >> 8) & 255); 790 zs_rtsdtr(info, DTR, 1); 791 } else { 792 zs_rtsdtr(info, RTS | DTR, 0); 793 return; 794 } 795 796 /* byte size and parity */ 797 info->zs_channel->curregs[3] &= ~RxNBITS_MASK; 798 info->zs_channel->curregs[5] &= ~TxNBITS_MASK; 799 switch (cflag & CSIZE) { 800 case CS5: 801 bits = 7; 802 info->zs_channel->curregs[3] |= Rx5; 803 info->zs_channel->curregs[5] |= Tx5; 804 break; 805 case CS6: 806 bits = 8; 807 info->zs_channel->curregs[3] |= Rx6; 808 info->zs_channel->curregs[5] |= Tx6; 809 break; 810 case CS7: 811 bits = 9; 812 info->zs_channel->curregs[3] |= Rx7; 813 info->zs_channel->curregs[5] |= Tx7; 814 break; 815 case CS8: 816 default: /* defaults to 8 bits */ 817 bits = 10; 818 info->zs_channel->curregs[3] |= Rx8; 819 info->zs_channel->curregs[5] |= Tx8; 820 break; 821 } 822 823 info->timeout = ((info->xmit_fifo_size*HZ*bits) / info->zs_baud); 824 info->timeout += HZ/50; /* Add .02 seconds of slop */ 825 826 info->zs_channel->curregs[4] &= ~(SB_MASK | PAR_ENA | PAR_EVEN); 827 if (cflag & CSTOPB) { 828 info->zs_channel->curregs[4] |= SB2; 829 } else { 830 info->zs_channel->curregs[4] |= SB1; 831 } 832 if (cflag & PARENB) { 833 info->zs_channel->curregs[4] |= PAR_ENA; 834 } 835 if (!(cflag & PARODD)) { 836 info->zs_channel->curregs[4] |= PAR_EVEN; 837 } 838 839 if (!(cflag & CLOCAL)) { 840 if (!(info->zs_channel->curregs[15] & DCDIE)) 841 info->read_reg_zero = read_zsreg(info->zs_channel, 0); 842 info->zs_channel->curregs[15] |= DCDIE; 843 } else 844 info->zs_channel->curregs[15] &= ~DCDIE; 845 if (cflag & CRTSCTS) { 846 info->zs_channel->curregs[15] |= CTSIE; 847 if ((read_zsreg(info->zs_channel, 0) & CTS) == 0) 848 info->tx_stopped = 1; 849 } else { 850 info->zs_channel->curregs[15] &= ~CTSIE; 851 info->tx_stopped = 0; 852 } 853 854 /* Load up the new values */ 855 load_zsregs(info->zs_channel, info->zs_channel->curregs); 856 857 spin_unlock_irqrestore(&zs_lock, flags); 858} 859 860static void rs_flush_chars(struct tty_struct *tty) 861{ 862 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 863 unsigned long flags; 864 865 if (serial_paranoia_check(info, tty->name, "rs_flush_chars")) 866 return; 867 868 if (info->xmit_cnt <= 0 || tty->stopped || info->tx_stopped || 869 !info->xmit_buf) 870 return; 871 872 /* Enable transmitter */ 873 spin_lock_irqsave(&zs_lock, flags); 874 transmit_chars(info); 875 spin_unlock_irqrestore(&zs_lock, flags); 876} 877 878static int rs_write(struct tty_struct * tty, 879 const unsigned char *buf, int count) 880{ 881 int c, total = 0; 882 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 883 unsigned long flags; 884 885 if (serial_paranoia_check(info, tty->name, "rs_write")) 886 return 0; 887 888 if (!tty || !info->xmit_buf) 889 return 0; 890 891 while (1) { 892 spin_lock_irqsave(&zs_lock, flags); 893 c = min(count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, 894 SERIAL_XMIT_SIZE - info->xmit_head)); 895 if (c <= 0) 896 break; 897 898 memcpy(info->xmit_buf + info->xmit_head, buf, c); 899 info->xmit_head = (info->xmit_head + c) & (SERIAL_XMIT_SIZE-1); 900 info->xmit_cnt += c; 901 spin_unlock_irqrestore(&zs_lock, flags); 902 buf += c; 903 count -= c; 904 total += c; 905 } 906 907 if (info->xmit_cnt && !tty->stopped && !info->tx_stopped 908 && !info->tx_active) 909 transmit_chars(info); 910 spin_unlock_irqrestore(&zs_lock, flags); 911 return total; 912} 913 914static int rs_write_room(struct tty_struct *tty) 915{ 916 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 917 int ret; 918 919 if (serial_paranoia_check(info, tty->name, "rs_write_room")) 920 return 0; 921 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; 922 if (ret < 0) 923 ret = 0; 924 return ret; 925} 926 927static int rs_chars_in_buffer(struct tty_struct *tty) 928{ 929 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 930 931 if (serial_paranoia_check(info, tty->name, "rs_chars_in_buffer")) 932 return 0; 933 return info->xmit_cnt; 934} 935 936static void rs_flush_buffer(struct tty_struct *tty) 937{ 938 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 939 940 if (serial_paranoia_check(info, tty->name, "rs_flush_buffer")) 941 return; 942 spin_lock_irq(&zs_lock); 943 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; 944 spin_unlock_irq(&zs_lock); 945 tty_wakeup(tty); 946} 947 948/* 949 * ------------------------------------------------------------ 950 * rs_throttle() 951 * 952 * This routine is called by the upper-layer tty layer to signal that 953 * incoming characters should be throttled. 954 * ------------------------------------------------------------ 955 */ 956static void rs_throttle(struct tty_struct * tty) 957{ 958 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 959 unsigned long flags; 960 961#ifdef SERIAL_DEBUG_THROTTLE 962 char buf[64]; 963 964 printk("throttle %s: %d....\n", _tty_name(tty, buf), 965 tty->ldisc.chars_in_buffer(tty)); 966#endif 967 968 if (serial_paranoia_check(info, tty->name, "rs_throttle")) 969 return; 970 971 if (I_IXOFF(tty)) { 972 spin_lock_irqsave(&zs_lock, flags); 973 info->x_char = STOP_CHAR(tty); 974 if (!info->tx_active) 975 transmit_chars(info); 976 spin_unlock_irqrestore(&zs_lock, flags); 977 } 978 979 if (C_CRTSCTS(tty)) { 980 zs_rtsdtr(info, RTS, 0); 981 } 982} 983 984static void rs_unthrottle(struct tty_struct * tty) 985{ 986 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 987 unsigned long flags; 988 989#ifdef SERIAL_DEBUG_THROTTLE 990 char buf[64]; 991 992 printk("unthrottle %s: %d....\n", _tty_name(tty, buf), 993 tty->ldisc.chars_in_buffer(tty)); 994#endif 995 996 if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) 997 return; 998 999 if (I_IXOFF(tty)) { 1000 spin_lock_irqsave(&zs_lock, flags); 1001 if (info->x_char) 1002 info->x_char = 0; 1003 else { 1004 info->x_char = START_CHAR(tty); 1005 if (!info->tx_active) 1006 transmit_chars(info); 1007 } 1008 spin_unlock_irqrestore(&zs_lock, flags); 1009 } 1010 1011 if (C_CRTSCTS(tty)) { 1012 zs_rtsdtr(info, RTS, 1); 1013 } 1014} 1015 1016/* 1017 * ------------------------------------------------------------ 1018 * rs_ioctl() and friends 1019 * ------------------------------------------------------------ 1020 */ 1021 1022static int get_serial_info(struct dec_serial * info, 1023 struct serial_struct * retinfo) 1024{ 1025 struct serial_struct tmp; 1026 1027 if (!retinfo) 1028 return -EFAULT; 1029 memset(&tmp, 0, sizeof(tmp)); 1030 tmp.type = info->type; 1031 tmp.line = info->line; 1032 tmp.port = info->port; 1033 tmp.irq = info->irq; 1034 tmp.flags = info->flags; 1035 tmp.baud_base = info->baud_base; 1036 tmp.close_delay = info->close_delay; 1037 tmp.closing_wait = info->closing_wait; 1038 tmp.custom_divisor = info->custom_divisor; 1039 return copy_to_user(retinfo,&tmp,sizeof(*retinfo)) ? -EFAULT : 0; 1040} 1041 1042static int set_serial_info(struct dec_serial * info, 1043 struct serial_struct * new_info) 1044{ 1045 struct serial_struct new_serial; 1046 struct dec_serial old_info; 1047 int retval = 0; 1048 1049 if (!new_info) 1050 return -EFAULT; 1051 copy_from_user(&new_serial,new_info,sizeof(new_serial)); 1052 old_info = *info; 1053 1054 if (!capable(CAP_SYS_ADMIN)) { 1055 if ((new_serial.baud_base != info->baud_base) || 1056 (new_serial.type != info->type) || 1057 (new_serial.close_delay != info->close_delay) || 1058 ((new_serial.flags & ~ZILOG_USR_MASK) != 1059 (info->flags & ~ZILOG_USR_MASK))) 1060 return -EPERM; 1061 info->flags = ((info->flags & ~ZILOG_USR_MASK) | 1062 (new_serial.flags & ZILOG_USR_MASK)); 1063 info->custom_divisor = new_serial.custom_divisor; 1064 goto check_and_exit; 1065 } 1066 1067 if (info->count > 1) 1068 return -EBUSY; 1069 1070 /* 1071 * OK, past this point, all the error checking has been done. 1072 * At this point, we start making changes..... 1073 */ 1074 1075 info->baud_base = new_serial.baud_base; 1076 info->flags = ((info->flags & ~ZILOG_FLAGS) | 1077 (new_serial.flags & ZILOG_FLAGS)); 1078 info->type = new_serial.type; 1079 info->close_delay = new_serial.close_delay; 1080 info->closing_wait = new_serial.closing_wait; 1081 1082check_and_exit: 1083 retval = zs_startup(info); 1084 return retval; 1085} 1086 1087/* 1088 * get_lsr_info - get line status register info 1089 * 1090 * Purpose: Let user call ioctl() to get info when the UART physically 1091 * is emptied. On bus types like RS485, the transmitter must 1092 * release the bus after transmitting. This must be done when 1093 * the transmit shift register is empty, not be done when the 1094 * transmit holding register is empty. This functionality 1095 * allows an RS485 driver to be written in user space. 1096 */ 1097static int get_lsr_info(struct dec_serial * info, unsigned int *value) 1098{ 1099 unsigned char status; 1100 1101 spin_lock(&zs_lock); 1102 status = read_zsreg(info->zs_channel, 0); 1103 spin_unlock_irq(&zs_lock); 1104 put_user(status,value); 1105 return 0; 1106} 1107 1108static int rs_tiocmget(struct tty_struct *tty, struct file *file) 1109{ 1110 struct dec_serial * info = (struct dec_serial *)tty->driver_data; 1111 unsigned char control, status_a, status_b; 1112 unsigned int result; 1113 1114 if (info->hook) 1115 return -ENODEV; 1116 1117 if (serial_paranoia_check(info, tty->name, __FUNCTION__)) 1118 return -ENODEV; 1119 1120 if (tty->flags & (1 << TTY_IO_ERROR)) 1121 return -EIO; 1122 1123 if (info->zs_channel == info->zs_chan_a) 1124 result = 0; 1125 else { 1126 spin_lock(&zs_lock); 1127 control = info->zs_chan_a->curregs[5]; 1128 status_a = read_zsreg(info->zs_chan_a, 0); 1129 status_b = read_zsreg(info->zs_channel, 0); 1130 spin_unlock_irq(&zs_lock); 1131 result = ((control & RTS) ? TIOCM_RTS: 0) 1132 | ((control & DTR) ? TIOCM_DTR: 0) 1133 | ((status_b & DCD) ? TIOCM_CAR: 0) 1134 | ((status_a & DCD) ? TIOCM_RNG: 0) 1135 | ((status_a & SYNC_HUNT) ? TIOCM_DSR: 0) 1136 | ((status_b & CTS) ? TIOCM_CTS: 0); 1137 } 1138 return result; 1139} 1140 1141static int rs_tiocmset(struct tty_struct *tty, struct file *file, 1142 unsigned int set, unsigned int clear) 1143{ 1144 struct dec_serial * info = (struct dec_serial *)tty->driver_data; 1145 1146 if (info->hook) 1147 return -ENODEV; 1148 1149 if (serial_paranoia_check(info, tty->name, __FUNCTION__)) 1150 return -ENODEV; 1151 1152 if (tty->flags & (1 << TTY_IO_ERROR)) 1153 return -EIO; 1154 1155 if (info->zs_channel == info->zs_chan_a) 1156 return 0; 1157 1158 spin_lock(&zs_lock); 1159 if (set & TIOCM_RTS) 1160 info->zs_chan_a->curregs[5] |= RTS; 1161 if (set & TIOCM_DTR) 1162 info->zs_chan_a->curregs[5] |= DTR; 1163 if (clear & TIOCM_RTS) 1164 info->zs_chan_a->curregs[5] &= ~RTS; 1165 if (clear & TIOCM_DTR) 1166 info->zs_chan_a->curregs[5] &= ~DTR; 1167 write_zsreg(info->zs_chan_a, 5, info->zs_chan_a->curregs[5]); 1168 spin_unlock_irq(&zs_lock); 1169 return 0; 1170} 1171 1172/* 1173 * rs_break - turn transmit break condition on/off 1174 */ 1175static void rs_break(struct tty_struct *tty, int break_state) 1176{ 1177 struct dec_serial *info = (struct dec_serial *) tty->driver_data; 1178 unsigned long flags; 1179 1180 if (serial_paranoia_check(info, tty->name, "rs_break")) 1181 return; 1182 if (!info->port) 1183 return; 1184 1185 spin_lock_irqsave(&zs_lock, flags); 1186 if (break_state == -1) 1187 info->zs_channel->curregs[5] |= SND_BRK; 1188 else 1189 info->zs_channel->curregs[5] &= ~SND_BRK; 1190 write_zsreg(info->zs_channel, 5, info->zs_channel->curregs[5]); 1191 spin_unlock_irqrestore(&zs_lock, flags); 1192} 1193 1194static int rs_ioctl(struct tty_struct *tty, struct file * file, 1195 unsigned int cmd, unsigned long arg) 1196{ 1197 struct dec_serial * info = (struct dec_serial *)tty->driver_data; 1198 1199 if (info->hook) 1200 return -ENODEV; 1201 1202 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) 1203 return -ENODEV; 1204 1205 if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && 1206 (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) && 1207 (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) { 1208 if (tty->flags & (1 << TTY_IO_ERROR)) 1209 return -EIO; 1210 } 1211 1212 switch (cmd) { 1213 case TIOCGSERIAL: 1214 if (!access_ok(VERIFY_WRITE, (void *)arg, 1215 sizeof(struct serial_struct))) 1216 return -EFAULT; 1217 return get_serial_info(info, (struct serial_struct *)arg); 1218 1219 case TIOCSSERIAL: 1220 return set_serial_info(info, (struct serial_struct *)arg); 1221 1222 case TIOCSERGETLSR: /* Get line status register */ 1223 if (!access_ok(VERIFY_WRITE, (void *)arg, 1224 sizeof(unsigned int))) 1225 return -EFAULT; 1226 return get_lsr_info(info, (unsigned int *)arg); 1227 1228 case TIOCSERGSTRUCT: 1229 if (!access_ok(VERIFY_WRITE, (void *)arg, 1230 sizeof(struct dec_serial))) 1231 return -EFAULT; 1232 copy_from_user((struct dec_serial *)arg, info, 1233 sizeof(struct dec_serial)); 1234 return 0; 1235 1236 default: 1237 return -ENOIOCTLCMD; 1238 } 1239 return 0; 1240} 1241 1242static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios) 1243{ 1244 struct dec_serial *info = (struct dec_serial *)tty->driver_data; 1245 int was_stopped; 1246 1247 if (tty->termios->c_cflag == old_termios->c_cflag) 1248 return; 1249 was_stopped = info->tx_stopped; 1250 1251 change_speed(info); 1252 1253 if (was_stopped && !info->tx_stopped) 1254 rs_start(tty); 1255} 1256 1257/* 1258 * ------------------------------------------------------------ 1259 * rs_close() 1260 * 1261 * This routine is called when the serial port gets closed. 1262 * Wait for the last remaining data to be sent. 1263 * ------------------------------------------------------------ 1264 */ 1265static void rs_close(struct tty_struct *tty, struct file * filp) 1266{ 1267 struct dec_serial * info = (struct dec_serial *)tty->driver_data; 1268 unsigned long flags; 1269 1270 if (!info || serial_paranoia_check(info, tty->name, "rs_close")) 1271 return; 1272 1273 spin_lock_irqsave(&zs_lock, flags); 1274 1275 if (tty_hung_up_p(filp)) { 1276 spin_unlock_irqrestore(&zs_lock, flags); 1277 return; 1278 } 1279 1280#ifdef SERIAL_DEBUG_OPEN 1281 printk("rs_close ttyS%d, count = %d\n", info->line, info->count); 1282#endif 1283 if ((tty->count == 1) && (info->count != 1)) { 1284 /* 1285 * Uh, oh. tty->count is 1, which means that the tty 1286 * structure will be freed. Info->count should always 1287 * be one in these conditions. If it's greater than 1288 * one, we've got real problems, since it means the 1289 * serial port won't be shutdown. 1290 */ 1291 printk("rs_close: bad serial port count; tty->count is 1, " 1292 "info->count is %d\n", info->count); 1293 info->count = 1; 1294 } 1295 if (--info->count < 0) { 1296 printk("rs_close: bad serial port count for ttyS%d: %d\n", 1297 info->line, info->count); 1298 info->count = 0; 1299 } 1300 if (info->count) { 1301 spin_unlock_irqrestore(&zs_lock, flags); 1302 return; 1303 } 1304 info->flags |= ZILOG_CLOSING; 1305 /* 1306 * Now we wait for the transmit buffer to clear; and we notify 1307 * the line discipline to only process XON/XOFF characters. 1308 */ 1309 tty->closing = 1; 1310 if (info->closing_wait != ZILOG_CLOSING_WAIT_NONE) 1311 tty_wait_until_sent(tty, info->closing_wait); 1312 /* 1313 * At this point we stop accepting input. To do this, we 1314 * disable the receiver and receive interrupts. 1315 */ 1316 info->zs_channel->curregs[3] &= ~RxENABLE; 1317 write_zsreg(info->zs_channel, 3, info->zs_channel->curregs[3]); 1318 info->zs_channel->curregs[1] = 0; /* disable any rx ints */ 1319 write_zsreg(info->zs_channel, 1, info->zs_channel->curregs[1]); 1320 ZS_CLEARFIFO(info->zs_channel); 1321 if (info->flags & ZILOG_INITIALIZED) { 1322 /* 1323 * Before we drop DTR, make sure the SCC transmitter 1324 * has completely drained. 1325 */ 1326 rs_wait_until_sent(tty, info->timeout); 1327 } 1328 1329 shutdown(info); 1330 if (tty->driver->flush_buffer) 1331 tty->driver->flush_buffer(tty); 1332 tty_ldisc_flush(tty); 1333 tty->closing = 0; 1334 info->event = 0; 1335 info->tty = 0; 1336 if (info->blocked_open) { 1337 if (info->close_delay) { 1338 msleep_interruptible(jiffies_to_msecs(info->close_delay)); 1339 } 1340 wake_up_interruptible(&info->open_wait); 1341 } 1342 info->flags &= ~(ZILOG_NORMAL_ACTIVE|ZILOG_CLOSING); 1343 wake_up_interruptible(&info->close_wait); 1344 spin_unlock_irqrestore(&zs_lock, flags); 1345} 1346 1347/* 1348 * rs_wait_until_sent() --- wait until the transmitter is empty 1349 */ 1350static void rs_wait_until_sent(struct tty_struct *tty, int timeout) 1351{ 1352 struct dec_serial *info = (struct dec_serial *) tty->driver_data; 1353 unsigned long orig_jiffies; 1354 int char_time; 1355 1356 if (serial_paranoia_check(info, tty->name, "rs_wait_until_sent")) 1357 return; 1358 1359 orig_jiffies = jiffies; 1360 /* 1361 * Set the check interval to be 1/5 of the estimated time to 1362 * send a single character, and make it at least 1. The check 1363 * interval should also be less than the timeout. 1364 */ 1365 char_time = (info->timeout - HZ/50) / info->xmit_fifo_size; 1366 char_time = char_time / 5; 1367 if (char_time == 0) 1368 char_time = 1; 1369 if (timeout) 1370 char_time = min(char_time, timeout); 1371 while ((read_zsreg(info->zs_channel, 1) & Tx_BUF_EMP) == 0) { 1372 msleep_interruptible(jiffies_to_msecs(char_time)); 1373 if (signal_pending(current)) 1374 break; 1375 if (timeout && time_after(jiffies, orig_jiffies + timeout)) 1376 break; 1377 } 1378 current->state = TASK_RUNNING; 1379} 1380 1381/* 1382 * rs_hangup() --- called by tty_hangup() when a hangup is signaled. 1383 */ 1384static void rs_hangup(struct tty_struct *tty) 1385{ 1386 struct dec_serial * info = (struct dec_serial *)tty->driver_data; 1387 1388 if (serial_paranoia_check(info, tty->name, "rs_hangup")) 1389 return; 1390 1391 rs_flush_buffer(tty); 1392 shutdown(info); 1393 info->event = 0; 1394 info->count = 0; 1395 info->flags &= ~ZILOG_NORMAL_ACTIVE; 1396 info->tty = 0; 1397 wake_up_interruptible(&info->open_wait); 1398} 1399 1400/* 1401 * ------------------------------------------------------------ 1402 * rs_open() and friends 1403 * ------------------------------------------------------------ 1404 */ 1405static int block_til_ready(struct tty_struct *tty, struct file * filp, 1406 struct dec_serial *info) 1407{ 1408 DECLARE_WAITQUEUE(wait, current); 1409 int retval; 1410 int do_clocal = 0; 1411 1412 /* 1413 * If the device is in the middle of being closed, then block 1414 * until it's done, and then try again. 1415 */ 1416 if (info->flags & ZILOG_CLOSING) { 1417 interruptible_sleep_on(&info->close_wait); 1418#ifdef SERIAL_DO_RESTART 1419 return ((info->flags & ZILOG_HUP_NOTIFY) ? 1420 -EAGAIN : -ERESTARTSYS); 1421#else 1422 return -EAGAIN; 1423#endif 1424 } 1425 1426 /* 1427 * If non-blocking mode is set, or the port is not enabled, 1428 * then make the check up front and then exit. 1429 */ 1430 if ((filp->f_flags & O_NONBLOCK) || 1431 (tty->flags & (1 << TTY_IO_ERROR))) { 1432 info->flags |= ZILOG_NORMAL_ACTIVE; 1433 return 0; 1434 } 1435 1436 if (tty->termios->c_cflag & CLOCAL) 1437 do_clocal = 1; 1438 1439 /* 1440 * Block waiting for the carrier detect and the line to become 1441 * free (i.e., not in use by the callout). While we are in 1442 * this loop, info->count is dropped by one, so that 1443 * rs_close() knows when to free things. We restore it upon 1444 * exit, either normal or abnormal. 1445 */ 1446 retval = 0; 1447 add_wait_queue(&info->open_wait, &wait); 1448#ifdef SERIAL_DEBUG_OPEN 1449 printk("block_til_ready before block: ttyS%d, count = %d\n", 1450 info->line, info->count); 1451#endif 1452 spin_lock(&zs_lock); 1453 if (!tty_hung_up_p(filp)) 1454 info->count--; 1455 spin_unlock_irq(&zs_lock); 1456 info->blocked_open++; 1457 while (1) { 1458 spin_lock(&zs_lock); 1459 if (tty->termios->c_cflag & CBAUD) 1460 zs_rtsdtr(info, RTS | DTR, 1); 1461 spin_unlock_irq(&zs_lock); 1462 set_current_state(TASK_INTERRUPTIBLE); 1463 if (tty_hung_up_p(filp) || 1464 !(info->flags & ZILOG_INITIALIZED)) { 1465#ifdef SERIAL_DO_RESTART 1466 if (info->flags & ZILOG_HUP_NOTIFY) 1467 retval = -EAGAIN; 1468 else 1469 retval = -ERESTARTSYS; 1470#else 1471 retval = -EAGAIN; 1472#endif 1473 break; 1474 } 1475 if (!(info->flags & ZILOG_CLOSING) && 1476 (do_clocal || (read_zsreg(info->zs_channel, 0) & DCD))) 1477 break; 1478 if (signal_pending(current)) { 1479 retval = -ERESTARTSYS; 1480 break; 1481 } 1482#ifdef SERIAL_DEBUG_OPEN 1483 printk("block_til_ready blocking: ttyS%d, count = %d\n", 1484 info->line, info->count); 1485#endif 1486 schedule(); 1487 } 1488 current->state = TASK_RUNNING; 1489 remove_wait_queue(&info->open_wait, &wait); 1490 if (!tty_hung_up_p(filp)) 1491 info->count++; 1492 info->blocked_open--; 1493#ifdef SERIAL_DEBUG_OPEN 1494 printk("block_til_ready after blocking: ttyS%d, count = %d\n", 1495 info->line, info->count); 1496#endif 1497 if (retval) 1498 return retval; 1499 info->flags |= ZILOG_NORMAL_ACTIVE; 1500 return 0; 1501} 1502 1503/* 1504 * This routine is called whenever a serial port is opened. It 1505 * enables interrupts for a serial port, linking in its ZILOG structure into 1506 * the IRQ chain. It also performs the serial-specific 1507 * initialization for the tty structure. 1508 */ 1509static int rs_open(struct tty_struct *tty, struct file * filp) 1510{ 1511 struct dec_serial *info; 1512 int retval, line; 1513 1514 line = tty->index; 1515 if ((line < 0) || (line >= zs_channels_found)) 1516 return -ENODEV; 1517 info = zs_soft + line; 1518 1519 if (info->hook) 1520 return -ENODEV; 1521 1522 if (serial_paranoia_check(info, tty->name, "rs_open")) 1523 return -ENODEV; 1524#ifdef SERIAL_DEBUG_OPEN 1525 printk("rs_open %s, count = %d\n", tty->name, info->count); 1526#endif 1527 1528 info->count++; 1529 tty->driver_data = info; 1530 info->tty = tty; 1531 1532 /* 1533 * If the port is the middle of closing, bail out now 1534 */ 1535 if (tty_hung_up_p(filp) || 1536 (info->flags & ZILOG_CLOSING)) { 1537 if (info->flags & ZILOG_CLOSING) 1538 interruptible_sleep_on(&info->close_wait); 1539#ifdef SERIAL_DO_RESTART 1540 return ((info->flags & ZILOG_HUP_NOTIFY) ? 1541 -EAGAIN : -ERESTARTSYS); 1542#else 1543 return -EAGAIN; 1544#endif 1545 } 1546 1547 /* 1548 * Start up serial port 1549 */ 1550 retval = zs_startup(info); 1551 if (retval) 1552 return retval; 1553 1554 retval = block_til_ready(tty, filp, info); 1555 if (retval) { 1556#ifdef SERIAL_DEBUG_OPEN 1557 printk("rs_open returning after block_til_ready with %d\n", 1558 retval); 1559#endif 1560 return retval; 1561 } 1562 1563#ifdef CONFIG_SERIAL_DEC_CONSOLE 1564 if (sercons.cflag && sercons.index == line) { 1565 tty->termios->c_cflag = sercons.cflag; 1566 sercons.cflag = 0; 1567 change_speed(info); 1568 } 1569#endif 1570 1571#ifdef SERIAL_DEBUG_OPEN 1572 printk("rs_open %s successful...", tty->name); 1573#endif 1574/* tty->low_latency = 1; */ 1575 return 0; 1576} 1577 1578/* Finally, routines used to initialize the serial driver. */ 1579 1580static void __init show_serial_version(void) 1581{ 1582 printk("DECstation Z8530 serial driver version 0.09\n"); 1583} 1584 1585/* Initialize Z8530s zs_channels 1586 */ 1587 1588static void __init probe_sccs(void) 1589{ 1590 struct dec_serial **pp; 1591 int i, n, n_chips = 0, n_channels, chip, channel; 1592 unsigned long flags; 1593 1594 /* 1595 * did we get here by accident? 1596 */ 1597 if(!BUS_PRESENT) { 1598 printk("Not on JUNKIO machine, skipping probe_sccs\n"); 1599 return; 1600 } 1601 1602 switch(mips_machtype) { 1603#ifdef CONFIG_MACH_DECSTATION 1604 case MACH_DS5000_2X0: 1605 case MACH_DS5900: 1606 n_chips = 2; 1607 zs_parms = &ds_parms; 1608 zs_parms->irq0 = dec_interrupt[DEC_IRQ_SCC0]; 1609 zs_parms->irq1 = dec_interrupt[DEC_IRQ_SCC1]; 1610 break; 1611 case MACH_DS5000_1XX: 1612 n_chips = 2; 1613 zs_parms = &ds_parms; 1614 zs_parms->irq0 = dec_interrupt[DEC_IRQ_SCC0]; 1615 zs_parms->irq1 = dec_interrupt[DEC_IRQ_SCC1]; 1616 break; 1617 case MACH_DS5000_XX: 1618 n_chips = 1; 1619 zs_parms = &ds_parms; 1620 zs_parms->irq0 = dec_interrupt[DEC_IRQ_SCC0]; 1621 break; 1622#endif 1623 default: 1624 panic("zs: unsupported bus"); 1625 } 1626 if (!zs_parms) 1627 panic("zs: uninitialized parms"); 1628 1629 pp = &zs_chain; 1630 1631 n_channels = 0; 1632 1633 for (chip = 0; chip < n_chips; chip++) { 1634 for (channel = 0; channel <= 1; channel++) { 1635 /* 1636 * The sccs reside on the high byte of the 16 bit IOBUS 1637 */ 1638 zs_channels[n_channels].control = 1639 (volatile void *)CKSEG1ADDR(dec_kn_slot_base + 1640 (0 == chip ? zs_parms->scc0 : zs_parms->scc1) + 1641 (0 == channel ? zs_parms->channel_a_offset : 1642 zs_parms->channel_b_offset)); 1643 zs_channels[n_channels].data = 1644 zs_channels[n_channels].control + 4; 1645 1646#ifndef CONFIG_SERIAL_DEC_CONSOLE 1647 /* 1648 * We're called early and memory managment isn't up, yet. 1649 * Thus request_region would fail. 1650 */ 1651 if (!request_region((unsigned long) 1652 zs_channels[n_channels].control, 1653 ZS_CHAN_IO_SIZE, "SCC")) 1654 panic("SCC I/O region is not free"); 1655#endif 1656 zs_soft[n_channels].zs_channel = &zs_channels[n_channels]; 1657 /* HACK alert! */ 1658 if (!(chip & 1)) 1659 zs_soft[n_channels].irq = zs_parms->irq0; 1660 else 1661 zs_soft[n_channels].irq = zs_parms->irq1; 1662 1663 /* 1664 * Identification of channel A. Location of channel A 1665 * inside chip depends on mapping of internal address 1666 * the chip decodes channels by. 1667 * CHANNEL_A_NR returns either 0 (in case of 1668 * DECstations) or 1 (in case of Baget). 1669 */ 1670 if (CHANNEL_A_NR == channel) 1671 zs_soft[n_channels].zs_chan_a = 1672 &zs_channels[n_channels+1-2*CHANNEL_A_NR]; 1673 else 1674 zs_soft[n_channels].zs_chan_a = 1675 &zs_channels[n_channels]; 1676 1677 *pp = &zs_soft[n_channels]; 1678 pp = &zs_soft[n_channels].zs_next; 1679 n_channels++; 1680 } 1681 } 1682 1683 *pp = 0; 1684 zs_channels_found = n_channels; 1685 1686 for (n = 0; n < zs_channels_found; n++) { 1687 for (i = 0; i < 16; i++) { 1688 zs_soft[n].zs_channel->curregs[i] = zs_init_regs[i]; 1689 } 1690 } 1691 1692 spin_lock_irqsave(&zs_lock, flags); 1693 for (n = 0; n < zs_channels_found; n++) { 1694 if (n % 2 == 0) { 1695 write_zsreg(zs_soft[n].zs_chan_a, R9, FHWRES); 1696 udelay(10); 1697 write_zsreg(zs_soft[n].zs_chan_a, R9, 0); 1698 } 1699 load_zsregs(zs_soft[n].zs_channel, 1700 zs_soft[n].zs_channel->curregs); 1701 } 1702 spin_unlock_irqrestore(&zs_lock, flags); 1703} 1704 1705static struct tty_operations serial_ops = { 1706 .open = rs_open, 1707 .close = rs_close, 1708 .write = rs_write, 1709 .flush_chars = rs_flush_chars, 1710 .write_room = rs_write_room, 1711 .chars_in_buffer = rs_chars_in_buffer, 1712 .flush_buffer = rs_flush_buffer, 1713 .ioctl = rs_ioctl, 1714 .throttle = rs_throttle, 1715 .unthrottle = rs_unthrottle, 1716 .set_termios = rs_set_termios, 1717 .stop = rs_stop, 1718 .start = rs_start, 1719 .hangup = rs_hangup, 1720 .break_ctl = rs_break, 1721 .wait_until_sent = rs_wait_until_sent, 1722 .tiocmget = rs_tiocmget, 1723 .tiocmset = rs_tiocmset, 1724}; 1725 1726/* zs_init inits the driver */ 1727int __init zs_init(void) 1728{ 1729 int channel, i; 1730 struct dec_serial *info; 1731 1732 if(!BUS_PRESENT) 1733 return -ENODEV; 1734 1735 /* Find out how many Z8530 SCCs we have */ 1736 if (zs_chain == 0) 1737 probe_sccs(); 1738 serial_driver = alloc_tty_driver(zs_channels_found); 1739 if (!serial_driver) 1740 return -ENOMEM; 1741 1742 show_serial_version(); 1743 1744 /* Initialize the tty_driver structure */ 1745 /* Not all of this is exactly right for us. */ 1746 1747 serial_driver->owner = THIS_MODULE; 1748 serial_driver->devfs_name = "tts/"; 1749 serial_driver->name = "ttyS"; 1750 serial_driver->major = TTY_MAJOR; 1751 serial_driver->minor_start = 64; 1752 serial_driver->type = TTY_DRIVER_TYPE_SERIAL; 1753 serial_driver->subtype = SERIAL_TYPE_NORMAL; 1754 serial_driver->init_termios = tty_std_termios; 1755 serial_driver->init_termios.c_cflag = 1756 B9600 | CS8 | CREAD | HUPCL | CLOCAL; 1757 serial_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; 1758 tty_set_operations(serial_driver, &serial_ops); 1759 1760 if (tty_register_driver(serial_driver)) 1761 panic("Couldn't register serial driver"); 1762 1763 for (info = zs_chain, i = 0; info; info = info->zs_next, i++) { 1764 1765 /* Needed before interrupts are enabled. */ 1766 info->tty = 0; 1767 info->x_char = 0; 1768 1769 if (info->hook && info->hook->init_info) { 1770 (*info->hook->init_info)(info); 1771 continue; 1772 } 1773 1774 info->magic = SERIAL_MAGIC; 1775 info->port = (int) info->zs_channel->control; 1776 info->line = i; 1777 info->custom_divisor = 16; 1778 info->close_delay = 50; 1779 info->closing_wait = 3000; 1780 info->event = 0; 1781 info->count = 0; 1782 info->blocked_open = 0; 1783 tasklet_init(&info->tlet, do_softint, (unsigned long)info); 1784 init_waitqueue_head(&info->open_wait); 1785 init_waitqueue_head(&info->close_wait); 1786 printk("ttyS%02d at 0x%08x (irq = %d) is a Z85C30 SCC\n", 1787 info->line, info->port, info->irq); 1788 tty_register_device(serial_driver, info->line, NULL); 1789 1790 } 1791 1792 for (channel = 0; channel < zs_channels_found; ++channel) { 1793 zs_soft[channel].clk_divisor = 16; 1794 zs_soft[channel].zs_baud = get_zsbaud(&zs_soft[channel]); 1795 1796 if (request_irq(zs_soft[channel].irq, rs_interrupt, SA_SHIRQ, 1797 "scc", &zs_soft[channel])) 1798 printk(KERN_ERR "decserial: can't get irq %d\n", 1799 zs_soft[channel].irq); 1800 1801 if (zs_soft[channel].hook) { 1802 zs_startup(&zs_soft[channel]); 1803 if (zs_soft[channel].hook->init_channel) 1804 (*zs_soft[channel].hook->init_channel) 1805 (&zs_soft[channel]); 1806 } 1807 } 1808 1809 return 0; 1810} 1811 1812/* 1813 * polling I/O routines 1814 */ 1815static int zs_poll_tx_char(void *handle, unsigned char ch) 1816{ 1817 struct dec_serial *info = handle; 1818 struct dec_zschannel *chan = info->zs_channel; 1819 int ret; 1820 1821 if(chan) { 1822 int loops = 10000; 1823 1824 while (loops && !(read_zsreg(chan, 0) & Tx_BUF_EMP)) 1825 loops--; 1826 1827 if (loops) { 1828 write_zsdata(chan, ch); 1829 ret = 0; 1830 } else 1831 ret = -EAGAIN; 1832 1833 return ret; 1834 } else 1835 return -ENODEV; 1836} 1837 1838static int zs_poll_rx_char(void *handle) 1839{ 1840 struct dec_serial *info = handle; 1841 struct dec_zschannel *chan = info->zs_channel; 1842 int ret; 1843 1844 if(chan) { 1845 int loops = 10000; 1846 1847 while (loops && !(read_zsreg(chan, 0) & Rx_CH_AV)) 1848 loops--; 1849 1850 if (loops) 1851 ret = read_zsdata(chan); 1852 else 1853 ret = -EAGAIN; 1854 1855 return ret; 1856 } else 1857 return -ENODEV; 1858} 1859 1860int register_zs_hook(unsigned int channel, struct dec_serial_hook *hook) 1861{ 1862 struct dec_serial *info = &zs_soft[channel]; 1863 1864 if (info->hook) { 1865 printk("%s: line %d has already a hook registered\n", 1866 __FUNCTION__, channel); 1867 1868 return 0; 1869 } else { 1870 hook->poll_rx_char = zs_poll_rx_char; 1871 hook->poll_tx_char = zs_poll_tx_char; 1872 info->hook = hook; 1873 1874 return 1; 1875 } 1876} 1877 1878int unregister_zs_hook(unsigned int channel) 1879{ 1880 struct dec_serial *info = &zs_soft[channel]; 1881 1882 if (info->hook) { 1883 info->hook = NULL; 1884 return 1; 1885 } else { 1886 printk("%s: trying to unregister hook on line %d," 1887 " but none is registered\n", __FUNCTION__, channel); 1888 return 0; 1889 } 1890} 1891 1892/* 1893 * ------------------------------------------------------------ 1894 * Serial console driver 1895 * ------------------------------------------------------------ 1896 */ 1897#ifdef CONFIG_SERIAL_DEC_CONSOLE 1898 1899 1900/* 1901 * Print a string to the serial port trying not to disturb 1902 * any possible real use of the port... 1903 */ 1904static void serial_console_write(struct console *co, const char *s, 1905 unsigned count) 1906{ 1907 struct dec_serial *info; 1908 int i; 1909 1910 info = zs_soft + co->index; 1911 1912 for (i = 0; i < count; i++, s++) { 1913 if(*s == '\n') 1914 zs_poll_tx_char(info, '\r'); 1915 zs_poll_tx_char(info, *s); 1916 } 1917} 1918 1919static struct tty_driver *serial_console_device(struct console *c, int *index) 1920{ 1921 *index = c->index; 1922 return serial_driver; 1923} 1924 1925/* 1926 * Setup initial baud/bits/parity. We do two things here: 1927 * - construct a cflag setting for the first rs_open() 1928 * - initialize the serial port 1929 * Return non-zero if we didn't find a serial port. 1930 */ 1931static int __init serial_console_setup(struct console *co, char *options) 1932{ 1933 struct dec_serial *info; 1934 int baud = 9600; 1935 int bits = 8; 1936 int parity = 'n'; 1937 int cflag = CREAD | HUPCL | CLOCAL; 1938 int clk_divisor = 16; 1939 int brg; 1940 char *s; 1941 unsigned long flags; 1942 1943 if(!BUS_PRESENT) 1944 return -ENODEV; 1945 1946 info = zs_soft + co->index; 1947 1948 if (zs_chain == 0) 1949 probe_sccs(); 1950 1951 info->is_cons = 1; 1952 1953 if (options) { 1954 baud = simple_strtoul(options, NULL, 10); 1955 s = options; 1956 while(*s >= '0' && *s <= '9') 1957 s++; 1958 if (*s) 1959 parity = *s++; 1960 if (*s) 1961 bits = *s - '0'; 1962 } 1963 1964 /* 1965 * Now construct a cflag setting. 1966 */ 1967 switch(baud) { 1968 case 1200: 1969 cflag |= B1200; 1970 break; 1971 case 2400: 1972 cflag |= B2400; 1973 break; 1974 case 4800: 1975 cflag |= B4800; 1976 break; 1977 case 19200: 1978 cflag |= B19200; 1979 break; 1980 case 38400: 1981 cflag |= B38400; 1982 break; 1983 case 57600: 1984 cflag |= B57600; 1985 break; 1986 case 115200: 1987 cflag |= B115200; 1988 break; 1989 case 9600: 1990 default: 1991 cflag |= B9600; 1992 /* 1993 * Set this to a sane value to prevent a divide error. 1994 */ 1995 baud = 9600; 1996 break; 1997 } 1998 switch(bits) { 1999 case 7: 2000 cflag |= CS7; 2001 break; 2002 default: 2003 case 8: 2004 cflag |= CS8; 2005 break; 2006 } 2007 switch(parity) { 2008 case 'o': case 'O': 2009 cflag |= PARODD; 2010 break; 2011 case 'e': case 'E': 2012 cflag |= PARENB; 2013 break; 2014 } 2015 co->cflag = cflag; 2016 2017 spin_lock_irqsave(&zs_lock, flags); 2018 2019 /* 2020 * Set up the baud rate generator. 2021 */ 2022 brg = BPS_TO_BRG(baud, zs_parms->clock / clk_divisor); 2023 info->zs_channel->curregs[R12] = (brg & 255); 2024 info->zs_channel->curregs[R13] = ((brg >> 8) & 255); 2025 2026 /* 2027 * Set byte size and parity. 2028 */ 2029 if (bits == 7) { 2030 info->zs_channel->curregs[R3] |= Rx7; 2031 info->zs_channel->curregs[R5] |= Tx7; 2032 } else { 2033 info->zs_channel->curregs[R3] |= Rx8; 2034 info->zs_channel->curregs[R5] |= Tx8; 2035 } 2036 if (cflag & PARENB) { 2037 info->zs_channel->curregs[R4] |= PAR_ENA; 2038 } 2039 if (!(cflag & PARODD)) { 2040 info->zs_channel->curregs[R4] |= PAR_EVEN; 2041 } 2042 info->zs_channel->curregs[R4] |= SB1; 2043 2044 /* 2045 * Turn on RTS and DTR. 2046 */ 2047 zs_rtsdtr(info, RTS | DTR, 1); 2048 2049 /* 2050 * Finally, enable sequencing. 2051 */ 2052 info->zs_channel->curregs[R3] |= RxENABLE; 2053 info->zs_channel->curregs[R5] |= TxENAB; 2054 2055 /* 2056 * Clear the interrupt registers. 2057 */ 2058 write_zsreg(info->zs_channel, R0, ERR_RES); 2059 write_zsreg(info->zs_channel, R0, RES_H_IUS); 2060 2061 /* 2062 * Load up the new values. 2063 */ 2064 load_zsregs(info->zs_channel, info->zs_channel->curregs); 2065 2066 /* Save the current value of RR0 */ 2067 info->read_reg_zero = read_zsreg(info->zs_channel, R0); 2068 2069 zs_soft[co->index].clk_divisor = clk_divisor; 2070 zs_soft[co->index].zs_baud = get_zsbaud(&zs_soft[co->index]); 2071 2072 spin_unlock_irqrestore(&zs_lock, flags); 2073 2074 return 0; 2075} 2076 2077static struct console sercons = { 2078 .name = "ttyS", 2079 .write = serial_console_write, 2080 .device = serial_console_device, 2081 .setup = serial_console_setup, 2082 .flags = CON_PRINTBUFFER, 2083 .index = -1, 2084}; 2085 2086/* 2087 * Register console. 2088 */ 2089void __init zs_serial_console_init(void) 2090{ 2091 register_console(&sercons); 2092} 2093#endif /* ifdef CONFIG_SERIAL_DEC_CONSOLE */ 2094 2095#ifdef CONFIG_KGDB 2096struct dec_zschannel *zs_kgdbchan; 2097static unsigned char scc_inittab[] = { 2098 9, 0x80, /* reset A side (CHRA) */ 2099 13, 0, /* set baud rate divisor */ 2100 12, 1, 2101 14, 1, /* baud rate gen enable, src=rtxc (BRENABL) */ 2102 11, 0x50, /* clocks = br gen (RCBR | TCBR) */ 2103 5, 0x6a, /* tx 8 bits, assert RTS (Tx8 | TxENAB | RTS) */ 2104 4, 0x44, /* x16 clock, 1 stop (SB1 | X16CLK)*/ 2105 3, 0xc1, /* rx enable, 8 bits (RxENABLE | Rx8)*/ 2106}; 2107 2108/* These are for receiving and sending characters under the kgdb 2109 * source level kernel debugger. 2110 */ 2111void putDebugChar(char kgdb_char) 2112{ 2113 struct dec_zschannel *chan = zs_kgdbchan; 2114 while ((read_zsreg(chan, 0) & Tx_BUF_EMP) == 0) 2115 RECOVERY_DELAY; 2116 write_zsdata(chan, kgdb_char); 2117} 2118char getDebugChar(void) 2119{ 2120 struct dec_zschannel *chan = zs_kgdbchan; 2121 while((read_zsreg(chan, 0) & Rx_CH_AV) == 0) 2122 eieio(); /*barrier();*/ 2123 return read_zsdata(chan); 2124} 2125void kgdb_interruptible(int yes) 2126{ 2127 struct dec_zschannel *chan = zs_kgdbchan; 2128 int one, nine; 2129 nine = read_zsreg(chan, 9); 2130 if (yes == 1) { 2131 one = EXT_INT_ENAB|RxINT_ALL; 2132 nine |= MIE; 2133 printk("turning serial ints on\n"); 2134 } else { 2135 one = RxINT_DISAB; 2136 nine &= ~MIE; 2137 printk("turning serial ints off\n"); 2138 } 2139 write_zsreg(chan, 1, one); 2140 write_zsreg(chan, 9, nine); 2141} 2142 2143static int kgdbhook_init_channel(void *handle) 2144{ 2145 return 0; 2146} 2147 2148static void kgdbhook_init_info(void *handle) 2149{ 2150} 2151 2152static void kgdbhook_rx_char(void *handle, unsigned char ch, unsigned char fl) 2153{ 2154 struct dec_serial *info = handle; 2155 2156 if (fl != TTY_NORMAL) 2157 return; 2158 if (ch == 0x03 || ch == '$') 2159 breakpoint(); 2160} 2161 2162/* This sets up the serial port we're using, and turns on 2163 * interrupts for that channel, so kgdb is usable once we're done. 2164 */ 2165static inline void kgdb_chaninit(struct dec_zschannel *ms, int intson, int bps) 2166{ 2167 int brg; 2168 int i, x; 2169 volatile char *sccc = ms->control; 2170 brg = BPS_TO_BRG(bps, zs_parms->clock/16); 2171 printk("setting bps on kgdb line to %d [brg=%x]\n", bps, brg); 2172 for (i = 20000; i != 0; --i) { 2173 x = *sccc; eieio(); 2174 } 2175 for (i = 0; i < sizeof(scc_inittab); ++i) { 2176 write_zsreg(ms, scc_inittab[i], scc_inittab[i+1]); 2177 i++; 2178 } 2179} 2180/* This is called at boot time to prime the kgdb serial debugging 2181 * serial line. The 'tty_num' argument is 0 for /dev/ttya and 1 2182 * for /dev/ttyb which is determined in setup_arch() from the 2183 * boot command line flags. 2184 */ 2185struct dec_serial_hook zs_kgdbhook = { 2186 .init_channel = kgdbhook_init_channel, 2187 .init_info = kgdbhook_init_info, 2188 .rx_char = kgdbhook_rx_char, 2189 .cflags = B38400 | CS8 | CLOCAL, 2190} 2191 2192void __init zs_kgdb_hook(int tty_num) 2193{ 2194 /* Find out how many Z8530 SCCs we have */ 2195 if (zs_chain == 0) 2196 probe_sccs(); 2197 zs_soft[tty_num].zs_channel = &zs_channels[tty_num]; 2198 zs_kgdbchan = zs_soft[tty_num].zs_channel; 2199 zs_soft[tty_num].change_needed = 0; 2200 zs_soft[tty_num].clk_divisor = 16; 2201 zs_soft[tty_num].zs_baud = 38400; 2202 zs_soft[tty_num].hook = &zs_kgdbhook; /* This runs kgdb */ 2203 /* Turn on transmitter/receiver at 8-bits/char */ 2204 kgdb_chaninit(zs_soft[tty_num].zs_channel, 1, 38400); 2205 printk("KGDB: on channel %d initialized\n", tty_num); 2206 set_debug_traps(); /* init stub */ 2207} 2208#endif /* ifdef CONFIG_KGDB */