linux/drivers/tty/serial/jsm/jsm_neo.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/************************************************************************
   3 * Copyright 2003 Digi International (www.digi.com)
   4 *
   5 * Copyright (C) 2004 IBM Corporation. All rights reserved.
   6 *
   7 * Contact Information:
   8 * Scott H Kilau <Scott_Kilau@digi.com>
   9 * Wendy Xiong   <wendyx@us.ibm.com>
  10 *
  11 ***********************************************************************/
  12#include <linux/delay.h>        /* For udelay */
  13#include <linux/serial_reg.h>   /* For the various UART offsets */
  14#include <linux/tty.h>
  15#include <linux/pci.h>
  16#include <asm/io.h>
  17
  18#include "jsm.h"                /* Driver main header file */
  19
  20static u32 jsm_offset_table[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
  21
  22/*
  23 * This function allows calls to ensure that all outstanding
  24 * PCI writes have been completed, by doing a PCI read against
  25 * a non-destructive, read-only location on the Neo card.
  26 *
  27 * In this case, we are reading the DVID (Read-only Device Identification)
  28 * value of the Neo card.
  29 */
  30static inline void neo_pci_posting_flush(struct jsm_board *bd)
  31{
  32      readb(bd->re_map_membase + 0x8D);
  33}
  34
  35static void neo_set_cts_flow_control(struct jsm_channel *ch)
  36{
  37        u8 ier, efr;
  38        ier = readb(&ch->ch_neo_uart->ier);
  39        efr = readb(&ch->ch_neo_uart->efr);
  40
  41        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Setting CTSFLOW\n");
  42
  43        /* Turn on auto CTS flow control */
  44        ier |= (UART_17158_IER_CTSDSR);
  45        efr |= (UART_17158_EFR_ECB | UART_17158_EFR_CTSDSR);
  46
  47        /* Turn off auto Xon flow control */
  48        efr &= ~(UART_17158_EFR_IXON);
  49
  50        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
  51        writeb(0, &ch->ch_neo_uart->efr);
  52
  53        /* Turn on UART enhanced bits */
  54        writeb(efr, &ch->ch_neo_uart->efr);
  55
  56        /* Turn on table D, with 8 char hi/low watermarks */
  57        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_4DELAY), &ch->ch_neo_uart->fctr);
  58
  59        /* Feed the UART our trigger levels */
  60        writeb(8, &ch->ch_neo_uart->tfifo);
  61        ch->ch_t_tlevel = 8;
  62
  63        writeb(ier, &ch->ch_neo_uart->ier);
  64}
  65
  66static void neo_set_rts_flow_control(struct jsm_channel *ch)
  67{
  68        u8 ier, efr;
  69        ier = readb(&ch->ch_neo_uart->ier);
  70        efr = readb(&ch->ch_neo_uart->efr);
  71
  72        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Setting RTSFLOW\n");
  73
  74        /* Turn on auto RTS flow control */
  75        ier |= (UART_17158_IER_RTSDTR);
  76        efr |= (UART_17158_EFR_ECB | UART_17158_EFR_RTSDTR);
  77
  78        /* Turn off auto Xoff flow control */
  79        ier &= ~(UART_17158_IER_XOFF);
  80        efr &= ~(UART_17158_EFR_IXOFF);
  81
  82        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
  83        writeb(0, &ch->ch_neo_uart->efr);
  84
  85        /* Turn on UART enhanced bits */
  86        writeb(efr, &ch->ch_neo_uart->efr);
  87
  88        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_4DELAY), &ch->ch_neo_uart->fctr);
  89        ch->ch_r_watermark = 4;
  90
  91        writeb(56, &ch->ch_neo_uart->rfifo);
  92        ch->ch_r_tlevel = 56;
  93
  94        writeb(ier, &ch->ch_neo_uart->ier);
  95
  96        /*
  97         * From the Neo UART spec sheet:
  98         * The auto RTS/DTR function must be started by asserting
  99         * RTS/DTR# output pin (MCR bit-0 or 1 to logic 1 after
 100         * it is enabled.
 101         */
 102        ch->ch_mostat |= (UART_MCR_RTS);
 103}
 104
 105
 106static void neo_set_ixon_flow_control(struct jsm_channel *ch)
 107{
 108        u8 ier, efr;
 109        ier = readb(&ch->ch_neo_uart->ier);
 110        efr = readb(&ch->ch_neo_uart->efr);
 111
 112        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Setting IXON FLOW\n");
 113
 114        /* Turn off auto CTS flow control */
 115        ier &= ~(UART_17158_IER_CTSDSR);
 116        efr &= ~(UART_17158_EFR_CTSDSR);
 117
 118        /* Turn on auto Xon flow control */
 119        efr |= (UART_17158_EFR_ECB | UART_17158_EFR_IXON);
 120
 121        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
 122        writeb(0, &ch->ch_neo_uart->efr);
 123
 124        /* Turn on UART enhanced bits */
 125        writeb(efr, &ch->ch_neo_uart->efr);
 126
 127        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_8DELAY), &ch->ch_neo_uart->fctr);
 128        ch->ch_r_watermark = 4;
 129
 130        writeb(32, &ch->ch_neo_uart->rfifo);
 131        ch->ch_r_tlevel = 32;
 132
 133        /* Tell UART what start/stop chars it should be looking for */
 134        writeb(ch->ch_startc, &ch->ch_neo_uart->xonchar1);
 135        writeb(0, &ch->ch_neo_uart->xonchar2);
 136
 137        writeb(ch->ch_stopc, &ch->ch_neo_uart->xoffchar1);
 138        writeb(0, &ch->ch_neo_uart->xoffchar2);
 139
 140        writeb(ier, &ch->ch_neo_uart->ier);
 141}
 142
 143static void neo_set_ixoff_flow_control(struct jsm_channel *ch)
 144{
 145        u8 ier, efr;
 146        ier = readb(&ch->ch_neo_uart->ier);
 147        efr = readb(&ch->ch_neo_uart->efr);
 148
 149        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Setting IXOFF FLOW\n");
 150
 151        /* Turn off auto RTS flow control */
 152        ier &= ~(UART_17158_IER_RTSDTR);
 153        efr &= ~(UART_17158_EFR_RTSDTR);
 154
 155        /* Turn on auto Xoff flow control */
 156        ier |= (UART_17158_IER_XOFF);
 157        efr |= (UART_17158_EFR_ECB | UART_17158_EFR_IXOFF);
 158
 159        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
 160        writeb(0, &ch->ch_neo_uart->efr);
 161
 162        /* Turn on UART enhanced bits */
 163        writeb(efr, &ch->ch_neo_uart->efr);
 164
 165        /* Turn on table D, with 8 char hi/low watermarks */
 166        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_8DELAY), &ch->ch_neo_uart->fctr);
 167
 168        writeb(8, &ch->ch_neo_uart->tfifo);
 169        ch->ch_t_tlevel = 8;
 170
 171        /* Tell UART what start/stop chars it should be looking for */
 172        writeb(ch->ch_startc, &ch->ch_neo_uart->xonchar1);
 173        writeb(0, &ch->ch_neo_uart->xonchar2);
 174
 175        writeb(ch->ch_stopc, &ch->ch_neo_uart->xoffchar1);
 176        writeb(0, &ch->ch_neo_uart->xoffchar2);
 177
 178        writeb(ier, &ch->ch_neo_uart->ier);
 179}
 180
 181static void neo_set_no_input_flow_control(struct jsm_channel *ch)
 182{
 183        u8 ier, efr;
 184        ier = readb(&ch->ch_neo_uart->ier);
 185        efr = readb(&ch->ch_neo_uart->efr);
 186
 187        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Unsetting Input FLOW\n");
 188
 189        /* Turn off auto RTS flow control */
 190        ier &= ~(UART_17158_IER_RTSDTR);
 191        efr &= ~(UART_17158_EFR_RTSDTR);
 192
 193        /* Turn off auto Xoff flow control */
 194        ier &= ~(UART_17158_IER_XOFF);
 195        if (ch->ch_c_iflag & IXON)
 196                efr &= ~(UART_17158_EFR_IXOFF);
 197        else
 198                efr &= ~(UART_17158_EFR_ECB | UART_17158_EFR_IXOFF);
 199
 200        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
 201        writeb(0, &ch->ch_neo_uart->efr);
 202
 203        /* Turn on UART enhanced bits */
 204        writeb(efr, &ch->ch_neo_uart->efr);
 205
 206        /* Turn on table D, with 8 char hi/low watermarks */
 207        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_8DELAY), &ch->ch_neo_uart->fctr);
 208
 209        ch->ch_r_watermark = 0;
 210
 211        writeb(16, &ch->ch_neo_uart->tfifo);
 212        ch->ch_t_tlevel = 16;
 213
 214        writeb(16, &ch->ch_neo_uart->rfifo);
 215        ch->ch_r_tlevel = 16;
 216
 217        writeb(ier, &ch->ch_neo_uart->ier);
 218}
 219
 220static void neo_set_no_output_flow_control(struct jsm_channel *ch)
 221{
 222        u8 ier, efr;
 223        ier = readb(&ch->ch_neo_uart->ier);
 224        efr = readb(&ch->ch_neo_uart->efr);
 225
 226        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "Unsetting Output FLOW\n");
 227
 228        /* Turn off auto CTS flow control */
 229        ier &= ~(UART_17158_IER_CTSDSR);
 230        efr &= ~(UART_17158_EFR_CTSDSR);
 231
 232        /* Turn off auto Xon flow control */
 233        if (ch->ch_c_iflag & IXOFF)
 234                efr &= ~(UART_17158_EFR_IXON);
 235        else
 236                efr &= ~(UART_17158_EFR_ECB | UART_17158_EFR_IXON);
 237
 238        /* Why? Becuz Exar's spec says we have to zero it out before setting it */
 239        writeb(0, &ch->ch_neo_uart->efr);
 240
 241        /* Turn on UART enhanced bits */
 242        writeb(efr, &ch->ch_neo_uart->efr);
 243
 244        /* Turn on table D, with 8 char hi/low watermarks */
 245        writeb((UART_17158_FCTR_TRGD | UART_17158_FCTR_RTS_8DELAY), &ch->ch_neo_uart->fctr);
 246
 247        ch->ch_r_watermark = 0;
 248
 249        writeb(16, &ch->ch_neo_uart->tfifo);
 250        ch->ch_t_tlevel = 16;
 251
 252        writeb(16, &ch->ch_neo_uart->rfifo);
 253        ch->ch_r_tlevel = 16;
 254
 255        writeb(ier, &ch->ch_neo_uart->ier);
 256}
 257
 258static inline void neo_set_new_start_stop_chars(struct jsm_channel *ch)
 259{
 260
 261        /* if hardware flow control is set, then skip this whole thing */
 262        if (ch->ch_c_cflag & CRTSCTS)
 263                return;
 264
 265        jsm_dbg(PARAM, &ch->ch_bd->pci_dev, "start\n");
 266
 267        /* Tell UART what start/stop chars it should be looking for */
 268        writeb(ch->ch_startc, &ch->ch_neo_uart->xonchar1);
 269        writeb(0, &ch->ch_neo_uart->xonchar2);
 270
 271        writeb(ch->ch_stopc, &ch->ch_neo_uart->xoffchar1);
 272        writeb(0, &ch->ch_neo_uart->xoffchar2);
 273}
 274
 275static void neo_copy_data_from_uart_to_queue(struct jsm_channel *ch)
 276{
 277        int qleft = 0;
 278        u8 linestatus = 0;
 279        u8 error_mask = 0;
 280        int n = 0;
 281        int total = 0;
 282        u16 head;
 283        u16 tail;
 284
 285        /* cache head and tail of queue */
 286        head = ch->ch_r_head & RQUEUEMASK;
 287        tail = ch->ch_r_tail & RQUEUEMASK;
 288
 289        /* Get our cached LSR */
 290        linestatus = ch->ch_cached_lsr;
 291        ch->ch_cached_lsr = 0;
 292
 293        /* Store how much space we have left in the queue */
 294        if ((qleft = tail - head - 1) < 0)
 295                qleft += RQUEUEMASK + 1;
 296
 297        /*
 298         * If the UART is not in FIFO mode, force the FIFO copy to
 299         * NOT be run, by setting total to 0.
 300         *
 301         * On the other hand, if the UART IS in FIFO mode, then ask
 302         * the UART to give us an approximation of data it has RX'ed.
 303         */
 304        if (!(ch->ch_flags & CH_FIFO_ENABLED))
 305                total = 0;
 306        else {
 307                total = readb(&ch->ch_neo_uart->rfifo);
 308
 309                /*
 310                 * EXAR chip bug - RX FIFO COUNT - Fudge factor.
 311                 *
 312                 * This resolves a problem/bug with the Exar chip that sometimes
 313                 * returns a bogus value in the rfifo register.
 314                 * The count can be any where from 0-3 bytes "off".
 315                 * Bizarre, but true.
 316                 */
 317                total -= 3;
 318        }
 319
 320        /*
 321         * Finally, bound the copy to make sure we don't overflow
 322         * our own queue...
 323         * The byte by byte copy loop below this loop this will
 324         * deal with the queue overflow possibility.
 325         */
 326        total = min(total, qleft);
 327
 328        while (total > 0) {
 329                /*
 330                 * Grab the linestatus register, we need to check
 331                 * to see if there are any errors in the FIFO.
 332                 */
 333                linestatus = readb(&ch->ch_neo_uart->lsr);
 334
 335                /*
 336                 * Break out if there is a FIFO error somewhere.
 337                 * This will allow us to go byte by byte down below,
 338                 * finding the exact location of the error.
 339                 */
 340                if (linestatus & UART_17158_RX_FIFO_DATA_ERROR)
 341                        break;
 342
 343                /* Make sure we don't go over the end of our queue */
 344                n = min(((u32) total), (RQUEUESIZE - (u32) head));
 345
 346                /*
 347                 * Cut down n even further if needed, this is to fix
 348                 * a problem with memcpy_fromio() with the Neo on the
 349                 * IBM pSeries platform.
 350                 * 15 bytes max appears to be the magic number.
 351                 */
 352                n = min((u32) n, (u32) 12);
 353
 354                /*
 355                 * Since we are grabbing the linestatus register, which
 356                 * will reset some bits after our read, we need to ensure
 357                 * we don't miss our TX FIFO emptys.
 358                 */
 359                if (linestatus & (UART_LSR_THRE | UART_17158_TX_AND_FIFO_CLR))
 360                        ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 361
 362                linestatus = 0;
 363
 364                /* Copy data from uart to the queue */
 365                memcpy_fromio(ch->ch_rqueue + head, &ch->ch_neo_uart->txrxburst, n);
 366                /*
 367                 * Since RX_FIFO_DATA_ERROR was 0, we are guaranteed
 368                 * that all the data currently in the FIFO is free of
 369                 * breaks and parity/frame/orun errors.
 370                 */
 371                memset(ch->ch_equeue + head, 0, n);
 372
 373                /* Add to and flip head if needed */
 374                head = (head + n) & RQUEUEMASK;
 375                total -= n;
 376                qleft -= n;
 377                ch->ch_rxcount += n;
 378        }
 379
 380        /*
 381         * Create a mask to determine whether we should
 382         * insert the character (if any) into our queue.
 383         */
 384        if (ch->ch_c_iflag & IGNBRK)
 385                error_mask |= UART_LSR_BI;
 386
 387        /*
 388         * Now cleanup any leftover bytes still in the UART.
 389         * Also deal with any possible queue overflow here as well.
 390         */
 391        while (1) {
 392
 393                /*
 394                 * Its possible we have a linestatus from the loop above
 395                 * this, so we "OR" on any extra bits.
 396                 */
 397                linestatus |= readb(&ch->ch_neo_uart->lsr);
 398
 399                /*
 400                 * If the chip tells us there is no more data pending to
 401                 * be read, we can then leave.
 402                 * But before we do, cache the linestatus, just in case.
 403                 */
 404                if (!(linestatus & UART_LSR_DR)) {
 405                        ch->ch_cached_lsr = linestatus;
 406                        break;
 407                }
 408
 409                /* No need to store this bit */
 410                linestatus &= ~UART_LSR_DR;
 411
 412                /*
 413                 * Since we are grabbing the linestatus register, which
 414                 * will reset some bits after our read, we need to ensure
 415                 * we don't miss our TX FIFO emptys.
 416                 */
 417                if (linestatus & (UART_LSR_THRE | UART_17158_TX_AND_FIFO_CLR)) {
 418                        linestatus &= ~(UART_LSR_THRE | UART_17158_TX_AND_FIFO_CLR);
 419                        ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 420                }
 421
 422                /*
 423                 * Discard character if we are ignoring the error mask.
 424                 */
 425                if (linestatus & error_mask) {
 426                        u8 discard;
 427                        linestatus = 0;
 428                        memcpy_fromio(&discard, &ch->ch_neo_uart->txrxburst, 1);
 429                        continue;
 430                }
 431
 432                /*
 433                 * If our queue is full, we have no choice but to drop some data.
 434                 * The assumption is that HWFLOW or SWFLOW should have stopped
 435                 * things way way before we got to this point.
 436                 *
 437                 * I decided that I wanted to ditch the oldest data first,
 438                 * I hope thats okay with everyone? Yes? Good.
 439                 */
 440                while (qleft < 1) {
 441                        jsm_dbg(READ, &ch->ch_bd->pci_dev,
 442                                "Queue full, dropping DATA:%x LSR:%x\n",
 443                                ch->ch_rqueue[tail], ch->ch_equeue[tail]);
 444
 445                        ch->ch_r_tail = tail = (tail + 1) & RQUEUEMASK;
 446                        ch->ch_err_overrun++;
 447                        qleft++;
 448                }
 449
 450                memcpy_fromio(ch->ch_rqueue + head, &ch->ch_neo_uart->txrxburst, 1);
 451                ch->ch_equeue[head] = (u8) linestatus;
 452
 453                jsm_dbg(READ, &ch->ch_bd->pci_dev, "DATA/LSR pair: %x %x\n",
 454                        ch->ch_rqueue[head], ch->ch_equeue[head]);
 455
 456                /* Ditch any remaining linestatus value. */
 457                linestatus = 0;
 458
 459                /* Add to and flip head if needed */
 460                head = (head + 1) & RQUEUEMASK;
 461
 462                qleft--;
 463                ch->ch_rxcount++;
 464        }
 465
 466        /*
 467         * Write new final heads to channel structure.
 468         */
 469        ch->ch_r_head = head & RQUEUEMASK;
 470        ch->ch_e_head = head & EQUEUEMASK;
 471        jsm_input(ch);
 472}
 473
 474static void neo_copy_data_from_queue_to_uart(struct jsm_channel *ch)
 475{
 476        u16 head;
 477        u16 tail;
 478        int n;
 479        int s;
 480        int qlen;
 481        u32 len_written = 0;
 482        struct circ_buf *circ;
 483
 484        if (!ch)
 485                return;
 486
 487        circ = &ch->uart_port.state->xmit;
 488
 489        /* No data to write to the UART */
 490        if (uart_circ_empty(circ))
 491                return;
 492
 493        /* If port is "stopped", don't send any data to the UART */
 494        if ((ch->ch_flags & CH_STOP) || (ch->ch_flags & CH_BREAK_SENDING))
 495                return;
 496        /*
 497         * If FIFOs are disabled. Send data directly to txrx register
 498         */
 499        if (!(ch->ch_flags & CH_FIFO_ENABLED)) {
 500                u8 lsrbits = readb(&ch->ch_neo_uart->lsr);
 501
 502                ch->ch_cached_lsr |= lsrbits;
 503                if (ch->ch_cached_lsr & UART_LSR_THRE) {
 504                        ch->ch_cached_lsr &= ~(UART_LSR_THRE);
 505
 506                        writeb(circ->buf[circ->tail], &ch->ch_neo_uart->txrx);
 507                        jsm_dbg(WRITE, &ch->ch_bd->pci_dev,
 508                                "Tx data: %x\n", circ->buf[circ->tail]);
 509                        circ->tail = (circ->tail + 1) & (UART_XMIT_SIZE - 1);
 510                        ch->ch_txcount++;
 511                }
 512                return;
 513        }
 514
 515        /*
 516         * We have to do it this way, because of the EXAR TXFIFO count bug.
 517         */
 518        if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM)))
 519                return;
 520
 521        n = UART_17158_TX_FIFOSIZE - ch->ch_t_tlevel;
 522
 523        /* cache head and tail of queue */
 524        head = circ->head & (UART_XMIT_SIZE - 1);
 525        tail = circ->tail & (UART_XMIT_SIZE - 1);
 526        qlen = uart_circ_chars_pending(circ);
 527
 528        /* Find minimum of the FIFO space, versus queue length */
 529        n = min(n, qlen);
 530
 531        while (n > 0) {
 532
 533                s = ((head >= tail) ? head : UART_XMIT_SIZE) - tail;
 534                s = min(s, n);
 535
 536                if (s <= 0)
 537                        break;
 538
 539                memcpy_toio(&ch->ch_neo_uart->txrxburst, circ->buf + tail, s);
 540                /* Add and flip queue if needed */
 541                tail = (tail + s) & (UART_XMIT_SIZE - 1);
 542                n -= s;
 543                ch->ch_txcount += s;
 544                len_written += s;
 545        }
 546
 547        /* Update the final tail */
 548        circ->tail = tail & (UART_XMIT_SIZE - 1);
 549
 550        if (len_written >= ch->ch_t_tlevel)
 551                ch->ch_flags &= ~(CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 552
 553        if (uart_circ_empty(circ))
 554                uart_write_wakeup(&ch->uart_port);
 555}
 556
 557static void neo_parse_modem(struct jsm_channel *ch, u8 signals)
 558{
 559        u8 msignals = signals;
 560
 561        jsm_dbg(MSIGS, &ch->ch_bd->pci_dev,
 562                "neo_parse_modem: port: %d msignals: %x\n",
 563                ch->ch_portnum, msignals);
 564
 565        /* Scrub off lower bits. They signify delta's, which I don't care about */
 566        /* Keep DDCD and DDSR though */
 567        msignals &= 0xf8;
 568
 569        if (msignals & UART_MSR_DDCD)
 570                uart_handle_dcd_change(&ch->uart_port, msignals & UART_MSR_DCD);
 571        if (msignals & UART_MSR_DDSR)
 572                uart_handle_cts_change(&ch->uart_port, msignals & UART_MSR_CTS);
 573        if (msignals & UART_MSR_DCD)
 574                ch->ch_mistat |= UART_MSR_DCD;
 575        else
 576                ch->ch_mistat &= ~UART_MSR_DCD;
 577
 578        if (msignals & UART_MSR_DSR)
 579                ch->ch_mistat |= UART_MSR_DSR;
 580        else
 581                ch->ch_mistat &= ~UART_MSR_DSR;
 582
 583        if (msignals & UART_MSR_RI)
 584                ch->ch_mistat |= UART_MSR_RI;
 585        else
 586                ch->ch_mistat &= ~UART_MSR_RI;
 587
 588        if (msignals & UART_MSR_CTS)
 589                ch->ch_mistat |= UART_MSR_CTS;
 590        else
 591                ch->ch_mistat &= ~UART_MSR_CTS;
 592
 593        jsm_dbg(MSIGS, &ch->ch_bd->pci_dev,
 594                "Port: %d DTR: %d RTS: %d CTS: %d DSR: %d " "RI: %d CD: %d\n",
 595                ch->ch_portnum,
 596                !!((ch->ch_mistat | ch->ch_mostat) & UART_MCR_DTR),
 597                !!((ch->ch_mistat | ch->ch_mostat) & UART_MCR_RTS),
 598                !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_CTS),
 599                !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_DSR),
 600                !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_RI),
 601                !!((ch->ch_mistat | ch->ch_mostat) & UART_MSR_DCD));
 602}
 603
 604/* Make the UART raise any of the output signals we want up */
 605static void neo_assert_modem_signals(struct jsm_channel *ch)
 606{
 607        if (!ch)
 608                return;
 609
 610        writeb(ch->ch_mostat, &ch->ch_neo_uart->mcr);
 611
 612        /* flush write operation */
 613        neo_pci_posting_flush(ch->ch_bd);
 614}
 615
 616/*
 617 * Flush the WRITE FIFO on the Neo.
 618 *
 619 * NOTE: Channel lock MUST be held before calling this function!
 620 */
 621static void neo_flush_uart_write(struct jsm_channel *ch)
 622{
 623        u8 tmp = 0;
 624        int i = 0;
 625
 626        if (!ch)
 627                return;
 628
 629        writeb((UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_XMIT), &ch->ch_neo_uart->isr_fcr);
 630
 631        for (i = 0; i < 10; i++) {
 632
 633                /* Check to see if the UART feels it completely flushed the FIFO. */
 634                tmp = readb(&ch->ch_neo_uart->isr_fcr);
 635                if (tmp & UART_FCR_CLEAR_XMIT) {
 636                        jsm_dbg(IOCTL, &ch->ch_bd->pci_dev,
 637                                "Still flushing TX UART... i: %d\n", i);
 638                        udelay(10);
 639                }
 640                else
 641                        break;
 642        }
 643
 644        ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 645}
 646
 647
 648/*
 649 * Flush the READ FIFO on the Neo.
 650 *
 651 * NOTE: Channel lock MUST be held before calling this function!
 652 */
 653static void neo_flush_uart_read(struct jsm_channel *ch)
 654{
 655        u8 tmp = 0;
 656        int i = 0;
 657
 658        if (!ch)
 659                return;
 660
 661        writeb((UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR), &ch->ch_neo_uart->isr_fcr);
 662
 663        for (i = 0; i < 10; i++) {
 664
 665                /* Check to see if the UART feels it completely flushed the FIFO. */
 666                tmp = readb(&ch->ch_neo_uart->isr_fcr);
 667                if (tmp & 2) {
 668                        jsm_dbg(IOCTL, &ch->ch_bd->pci_dev,
 669                                "Still flushing RX UART... i: %d\n", i);
 670                        udelay(10);
 671                }
 672                else
 673                        break;
 674        }
 675}
 676
 677/*
 678 * No locks are assumed to be held when calling this function.
 679 */
 680static void neo_clear_break(struct jsm_channel *ch)
 681{
 682        unsigned long lock_flags;
 683
 684        spin_lock_irqsave(&ch->ch_lock, lock_flags);
 685
 686        /* Turn break off, and unset some variables */
 687        if (ch->ch_flags & CH_BREAK_SENDING) {
 688                u8 temp = readb(&ch->ch_neo_uart->lcr);
 689                writeb((temp & ~UART_LCR_SBC), &ch->ch_neo_uart->lcr);
 690
 691                ch->ch_flags &= ~(CH_BREAK_SENDING);
 692                jsm_dbg(IOCTL, &ch->ch_bd->pci_dev,
 693                        "clear break Finishing UART_LCR_SBC! finished: %lx\n",
 694                        jiffies);
 695
 696                /* flush write operation */
 697                neo_pci_posting_flush(ch->ch_bd);
 698        }
 699        spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 700}
 701
 702/*
 703 * Parse the ISR register.
 704 */
 705static void neo_parse_isr(struct jsm_board *brd, u32 port)
 706{
 707        struct jsm_channel *ch;
 708        u8 isr;
 709        u8 cause;
 710        unsigned long lock_flags;
 711
 712        if (!brd)
 713                return;
 714
 715        if (port >= brd->maxports)
 716                return;
 717
 718        ch = brd->channels[port];
 719        if (!ch)
 720                return;
 721
 722        /* Here we try to figure out what caused the interrupt to happen */
 723        while (1) {
 724
 725                isr = readb(&ch->ch_neo_uart->isr_fcr);
 726
 727                /* Bail if no pending interrupt */
 728                if (isr & UART_IIR_NO_INT)
 729                        break;
 730
 731                /*
 732                 * Yank off the upper 2 bits, which just show that the FIFO's are enabled.
 733                 */
 734                isr &= ~(UART_17158_IIR_FIFO_ENABLED);
 735
 736                jsm_dbg(INTR, &ch->ch_bd->pci_dev, "%s:%d isr: %x\n",
 737                        __FILE__, __LINE__, isr);
 738
 739                if (isr & (UART_17158_IIR_RDI_TIMEOUT | UART_IIR_RDI)) {
 740                        /* Read data from uart -> queue */
 741                        neo_copy_data_from_uart_to_queue(ch);
 742
 743                        /* Call our tty layer to enforce queue flow control if needed. */
 744                        spin_lock_irqsave(&ch->ch_lock, lock_flags);
 745                        jsm_check_queue_flow_control(ch);
 746                        spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 747                }
 748
 749                if (isr & UART_IIR_THRI) {
 750                        /* Transfer data (if any) from Write Queue -> UART. */
 751                        spin_lock_irqsave(&ch->ch_lock, lock_flags);
 752                        ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 753                        spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 754                        neo_copy_data_from_queue_to_uart(ch);
 755                }
 756
 757                if (isr & UART_17158_IIR_XONXOFF) {
 758                        cause = readb(&ch->ch_neo_uart->xoffchar1);
 759
 760                        jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 761                                "Port %d. Got ISR_XONXOFF: cause:%x\n",
 762                                port, cause);
 763
 764                        /*
 765                         * Since the UART detected either an XON or
 766                         * XOFF match, we need to figure out which
 767                         * one it was, so we can suspend or resume data flow.
 768                         */
 769                        spin_lock_irqsave(&ch->ch_lock, lock_flags);
 770                        if (cause == UART_17158_XON_DETECT) {
 771                                /* Is output stopped right now, if so, resume it */
 772                                if (brd->channels[port]->ch_flags & CH_STOP) {
 773                                        ch->ch_flags &= ~(CH_STOP);
 774                                }
 775                                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 776                                        "Port %d. XON detected in incoming data\n",
 777                                        port);
 778                        }
 779                        else if (cause == UART_17158_XOFF_DETECT) {
 780                                if (!(brd->channels[port]->ch_flags & CH_STOP)) {
 781                                        ch->ch_flags |= CH_STOP;
 782                                        jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 783                                                "Setting CH_STOP\n");
 784                                }
 785                                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 786                                        "Port: %d. XOFF detected in incoming data\n",
 787                                        port);
 788                        }
 789                        spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 790                }
 791
 792                if (isr & UART_17158_IIR_HWFLOW_STATE_CHANGE) {
 793                        /*
 794                         * If we get here, this means the hardware is doing auto flow control.
 795                         * Check to see whether RTS/DTR or CTS/DSR caused this interrupt.
 796                         */
 797                        cause = readb(&ch->ch_neo_uart->mcr);
 798
 799                        /* Which pin is doing auto flow? RTS or DTR? */
 800                        spin_lock_irqsave(&ch->ch_lock, lock_flags);
 801                        if ((cause & 0x4) == 0) {
 802                                if (cause & UART_MCR_RTS)
 803                                        ch->ch_mostat |= UART_MCR_RTS;
 804                                else
 805                                        ch->ch_mostat &= ~(UART_MCR_RTS);
 806                        } else {
 807                                if (cause & UART_MCR_DTR)
 808                                        ch->ch_mostat |= UART_MCR_DTR;
 809                                else
 810                                        ch->ch_mostat &= ~(UART_MCR_DTR);
 811                        }
 812                        spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 813                }
 814
 815                /* Parse any modem signal changes */
 816                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 817                        "MOD_STAT: sending to parse_modem_sigs\n");
 818                spin_lock_irqsave(&ch->uart_port.lock, lock_flags);
 819                neo_parse_modem(ch, readb(&ch->ch_neo_uart->msr));
 820                spin_unlock_irqrestore(&ch->uart_port.lock, lock_flags);
 821        }
 822}
 823
 824static inline void neo_parse_lsr(struct jsm_board *brd, u32 port)
 825{
 826        struct jsm_channel *ch;
 827        int linestatus;
 828        unsigned long lock_flags;
 829
 830        if (!brd)
 831                return;
 832
 833        if (port >= brd->maxports)
 834                return;
 835
 836        ch = brd->channels[port];
 837        if (!ch)
 838                return;
 839
 840        linestatus = readb(&ch->ch_neo_uart->lsr);
 841
 842        jsm_dbg(INTR, &ch->ch_bd->pci_dev, "%s:%d port: %d linestatus: %x\n",
 843                __FILE__, __LINE__, port, linestatus);
 844
 845        ch->ch_cached_lsr |= linestatus;
 846
 847        if (ch->ch_cached_lsr & UART_LSR_DR) {
 848                /* Read data from uart -> queue */
 849                neo_copy_data_from_uart_to_queue(ch);
 850                spin_lock_irqsave(&ch->ch_lock, lock_flags);
 851                jsm_check_queue_flow_control(ch);
 852                spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 853        }
 854
 855        /*
 856         * This is a special flag. It indicates that at least 1
 857         * RX error (parity, framing, or break) has happened.
 858         * Mark this in our struct, which will tell me that I have
 859         *to do the special RX+LSR read for this FIFO load.
 860         */
 861        if (linestatus & UART_17158_RX_FIFO_DATA_ERROR)
 862                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 863                        "%s:%d Port: %d Got an RX error, need to parse LSR\n",
 864                        __FILE__, __LINE__, port);
 865
 866        /*
 867         * The next 3 tests should *NOT* happen, as the above test
 868         * should encapsulate all 3... At least, thats what Exar says.
 869         */
 870
 871        if (linestatus & UART_LSR_PE) {
 872                ch->ch_err_parity++;
 873                jsm_dbg(INTR, &ch->ch_bd->pci_dev, "%s:%d Port: %d. PAR ERR!\n",
 874                        __FILE__, __LINE__, port);
 875        }
 876
 877        if (linestatus & UART_LSR_FE) {
 878                ch->ch_err_frame++;
 879                jsm_dbg(INTR, &ch->ch_bd->pci_dev, "%s:%d Port: %d. FRM ERR!\n",
 880                        __FILE__, __LINE__, port);
 881        }
 882
 883        if (linestatus & UART_LSR_BI) {
 884                ch->ch_err_break++;
 885                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 886                        "%s:%d Port: %d. BRK INTR!\n",
 887                        __FILE__, __LINE__, port);
 888        }
 889
 890        if (linestatus & UART_LSR_OE) {
 891                /*
 892                 * Rx Oruns. Exar says that an orun will NOT corrupt
 893                 * the FIFO. It will just replace the holding register
 894                 * with this new data byte. So basically just ignore this.
 895                 * Probably we should eventually have an orun stat in our driver...
 896                 */
 897                ch->ch_err_overrun++;
 898                jsm_dbg(INTR, &ch->ch_bd->pci_dev,
 899                        "%s:%d Port: %d. Rx Overrun!\n",
 900                        __FILE__, __LINE__, port);
 901        }
 902
 903        if (linestatus & UART_LSR_THRE) {
 904                spin_lock_irqsave(&ch->ch_lock, lock_flags);
 905                ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 906                spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 907
 908                /* Transfer data (if any) from Write Queue -> UART. */
 909                neo_copy_data_from_queue_to_uart(ch);
 910        }
 911        else if (linestatus & UART_17158_TX_AND_FIFO_CLR) {
 912                spin_lock_irqsave(&ch->ch_lock, lock_flags);
 913                ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
 914                spin_unlock_irqrestore(&ch->ch_lock, lock_flags);
 915
 916                /* Transfer data (if any) from Write Queue -> UART. */
 917                neo_copy_data_from_queue_to_uart(ch);
 918        }
 919}
 920
 921/*
 922 * neo_param()
 923 * Send any/all changes to the line to the UART.
 924 */
 925static void neo_param(struct jsm_channel *ch)
 926{
 927        u8 lcr = 0;
 928        u8 uart_lcr, ier;
 929        u32 baud;
 930        int quot;
 931        struct jsm_board *bd;
 932
 933        bd = ch->ch_bd;
 934        if (!bd)
 935                return;
 936
 937        /*
 938         * If baud rate is zero, flush queues, and set mval to drop DTR.
 939         */
 940        if ((ch->ch_c_cflag & (CBAUD)) == 0) {
 941                ch->ch_r_head = ch->ch_r_tail = 0;
 942                ch->ch_e_head = ch->ch_e_tail = 0;
 943
 944                neo_flush_uart_write(ch);
 945                neo_flush_uart_read(ch);
 946
 947                ch->ch_flags |= (CH_BAUD0);
 948                ch->ch_mostat &= ~(UART_MCR_RTS | UART_MCR_DTR);
 949                neo_assert_modem_signals(ch);
 950                return;
 951
 952        } else {
 953                int i;
 954                unsigned int cflag;
 955                static struct {
 956                        unsigned int rate;
 957                        unsigned int cflag;
 958                } baud_rates[] = {
 959                        { 921600, B921600 },
 960                        { 460800, B460800 },
 961                        { 230400, B230400 },
 962                        { 115200, B115200 },
 963                        {  57600, B57600  },
 964                        {  38400, B38400  },
 965                        {  19200, B19200  },
 966                        {   9600, B9600   },
 967                        {   4800, B4800   },
 968                        {   2400, B2400   },
 969                        {   1200, B1200   },
 970                        {    600, B600    },
 971                        {    300, B300    },
 972                        {    200, B200    },
 973                        {    150, B150    },
 974                        {    134, B134    },
 975                        {    110, B110    },
 976                        {     75, B75     },
 977                        {     50, B50     },
 978                };
 979
 980                cflag = C_BAUD(ch->uart_port.state->port.tty);
 981                baud = 9600;
 982                for (i = 0; i < ARRAY_SIZE(baud_rates); i++) {
 983                        if (baud_rates[i].cflag == cflag) {
 984                                baud = baud_rates[i].rate;
 985                                break;
 986                        }
 987                }
 988
 989                if (ch->ch_flags & CH_BAUD0)
 990                        ch->ch_flags &= ~(CH_BAUD0);
 991        }
 992
 993        if (ch->ch_c_cflag & PARENB)
 994                lcr |= UART_LCR_PARITY;
 995
 996        if (!(ch->ch_c_cflag & PARODD))
 997                lcr |= UART_LCR_EPAR;
 998
 999        /*
1000         * Not all platforms support mark/space parity,
1001         * so this will hide behind an ifdef.
1002         */
1003#ifdef CMSPAR
1004        if (ch->ch_c_cflag & CMSPAR)
1005                lcr |= UART_LCR_SPAR;
1006#endif
1007
1008        if (ch->ch_c_cflag & CSTOPB)
1009                lcr |= UART_LCR_STOP;
1010
1011        switch (ch->ch_c_cflag & CSIZE) {
1012        case CS5:
1013                lcr |= UART_LCR_WLEN5;
1014                break;
1015        case CS6:
1016                lcr |= UART_LCR_WLEN6;
1017                break;
1018        case CS7:
1019                lcr |= UART_LCR_WLEN7;
1020                break;
1021        case CS8:
1022        default:
1023                lcr |= UART_LCR_WLEN8;
1024        break;
1025        }
1026
1027        ier = readb(&ch->ch_neo_uart->ier);
1028        uart_lcr = readb(&ch->ch_neo_uart->lcr);
1029
1030        quot = ch->ch_bd->bd_dividend / baud;
1031
1032        if (quot != 0) {
1033                writeb(UART_LCR_DLAB, &ch->ch_neo_uart->lcr);
1034                writeb((quot & 0xff), &ch->ch_neo_uart->txrx);
1035                writeb((quot >> 8), &ch->ch_neo_uart->ier);
1036                writeb(lcr, &ch->ch_neo_uart->lcr);
1037        }
1038
1039        if (uart_lcr != lcr)
1040                writeb(lcr, &ch->ch_neo_uart->lcr);
1041
1042        if (ch->ch_c_cflag & CREAD)
1043                ier |= (UART_IER_RDI | UART_IER_RLSI);
1044
1045        ier |= (UART_IER_THRI | UART_IER_MSI);
1046
1047        writeb(ier, &ch->ch_neo_uart->ier);
1048
1049        /* Set new start/stop chars */
1050        neo_set_new_start_stop_chars(ch);
1051
1052        if (ch->ch_c_cflag & CRTSCTS)
1053                neo_set_cts_flow_control(ch);
1054        else if (ch->ch_c_iflag & IXON) {
1055                /* If start/stop is set to disable, then we should disable flow control */
1056                if ((ch->ch_startc == __DISABLED_CHAR) || (ch->ch_stopc == __DISABLED_CHAR))
1057                        neo_set_no_output_flow_control(ch);
1058                else
1059                        neo_set_ixon_flow_control(ch);
1060        }
1061        else
1062                neo_set_no_output_flow_control(ch);
1063
1064        if (ch->ch_c_cflag & CRTSCTS)
1065                neo_set_rts_flow_control(ch);
1066        else if (ch->ch_c_iflag & IXOFF) {
1067                /* If start/stop is set to disable, then we should disable flow control */
1068                if ((ch->ch_startc == __DISABLED_CHAR) || (ch->ch_stopc == __DISABLED_CHAR))
1069                        neo_set_no_input_flow_control(ch);
1070                else
1071                        neo_set_ixoff_flow_control(ch);
1072        }
1073        else
1074                neo_set_no_input_flow_control(ch);
1075        /*
1076         * Adjust the RX FIFO Trigger level if baud is less than 9600.
1077         * Not exactly elegant, but this is needed because of the Exar chip's
1078         * delay on firing off the RX FIFO interrupt on slower baud rates.
1079         */
1080        if (baud < 9600) {
1081                writeb(1, &ch->ch_neo_uart->rfifo);
1082                ch->ch_r_tlevel = 1;
1083        }
1084
1085        neo_assert_modem_signals(ch);
1086
1087        /* Get current status of the modem signals now */
1088        neo_parse_modem(ch, readb(&ch->ch_neo_uart->msr));
1089        return;
1090}
1091
1092/*
1093 * jsm_neo_intr()
1094 *
1095 * Neo specific interrupt handler.
1096 */
1097static irqreturn_t neo_intr(int irq, void *voidbrd)
1098{
1099        struct jsm_board *brd = voidbrd;
1100        struct jsm_channel *ch;
1101        int port = 0;
1102        int type = 0;
1103        int current_port;
1104        u32 tmp;
1105        u32 uart_poll;
1106        unsigned long lock_flags;
1107        unsigned long lock_flags2;
1108        int outofloop_count = 0;
1109
1110        /* Lock out the slow poller from running on this board. */
1111        spin_lock_irqsave(&brd->bd_intr_lock, lock_flags);
1112
1113        /*
1114         * Read in "extended" IRQ information from the 32bit Neo register.
1115         * Bits 0-7: What port triggered the interrupt.
1116         * Bits 8-31: Each 3bits indicate what type of interrupt occurred.
1117         */
1118        uart_poll = readl(brd->re_map_membase + UART_17158_POLL_ADDR_OFFSET);
1119
1120        jsm_dbg(INTR, &brd->pci_dev, "%s:%d uart_poll: %x\n",
1121                __FILE__, __LINE__, uart_poll);
1122
1123        if (!uart_poll) {
1124                jsm_dbg(INTR, &brd->pci_dev,
1125                        "Kernel interrupted to me, but no pending interrupts...\n");
1126                spin_unlock_irqrestore(&brd->bd_intr_lock, lock_flags);
1127                return IRQ_NONE;
1128        }
1129
1130        /* At this point, we have at least SOMETHING to service, dig further... */
1131
1132        current_port = 0;
1133
1134        /* Loop on each port */
1135        while (((uart_poll & 0xff) != 0) && (outofloop_count < 0xff)){
1136
1137                tmp = uart_poll;
1138                outofloop_count++;
1139
1140                /* Check current port to see if it has interrupt pending */
1141                if ((tmp & jsm_offset_table[current_port]) != 0) {
1142                        port = current_port;
1143                        type = tmp >> (8 + (port * 3));
1144                        type &= 0x7;
1145                } else {
1146                        current_port++;
1147                        continue;
1148                }
1149
1150                jsm_dbg(INTR, &brd->pci_dev, "%s:%d port: %x type: %x\n",
1151                        __FILE__, __LINE__, port, type);
1152
1153                /* Remove this port + type from uart_poll */
1154                uart_poll &= ~(jsm_offset_table[port]);
1155
1156                if (!type) {
1157                        /* If no type, just ignore it, and move onto next port */
1158                        jsm_dbg(INTR, &brd->pci_dev,
1159                                "Interrupt with no type! port: %d\n", port);
1160                        continue;
1161                }
1162
1163                /* Switch on type of interrupt we have */
1164                switch (type) {
1165
1166                case UART_17158_RXRDY_TIMEOUT:
1167                        /*
1168                         * RXRDY Time-out is cleared by reading data in the
1169                        * RX FIFO until it falls below the trigger level.
1170                         */
1171
1172                        /* Verify the port is in range. */
1173                        if (port >= brd->nasync)
1174                                continue;
1175
1176                        ch = brd->channels[port];
1177                        if (!ch)
1178                                continue;
1179
1180                        neo_copy_data_from_uart_to_queue(ch);
1181
1182                        /* Call our tty layer to enforce queue flow control if needed. */
1183                        spin_lock_irqsave(&ch->ch_lock, lock_flags2);
1184                        jsm_check_queue_flow_control(ch);
1185                        spin_unlock_irqrestore(&ch->ch_lock, lock_flags2);
1186
1187                        continue;
1188
1189                case UART_17158_RX_LINE_STATUS:
1190                        /*
1191                         * RXRDY and RX LINE Status (logic OR of LSR[4:1])
1192                         */
1193                        neo_parse_lsr(brd, port);
1194                        continue;
1195
1196                case UART_17158_TXRDY:
1197                        /*
1198                         * TXRDY interrupt clears after reading ISR register for the UART channel.
1199                         */
1200
1201                        /*
1202                         * Yes, this is odd...
1203                         * Why would I check EVERY possibility of type of
1204                         * interrupt, when we know its TXRDY???
1205                         * Becuz for some reason, even tho we got triggered for TXRDY,
1206                         * it seems to be occasionally wrong. Instead of TX, which
1207                         * it should be, I was getting things like RXDY too. Weird.
1208                         */
1209                        neo_parse_isr(brd, port);
1210                        continue;
1211
1212                case UART_17158_MSR:
1213                        /*
1214                         * MSR or flow control was seen.
1215                         */
1216                        neo_parse_isr(brd, port);
1217                        continue;
1218
1219                default:
1220                        /*
1221                         * The UART triggered us with a bogus interrupt type.
1222                         * It appears the Exar chip, when REALLY bogged down, will throw
1223                         * these once and awhile.
1224                         * Its harmless, just ignore it and move on.
1225                         */
1226                        jsm_dbg(INTR, &brd->pci_dev,
1227                                "%s:%d Unknown Interrupt type: %x\n",
1228                                __FILE__, __LINE__, type);
1229                        continue;
1230                }
1231        }
1232
1233        spin_unlock_irqrestore(&brd->bd_intr_lock, lock_flags);
1234
1235        jsm_dbg(INTR, &brd->pci_dev, "finish\n");
1236        return IRQ_HANDLED;
1237}
1238
1239/*
1240 * Neo specific way of turning off the receiver.
1241 * Used as a way to enforce queue flow control when in
1242 * hardware flow control mode.
1243 */
1244static void neo_disable_receiver(struct jsm_channel *ch)
1245{
1246        u8 tmp = readb(&ch->ch_neo_uart->ier);
1247        tmp &= ~(UART_IER_RDI);
1248        writeb(tmp, &ch->ch_neo_uart->ier);
1249
1250        /* flush write operation */
1251        neo_pci_posting_flush(ch->ch_bd);
1252}
1253
1254
1255/*
1256 * Neo specific way of turning on the receiver.
1257 * Used as a way to un-enforce queue flow control when in
1258 * hardware flow control mode.
1259 */
1260static void neo_enable_receiver(struct jsm_channel *ch)
1261{
1262        u8 tmp = readb(&ch->ch_neo_uart->ier);
1263        tmp |= (UART_IER_RDI);
1264        writeb(tmp, &ch->ch_neo_uart->ier);
1265
1266        /* flush write operation */
1267        neo_pci_posting_flush(ch->ch_bd);
1268}
1269
1270static void neo_send_start_character(struct jsm_channel *ch)
1271{
1272        if (!ch)
1273                return;
1274
1275        if (ch->ch_startc != __DISABLED_CHAR) {
1276                ch->ch_xon_sends++;
1277                writeb(ch->ch_startc, &ch->ch_neo_uart->txrx);
1278
1279                /* flush write operation */
1280                neo_pci_posting_flush(ch->ch_bd);
1281        }
1282}
1283
1284static void neo_send_stop_character(struct jsm_channel *ch)
1285{
1286        if (!ch)
1287                return;
1288
1289        if (ch->ch_stopc != __DISABLED_CHAR) {
1290                ch->ch_xoff_sends++;
1291                writeb(ch->ch_stopc, &ch->ch_neo_uart->txrx);
1292
1293                /* flush write operation */
1294                neo_pci_posting_flush(ch->ch_bd);
1295        }
1296}
1297
1298/*
1299 * neo_uart_init
1300 */
1301static void neo_uart_init(struct jsm_channel *ch)
1302{
1303        writeb(0, &ch->ch_neo_uart->ier);
1304        writeb(0, &ch->ch_neo_uart->efr);
1305        writeb(UART_EFR_ECB, &ch->ch_neo_uart->efr);
1306
1307        /* Clear out UART and FIFO */
1308        readb(&ch->ch_neo_uart->txrx);
1309        writeb((UART_FCR_ENABLE_FIFO|UART_FCR_CLEAR_RCVR|UART_FCR_CLEAR_XMIT), &ch->ch_neo_uart->isr_fcr);
1310        readb(&ch->ch_neo_uart->lsr);
1311        readb(&ch->ch_neo_uart->msr);
1312
1313        ch->ch_flags |= CH_FIFO_ENABLED;
1314
1315        /* Assert any signals we want up */
1316        writeb(ch->ch_mostat, &ch->ch_neo_uart->mcr);
1317}
1318
1319/*
1320 * Make the UART completely turn off.
1321 */
1322static void neo_uart_off(struct jsm_channel *ch)
1323{
1324        /* Turn off UART enhanced bits */
1325        writeb(0, &ch->ch_neo_uart->efr);
1326
1327        /* Stop all interrupts from occurring. */
1328        writeb(0, &ch->ch_neo_uart->ier);
1329}
1330
1331static u32 neo_get_uart_bytes_left(struct jsm_channel *ch)
1332{
1333        u8 left = 0;
1334        u8 lsr = readb(&ch->ch_neo_uart->lsr);
1335
1336        /* We must cache the LSR as some of the bits get reset once read... */
1337        ch->ch_cached_lsr |= lsr;
1338
1339        /* Determine whether the Transmitter is empty or not */
1340        if (!(lsr & UART_LSR_TEMT))
1341                left = 1;
1342        else {
1343                ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
1344                left = 0;
1345        }
1346
1347        return left;
1348}
1349
1350/* Channel lock MUST be held by the calling function! */
1351static void neo_send_break(struct jsm_channel *ch)
1352{
1353        /*
1354         * Set the time we should stop sending the break.
1355         * If we are already sending a break, toss away the existing
1356         * time to stop, and use this new value instead.
1357         */
1358
1359        /* Tell the UART to start sending the break */
1360        if (!(ch->ch_flags & CH_BREAK_SENDING)) {
1361                u8 temp = readb(&ch->ch_neo_uart->lcr);
1362                writeb((temp | UART_LCR_SBC), &ch->ch_neo_uart->lcr);
1363                ch->ch_flags |= (CH_BREAK_SENDING);
1364
1365                /* flush write operation */
1366                neo_pci_posting_flush(ch->ch_bd);
1367        }
1368}
1369
1370/*
1371 * neo_send_immediate_char.
1372 *
1373 * Sends a specific character as soon as possible to the UART,
1374 * jumping over any bytes that might be in the write queue.
1375 *
1376 * The channel lock MUST be held by the calling function.
1377 */
1378static void neo_send_immediate_char(struct jsm_channel *ch, unsigned char c)
1379{
1380        if (!ch)
1381                return;
1382
1383        writeb(c, &ch->ch_neo_uart->txrx);
1384
1385        /* flush write operation */
1386        neo_pci_posting_flush(ch->ch_bd);
1387}
1388
1389struct board_ops jsm_neo_ops = {
1390        .intr                           = neo_intr,
1391        .uart_init                      = neo_uart_init,
1392        .uart_off                       = neo_uart_off,
1393        .param                          = neo_param,
1394        .assert_modem_signals           = neo_assert_modem_signals,
1395        .flush_uart_write               = neo_flush_uart_write,
1396        .flush_uart_read                = neo_flush_uart_read,
1397        .disable_receiver               = neo_disable_receiver,
1398        .enable_receiver                = neo_enable_receiver,
1399        .send_break                     = neo_send_break,
1400        .clear_break                    = neo_clear_break,
1401        .send_start_character           = neo_send_start_character,
1402        .send_stop_character            = neo_send_stop_character,
1403        .copy_data_from_queue_to_uart   = neo_copy_data_from_queue_to_uart,
1404        .get_uart_bytes_left            = neo_get_uart_bytes_left,
1405        .send_immediate_char            = neo_send_immediate_char
1406};
1407