tag | line | file | source code |
portp | 612 | drivers/char/istallion.c | static int stli_initopen(stlibrd_t *brdp, stliport_t *portp); |
portp | 613 | drivers/char/istallion.c | static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait); |
portp | 614 | drivers/char/istallion.c | static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait); |
portp | 615 | drivers/char/istallion.c | static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp); |
portp | 618 | drivers/char/istallion.c | static int stli_setport(stliport_t *portp); |
portp | 619 | drivers/char/istallion.c | static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback); |
portp | 620 | drivers/char/istallion.c | static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback); |
portp | 621 | drivers/char/istallion.c | static void stli_dodelaycmd(stliport_t *portp, volatile cdkctrl_t *cp); |
portp | 622 | drivers/char/istallion.c | static void stli_mkasyport(stliport_t *portp, asyport_t *pp, struct termios *tiosp); |
portp | 625 | drivers/char/istallion.c | static void stli_read(stlibrd_t *brdp, stliport_t *portp); |
portp | 626 | drivers/char/istallion.c | static void stli_getserial(stliport_t *portp, struct serial_struct *sp); |
portp | 627 | drivers/char/istallion.c | static int stli_setserial(stliport_t *portp, struct serial_struct *sp); |
portp | 741 | drivers/char/istallion.c | stliport_t *portp; |
portp | 781 | drivers/char/istallion.c | portp = brdp->ports[j]; |
portp | 782 | drivers/char/istallion.c | if (portp != (stliport_t *) NULL) { |
portp | 783 | drivers/char/istallion.c | if (portp->tty != (struct tty_struct *) NULL) |
portp | 784 | drivers/char/istallion.c | tty_hangup(portp->tty); |
portp | 785 | drivers/char/istallion.c | kfree_s(portp, sizeof(stliport_t)); |
portp | 826 | drivers/char/istallion.c | stliport_t *portp; |
portp | 847 | drivers/char/istallion.c | portp = brdp->ports[portnr]; |
portp | 848 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 850 | drivers/char/istallion.c | if (portp->devnr < 1) |
portp | 859 | drivers/char/istallion.c | if (portp->flags & ASYNC_CLOSING) { |
portp | 860 | drivers/char/istallion.c | interruptible_sleep_on(&portp->close_wait); |
portp | 861 | drivers/char/istallion.c | if (portp->flags & ASYNC_HUP_NOTIFY) |
portp | 872 | drivers/char/istallion.c | portp->tty = tty; |
portp | 873 | drivers/char/istallion.c | tty->driver_data = portp; |
portp | 874 | drivers/char/istallion.c | portp->refcount++; |
portp | 876 | drivers/char/istallion.c | while (test_bit(ST_INITIALIZING, &portp->state)) { |
portp | 879 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 882 | drivers/char/istallion.c | if ((portp->flags & ASYNC_INITIALIZED) == 0) { |
portp | 883 | drivers/char/istallion.c | set_bit(ST_INITIALIZING, &portp->state); |
portp | 884 | drivers/char/istallion.c | if ((rc = stli_initopen(brdp, portp)) >= 0) { |
portp | 885 | drivers/char/istallion.c | portp->flags |= ASYNC_INITIALIZED; |
portp | 888 | drivers/char/istallion.c | clear_bit(ST_INITIALIZING, &portp->state); |
portp | 889 | drivers/char/istallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 900 | drivers/char/istallion.c | if (portp->flags & ASYNC_CLOSING) { |
portp | 901 | drivers/char/istallion.c | interruptible_sleep_on(&portp->close_wait); |
portp | 902 | drivers/char/istallion.c | if (portp->flags & ASYNC_HUP_NOTIFY) |
portp | 913 | drivers/char/istallion.c | if (portp->flags & ASYNC_NORMAL_ACTIVE) |
portp | 915 | drivers/char/istallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) { |
portp | 916 | drivers/char/istallion.c | if ((portp->flags & ASYNC_SESSION_LOCKOUT) && |
portp | 917 | drivers/char/istallion.c | (portp->session != current->session)) |
portp | 919 | drivers/char/istallion.c | if ((portp->flags & ASYNC_PGRP_LOCKOUT) && |
portp | 920 | drivers/char/istallion.c | (portp->pgrp != current->pgrp)) |
portp | 923 | drivers/char/istallion.c | portp->flags |= ASYNC_CALLOUT_ACTIVE; |
portp | 926 | drivers/char/istallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) |
portp | 929 | drivers/char/istallion.c | if ((rc = stli_waitcarrier(brdp, portp, filp)) != 0) |
portp | 932 | drivers/char/istallion.c | portp->flags |= ASYNC_NORMAL_ACTIVE; |
portp | 935 | drivers/char/istallion.c | if ((portp->refcount == 1) && (portp->flags & ASYNC_SPLIT_TERMIOS)) { |
portp | 937 | drivers/char/istallion.c | *tty->termios = portp->normaltermios; |
portp | 939 | drivers/char/istallion.c | *tty->termios = portp->callouttermios; |
portp | 940 | drivers/char/istallion.c | stli_setport(portp); |
portp | 943 | drivers/char/istallion.c | portp->session = current->session; |
portp | 944 | drivers/char/istallion.c | portp->pgrp = current->pgrp; |
portp | 953 | drivers/char/istallion.c | stliport_t *portp; |
portp | 960 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 961 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 970 | drivers/char/istallion.c | if (portp->refcount-- > 1) { |
portp | 975 | drivers/char/istallion.c | portp->flags |= ASYNC_CLOSING; |
portp | 977 | drivers/char/istallion.c | if (portp->flags & ASYNC_NORMAL_ACTIVE) |
portp | 978 | drivers/char/istallion.c | portp->normaltermios = *tty->termios; |
portp | 979 | drivers/char/istallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) |
portp | 980 | drivers/char/istallion.c | portp->callouttermios = *tty->termios; |
portp | 991 | drivers/char/istallion.c | if (test_bit(ST_TXBUSY, &portp->state)) { |
portp | 992 | drivers/char/istallion.c | if (portp->closing_wait != ASYNC_CLOSING_WAIT_NONE) |
portp | 993 | drivers/char/istallion.c | tty_wait_until_sent(tty, portp->closing_wait); |
portp | 996 | drivers/char/istallion.c | portp->flags &= ~ASYNC_INITIALIZED; |
portp | 997 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 998 | drivers/char/istallion.c | stli_rawclose(brdp, portp, 0, 1); |
portp | 1000 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, 0, 0); |
portp | 1001 | drivers/char/istallion.c | stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0); |
portp | 1003 | drivers/char/istallion.c | clear_bit(ST_TXBUSY, &portp->state); |
portp | 1004 | drivers/char/istallion.c | clear_bit(ST_RXSTOP, &portp->state); |
portp | 1008 | drivers/char/istallion.c | set_bit(ST_DOFLUSHRX, &portp->state); |
portp | 1013 | drivers/char/istallion.c | portp->tty = (struct tty_struct *) NULL; |
portp | 1015 | drivers/char/istallion.c | if (portp->openwaitcnt) { |
portp | 1016 | drivers/char/istallion.c | if (portp->close_delay) |
portp | 1017 | drivers/char/istallion.c | stli_delay(portp->close_delay); |
portp | 1018 | drivers/char/istallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 1021 | drivers/char/istallion.c | portp->flags &= ~(ASYNC_CALLOUT_ACTIVE | ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); |
portp | 1022 | drivers/char/istallion.c | wake_up_interruptible(&portp->close_wait); |
portp | 1036 | drivers/char/istallion.c | static int stli_initopen(stlibrd_t *brdp, stliport_t *portp) |
portp | 1044 | drivers/char/istallion.c | printk("stli_initopen(brdp=%x,portp=%x)\n", (int) brdp, (int) portp); |
portp | 1047 | drivers/char/istallion.c | if ((rc = stli_rawopen(brdp, portp, 0, 1)) < 0) |
portp | 1053 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_SETNOTIFY, &nt, sizeof(asynotify_t), 0)) < 0) |
portp | 1056 | drivers/char/istallion.c | tty = portp->tty; |
portp | 1059 | drivers/char/istallion.c | stli_mkasyport(portp, &aport, tty->termios); |
portp | 1060 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0)) < 0) |
portp | 1063 | drivers/char/istallion.c | set_bit(ST_GETSIGS, &portp->state); |
portp | 1064 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS, &portp->asig, sizeof(asysigs_t), 1)) < 0) |
portp | 1066 | drivers/char/istallion.c | if (clear_bit(ST_GETSIGS, &portp->state)) |
portp | 1067 | drivers/char/istallion.c | portp->sigs = stli_mktiocm(portp->asig.sigvalue); |
portp | 1068 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, 1, 1); |
portp | 1069 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0)) < 0) |
portp | 1084 | drivers/char/istallion.c | static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait) |
portp | 1093 | drivers/char/istallion.c | printk("stli_rawopen(brdp=%x,portp=%x,arg=%x,wait=%d)\n", (int) brdp, (int) portp, (int) arg, wait); |
portp | 1108 | drivers/char/istallion.c | while (test_bit(ST_CLOSING, &portp->state)) { |
portp | 1113 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1122 | drivers/char/istallion.c | cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl; |
portp | 1126 | drivers/char/istallion.c | hdrp->slavereq |= portp->reqbit; |
portp | 1127 | drivers/char/istallion.c | bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset + portp->portidx; |
portp | 1128 | drivers/char/istallion.c | *bits |= portp->portbit; |
portp | 1141 | drivers/char/istallion.c | set_bit(ST_OPENING, &portp->state); |
portp | 1142 | drivers/char/istallion.c | while (test_bit(ST_OPENING, &portp->state)) { |
portp | 1147 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1151 | drivers/char/istallion.c | if ((rc == 0) && (portp->rc != 0)) |
portp | 1164 | drivers/char/istallion.c | static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait) |
portp | 1173 | drivers/char/istallion.c | printk("stli_rawclose(brdp=%x,portp=%x,arg=%x,wait=%d)\n", (int) brdp, (int) portp, (int) arg, wait); |
portp | 1184 | drivers/char/istallion.c | while (test_bit(ST_CLOSING, &portp->state)) { |
portp | 1189 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1197 | drivers/char/istallion.c | cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl; |
portp | 1201 | drivers/char/istallion.c | hdrp->slavereq |= portp->reqbit; |
portp | 1202 | drivers/char/istallion.c | bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset + portp->portidx; |
portp | 1203 | drivers/char/istallion.c | *bits |= portp->portbit; |
portp | 1206 | drivers/char/istallion.c | set_bit(ST_CLOSING, &portp->state); |
portp | 1217 | drivers/char/istallion.c | while (test_bit(ST_CLOSING, &portp->state)) { |
portp | 1222 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1226 | drivers/char/istallion.c | if ((rc == 0) && (portp->rc != 0)) |
portp | 1240 | drivers/char/istallion.c | static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback) |
portp | 1245 | drivers/char/istallion.c | printk("stli_cmdwait(brdp=%x,portp=%x,cmd=%x,arg=%x,size=%d,copyback=%d)\n", (int) brdp, (int) portp, (int) cmd, (int) arg, size, copyback); |
portp | 1250 | drivers/char/istallion.c | while (test_bit(ST_CMDING, &portp->state)) { |
portp | 1255 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1258 | drivers/char/istallion.c | stli_sendcmd(brdp, portp, cmd, arg, size, copyback); |
portp | 1260 | drivers/char/istallion.c | while (test_bit(ST_CMDING, &portp->state)) { |
portp | 1265 | drivers/char/istallion.c | interruptible_sleep_on(&portp->raw_wait); |
portp | 1269 | drivers/char/istallion.c | if (portp->rc != 0) |
portp | 1281 | drivers/char/istallion.c | static int stli_setport(stliport_t *portp) |
portp | 1287 | drivers/char/istallion.c | printk("stli_setport(portp=%x)\n", (int) portp); |
portp | 1290 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1292 | drivers/char/istallion.c | if (portp->tty == (struct tty_struct *) NULL) |
portp | 1294 | drivers/char/istallion.c | if ((portp->brdnr < 0) && (portp->brdnr >= stli_nrbrds)) |
portp | 1296 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1298 | drivers/char/istallion.c | stli_mkasyport(portp, &aport, portp->tty->termios); |
portp | 1299 | drivers/char/istallion.c | return(stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0)); |
portp | 1329 | drivers/char/istallion.c | static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp) |
portp | 1335 | drivers/char/istallion.c | printk("stli_waitcarrier(brdp=%x,portp=%x,filp=%x)\n", (int) brdp, (int) portp, (int) filp); |
portp | 1342 | drivers/char/istallion.c | portp->openwaitcnt++; |
portp | 1343 | drivers/char/istallion.c | if (portp->refcount > 0) |
portp | 1344 | drivers/char/istallion.c | portp->refcount--; |
portp | 1347 | drivers/char/istallion.c | if ((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) { |
portp | 1348 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, 1, 1); |
portp | 1349 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0)) < 0) |
portp | 1352 | drivers/char/istallion.c | if (tty_hung_up_p(filp) || ((portp->flags & ASYNC_INITIALIZED) == 0)) { |
portp | 1353 | drivers/char/istallion.c | if (portp->flags & ASYNC_HUP_NOTIFY) |
portp | 1359 | drivers/char/istallion.c | if (((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) && |
portp | 1360 | drivers/char/istallion.c | ((portp->flags & ASYNC_CLOSING) == 0) && |
portp | 1361 | drivers/char/istallion.c | ((portp->tty->termios->c_cflag & CLOCAL) || |
portp | 1362 | drivers/char/istallion.c | (portp->sigs & TIOCM_CD))) { |
portp | 1369 | drivers/char/istallion.c | interruptible_sleep_on(&portp->open_wait); |
portp | 1373 | drivers/char/istallion.c | portp->refcount++; |
portp | 1374 | drivers/char/istallion.c | portp->openwaitcnt--; |
portp | 1394 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1407 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1408 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1410 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1412 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1430 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 1435 | drivers/char/istallion.c | len = (head >= tail) ? (portp->txsize - (head - tail) - 1) : (tail - head - 1); |
portp | 1452 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 1457 | drivers/char/istallion.c | size = portp->txsize; |
portp | 1468 | drivers/char/istallion.c | shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset); |
portp | 1483 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 1485 | drivers/char/istallion.c | if (test_bit(ST_TXBUSY, &portp->state)) { |
portp | 1490 | drivers/char/istallion.c | hdrp->slavereq |= portp->reqbit; |
portp | 1491 | drivers/char/istallion.c | bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset + portp->portidx; |
portp | 1492 | drivers/char/istallion.c | *bits |= portp->portbit; |
portp | 1493 | drivers/char/istallion.c | set_bit(ST_TXBUSY, &portp->state); |
portp | 1544 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1569 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1570 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1572 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1574 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1580 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 1585 | drivers/char/istallion.c | size = portp->txsize; |
portp | 1596 | drivers/char/istallion.c | shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset); |
portp | 1612 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 1615 | drivers/char/istallion.c | if (test_bit(ST_TXBUSY, &portp->state)) { |
portp | 1620 | drivers/char/istallion.c | hdrp->slavereq |= portp->reqbit; |
portp | 1621 | drivers/char/istallion.c | bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset + portp->portidx; |
portp | 1622 | drivers/char/istallion.c | *bits |= portp->portbit; |
portp | 1623 | drivers/char/istallion.c | set_bit(ST_TXBUSY, &portp->state); |
portp | 1634 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1652 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1653 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1655 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1657 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1662 | drivers/char/istallion.c | rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->txq; |
portp | 1667 | drivers/char/istallion.c | len = (head >= tail) ? (portp->txsize - (head - tail)) : (tail - head); |
portp | 1692 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1705 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1706 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1708 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1710 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1715 | drivers/char/istallion.c | rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->txq; |
portp | 1720 | drivers/char/istallion.c | len = (head >= tail) ? (head - tail) : (portp->txsize - (tail - head)); |
portp | 1721 | drivers/char/istallion.c | if ((len == 0) && test_bit(ST_TXBUSY, &portp->state)) |
portp | 1735 | drivers/char/istallion.c | static void stli_getserial(stliport_t *portp, struct serial_struct *sp) |
portp | 1740 | drivers/char/istallion.c | printk("stli_getserial(portp=%x,sp=%x)\n", (int) portp, (int) sp); |
portp | 1745 | drivers/char/istallion.c | sio.line = portp->portnr; |
portp | 1746 | drivers/char/istallion.c | sio.port = stli_brdconf[portp->brdnr].ioaddr1; |
portp | 1747 | drivers/char/istallion.c | sio.irq = stli_brdconf[portp->brdnr].irq; |
portp | 1748 | drivers/char/istallion.c | sio.flags = portp->flags; |
portp | 1749 | drivers/char/istallion.c | sio.baud_base = portp->baud_base; |
portp | 1750 | drivers/char/istallion.c | sio.close_delay = portp->close_delay; |
portp | 1751 | drivers/char/istallion.c | sio.closing_wait = portp->closing_wait; |
portp | 1752 | drivers/char/istallion.c | sio.custom_divisor = portp->custom_divisor; |
portp | 1766 | drivers/char/istallion.c | static int stli_setserial(stliport_t *portp, struct serial_struct *sp) |
portp | 1772 | drivers/char/istallion.c | printk("stli_setserial(portp=%x,sp=%x)\n", (int) portp, (int) sp); |
portp | 1777 | drivers/char/istallion.c | if ((sio.baud_base != portp->baud_base) || |
portp | 1778 | drivers/char/istallion.c | (sio.close_delay != portp->close_delay) || |
portp | 1779 | drivers/char/istallion.c | ((sio.flags & ~ASYNC_USR_MASK) != (portp->flags & ~ASYNC_USR_MASK))) |
portp | 1783 | drivers/char/istallion.c | portp->flags = (portp->flags & ~ASYNC_USR_MASK) | (sio.flags & ASYNC_USR_MASK); |
portp | 1784 | drivers/char/istallion.c | portp->baud_base = sio.baud_base; |
portp | 1785 | drivers/char/istallion.c | portp->close_delay = sio.close_delay; |
portp | 1786 | drivers/char/istallion.c | portp->closing_wait = sio.closing_wait; |
portp | 1787 | drivers/char/istallion.c | portp->custom_divisor = sio.custom_divisor; |
portp | 1789 | drivers/char/istallion.c | if ((rc = stli_setport(portp)) < 0) |
portp | 1798 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1809 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1810 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1812 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1814 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1824 | drivers/char/istallion.c | rc = stli_cmdwait(brdp, portp, A_BREAK, &val, sizeof(unsigned long), 0); |
portp | 1832 | drivers/char/istallion.c | rc = stli_cmdwait(brdp, portp, A_BREAK, &val, sizeof(unsigned long), 0); |
portp | 1847 | drivers/char/istallion.c | if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS, &portp->asig, sizeof(asysigs_t), 1)) < 0) |
portp | 1849 | drivers/char/istallion.c | val = stli_mktiocm(portp->asig.sigvalue); |
portp | 1856 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, ((arg & TIOCM_DTR) ? 1 : -1), ((arg & TIOCM_RTS) ? 1 : -1)); |
portp | 1857 | drivers/char/istallion.c | rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0); |
portp | 1863 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, ((arg & TIOCM_DTR) ? 0 : -1), ((arg & TIOCM_RTS) ? 0 : -1)); |
portp | 1864 | drivers/char/istallion.c | rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0); |
portp | 1870 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, ((arg & TIOCM_DTR) ? 1 : 0), ((arg & TIOCM_RTS) ? 1 : 0)); |
portp | 1871 | drivers/char/istallion.c | rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0); |
portp | 1876 | drivers/char/istallion.c | stli_getserial(portp, (struct serial_struct *) arg); |
portp | 1880 | drivers/char/istallion.c | rc = stli_setserial(portp, (struct serial_struct *) arg); |
portp | 1906 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1917 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1918 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1920 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 1922 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 1928 | drivers/char/istallion.c | stli_mkasyport(portp, &aport, tiosp); |
portp | 1929 | drivers/char/istallion.c | stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0); |
portp | 1930 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, ((tiosp->c_cflag & CBAUD) ? 1 : 0), -1); |
portp | 1931 | drivers/char/istallion.c | stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig, sizeof(asysigs_t), 0); |
portp | 1935 | drivers/char/istallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 1952 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1960 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1961 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1964 | drivers/char/istallion.c | set_bit(ST_RXSTOP, &portp->state); |
portp | 1977 | drivers/char/istallion.c | stliport_t *portp; |
portp | 1985 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 1986 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 1989 | drivers/char/istallion.c | clear_bit(ST_RXSTOP, &portp->state); |
portp | 2002 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2011 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 2012 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 2014 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 2016 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 2021 | drivers/char/istallion.c | stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t)); |
portp | 2033 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2043 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 2044 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 2046 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 2048 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 2053 | drivers/char/istallion.c | stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t)); |
portp | 2070 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2076 | drivers/char/istallion.c | portp = (stliport_t *) arg; |
portp | 2077 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 2079 | drivers/char/istallion.c | if (portp->tty == (struct tty_struct *) NULL) |
portp | 2081 | drivers/char/istallion.c | tty_hangup(portp->tty); |
portp | 2095 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2105 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 2106 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 2108 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 2110 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 2112 | drivers/char/istallion.c | portp->flags &= ~ASYNC_INITIALIZED; |
portp | 2116 | drivers/char/istallion.c | if (! test_bit(ST_CLOSING, &portp->state)) |
portp | 2117 | drivers/char/istallion.c | stli_rawclose(brdp, portp, 0, 0); |
portp | 2119 | drivers/char/istallion.c | stli_mkasysigs(&portp->asig, 0, 0); |
portp | 2120 | drivers/char/istallion.c | if (test_bit(ST_CMDING, &portp->state)) { |
portp | 2121 | drivers/char/istallion.c | set_bit(ST_DOSIGS, &portp->state); |
portp | 2122 | drivers/char/istallion.c | set_bit(ST_DOFLUSHTX, &portp->state); |
portp | 2123 | drivers/char/istallion.c | set_bit(ST_DOFLUSHRX, &portp->state); |
portp | 2125 | drivers/char/istallion.c | stli_sendcmd(brdp, portp, A_SETSIGNALSF, &portp->asig, sizeof(asysigs_t), 0); |
portp | 2130 | drivers/char/istallion.c | clear_bit(ST_TXBUSY, &portp->state); |
portp | 2131 | drivers/char/istallion.c | clear_bit(ST_RXSTOP, &portp->state); |
portp | 2134 | drivers/char/istallion.c | portp->tty = (struct tty_struct *) NULL; |
portp | 2135 | drivers/char/istallion.c | portp->flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE); |
portp | 2136 | drivers/char/istallion.c | portp->refcount = 0; |
portp | 2137 | drivers/char/istallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 2151 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2161 | drivers/char/istallion.c | portp = tty->driver_data; |
portp | 2162 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 2164 | drivers/char/istallion.c | if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds)) |
portp | 2166 | drivers/char/istallion.c | brdp = &stli_brds[portp->brdnr]; |
portp | 2175 | drivers/char/istallion.c | if (test_bit(ST_CMDING, &portp->state)) { |
portp | 2176 | drivers/char/istallion.c | set_bit(ST_DOFLUSHTX, &portp->state); |
portp | 2179 | drivers/char/istallion.c | if (test_bit(ST_DOFLUSHRX, &portp->state)) { |
portp | 2181 | drivers/char/istallion.c | clear_bit(ST_DOFLUSHRX, &portp->state); |
portp | 2183 | drivers/char/istallion.c | stli_sendcmd(brdp, portp, A_FLUSH, &ftype, sizeof(unsigned long), 0); |
portp | 2204 | drivers/char/istallion.c | static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback) |
portp | 2212 | drivers/char/istallion.c | printk("stli_sendcmd(brdp=%x,portp=%x,cmd=%x,arg=%x,size=%d,copyback=%d)\n", (int) brdp, (int) portp, (int) cmd, (int) arg, size, copyback); |
portp | 2215 | drivers/char/istallion.c | if (test_bit(ST_CMDING, &portp->state)) { |
portp | 2223 | drivers/char/istallion.c | cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl; |
portp | 2227 | drivers/char/istallion.c | portp->argp = arg; |
portp | 2228 | drivers/char/istallion.c | portp->argsize = size; |
portp | 2234 | drivers/char/istallion.c | hdrp->slavereq |= portp->reqbit; |
portp | 2235 | drivers/char/istallion.c | bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset + portp->portidx; |
portp | 2236 | drivers/char/istallion.c | *bits |= portp->portbit; |
portp | 2237 | drivers/char/istallion.c | set_bit(ST_CMDING, &portp->state); |
portp | 2252 | drivers/char/istallion.c | static inline void stli_read(stlibrd_t *brdp, stliport_t *portp) |
portp | 2261 | drivers/char/istallion.c | printk("stli_read(brdp=%x,portp=%d)\n", (int) brdp, (int) portp); |
portp | 2264 | drivers/char/istallion.c | if (test_bit(ST_RXSTOP, &portp->state)) |
portp | 2266 | drivers/char/istallion.c | tty = portp->tty; |
portp | 2270 | drivers/char/istallion.c | rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->rxq; |
portp | 2275 | drivers/char/istallion.c | size = portp->rxsize; |
portp | 2285 | drivers/char/istallion.c | shbuf = (volatile char *) EBRDGETMEMPTR(brdp, portp->rxoffset); |
portp | 2302 | drivers/char/istallion.c | rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->rxq; |
portp | 2306 | drivers/char/istallion.c | set_bit(ST_RXING, &portp->state); |
portp | 2319 | drivers/char/istallion.c | static inline void stli_dodelaycmd(stliport_t *portp, volatile cdkctrl_t *cp) |
portp | 2323 | drivers/char/istallion.c | if (test_bit(ST_DOSIGS, &portp->state)) { |
portp | 2324 | drivers/char/istallion.c | if (test_bit(ST_DOFLUSHTX, &portp->state) && test_bit(ST_DOFLUSHRX, &portp->state)) |
portp | 2326 | drivers/char/istallion.c | else if (test_bit(ST_DOFLUSHTX, &portp->state)) |
portp | 2328 | drivers/char/istallion.c | else if (test_bit(ST_DOFLUSHRX, &portp->state)) |
portp | 2332 | drivers/char/istallion.c | clear_bit(ST_DOFLUSHTX, &portp->state); |
portp | 2333 | drivers/char/istallion.c | clear_bit(ST_DOFLUSHRX, &portp->state); |
portp | 2334 | drivers/char/istallion.c | clear_bit(ST_DOSIGS, &portp->state); |
portp | 2335 | drivers/char/istallion.c | memcpy((void *) &(cp->args[0]), (void *) &portp->asig, sizeof(asysigs_t)); |
portp | 2338 | drivers/char/istallion.c | set_bit(ST_CMDING, &portp->state); |
portp | 2339 | drivers/char/istallion.c | } else if (test_bit(ST_DOFLUSHTX, &portp->state) || test_bit(ST_DOFLUSHRX, &portp->state)) { |
portp | 2340 | drivers/char/istallion.c | cmd = ((test_bit(ST_DOFLUSHTX, &portp->state)) ? FLUSHTX : 0); |
portp | 2341 | drivers/char/istallion.c | cmd |= ((test_bit(ST_DOFLUSHRX, &portp->state)) ? FLUSHRX : 0); |
portp | 2342 | drivers/char/istallion.c | clear_bit(ST_DOFLUSHTX, &portp->state); |
portp | 2343 | drivers/char/istallion.c | clear_bit(ST_DOFLUSHRX, &portp->state); |
portp | 2347 | drivers/char/istallion.c | set_bit(ST_CMDING, &portp->state); |
portp | 2367 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2375 | drivers/char/istallion.c | portp = brdp->ports[(channr - 1)]; |
portp | 2376 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 2382 | drivers/char/istallion.c | if (test_bit(ST_OPENING, &portp->state)) { |
portp | 2388 | drivers/char/istallion.c | portp->rc = rc; |
portp | 2389 | drivers/char/istallion.c | clear_bit(ST_OPENING, &portp->state); |
portp | 2390 | drivers/char/istallion.c | wake_up_interruptible(&portp->raw_wait); |
portp | 2397 | drivers/char/istallion.c | if (test_bit(ST_CLOSING, &portp->state)) { |
portp | 2403 | drivers/char/istallion.c | portp->rc = rc; |
portp | 2404 | drivers/char/istallion.c | clear_bit(ST_CLOSING, &portp->state); |
portp | 2405 | drivers/char/istallion.c | wake_up_interruptible(&portp->raw_wait); |
portp | 2413 | drivers/char/istallion.c | if (test_bit(ST_CMDING, &portp->state)) { |
portp | 2418 | drivers/char/istallion.c | if (portp->argp != (void *) NULL) { |
portp | 2419 | drivers/char/istallion.c | memcpy(portp->argp, (void *) &(cp->args[0]), portp->argsize); |
portp | 2420 | drivers/char/istallion.c | portp->argp = (void *) NULL; |
portp | 2423 | drivers/char/istallion.c | portp->rc = rc; |
portp | 2424 | drivers/char/istallion.c | clear_bit(ST_CMDING, &portp->state); |
portp | 2425 | drivers/char/istallion.c | stli_dodelaycmd(portp, cp); |
portp | 2426 | drivers/char/istallion.c | wake_up_interruptible(&portp->raw_wait); |
portp | 2440 | drivers/char/istallion.c | tty = portp->tty; |
portp | 2443 | drivers/char/istallion.c | oldsigs = portp->sigs; |
portp | 2444 | drivers/char/istallion.c | portp->sigs = stli_mktiocm(nt.sigvalue); |
portp | 2445 | drivers/char/istallion.c | clear_bit(ST_GETSIGS, &portp->state); |
portp | 2446 | drivers/char/istallion.c | if ((portp->sigs & TIOCM_CD) && ((oldsigs & TIOCM_CD) == 0)) |
portp | 2447 | drivers/char/istallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 2448 | drivers/char/istallion.c | if ((oldsigs & TIOCM_CD) && ((portp->sigs & TIOCM_CD) == 0)) { |
portp | 2449 | drivers/char/istallion.c | if (! ((portp->flags & ASYNC_CALLOUT_ACTIVE) && |
portp | 2450 | drivers/char/istallion.c | (portp->flags & ASYNC_CALLOUT_NOHUP))) { |
portp | 2452 | drivers/char/istallion.c | queue_task_irq_off(&portp->tqhangup, &tq_scheduler); |
portp | 2458 | drivers/char/istallion.c | clear_bit(ST_TXBUSY, &portp->state); |
portp | 2467 | drivers/char/istallion.c | if ((nt.data & DT_RXBREAK) && (portp->rxmarkmsk & BRKINT)) { |
portp | 2474 | drivers/char/istallion.c | if (portp->flags & ASYNC_SAK) |
portp | 2484 | drivers/char/istallion.c | stli_read(brdp, portp); |
portp | 2496 | drivers/char/istallion.c | if ((!donerx) && test_bit(ST_RXING, &portp->state)) { |
portp | 2497 | drivers/char/istallion.c | clear_bit(ST_RXING, &portp->state); |
portp | 2498 | drivers/char/istallion.c | stli_read(brdp, portp); |
portp | 2520 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2581 | drivers/char/istallion.c | portp = brdp->ports[(channr - 1)]; |
portp | 2582 | drivers/char/istallion.c | if (test_bit(ST_OPENING, &portp->state) || |
portp | 2583 | drivers/char/istallion.c | test_bit(ST_CLOSING, &portp->state) || |
portp | 2584 | drivers/char/istallion.c | test_bit(ST_CMDING, &portp->state) || |
portp | 2585 | drivers/char/istallion.c | test_bit(ST_TXBUSY, &portp->state)) { |
portp | 2586 | drivers/char/istallion.c | slavereq |= portp->reqbit; |
portp | 2610 | drivers/char/istallion.c | static void stli_mkasyport(stliport_t *portp, asyport_t *pp, struct termios *tiosp) |
portp | 2613 | drivers/char/istallion.c | printk("stli_mkasyport(portp=%x,pp=%x,tiosp=%d)\n", (int) portp, (int) pp, (int) tiosp); |
portp | 2631 | drivers/char/istallion.c | if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) |
portp | 2633 | drivers/char/istallion.c | else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) |
portp | 2635 | drivers/char/istallion.c | else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) |
portp | 2636 | drivers/char/istallion.c | pp->baudout = (portp->baud_base / portp->custom_divisor); |
portp | 2698 | drivers/char/istallion.c | portp->rxmarkmsk = 0; |
portp | 2702 | drivers/char/istallion.c | portp->rxmarkmsk |= BRKINT; |
portp | 2763 | drivers/char/istallion.c | stliport_t *portp; |
portp | 2771 | drivers/char/istallion.c | portp = (stliport_t *) stli_memalloc(sizeof(stliport_t)); |
portp | 2772 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) { |
portp | 2777 | drivers/char/istallion.c | memset(portp, 0, sizeof(stliport_t)); |
portp | 2778 | drivers/char/istallion.c | portp->portnr = i; |
portp | 2779 | drivers/char/istallion.c | portp->brdnr = brdp->brdnr; |
portp | 2780 | drivers/char/istallion.c | portp->panelnr = panelnr; |
portp | 2781 | drivers/char/istallion.c | portp->baud_base = STL_BAUDBASE; |
portp | 2782 | drivers/char/istallion.c | portp->close_delay = STL_CLOSEDELAY; |
portp | 2783 | drivers/char/istallion.c | portp->closing_wait = 30 * HZ; |
portp | 2784 | drivers/char/istallion.c | portp->tqhangup.routine = stli_dohangup; |
portp | 2785 | drivers/char/istallion.c | portp->tqhangup.data = portp; |
portp | 2786 | drivers/char/istallion.c | portp->normaltermios = stli_deftermios; |
portp | 2787 | drivers/char/istallion.c | portp->callouttermios = stli_deftermios; |
portp | 2793 | drivers/char/istallion.c | brdp->ports[i] = portp; |
portp | 3632 | drivers/char/istallion.c | stliport_t *portp; |
portp | 3683 | drivers/char/istallion.c | portp = brdp->ports[portnr]; |
portp | 3684 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 3686 | drivers/char/istallion.c | portp->devnr = i; |
portp | 3687 | drivers/char/istallion.c | portp->addr = memp->offset; |
portp | 3688 | drivers/char/istallion.c | portp->reqbit = (unsigned char) (0x1 << (i * 8 / nrdevs)); |
portp | 3689 | drivers/char/istallion.c | portp->portidx = (unsigned char) (i / 8); |
portp | 3690 | drivers/char/istallion.c | portp->portbit = (unsigned char) (0x1 << (i % 8)); |
portp | 3699 | drivers/char/istallion.c | portp = brdp->ports[portnr]; |
portp | 3700 | drivers/char/istallion.c | if (portp == (stliport_t *) NULL) |
portp | 3702 | drivers/char/istallion.c | if (portp->addr == 0) |
portp | 3704 | drivers/char/istallion.c | ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr); |
portp | 3706 | drivers/char/istallion.c | portp->rxsize = ap->rxq.size; |
portp | 3707 | drivers/char/istallion.c | portp->txsize = ap->txq.size; |
portp | 3708 | drivers/char/istallion.c | portp->rxoffset = ap->rxq.offset; |
portp | 3709 | drivers/char/istallion.c | portp->txoffset = ap->txq.offset; |
portp | 482 | drivers/char/stallion.c | static void stl_getserial(stlport_t *portp, struct serial_struct *sp); |
portp | 483 | drivers/char/stallion.c | static int stl_setserial(stlport_t *portp, struct serial_struct *sp); |
portp | 484 | drivers/char/stallion.c | static void stl_setreg(stlport_t *portp, int regnr, int value); |
portp | 485 | drivers/char/stallion.c | static int stl_getreg(stlport_t *portp, int regnr); |
portp | 486 | drivers/char/stallion.c | static int stl_updatereg(stlport_t *portp, int regnr, int value); |
portp | 487 | drivers/char/stallion.c | static void stl_setport(stlport_t *portp, struct termios *tiosp); |
portp | 488 | drivers/char/stallion.c | static void stl_getsignals(stlport_t *portp); |
portp | 489 | drivers/char/stallion.c | static void stl_setsignals(stlport_t *portp, int dtr, int rts); |
portp | 490 | drivers/char/stallion.c | static void stl_ccrwait(stlport_t *portp); |
portp | 491 | drivers/char/stallion.c | static void stl_enablerxtx(stlport_t *portp, int rx, int tx); |
portp | 492 | drivers/char/stallion.c | static void stl_startrxtx(stlport_t *portp, int rx, int tx); |
portp | 493 | drivers/char/stallion.c | static void stl_disableintrs(stlport_t *portp); |
portp | 494 | drivers/char/stallion.c | static void stl_sendbreak(stlport_t *portp, long len); |
portp | 495 | drivers/char/stallion.c | static int stl_waitcarrier(stlport_t *portp, struct file *filp); |
portp | 535 | drivers/char/stallion.c | stlport_t *portp; |
portp | 571 | drivers/char/stallion.c | portp = panelp->ports[k]; |
portp | 572 | drivers/char/stallion.c | if (portp != (stlport_t *) NULL) { |
portp | 573 | drivers/char/stallion.c | if (portp->tty != (struct tty_struct *) NULL) |
portp | 574 | drivers/char/stallion.c | stl_hangup(portp->tty); |
portp | 575 | drivers/char/stallion.c | if (portp->tx.buf != (char *) NULL) |
portp | 576 | drivers/char/stallion.c | kfree_s(portp->tx.buf, STL_TXBUFSIZE); |
portp | 577 | drivers/char/stallion.c | kfree_s(portp, sizeof(stlport_t)); |
portp | 627 | drivers/char/stallion.c | stlport_t *portp; |
portp | 656 | drivers/char/stallion.c | portp = brdp->panels[panelnr]->ports[portnr]; |
portp | 657 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 664 | drivers/char/stallion.c | portp->tty = tty; |
portp | 665 | drivers/char/stallion.c | tty->driver_data = portp; |
portp | 666 | drivers/char/stallion.c | portp->refcount++; |
portp | 668 | drivers/char/stallion.c | if ((portp->flags & ASYNC_INITIALIZED) == 0) { |
portp | 669 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) { |
portp | 670 | drivers/char/stallion.c | portp->tx.buf = (char *) stl_memalloc(STL_TXBUFSIZE); |
portp | 671 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 673 | drivers/char/stallion.c | portp->tx.head = portp->tx.buf; |
portp | 674 | drivers/char/stallion.c | portp->tx.tail = portp->tx.buf; |
portp | 676 | drivers/char/stallion.c | stl_setport(portp, tty->termios); |
portp | 677 | drivers/char/stallion.c | stl_getsignals(portp); |
portp | 678 | drivers/char/stallion.c | stl_setsignals(portp, 1, 1); |
portp | 679 | drivers/char/stallion.c | stl_enablerxtx(portp, 1, 1); |
portp | 680 | drivers/char/stallion.c | stl_startrxtx(portp, 1, 0); |
portp | 682 | drivers/char/stallion.c | portp->flags |= ASYNC_INITIALIZED; |
portp | 691 | drivers/char/stallion.c | if (portp->flags & ASYNC_CLOSING) { |
portp | 692 | drivers/char/stallion.c | interruptible_sleep_on(&portp->close_wait); |
portp | 693 | drivers/char/stallion.c | if (portp->flags & ASYNC_HUP_NOTIFY) |
portp | 704 | drivers/char/stallion.c | if (portp->flags & ASYNC_NORMAL_ACTIVE) |
portp | 706 | drivers/char/stallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) { |
portp | 707 | drivers/char/stallion.c | if ((portp->flags & ASYNC_SESSION_LOCKOUT) && |
portp | 708 | drivers/char/stallion.c | (portp->session != current->session)) |
portp | 710 | drivers/char/stallion.c | if ((portp->flags & ASYNC_PGRP_LOCKOUT) && |
portp | 711 | drivers/char/stallion.c | (portp->pgrp != current->pgrp)) |
portp | 714 | drivers/char/stallion.c | portp->flags |= ASYNC_CALLOUT_ACTIVE; |
portp | 717 | drivers/char/stallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) |
portp | 720 | drivers/char/stallion.c | if ((rc = stl_waitcarrier(portp, filp)) != 0) |
portp | 723 | drivers/char/stallion.c | portp->flags |= ASYNC_NORMAL_ACTIVE; |
portp | 726 | drivers/char/stallion.c | if ((portp->refcount == 1) && (portp->flags & ASYNC_SPLIT_TERMIOS)) { |
portp | 728 | drivers/char/stallion.c | *tty->termios = portp->normaltermios; |
portp | 730 | drivers/char/stallion.c | *tty->termios = portp->callouttermios; |
portp | 731 | drivers/char/stallion.c | stl_setport(portp, tty->termios); |
portp | 734 | drivers/char/stallion.c | portp->session = current->session; |
portp | 735 | drivers/char/stallion.c | portp->pgrp = current->pgrp; |
portp | 746 | drivers/char/stallion.c | static int stl_waitcarrier(stlport_t *portp, struct file *filp) |
portp | 752 | drivers/char/stallion.c | printk("stl_waitcarrier(portp=%x,filp=%x)\n", (int) portp, (int) filp); |
portp | 759 | drivers/char/stallion.c | portp->openwaitcnt++; |
portp | 760 | drivers/char/stallion.c | if (portp->refcount > 0) |
portp | 761 | drivers/char/stallion.c | portp->refcount--; |
portp | 764 | drivers/char/stallion.c | if ((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) |
portp | 765 | drivers/char/stallion.c | stl_setsignals(portp, 1, 1); |
portp | 766 | drivers/char/stallion.c | if (tty_hung_up_p(filp) || ((portp->flags & ASYNC_INITIALIZED) == 0)) { |
portp | 767 | drivers/char/stallion.c | if (portp->flags & ASYNC_HUP_NOTIFY) |
portp | 773 | drivers/char/stallion.c | if (((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) && |
portp | 774 | drivers/char/stallion.c | ((portp->flags & ASYNC_CLOSING) == 0) && |
portp | 775 | drivers/char/stallion.c | ((portp->tty->termios->c_cflag & CLOCAL) || |
portp | 776 | drivers/char/stallion.c | (portp->sigs & TIOCM_CD))) { |
portp | 783 | drivers/char/stallion.c | interruptible_sleep_on(&portp->open_wait); |
portp | 787 | drivers/char/stallion.c | portp->refcount++; |
portp | 788 | drivers/char/stallion.c | portp->openwaitcnt--; |
portp | 798 | drivers/char/stallion.c | stlport_t *portp; |
portp | 805 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 806 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 815 | drivers/char/stallion.c | if (portp->refcount-- > 1) { |
portp | 820 | drivers/char/stallion.c | portp->refcount = 0; |
portp | 821 | drivers/char/stallion.c | portp->flags |= ASYNC_CLOSING; |
portp | 823 | drivers/char/stallion.c | if (portp->flags & ASYNC_NORMAL_ACTIVE) |
portp | 824 | drivers/char/stallion.c | portp->normaltermios = *tty->termios; |
portp | 825 | drivers/char/stallion.c | if (portp->flags & ASYNC_CALLOUT_ACTIVE) |
portp | 826 | drivers/char/stallion.c | portp->callouttermios = *tty->termios; |
portp | 834 | drivers/char/stallion.c | if (test_bit(ASYI_TXBUSY, &portp->istate)) { |
portp | 835 | drivers/char/stallion.c | if (portp->closing_wait != ASYNC_CLOSING_WAIT_NONE) |
portp | 836 | drivers/char/stallion.c | tty_wait_until_sent(tty, portp->closing_wait); |
portp | 839 | drivers/char/stallion.c | portp->flags &= ~ASYNC_INITIALIZED; |
portp | 840 | drivers/char/stallion.c | stl_disableintrs(portp); |
portp | 842 | drivers/char/stallion.c | stl_setsignals(portp, 0, 0); |
portp | 843 | drivers/char/stallion.c | stl_enablerxtx(portp, 0, 0); |
portp | 845 | drivers/char/stallion.c | portp->istate = 0; |
portp | 846 | drivers/char/stallion.c | if (portp->tx.buf != (char *) NULL) { |
portp | 847 | drivers/char/stallion.c | kfree_s(portp->tx.buf, STL_TXBUFSIZE); |
portp | 848 | drivers/char/stallion.c | portp->tx.buf = (char *) NULL; |
portp | 849 | drivers/char/stallion.c | portp->tx.head = (char *) NULL; |
portp | 850 | drivers/char/stallion.c | portp->tx.tail = (char *) NULL; |
portp | 858 | drivers/char/stallion.c | portp->tty = (struct tty_struct *) NULL; |
portp | 860 | drivers/char/stallion.c | if (portp->openwaitcnt) { |
portp | 861 | drivers/char/stallion.c | if (portp->close_delay) |
portp | 862 | drivers/char/stallion.c | stl_delay(portp->close_delay); |
portp | 863 | drivers/char/stallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 866 | drivers/char/stallion.c | portp->flags &= ~(ASYNC_CALLOUT_ACTIVE | ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); |
portp | 867 | drivers/char/stallion.c | wake_up_interruptible(&portp->close_wait); |
portp | 900 | drivers/char/stallion.c | stlport_t *portp; |
portp | 912 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 913 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 915 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 926 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 927 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 941 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 942 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 945 | drivers/char/stallion.c | stlen = STL_TXBUFSIZE - (head - portp->tx.buf); |
portp | 960 | drivers/char/stallion.c | if (head >= (portp->tx.buf + STL_TXBUFSIZE)) { |
portp | 961 | drivers/char/stallion.c | head = portp->tx.buf; |
portp | 965 | drivers/char/stallion.c | portp->tx.head = head; |
portp | 967 | drivers/char/stallion.c | clear_bit(ASYI_TXLOW, &portp->istate); |
portp | 968 | drivers/char/stallion.c | stl_startrxtx(portp, -1, 1); |
portp | 977 | drivers/char/stallion.c | stlport_t *portp; |
portp | 987 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 988 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 990 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 993 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 994 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 1001 | drivers/char/stallion.c | if (head >= (portp->tx.buf + STL_TXBUFSIZE)) |
portp | 1002 | drivers/char/stallion.c | head = portp->tx.buf; |
portp | 1004 | drivers/char/stallion.c | portp->tx.head = head; |
portp | 1017 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1025 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1026 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1028 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 1032 | drivers/char/stallion.c | if (tty->stopped || tty->hw_stopped || (portp->tx.head == portp->tx.tail)) |
portp | 1035 | drivers/char/stallion.c | stl_startrxtx(portp, -1, 1); |
portp | 1042 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1051 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1052 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1054 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 1057 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 1058 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 1075 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1085 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1086 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1088 | drivers/char/stallion.c | if (portp->tx.buf == (char *) NULL) |
portp | 1091 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 1092 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 1094 | drivers/char/stallion.c | if ((size == 0) && test_bit(ASYI_TXBUSY, &portp->istate)) |
portp | 1105 | drivers/char/stallion.c | static void stl_getserial(stlport_t *portp, struct serial_struct *sp) |
portp | 1111 | drivers/char/stallion.c | printk("stl_getserial(portp=%x,sp=%x)\n", (int) portp, (int) sp); |
portp | 1116 | drivers/char/stallion.c | sio.line = portp->portnr; |
portp | 1117 | drivers/char/stallion.c | sio.port = portp->ioaddr; |
portp | 1118 | drivers/char/stallion.c | sio.flags = portp->flags; |
portp | 1119 | drivers/char/stallion.c | sio.baud_base = portp->baud_base; |
portp | 1120 | drivers/char/stallion.c | sio.close_delay = portp->close_delay; |
portp | 1121 | drivers/char/stallion.c | sio.closing_wait = portp->closing_wait; |
portp | 1122 | drivers/char/stallion.c | sio.custom_divisor = portp->custom_divisor; |
portp | 1126 | drivers/char/stallion.c | brdp = stl_brds[portp->brdnr]; |
portp | 1141 | drivers/char/stallion.c | static int stl_setserial(stlport_t *portp, struct serial_struct *sp) |
portp | 1146 | drivers/char/stallion.c | printk("stl_setserial(portp=%x,sp=%x)\n", (int) portp, (int) sp); |
portp | 1151 | drivers/char/stallion.c | if ((sio.baud_base != portp->baud_base) || |
portp | 1152 | drivers/char/stallion.c | (sio.close_delay != portp->close_delay) || |
portp | 1153 | drivers/char/stallion.c | ((sio.flags & ~ASYNC_USR_MASK) != (portp->flags & ~ASYNC_USR_MASK))) |
portp | 1157 | drivers/char/stallion.c | portp->flags = (portp->flags & ~ASYNC_USR_MASK) | (sio.flags & ASYNC_USR_MASK); |
portp | 1158 | drivers/char/stallion.c | portp->baud_base = sio.baud_base; |
portp | 1159 | drivers/char/stallion.c | portp->close_delay = sio.close_delay; |
portp | 1160 | drivers/char/stallion.c | portp->closing_wait = sio.closing_wait; |
portp | 1161 | drivers/char/stallion.c | portp->custom_divisor = sio.custom_divisor; |
portp | 1162 | drivers/char/stallion.c | stl_setport(portp, portp->tty->termios); |
portp | 1170 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1179 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1180 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1190 | drivers/char/stallion.c | stl_sendbreak(portp, 250); |
portp | 1196 | drivers/char/stallion.c | stl_sendbreak(portp, (arg ? (arg * 100) : 250)); |
portp | 1211 | drivers/char/stallion.c | stl_getsignals(portp); |
portp | 1212 | drivers/char/stallion.c | put_fs_long(portp->sigs, (unsigned long *) arg); |
portp | 1218 | drivers/char/stallion.c | stl_setsignals(portp, ((arg & TIOCM_DTR) ? 1 : -1), ((arg & TIOCM_RTS) ? 1 : -1)); |
portp | 1224 | drivers/char/stallion.c | stl_setsignals(portp, ((arg & TIOCM_DTR) ? 0 : -1), ((arg & TIOCM_RTS) ? 0 : -1)); |
portp | 1230 | drivers/char/stallion.c | stl_setsignals(portp, ((arg & TIOCM_DTR) ? 1 : 0), ((arg & TIOCM_RTS) ? 1 : 0)); |
portp | 1235 | drivers/char/stallion.c | stl_getserial(portp, (struct serial_struct *) arg); |
portp | 1239 | drivers/char/stallion.c | rc = stl_setserial(portp, (struct serial_struct *) arg); |
portp | 1260 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1269 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1270 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1277 | drivers/char/stallion.c | stl_setport(portp, tiosp); |
portp | 1278 | drivers/char/stallion.c | stl_setsignals(portp, ((tiosp->c_cflag & (CBAUD & ~CBAUDEX)) ? 1 : 0), -1); |
portp | 1284 | drivers/char/stallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 1296 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1305 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1306 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1311 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 1312 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 1314 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1315 | drivers/char/stallion.c | stl_setreg(portp, CCR, CCR_SENDSCHR2); |
portp | 1316 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1319 | drivers/char/stallion.c | stl_setreg(portp, MCOR1, (stl_getreg(portp, MCOR1) & 0xf0)); |
portp | 1320 | drivers/char/stallion.c | stl_setreg(portp, MSVR2, 0); |
portp | 1322 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 1334 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1343 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1344 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1349 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 1350 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 1352 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1353 | drivers/char/stallion.c | stl_setreg(portp, CCR, CCR_SENDSCHR1); |
portp | 1354 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1363 | drivers/char/stallion.c | stl_setreg(portp, MCOR1, (stl_getreg(portp, MCOR1) | FIFO_RTSTHRESHOLD)); |
portp | 1364 | drivers/char/stallion.c | stl_setreg(portp, MSVR2, MSVR2_RTS); |
portp | 1366 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 1379 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1387 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1388 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1391 | drivers/char/stallion.c | stl_startrxtx(portp, -1, 0); |
portp | 1402 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1410 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1411 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1414 | drivers/char/stallion.c | stl_startrxtx(portp, -1, 1); |
portp | 1427 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1435 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1436 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1439 | drivers/char/stallion.c | portp->flags &= ~ASYNC_INITIALIZED; |
portp | 1440 | drivers/char/stallion.c | stl_disableintrs(portp); |
portp | 1442 | drivers/char/stallion.c | stl_setsignals(portp, 0, 0); |
portp | 1443 | drivers/char/stallion.c | stl_enablerxtx(portp, 0, 0); |
portp | 1445 | drivers/char/stallion.c | portp->istate = 0; |
portp | 1447 | drivers/char/stallion.c | if (portp->tx.buf != (char *) NULL) { |
portp | 1448 | drivers/char/stallion.c | kfree_s(portp->tx.buf, STL_TXBUFSIZE); |
portp | 1449 | drivers/char/stallion.c | portp->tx.buf = (char *) NULL; |
portp | 1450 | drivers/char/stallion.c | portp->tx.head = (char *) NULL; |
portp | 1451 | drivers/char/stallion.c | portp->tx.tail = (char *) NULL; |
portp | 1454 | drivers/char/stallion.c | portp->tty = (struct tty_struct *) NULL; |
portp | 1455 | drivers/char/stallion.c | portp->flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE); |
portp | 1456 | drivers/char/stallion.c | portp->refcount = 0; |
portp | 1457 | drivers/char/stallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 1464 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1473 | drivers/char/stallion.c | portp = tty->driver_data; |
portp | 1474 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1479 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 1480 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 1481 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1482 | drivers/char/stallion.c | stl_setreg(portp, CCR, CCR_TXFLUSHFIFO); |
portp | 1483 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 1484 | drivers/char/stallion.c | portp->tx.tail = portp->tx.head; |
portp | 1485 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 1501 | drivers/char/stallion.c | static int stl_getreg(stlport_t *portp, int regnr) |
portp | 1503 | drivers/char/stallion.c | outb((regnr + portp->uartaddr), portp->ioaddr); |
portp | 1504 | drivers/char/stallion.c | return(inb(portp->ioaddr + EREG_DATA)); |
portp | 1507 | drivers/char/stallion.c | static void stl_setreg(stlport_t *portp, int regnr, int value) |
portp | 1509 | drivers/char/stallion.c | outb((regnr + portp->uartaddr), portp->ioaddr); |
portp | 1510 | drivers/char/stallion.c | outb(value, portp->ioaddr + EREG_DATA); |
portp | 1513 | drivers/char/stallion.c | static int stl_updatereg(stlport_t *portp, int regnr, int value) |
portp | 1515 | drivers/char/stallion.c | outb((regnr + portp->uartaddr), portp->ioaddr); |
portp | 1516 | drivers/char/stallion.c | if (inb(portp->ioaddr + EREG_DATA) != value) { |
portp | 1517 | drivers/char/stallion.c | outb(value, portp->ioaddr + EREG_DATA); |
portp | 1539 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1553 | drivers/char/stallion.c | portp = panelp->ports[(ioack >> 3)]; |
portp | 1560 | drivers/char/stallion.c | if (portp->brklen != 0) { |
portp | 1561 | drivers/char/stallion.c | if (portp->brklen > 0) { |
portp | 1562 | drivers/char/stallion.c | outb((TDR + portp->uartaddr), ioaddr); |
portp | 1567 | drivers/char/stallion.c | outb(portp->brklen, (ioaddr + EREG_DATA)); |
portp | 1570 | drivers/char/stallion.c | portp->brklen = -1; |
portp | 1573 | drivers/char/stallion.c | outb((COR2 + portp->uartaddr), ioaddr); |
portp | 1575 | drivers/char/stallion.c | portp->brklen = 0; |
portp | 1579 | drivers/char/stallion.c | head = portp->tx.head; |
portp | 1580 | drivers/char/stallion.c | tail = portp->tx.tail; |
portp | 1582 | drivers/char/stallion.c | if ((len == 0) || ((len < STL_TXBUFLOW) && (test_bit(ASYI_TXLOW, &portp->istate) == 0))) { |
portp | 1583 | drivers/char/stallion.c | set_bit(ASYI_TXLOW, &portp->istate); |
portp | 1584 | drivers/char/stallion.c | queue_task_irq_off(&portp->tqueue, &tq_scheduler); |
portp | 1588 | drivers/char/stallion.c | outb((SRER + portp->uartaddr), ioaddr); |
portp | 1594 | drivers/char/stallion.c | clear_bit(ASYI_TXBUSY, &portp->istate); |
portp | 1599 | drivers/char/stallion.c | stlen = MIN(len, ((portp->tx.buf + STL_TXBUFSIZE) - tail)); |
portp | 1600 | drivers/char/stallion.c | outb((TDR + portp->uartaddr), ioaddr); |
portp | 1604 | drivers/char/stallion.c | if (tail >= (portp->tx.buf + STL_TXBUFSIZE)) |
portp | 1605 | drivers/char/stallion.c | tail = portp->tx.buf; |
portp | 1610 | drivers/char/stallion.c | portp->tx.tail = tail; |
portp | 1614 | drivers/char/stallion.c | outb((EOSRR + portp->uartaddr), ioaddr); |
portp | 1632 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1648 | drivers/char/stallion.c | portp = panelp->ports[(ioack >> 3)]; |
portp | 1649 | drivers/char/stallion.c | tty = portp->tty; |
portp | 1652 | drivers/char/stallion.c | outb((RDCR + portp->uartaddr), ioaddr); |
portp | 1656 | drivers/char/stallion.c | outb((RDSR + portp->uartaddr), ioaddr); |
portp | 1661 | drivers/char/stallion.c | outb((RDSR + portp->uartaddr), ioaddr); |
portp | 1671 | drivers/char/stallion.c | outb((RDSR + portp->uartaddr), ioaddr); |
portp | 1674 | drivers/char/stallion.c | if ((tty != (struct tty_struct *) NULL) && ((portp->rxignoremsk & status) == 0)) { |
portp | 1675 | drivers/char/stallion.c | if (portp->rxmarkmsk & status) { |
portp | 1679 | drivers/char/stallion.c | if (portp->flags & ASYNC_SAK) |
portp | 1708 | drivers/char/stallion.c | outb((EOSRR + portp->uartaddr), ioaddr); |
portp | 1722 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1735 | drivers/char/stallion.c | portp = panelp->ports[(ioack >> 3)]; |
portp | 1737 | drivers/char/stallion.c | outb((MISR + portp->uartaddr), ioaddr); |
portp | 1740 | drivers/char/stallion.c | set_bit(ASYI_DCDCHANGE, &portp->istate); |
portp | 1741 | drivers/char/stallion.c | queue_task_irq_off(&portp->tqueue, &tq_scheduler); |
portp | 1744 | drivers/char/stallion.c | outb((EOSRR + portp->uartaddr), ioaddr); |
portp | 1898 | drivers/char/stallion.c | stlport_t *portp; |
portp | 1902 | drivers/char/stallion.c | portp = private; |
portp | 1904 | drivers/char/stallion.c | printk("stl_offintr(portp=%x)\n", (int) portp); |
portp | 1907 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) |
portp | 1909 | drivers/char/stallion.c | tty = portp->tty; |
portp | 1913 | drivers/char/stallion.c | if (test_bit(ASYI_TXLOW, &portp->istate)) { |
portp | 1918 | drivers/char/stallion.c | if (test_bit(ASYI_DCDCHANGE, &portp->istate)) { |
portp | 1919 | drivers/char/stallion.c | clear_bit(ASYI_DCDCHANGE, &portp->istate); |
portp | 1920 | drivers/char/stallion.c | oldsigs = portp->sigs; |
portp | 1921 | drivers/char/stallion.c | stl_getsignals(portp); |
portp | 1922 | drivers/char/stallion.c | if ((portp->sigs & TIOCM_CD) && ((oldsigs & TIOCM_CD) == 0)) |
portp | 1923 | drivers/char/stallion.c | wake_up_interruptible(&portp->open_wait); |
portp | 1924 | drivers/char/stallion.c | if ((oldsigs & TIOCM_CD) && ((portp->sigs & TIOCM_CD) == 0)) { |
portp | 1925 | drivers/char/stallion.c | if (! ((portp->flags & ASYNC_CALLOUT_ACTIVE) && |
portp | 1926 | drivers/char/stallion.c | (portp->flags & ASYNC_CALLOUT_NOHUP))) { |
portp | 1940 | drivers/char/stallion.c | static void stl_ccrwait(stlport_t *portp) |
portp | 1945 | drivers/char/stallion.c | if (stl_getreg(portp, CCR) == 0) { |
portp | 1950 | drivers/char/stallion.c | printk("STALLION: cd1400 device not responding, port=%d panel=%d brd=%d\n", portp->portnr, portp->panelnr, portp->brdnr); |
portp | 1960 | drivers/char/stallion.c | static void stl_setport(stlport_t *portp, struct termios *tiosp) |
portp | 1985 | drivers/char/stallion.c | brdp = stl_brds[portp->brdnr]; |
portp | 1994 | drivers/char/stallion.c | portp->rxignoremsk = 0; |
portp | 1996 | drivers/char/stallion.c | portp->rxignoremsk |= (ST_PARITY | ST_FRAMING | ST_OVERRUN); |
portp | 2000 | drivers/char/stallion.c | portp->rxignoremsk |= ST_BREAK; |
portp | 2004 | drivers/char/stallion.c | portp->rxmarkmsk = ST_OVERRUN; |
portp | 2006 | drivers/char/stallion.c | portp->rxmarkmsk |= (ST_PARITY | ST_FRAMING); |
portp | 2008 | drivers/char/stallion.c | portp->rxmarkmsk |= ST_BREAK; |
portp | 2068 | drivers/char/stallion.c | if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) |
portp | 2070 | drivers/char/stallion.c | else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) |
portp | 2072 | drivers/char/stallion.c | else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) |
portp | 2073 | drivers/char/stallion.c | baudrate = (portp->baud_base / portp->custom_divisor); |
portp | 2120 | drivers/char/stallion.c | printk("SETPORT: portnr=%d panelnr=%d brdnr=%d\n", portp->portnr, portp->panelnr, portp->brdnr); |
portp | 2129 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2130 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x3)); |
portp | 2131 | drivers/char/stallion.c | srer = stl_getreg(portp, SRER); |
portp | 2132 | drivers/char/stallion.c | stl_setreg(portp, SRER, 0); |
portp | 2133 | drivers/char/stallion.c | if (stl_updatereg(portp, COR1, cor1)) |
portp | 2135 | drivers/char/stallion.c | if (stl_updatereg(portp, COR2, cor2)) |
portp | 2137 | drivers/char/stallion.c | if (stl_updatereg(portp, COR3, cor3)) |
portp | 2140 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 2141 | drivers/char/stallion.c | stl_setreg(portp, CCR, CCR_CORCHANGE); |
portp | 2143 | drivers/char/stallion.c | stl_setreg(portp, COR4, cor4); |
portp | 2144 | drivers/char/stallion.c | stl_setreg(portp, COR5, cor5); |
portp | 2145 | drivers/char/stallion.c | stl_setreg(portp, MCOR1, mcor1); |
portp | 2146 | drivers/char/stallion.c | stl_setreg(portp, MCOR2, mcor2); |
portp | 2148 | drivers/char/stallion.c | stl_setreg(portp, TCOR, clk); |
portp | 2149 | drivers/char/stallion.c | stl_setreg(portp, TBPR, div); |
portp | 2150 | drivers/char/stallion.c | stl_setreg(portp, RCOR, clk); |
portp | 2151 | drivers/char/stallion.c | stl_setreg(portp, RBPR, div); |
portp | 2153 | drivers/char/stallion.c | stl_setreg(portp, SCHR1, tiosp->c_cc[VSTART]); |
portp | 2154 | drivers/char/stallion.c | stl_setreg(portp, SCHR2, tiosp->c_cc[VSTOP]); |
portp | 2155 | drivers/char/stallion.c | stl_setreg(portp, SCHR3, tiosp->c_cc[VSTART]); |
portp | 2156 | drivers/char/stallion.c | stl_setreg(portp, SCHR4, tiosp->c_cc[VSTOP]); |
portp | 2157 | drivers/char/stallion.c | stl_setreg(portp, RTPR, rtpr); |
portp | 2158 | drivers/char/stallion.c | mcor1 = stl_getreg(portp, MSVR1); |
portp | 2160 | drivers/char/stallion.c | portp->sigs |= TIOCM_CD; |
portp | 2162 | drivers/char/stallion.c | portp->sigs &= ~TIOCM_CD; |
portp | 2163 | drivers/char/stallion.c | stl_setreg(portp, SRER, ((srer & ~sreroff) | sreron)); |
portp | 2164 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2174 | drivers/char/stallion.c | static void stl_setsignals(stlport_t *portp, int dtr, int rts) |
portp | 2180 | drivers/char/stallion.c | printk("stl_setsignals(portp=%x,dtr=%d,rts=%d)\n", (int) portp, dtr, rts); |
portp | 2192 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2193 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2195 | drivers/char/stallion.c | stl_setreg(portp, MSVR2, msvr2); |
portp | 2197 | drivers/char/stallion.c | stl_setreg(portp, MSVR1, msvr1); |
portp | 2198 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2208 | drivers/char/stallion.c | static void stl_getsignals(stlport_t *portp) |
portp | 2214 | drivers/char/stallion.c | printk("stl_getsignals(portp=%x)\n", (int) portp); |
portp | 2219 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2220 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2221 | drivers/char/stallion.c | msvr1 = stl_getreg(portp, MSVR1); |
portp | 2222 | drivers/char/stallion.c | msvr2 = stl_getreg(portp, MSVR2); |
portp | 2223 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2224 | drivers/char/stallion.c | portp->sigs = 0; |
portp | 2225 | drivers/char/stallion.c | portp->sigs |= (msvr1 & MSVR1_DCD) ? TIOCM_CD : 0; |
portp | 2226 | drivers/char/stallion.c | portp->sigs |= (msvr1 & MSVR1_CTS) ? TIOCM_CTS : 0; |
portp | 2227 | drivers/char/stallion.c | portp->sigs |= (msvr1 & MSVR1_RI) ? TIOCM_RI : 0; |
portp | 2228 | drivers/char/stallion.c | portp->sigs |= (msvr1 & MSVR1_DSR) ? TIOCM_DSR : 0; |
portp | 2229 | drivers/char/stallion.c | portp->sigs |= (msvr1 & MSVR1_DTR) ? TIOCM_DTR : 0; |
portp | 2230 | drivers/char/stallion.c | portp->sigs |= (msvr2 & MSVR2_RTS) ? TIOCM_RTS : 0; |
portp | 2240 | drivers/char/stallion.c | static void stl_enablerxtx(stlport_t *portp, int rx, int tx) |
portp | 2246 | drivers/char/stallion.c | printk("stl_enablerxtx(portp=%x,rx=%d,tx=%d)\n", (int) portp, rx, tx); |
portp | 2261 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2262 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2263 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 2264 | drivers/char/stallion.c | stl_setreg(portp, CCR, ccr); |
portp | 2265 | drivers/char/stallion.c | stl_ccrwait(portp); |
portp | 2266 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2276 | drivers/char/stallion.c | static void stl_startrxtx(stlport_t *portp, int rx, int tx) |
portp | 2282 | drivers/char/stallion.c | printk("stl_startrxtx(portp=%x,rx=%d,tx=%d)\n", (int) portp, rx, tx); |
portp | 2300 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2301 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2302 | drivers/char/stallion.c | stl_setreg(portp, SRER, ((stl_getreg(portp, SRER) & ~sreroff) | sreron)); |
portp | 2303 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2305 | drivers/char/stallion.c | set_bit(ASYI_TXBUSY, &portp->istate); |
portp | 2315 | drivers/char/stallion.c | static void stl_disableintrs(stlport_t *portp) |
portp | 2320 | drivers/char/stallion.c | printk("stl_disableintrs(portp=%x)\n", (int) portp); |
portp | 2324 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2325 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2326 | drivers/char/stallion.c | stl_setreg(portp, SRER, 0); |
portp | 2327 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2333 | drivers/char/stallion.c | static void stl_sendbreak(stlport_t *portp, long len) |
portp | 2338 | drivers/char/stallion.c | printk("stl_sendbreak(portp=%x,len=%d)\n", (int) portp, (int) len); |
portp | 2343 | drivers/char/stallion.c | BRDENABLE(portp->brdnr, portp->pagenr); |
portp | 2344 | drivers/char/stallion.c | stl_setreg(portp, CAR, (portp->portnr & 0x03)); |
portp | 2345 | drivers/char/stallion.c | stl_setreg(portp, COR2, (stl_getreg(portp, COR2) | COR2_ETC)); |
portp | 2346 | drivers/char/stallion.c | stl_setreg(portp, SRER, ((stl_getreg(portp, SRER) & ~SRER_TXDATA) | SRER_TXEMPTY)); |
portp | 2347 | drivers/char/stallion.c | BRDDISABLE(portp->brdnr); |
portp | 2349 | drivers/char/stallion.c | portp->brklen = (len > 255) ? 255 : len; |
portp | 2395 | drivers/char/stallion.c | stlport_t *portp; |
portp | 2454 | drivers/char/stallion.c | portp = (stlport_t *) stl_memalloc(sizeof(stlport_t)); |
portp | 2455 | drivers/char/stallion.c | if (portp == (stlport_t *) NULL) { |
portp | 2459 | drivers/char/stallion.c | memset(portp, 0, sizeof(stlport_t)); |
portp | 2460 | drivers/char/stallion.c | portp->portnr = i; |
portp | 2461 | drivers/char/stallion.c | portp->brdnr = panelp->brdnr; |
portp | 2462 | drivers/char/stallion.c | portp->panelnr = panelp->panelnr; |
portp | 2463 | drivers/char/stallion.c | portp->ioaddr = ioaddr; |
portp | 2464 | drivers/char/stallion.c | portp->uartaddr = (i & 0x04) << 5; |
portp | 2465 | drivers/char/stallion.c | portp->pagenr = panelp->pagenr + (i >> 3); |
portp | 2466 | drivers/char/stallion.c | portp->baud_base = STL_BAUDBASE; |
portp | 2467 | drivers/char/stallion.c | portp->close_delay = STL_CLOSEDELAY; |
portp | 2468 | drivers/char/stallion.c | portp->closing_wait = 30 * HZ; |
portp | 2469 | drivers/char/stallion.c | portp->normaltermios = stl_deftermios; |
portp | 2470 | drivers/char/stallion.c | portp->callouttermios = stl_deftermios; |
portp | 2471 | drivers/char/stallion.c | portp->tqueue.routine = stl_offintr; |
portp | 2472 | drivers/char/stallion.c | portp->tqueue.data = portp; |
portp | 2473 | drivers/char/stallion.c | stl_setreg(portp, CAR, (i & 0x03)); |
portp | 2474 | drivers/char/stallion.c | stl_setreg(portp, LIVR, (i << 3)); |
portp | 2475 | drivers/char/stallion.c | panelp->ports[i] = portp; |