···613613{614614 unsigned int oldsigs = portp->sigs;615615616616- if (!portp->tty)616616+ if (!portp->port.tty)617617 return;618618619619 portp->sigs = stl_getsignals(portp);620620621621 if ((portp->sigs & TIOCM_CD) && ((oldsigs & TIOCM_CD) == 0))622622- wake_up_interruptible(&portp->open_wait);622622+ wake_up_interruptible(&portp->port.open_wait);623623624624 if ((oldsigs & TIOCM_CD) && ((portp->sigs & TIOCM_CD) == 0))625625- if (portp->flags & ASYNC_CHECK_CD)626626- tty_hangup(portp->tty);625625+ if (portp->port.flags & ASYNC_CHECK_CD)626626+ tty_hangup(portp->port.tty);627627}628628629629/*···734734 * On the first open of the device setup the port hardware, and735735 * initialize the per port data structure.736736 */737737- portp->tty = tty;737737+ portp->port.tty = tty;738738 tty->driver_data = portp;739739- portp->refcount++;739739+ portp->port.count++;740740741741- if ((portp->flags & ASYNC_INITIALIZED) == 0) {741741+ if ((portp->port.flags & ASYNC_INITIALIZED) == 0) {742742 if (!portp->tx.buf) {743743 portp->tx.buf = kmalloc(STL_TXBUFSIZE, GFP_KERNEL);744744 if (!portp->tx.buf)···752752 stl_enablerxtx(portp, 1, 1);753753 stl_startrxtx(portp, 1, 0);754754 clear_bit(TTY_IO_ERROR, &tty->flags);755755- portp->flags |= ASYNC_INITIALIZED;755755+ portp->port.flags |= ASYNC_INITIALIZED;756756 }757757758758/*···761761 * The sleep here does not need interrupt protection since the wakeup762762 * for it is done with the same context.763763 */764764- if (portp->flags & ASYNC_CLOSING) {765765- interruptible_sleep_on(&portp->close_wait);766766- if (portp->flags & ASYNC_HUP_NOTIFY)764764+ if (portp->port.flags & ASYNC_CLOSING) {765765+ interruptible_sleep_on(&portp->port.close_wait);766766+ if (portp->port.flags & ASYNC_HUP_NOTIFY)767767 return -EAGAIN;768768 return -ERESTARTSYS;769769 }···777777 if ((rc = stl_waitcarrier(portp, filp)) != 0)778778 return rc;779779780780- portp->flags |= ASYNC_NORMAL_ACTIVE;780780+ portp->port.flags |= ASYNC_NORMAL_ACTIVE;781781782782 return 0;783783}···801801802802 spin_lock_irqsave(&stallion_lock, flags);803803804804- if (portp->tty->termios->c_cflag & CLOCAL)804804+ if (portp->port.tty->termios->c_cflag & CLOCAL)805805 doclocal++;806806807807 portp->openwaitcnt++;808808 if (! tty_hung_up_p(filp))809809- portp->refcount--;809809+ portp->port.count--;810810811811 for (;;) {812812 /* Takes brd_lock internally */813813 stl_setsignals(portp, 1, 1);814814 if (tty_hung_up_p(filp) ||815815- ((portp->flags & ASYNC_INITIALIZED) == 0)) {816816- if (portp->flags & ASYNC_HUP_NOTIFY)815815+ ((portp->port.flags & ASYNC_INITIALIZED) == 0)) {816816+ if (portp->port.flags & ASYNC_HUP_NOTIFY)817817 rc = -EBUSY;818818 else819819 rc = -ERESTARTSYS;820820 break;821821 }822822- if (((portp->flags & ASYNC_CLOSING) == 0) &&822822+ if (((portp->port.flags & ASYNC_CLOSING) == 0) &&823823 (doclocal || (portp->sigs & TIOCM_CD)))824824 break;825825 if (signal_pending(current)) {···827827 break;828828 }829829 /* FIXME */830830- interruptible_sleep_on(&portp->open_wait);830830+ interruptible_sleep_on(&portp->port.open_wait);831831 }832832833833 if (! tty_hung_up_p(filp))834834- portp->refcount++;834834+ portp->port.count++;835835 portp->openwaitcnt--;836836 spin_unlock_irqrestore(&stallion_lock, flags);837837···904904 spin_unlock_irqrestore(&stallion_lock, flags);905905 return;906906 }907907- if ((tty->count == 1) && (portp->refcount != 1))908908- portp->refcount = 1;909909- if (portp->refcount-- > 1) {907907+ if ((tty->count == 1) && (portp->port.count != 1))908908+ portp->port.count = 1;909909+ if (portp->port.count-- > 1) {910910 spin_unlock_irqrestore(&stallion_lock, flags);911911 return;912912 }913913914914- portp->refcount = 0;915915- portp->flags |= ASYNC_CLOSING;914914+ portp->port.count = 0;915915+ portp->port.flags |= ASYNC_CLOSING;916916917917/*918918 * May want to wait for any data to drain before closing. The BUSY···930930931931932932 spin_lock_irqsave(&stallion_lock, flags);933933- portp->flags &= ~ASYNC_INITIALIZED;933933+ portp->port.flags &= ~ASYNC_INITIALIZED;934934 spin_unlock_irqrestore(&stallion_lock, flags);935935936936 stl_disableintrs(portp);···949949 tty_ldisc_flush(tty);950950951951 tty->closing = 0;952952- portp->tty = NULL;952952+ portp->port.tty = NULL;953953954954 if (portp->openwaitcnt) {955955 if (portp->close_delay)956956 msleep_interruptible(jiffies_to_msecs(portp->close_delay));957957- wake_up_interruptible(&portp->open_wait);957957+ wake_up_interruptible(&portp->port.open_wait);958958 }959959960960- portp->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);961961- wake_up_interruptible(&portp->close_wait);960960+ portp->port.flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);961961+ wake_up_interruptible(&portp->port.close_wait);962962}963963964964/*****************************************************************************/···11531153 memset(&sio, 0, sizeof(struct serial_struct));11541154 sio.line = portp->portnr;11551155 sio.port = portp->ioaddr;11561156- sio.flags = portp->flags;11561156+ sio.flags = portp->port.flags;11571157 sio.baud_base = portp->baud_base;11581158 sio.close_delay = portp->close_delay;11591159 sio.closing_wait = portp->closing_wait;···11941194 if ((sio.baud_base != portp->baud_base) ||11951195 (sio.close_delay != portp->close_delay) ||11961196 ((sio.flags & ~ASYNC_USR_MASK) !=11971197- (portp->flags & ~ASYNC_USR_MASK)))11971197+ (portp->port.flags & ~ASYNC_USR_MASK)))11981198 return -EPERM;11991199 } 1200120012011201- portp->flags = (portp->flags & ~ASYNC_USR_MASK) |12011201+ portp->port.flags = (portp->port.flags & ~ASYNC_USR_MASK) |12021202 (sio.flags & ASYNC_USR_MASK);12031203 portp->baud_base = sio.baud_base;12041204 portp->close_delay = sio.close_delay;12051205 portp->closing_wait = sio.closing_wait;12061206 portp->custom_divisor = sio.custom_divisor;12071207- stl_setport(portp, portp->tty->termios);12071207+ stl_setport(portp, portp->port.tty->termios);12081208 return 0;12091209}12101210···13531353 stl_start(tty);13541354 }13551355 if (((old->c_cflag & CLOCAL) == 0) && (tiosp->c_cflag & CLOCAL))13561356- wake_up_interruptible(&portp->open_wait);13561356+ wake_up_interruptible(&portp->port.open_wait);13571357}1358135813591359/*****************************************************************************/···14381438 if (portp == NULL)14391439 return;1440144014411441- portp->flags &= ~ASYNC_INITIALIZED;14411441+ portp->port.flags &= ~ASYNC_INITIALIZED;14421442 stl_disableintrs(portp);14431443 if (tty->termios->c_cflag & HUPCL)14441444 stl_setsignals(portp, 0, 0);···14521452 portp->tx.head = NULL;14531453 portp->tx.tail = NULL;14541454 }14551455- portp->tty = NULL;14561456- portp->flags &= ~ASYNC_NORMAL_ACTIVE;14571457- portp->refcount = 0;14581458- wake_up_interruptible(&portp->open_wait);14551455+ portp->port.tty = NULL;14561456+ portp->port.flags &= ~ASYNC_NORMAL_ACTIVE;14571457+ portp->port.count = 0;14581458+ wake_up_interruptible(&portp->port.open_wait);14591459}1460146014611461/*****************************************************************************/···18141814 portp->baud_base = STL_BAUDBASE;18151815 portp->close_delay = STL_CLOSEDELAY;18161816 portp->closing_wait = 30 * HZ;18171817- init_waitqueue_head(&portp->open_wait);18181818- init_waitqueue_head(&portp->close_wait);18171817+ init_waitqueue_head(&portp->port.open_wait);18181818+ init_waitqueue_head(&portp->port.close_wait);18191819 portp->stats.brd = portp->brdnr;18201820 portp->stats.panel = portp->panelnr;18211821 portp->stats.port = portp->portnr;···18401840 portp = panelp->ports[k];18411841 if (portp == NULL)18421842 continue;18431843- if (portp->tty != NULL)18441844- stl_hangup(portp->tty);18431843+ if (portp->port.tty != NULL)18441844+ stl_hangup(portp->port.tty);18451845 kfree(portp->tx.buf);18461846 kfree(portp);18471847 }···25132513 }2514251425152515 portp->stats.state = portp->istate;25162516- portp->stats.flags = portp->flags;25162516+ portp->stats.flags = portp->port.flags;25172517 portp->stats.hwid = portp->hwid;2518251825192519 portp->stats.ttystate = 0;···25242524 portp->stats.rxbuffered = 0;2525252525262526 spin_lock_irqsave(&stallion_lock, flags);25272527- if (portp->tty != NULL)25282528- if (portp->tty->driver_data == portp) {25292529- portp->stats.ttystate = portp->tty->flags;25272527+ if (portp->port.tty != NULL)25282528+ if (portp->port.tty->driver_data == portp) {25292529+ portp->stats.ttystate = portp->port.tty->flags;25302530 /* No longer available as a statistic */25312531- portp->stats.rxbuffered = 1; /*portp->tty->flip.count; */25322532- if (portp->tty->termios != NULL) {25332533- portp->stats.cflags = portp->tty->termios->c_cflag;25342534- portp->stats.iflags = portp->tty->termios->c_iflag;25352535- portp->stats.oflags = portp->tty->termios->c_oflag;25362536- portp->stats.lflags = portp->tty->termios->c_lflag;25312531+ portp->stats.rxbuffered = 1; /*portp->port.tty->flip.count; */25322532+ if (portp->port.tty->termios != NULL) {25332533+ portp->stats.cflags = portp->port.tty->termios->c_cflag;25342534+ portp->stats.iflags = portp->port.tty->termios->c_iflag;25352535+ portp->stats.oflags = portp->port.tty->termios->c_oflag;25362536+ portp->stats.lflags = portp->port.tty->termios->c_lflag;25372537 }25382538 }25392539 spin_unlock_irqrestore(&stallion_lock, flags);···29392939 }29402940 baudrate = stl_baudrates[baudrate];29412941 if ((tiosp->c_cflag & CBAUD) == B38400) {29422942- if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)29422942+ if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)29432943 baudrate = 57600;29442944- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)29442944+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)29452945 baudrate = 115200;29462946- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)29462946+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)29472947 baudrate = 230400;29482948- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)29482948+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)29492949 baudrate = 460800;29502950- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)29502950+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)29512951 baudrate = (portp->baud_base / portp->custom_divisor);29522952 }29532953 if (baudrate > STL_CD1400MAXBAUD)···29692969 mcor1 |= MCOR1_DCD;29702970 mcor2 |= MCOR2_DCD;29712971 sreron |= SRER_MODEM;29722972- portp->flags |= ASYNC_CHECK_CD;29722972+ portp->port.flags |= ASYNC_CHECK_CD;29732973 } else29742974- portp->flags &= ~ASYNC_CHECK_CD;29742974+ portp->port.flags &= ~ASYNC_CHECK_CD;2975297529762976/*29772977 * Setup cd1400 enhanced modes if we can. In particular we want to···3242324232433243 if (portp == NULL)32443244 return;32453245- tty = portp->tty;32453245+ tty = portp->port.tty;32463246 if (tty == NULL)32473247 return;32483248···3304330433053305 if (portp == NULL)33063306 return;33073307- tty = portp->tty;33073307+ tty = portp->port.tty;33083308 if (tty == NULL)33093309 return;33103310···35033503 if ((len == 0) || ((len < STL_TXBUFLOW) &&35043504 (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {35053505 set_bit(ASYI_TXLOW, &portp->istate);35063506- if (portp->tty)35073507- tty_wakeup(portp->tty);35063506+ if (portp->port.tty)35073507+ tty_wakeup(portp->port.tty);35083508 }3509350935103510 if (len == 0) {···35683568 return;35693569 }35703570 portp = panelp->ports[(ioack >> 3)];35713571- tty = portp->tty;35713571+ tty = portp->port.tty;3572357235733573 if ((ioack & ACK_TYPMASK) == ACK_TYPRXGOOD) {35743574 outb((RDCR + portp->uartaddr), ioaddr);···36133613 if (portp->rxmarkmsk & status) {36143614 if (status & ST_BREAK) {36153615 status = TTY_BREAK;36163616- if (portp->flags & ASYNC_SAK) {36163616+ if (portp->port.flags & ASYNC_SAK) {36173617 do_SAK(tty);36183618 BRDENABLE(portp->brdnr, portp->pagenr);36193619 }···38993899 }39003900 baudrate = stl_baudrates[baudrate];39013901 if ((tiosp->c_cflag & CBAUD) == B38400) {39023902- if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)39023902+ if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)39033903 baudrate = 57600;39043904- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)39043904+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)39053905 baudrate = 115200;39063906- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)39063906+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)39073907 baudrate = 230400;39083908- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)39083908+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)39093909 baudrate = 460800;39103910- else if ((portp->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)39103910+ else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)39113911 baudrate = (portp->baud_base / portp->custom_divisor);39123912 }39133913 if (baudrate > STL_SC26198MAXBAUD)···39223922 * Check what form of modem signaling is required and set it up.39233923 */39243924 if (tiosp->c_cflag & CLOCAL) {39253925- portp->flags &= ~ASYNC_CHECK_CD;39253925+ portp->port.flags &= ~ASYNC_CHECK_CD;39263926 } else {39273927 iopr |= IOPR_DCDCOS;39283928 imron |= IR_IOPORT;39293929- portp->flags |= ASYNC_CHECK_CD;39293929+ portp->port.flags |= ASYNC_CHECK_CD;39303930 }3931393139323932/*···4174417441754175 if (portp == NULL)41764176 return;41774177- tty = portp->tty;41774177+ tty = portp->port.tty;41784178 if (tty == NULL)41794179 return;41804180···4243424342444244 if (portp == NULL)42454245 return;42464246- tty = portp->tty;42464246+ tty = portp->port.tty;42474247 if (tty == NULL)42484248 return;42494249···44214421 if ((len == 0) || ((len < STL_TXBUFLOW) &&44224422 (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {44234423 set_bit(ASYI_TXLOW, &portp->istate);44244424- if (portp->tty)44254425- tty_wakeup(portp->tty);44244424+ if (portp->port.tty)44254425+ tty_wakeup(portp->port.tty);44264426 }4427442744284428 if (len == 0) {···4475447544764476 pr_debug("stl_sc26198rxisr(portp=%p,iack=%x)\n", portp, iack);4477447744784478- tty = portp->tty;44784478+ tty = portp->port.tty;44794479 ioaddr = portp->ioaddr;44804480 outb(GIBCR, (ioaddr + XP_ADDR));44814481 len = inb(ioaddr + XP_DATA) + 1;···45274527 struct tty_struct *tty;45284528 unsigned int ioaddr;4529452945304530- tty = portp->tty;45304530+ tty = portp->port.tty;45314531 ioaddr = portp->ioaddr;4532453245334533 if (status & SR_RXPARITY)···45444544 if (portp->rxmarkmsk & status) {45454545 if (status & SR_RXBREAK) {45464546 status = TTY_BREAK;45474547- if (portp->flags & ASYNC_SAK) {45474547+ if (portp->port.flags & ASYNC_SAK) {45484548 do_SAK(tty);45494549 BRDENABLE(portp->brdnr, portp->pagenr);45504550 }
+1-5
include/linux/stallion.h
···6969 */7070struct stlport {7171 unsigned long magic;7272+ struct tty_port port;7273 unsigned int portnr;7374 unsigned int panelnr;7475 unsigned int brdnr;···7776 int uartaddr;7877 unsigned int pagenr;7978 unsigned long istate;8080- int flags;8179 int baud_base;8280 int custom_divisor;8381 int close_delay;8482 int closing_wait;8585- int refcount;8683 int openwaitcnt;8784 int brklen;8885 unsigned int sigs;···9192 unsigned long clk;9293 unsigned long hwid;9394 void *uartp;9494- struct tty_struct *tty;9595- wait_queue_head_t open_wait;9696- wait_queue_head_t close_wait;9795 comstats_t stats;9896 struct stlrq tx;9997};