• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/char/

Lines Matching refs:portp

626 static int	stli_hostcmd(struct stlibrd *brdp, struct stliport *portp);
627 static int stli_initopen(struct tty_struct *tty, struct stlibrd *brdp, struct stliport *portp);
628 static int stli_rawopen(struct stlibrd *brdp, struct stliport *portp, unsigned long arg, int wait);
629 static int stli_rawclose(struct stlibrd *brdp, struct stliport *portp, unsigned long arg, int wait);
631 static int stli_cmdwait(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback);
632 static void stli_sendcmd(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback);
633 static void __stli_sendcmd(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback);
634 static void stli_dodelaycmd(struct stliport *portp, cdkctrl_t __iomem *cp);
635 static void stli_mkasyport(struct tty_struct *tty, struct stliport *portp, asyport_t *pp, struct ktermios *tiosp);
638 static void stli_read(struct stlibrd *brdp, struct stliport *portp);
639 static int stli_getserial(struct stliport *portp, struct serial_struct __user *sp);
642 static int stli_getportstats(struct tty_struct *tty, struct stliport *portp, comstats_t __user *cp);
643 static int stli_portcmdstats(struct tty_struct *tty, struct stliport *portp);
644 static int stli_clrportstats(struct stliport *portp, comstats_t __user *cp);
732 struct stliport *portp;
737 portp = brdp->ports[j];
738 if (portp != NULL) {
739 tty = tty_port_tty_get(&portp->port);
744 kfree(portp);
796 struct stliport *portp = container_of(port, struct stliport, port);
797 struct stlibrd *brdp = stli_brds[portp->brdnr];
800 if ((rc = stli_initopen(tty, brdp, portp)) >= 0)
802 wake_up_interruptible(&portp->raw_wait);
809 struct stliport *portp;
825 portp = brdp->ports[portnr];
826 if (portp == NULL)
828 if (portp->devnr < 1)
831 tty->driver_data = portp;
832 return tty_port_open(&portp->port, tty, filp);
843 struct stliport *portp = container_of(port, struct stliport, port);
845 if (portp->brdnr >= stli_nrbrds)
847 brdp = stli_brds[portp->brdnr];
858 if (!test_bit(ST_CLOSING, &portp->state))
859 stli_rawclose(brdp, portp, 0, 0);
862 clear_bit(ST_TXBUSY, &portp->state);
863 clear_bit(ST_RXSTOP, &portp->state);
867 stli_cmdwait(brdp, portp, A_FLUSH, &ftype, sizeof(u32), 0);
872 struct stliport *portp = tty->driver_data;
874 if (portp == NULL)
881 tty_port_close(&portp->port, tty, filp);
895 struct stlibrd *brdp, struct stliport *portp)
901 if ((rc = stli_rawopen(brdp, portp, 0, 1)) < 0)
907 if ((rc = stli_cmdwait(brdp, portp, A_SETNOTIFY, &nt,
911 stli_mkasyport(tty, portp, &aport, tty->termios);
912 if ((rc = stli_cmdwait(brdp, portp, A_SETPORT, &aport,
916 set_bit(ST_GETSIGS, &portp->state);
917 if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS, &portp->asig,
920 if (test_and_clear_bit(ST_GETSIGS, &portp->state))
921 portp->sigs = stli_mktiocm(portp->asig.sigvalue);
922 stli_mkasysigs(&portp->asig, 1, 1);
923 if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
939 static int stli_rawopen(struct stlibrd *brdp, struct stliport *portp, unsigned long arg, int wait)
957 wait_event_interruptible_tty(portp->raw_wait,
958 !test_bit(ST_CLOSING, &portp->state));
970 cp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
975 portp->portidx;
976 writeb(readb(bits) | portp->portbit, bits);
989 set_bit(ST_OPENING, &portp->state);
992 wait_event_interruptible_tty(portp->raw_wait,
993 !test_bit(ST_OPENING, &portp->state));
997 if ((rc == 0) && (portp->rc != 0))
1010 static int stli_rawclose(struct stlibrd *brdp, struct stliport *portp, unsigned long arg, int wait)
1023 wait_event_interruptible_tty(portp->raw_wait,
1024 !test_bit(ST_CLOSING, &portp->state));
1035 cp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
1040 portp->portidx;
1041 writeb(readb(bits) |portp->portbit, bits);
1044 set_bit(ST_CLOSING, &portp->state);
1055 wait_event_interruptible_tty(portp->raw_wait,
1056 !test_bit(ST_CLOSING, &portp->state));
1060 if ((rc == 0) && (portp->rc != 0))
1074 static int stli_cmdwait(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback)
1080 wait_event_interruptible(portp->raw_wait,
1081 !test_bit(ST_CMDING, &portp->state));
1085 stli_sendcmd(brdp, portp, cmd, arg, size, copyback);
1087 wait_event_interruptible(portp->raw_wait,
1088 !test_bit(ST_CMDING, &portp->state));
1092 if (portp->rc != 0)
1106 struct stliport *portp = tty->driver_data;
1110 if (portp == NULL)
1112 if (portp->brdnr >= stli_nrbrds)
1114 brdp = stli_brds[portp->brdnr];
1118 stli_mkasyport(tty, portp, &aport, tty->termios);
1119 return(stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0));
1126 struct stliport *portp = container_of(port, struct stliport, port);
1127 return (portp->sigs & TIOCM_CD) ? 1 : 0;
1132 struct stliport *portp = container_of(port, struct stliport, port);
1133 struct stlibrd *brdp = stli_brds[portp->brdnr];
1134 stli_mkasysigs(&portp->asig, on, on);
1135 if (stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
1156 struct stliport *portp;
1163 portp = tty->driver_data;
1164 if (portp == NULL)
1166 if (portp->brdnr >= stli_nrbrds)
1168 brdp = stli_brds[portp->brdnr];
1178 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
1183 size = portp->txsize;
1194 shbuf = (char __iomem *) EBRDGETMEMPTR(brdp, portp->txoffset);
1209 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
1211 if (test_bit(ST_TXBUSY, &portp->state)) {
1217 portp->portidx;
1218 writeb(readb(bits) | portp->portbit, bits);
1219 set_bit(ST_TXBUSY, &portp->state);
1264 struct stliport *portp;
1284 portp = tty->driver_data;
1285 if (portp == NULL)
1287 if (portp->brdnr >= stli_nrbrds)
1289 brdp = stli_brds[portp->brdnr];
1296 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
1301 size = portp->txsize;
1312 shbuf = EBRDGETMEMPTR(brdp, portp->txoffset);
1328 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
1331 if (test_bit(ST_TXBUSY, &portp->state)) {
1337 portp->portidx;
1338 writeb(readb(bits) | portp->portbit, bits);
1339 set_bit(ST_TXBUSY, &portp->state);
1350 struct stliport *portp;
1362 portp = tty->driver_data;
1363 if (portp == NULL)
1365 if (portp->brdnr >= stli_nrbrds)
1367 brdp = stli_brds[portp->brdnr];
1373 rp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->txq;
1378 len = (head >= tail) ? (portp->txsize - (head - tail)) : (tail - head);
1403 struct stliport *portp;
1410 portp = tty->driver_data;
1411 if (portp == NULL)
1413 if (portp->brdnr >= stli_nrbrds)
1415 brdp = stli_brds[portp->brdnr];
1421 rp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->txq;
1426 len = (head >= tail) ? (head - tail) : (portp->txsize - (tail - head));
1427 if ((len == 0) && test_bit(ST_TXBUSY, &portp->state))
1441 static int stli_getserial(struct stliport *portp, struct serial_struct __user *sp)
1448 sio.line = portp->portnr;
1450 sio.flags = portp->port.flags;
1451 sio.baud_base = portp->baud_base;
1452 sio.close_delay = portp->port.close_delay;
1453 sio.closing_wait = portp->closing_wait;
1454 sio.custom_divisor = portp->custom_divisor;
1458 brdp = stli_brds[portp->brdnr];
1478 struct stliport *portp = tty->driver_data;
1483 if ((sio.baud_base != portp->baud_base) ||
1484 (sio.close_delay != portp->port.close_delay) ||
1486 (portp->port.flags & ~ASYNC_USR_MASK)))
1490 portp->port.flags = (portp->port.flags & ~ASYNC_USR_MASK) |
1492 portp->baud_base = sio.baud_base;
1493 portp->port.close_delay = sio.close_delay;
1494 portp->closing_wait = sio.closing_wait;
1495 portp->custom_divisor = sio.custom_divisor;
1506 struct stliport *portp = tty->driver_data;
1510 if (portp == NULL)
1512 if (portp->brdnr >= stli_nrbrds)
1514 brdp = stli_brds[portp->brdnr];
1520 if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS,
1521 &portp->asig, sizeof(asysigs_t), 1)) < 0)
1524 return stli_mktiocm(portp->asig.sigvalue);
1530 struct stliport *portp = tty->driver_data;
1534 if (portp == NULL)
1536 if (portp->brdnr >= stli_nrbrds)
1538 brdp = stli_brds[portp->brdnr];
1553 stli_mkasysigs(&portp->asig, dtr, rts);
1555 return stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
1561 struct stliport *portp;
1566 portp = tty->driver_data;
1567 if (portp == NULL)
1569 if (portp->brdnr >= stli_nrbrds)
1571 brdp = stli_brds[portp->brdnr];
1585 rc = stli_getserial(portp, argp);
1591 rc = put_user(portp->pflag, (unsigned __user *)argp);
1594 if ((rc = get_user(portp->pflag, (unsigned __user *)argp)) == 0)
1598 rc = stli_getportstats(tty, portp, argp);
1601 rc = stli_clrportstats(portp, argp);
1627 struct stliport *portp;
1632 portp = tty->driver_data;
1633 if (portp == NULL)
1635 if (portp->brdnr >= stli_nrbrds)
1637 brdp = stli_brds[portp->brdnr];
1643 stli_mkasyport(tty, portp, &aport, tiosp);
1644 stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0);
1645 stli_mkasysigs(&portp->asig, ((tiosp->c_cflag & CBAUD) ? 1 : 0), -1);
1646 stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
1651 wake_up_interruptible(&portp->port.open_wait);
1668 struct stliport *portp = tty->driver_data;
1669 if (portp == NULL)
1671 set_bit(ST_RXSTOP, &portp->state);
1684 struct stliport *portp = tty->driver_data;
1685 if (portp == NULL)
1687 clear_bit(ST_RXSTOP, &portp->state);
1722 struct stliport *portp = tty->driver_data;
1723 tty_port_hangup(&portp->port);
1737 struct stliport *portp;
1741 portp = tty->driver_data;
1742 if (portp == NULL)
1744 if (portp->brdnr >= stli_nrbrds)
1746 brdp = stli_brds[portp->brdnr];
1756 if (test_bit(ST_CMDING, &portp->state)) {
1757 set_bit(ST_DOFLUSHTX, &portp->state);
1760 if (test_bit(ST_DOFLUSHRX, &portp->state)) {
1762 clear_bit(ST_DOFLUSHRX, &portp->state);
1764 __stli_sendcmd(brdp, portp, A_FLUSH, &ftype, sizeof(u32), 0);
1775 struct stliport *portp;
1778 portp = tty->driver_data;
1779 if (portp == NULL)
1781 if (portp->brdnr >= stli_nrbrds)
1783 brdp = stli_brds[portp->brdnr];
1788 stli_cmdwait(brdp, portp, A_BREAK, &arg, sizeof(long), 0);
1796 struct stliport *portp;
1799 portp = tty->driver_data;
1800 if (portp == NULL)
1807 while (test_bit(ST_TXBUSY, &portp->state)) {
1821 struct stliport *portp;
1824 portp = tty->driver_data;
1825 if (portp == NULL)
1827 if (portp->brdnr >= stli_nrbrds)
1829 brdp = stli_brds[portp->brdnr];
1842 stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t), 0);
1845 static void stli_portinfo(struct seq_file *m, struct stlibrd *brdp, struct stliport *portp, int portnr)
1850 rc = stli_portcmdstats(NULL, portp);
1915 struct stliport *portp;
1936 portp = brdp->ports[portnr];
1937 if (portp == NULL)
1939 stli_portinfo(m, brdp, portp, totalport);
1973 static void __stli_sendcmd(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback)
1979 if (test_bit(ST_CMDING, &portp->state)) {
1986 cp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
1990 portp->argp = arg;
1991 portp->argsize = size;
1998 portp->portidx;
1999 writeb(readb(bits) | portp->portbit, bits);
2000 set_bit(ST_CMDING, &portp->state);
2004 static void stli_sendcmd(struct stlibrd *brdp, struct stliport *portp, unsigned long cmd, void *arg, int size, int copyback)
2009 __stli_sendcmd(brdp, portp, cmd, arg, size, copyback);
2023 static void stli_read(struct stlibrd *brdp, struct stliport *portp)
2031 if (test_bit(ST_RXSTOP, &portp->state))
2033 tty = tty_port_tty_get(&portp->port);
2037 rp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->rxq;
2042 size = portp->rxsize;
2053 shbuf = (char __iomem *) EBRDGETMEMPTR(brdp, portp->rxoffset);
2068 rp = &((cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr))->rxq;
2072 set_bit(ST_RXING, &portp->state);
2086 static void stli_dodelaycmd(struct stliport *portp, cdkctrl_t __iomem *cp)
2090 if (test_bit(ST_DOSIGS, &portp->state)) {
2091 if (test_bit(ST_DOFLUSHTX, &portp->state) &&
2092 test_bit(ST_DOFLUSHRX, &portp->state))
2094 else if (test_bit(ST_DOFLUSHTX, &portp->state))
2096 else if (test_bit(ST_DOFLUSHRX, &portp->state))
2100 clear_bit(ST_DOFLUSHTX, &portp->state);
2101 clear_bit(ST_DOFLUSHRX, &portp->state);
2102 clear_bit(ST_DOSIGS, &portp->state);
2103 memcpy_toio((void __iomem *) &(cp->args[0]), (void *) &portp->asig,
2107 set_bit(ST_CMDING, &portp->state);
2108 } else if (test_bit(ST_DOFLUSHTX, &portp->state) ||
2109 test_bit(ST_DOFLUSHRX, &portp->state)) {
2110 cmd = ((test_bit(ST_DOFLUSHTX, &portp->state)) ? FLUSHTX : 0);
2111 cmd |= ((test_bit(ST_DOFLUSHRX, &portp->state)) ? FLUSHRX : 0);
2112 clear_bit(ST_DOFLUSHTX, &portp->state);
2113 clear_bit(ST_DOFLUSHRX, &portp->state);
2117 set_bit(ST_CMDING, &portp->state);
2134 static int stli_hostcmd(struct stlibrd *brdp, struct stliport *portp)
2143 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
2149 if (test_bit(ST_OPENING, &portp->state)) {
2155 portp->rc = rc;
2156 clear_bit(ST_OPENING, &portp->state);
2157 wake_up_interruptible(&portp->raw_wait);
2164 if (test_bit(ST_CLOSING, &portp->state)) {
2170 portp->rc = rc;
2171 clear_bit(ST_CLOSING, &portp->state);
2172 wake_up_interruptible(&portp->raw_wait);
2180 if (test_bit(ST_CMDING, &portp->state)) {
2185 if (portp->argp != NULL) {
2186 memcpy_fromio(portp->argp, (void __iomem *) &(cp->args[0]),
2187 portp->argsize);
2188 portp->argp = NULL;
2191 portp->rc = rc;
2192 clear_bit(ST_CMDING, &portp->state);
2193 stli_dodelaycmd(portp, cp);
2194 wake_up_interruptible(&portp->raw_wait);
2208 tty = tty_port_tty_get(&portp->port);
2211 oldsigs = portp->sigs;
2212 portp->sigs = stli_mktiocm(nt.sigvalue);
2213 clear_bit(ST_GETSIGS, &portp->state);
2214 if ((portp->sigs & TIOCM_CD) &&
2216 wake_up_interruptible(&portp->port.open_wait);
2218 ((portp->sigs & TIOCM_CD) == 0)) {
2219 if (portp->port.flags & ASYNC_CHECK_CD) {
2227 clear_bit(ST_TXBUSY, &portp->state);
2235 if ((nt.data & DT_RXBREAK) && (portp->rxmarkmsk & BRKINT)) {
2238 if (portp->port.flags & ASYNC_SAK) {
2249 stli_read(brdp, portp);
2261 if ((!donerx) && test_bit(ST_RXING, &portp->state)) {
2262 clear_bit(ST_RXING, &portp->state);
2263 stli_read(brdp, portp);
2266 return((test_bit(ST_OPENING, &portp->state) ||
2267 test_bit(ST_CLOSING, &portp->state) ||
2268 test_bit(ST_CMDING, &portp->state) ||
2269 test_bit(ST_TXBUSY, &portp->state) ||
2270 test_bit(ST_RXING, &portp->state)) ? 0 : 1);
2283 struct stliport *portp;
2312 portp = brdp->ports[(channr - 1)];
2313 if (stli_hostcmd(brdp, portp)) {
2382 static void stli_mkasyport(struct tty_struct *tty, struct stliport *portp,
2392 if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
2394 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
2396 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
2398 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
2400 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)
2401 pp->baudout = (portp->baud_base / portp->custom_divisor);
2463 portp->rxmarkmsk = 0;
2467 portp->rxmarkmsk |= BRKINT;
2473 portp->port.flags &= ~ASYNC_CHECK_CD;
2475 portp->port.flags |= ASYNC_CHECK_CD;
2480 pp->pflag = (portp->pflag & 0xffff);
2481 pp->vmin = (portp->pflag & P_RXIMIN) ? 1 : 0;
2482 pp->vtime = (portp->pflag & P_RXITIME) ? 1 : 0;
2483 pp->cc[1] = (portp->pflag & P_RXTHOLD) ? 1 : 0;
2534 struct stliport *portp;
2538 portp = kzalloc(sizeof(struct stliport), GFP_KERNEL);
2539 if (!portp) {
2543 tty_port_init(&portp->port);
2544 portp->port.ops = &stli_port_ops;
2545 portp->magic = STLI_PORTMAGIC;
2546 portp->portnr = i;
2547 portp->brdnr = brdp->brdnr;
2548 portp->panelnr = panelnr;
2549 portp->baud_base = STL_BAUDBASE;
2550 portp->port.close_delay = STL_CLOSEDELAY;
2551 portp->closing_wait = 30 * HZ;
2552 init_waitqueue_head(&portp->port.open_wait);
2553 init_waitqueue_head(&portp->port.close_wait);
2554 init_waitqueue_head(&portp->raw_wait);
2560 brdp->ports[i] = portp;
3330 struct stliport *portp;
3370 portp = brdp->ports[portnr];
3371 if (portp == NULL)
3373 portp->devnr = i;
3374 portp->addr = readl(&memp->offset);
3375 portp->reqbit = (unsigned char) (0x1 << (i * 8 / nrdevs));
3376 portp->portidx = (unsigned char) (i / 8);
3377 portp->portbit = (unsigned char) (0x1 << (i % 8));
3388 portp = brdp->ports[portnr];
3389 if (portp == NULL)
3391 if (portp->addr == 0)
3393 ap = (cdkasy_t __iomem *) EBRDGETMEMPTR(brdp, portp->addr);
3395 portp->rxsize = readw(&ap->rxq.size);
3396 portp->txsize = readw(&ap->txq.size);
3397 portp->rxoffset = readl(&ap->rxq.offset);
3398 portp->txoffset = readl(&ap->txq.offset);
4056 static int stli_portcmdstats(struct tty_struct *tty, struct stliport *portp)
4064 if (portp == NULL)
4066 brdp = stli_brds[portp->brdnr];
4070 mutex_lock(&portp->port.mutex);
4072 if ((rc = stli_cmdwait(brdp, portp, A_GETSTATS,
4074 mutex_unlock(&portp->port.mutex);
4081 stli_comstats.brd = portp->brdnr;
4082 stli_comstats.panel = portp->panelnr;
4083 stli_comstats.port = portp->portnr;
4084 stli_comstats.state = portp->state;
4085 stli_comstats.flags = portp->port.flags;
4089 if (portp->port.tty == tty) {
4121 mutex_unlock(&portp->port.mutex);
4134 static int stli_getportstats(struct tty_struct *tty, struct stliport *portp,
4140 if (!portp) {
4143 portp = stli_getport(stli_comstats.brd, stli_comstats.panel,
4145 if (!portp)
4149 brdp = stli_brds[portp->brdnr];
4153 if ((rc = stli_portcmdstats(tty, portp)) < 0)
4166 static int stli_clrportstats(struct stliport *portp, comstats_t __user *cp)
4171 if (!portp) {
4174 portp = stli_getport(stli_comstats.brd, stli_comstats.panel,
4176 if (!portp)
4180 brdp = stli_brds[portp->brdnr];
4184 mutex_lock(&portp->port.mutex);
4187 if ((rc = stli_cmdwait(brdp, portp, A_CLEARSTATS, NULL, 0, 0)) < 0) {
4188 mutex_unlock(&portp->port.mutex);
4194 stli_comstats.brd = portp->brdnr;
4195 stli_comstats.panel = portp->panelnr;
4196 stli_comstats.port = portp->portnr;
4197 mutex_unlock(&portp->port.mutex);
4213 struct stliport *portp;
4217 portp = stli_getport(stli_dummyport.brdnr, stli_dummyport.panelnr,
4219 if (!portp)
4221 if (copy_to_user(arg, portp, sizeof(struct stliport)))