From owner-freebsd-hackers@FreeBSD.ORG Thu Jul 3 08:39:46 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3183937B401 for ; Thu, 3 Jul 2003 08:39:46 -0700 (PDT) Received: from castle.jp.FreeBSD.org (castle.jp.FreeBSD.org [210.226.20.15]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1FE1A43FE9 for ; Thu, 3 Jul 2003 08:39:45 -0700 (PDT) (envelope-from akiyama@jp.FreeBSD.org) Received: from localhost (castle.jp.FreeBSD.org [2001:218:422:1::15]) h63FdKY17379; Fri, 4 Jul 2003 00:39:20 +0900 (JST) (envelope-from akiyama@jp.FreeBSD.org) Date: Fri, 04 Jul 2003 00:39:14 +0900 From: Shunsuke Akiyama To: Danny Braniss In-Reply-To: User-Agent: Wanderlust/2.10.0 (Venus) SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.4 Emacs/21.3 (i386--freebsd) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Message-Id: <20030704003916X.akiyama@jp.FreeBSD.org> X-Dispatcher: imput version 20030322(IM144) Lines: 76 cc: freebsd-hackers@freebsd.org Subject: Re: USB, select/poll for ucom X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Jul 2003 15:39:46 -0000 At Wed, 02 Jul 2003 10:29:51 +0300, Danny Braniss wrote: > > for the record: > I can now confirm that select/poll/FIONREAD do work with the > usb/ucom/uplcom! > > what seems to be broken is the call to 'tcflush(fd, TCIFLUSH)' > this works fine with /dev/cuaa0 but not with /dev/ucom0 Humm... I'd reviewed sys/dev/usb/ucom.c, and found missing things. Please try attached patch. -- Shunsuke Akiyama akiyama@jp.FreeBSD.org akiyama@FreeBSD.org Index: sys/dev/usb/ucom.c =================================================================== RCS file: /home/ncvs/src/sys/dev/usb/ucom.c,v retrieving revision 1.29 diff -u -r1.29 ucom.c --- sys/dev/usb/ucom.c 9 Mar 2003 11:33:26 -0000 1.29 +++ sys/dev/usb/ucom.c 2 Jul 2003 10:39:28 -0000 @@ -544,6 +544,10 @@ int error; int s; int d; +#if defined(COMPAT_43) || defined(COMPAT_SUNOS) + u_long oldcmd; + struct termios term; +#endif USB_GET_SC(ucom, UCOMUNIT(dev), sc); tp = sc->sc_tty; @@ -553,15 +557,28 @@ DPRINTF(("ucomioctl: cmd = 0x%08lx\n", cmd)); +#if defined(COMPAT_43) || defined(COMPAT_SUNOS) + term = tp->t_termios; + oldcmd = cmd; + error = ttsetcompat(tp, &cmd, data, &term); + if (error != 0) + return (error); + if (cmd != oldcmd) + data = (caddr_t)&term; +#endif + error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p); - if (error >= 0) { + if (error != ENOIOCTL) { DPRINTF(("ucomioctl: l_ioctl: error = %d\n", error)); return (error); } + s = spltty(); + error = ttioctl(tp, cmd, data, flag); disc_optim(tp, &tp->t_termios, sc); - if (error >= 0) { + if (error != ENOIOCTL) { + splx(s); DPRINTF(("ucomioctl: ttioctl: error = %d\n", error)); return (error); } @@ -577,8 +594,6 @@ error = 0; DPRINTF(("ucomioctl: our cmd = 0x%08lx\n", cmd)); - - s = spltty(); switch (cmd) { case TIOCSBRK: