Date: Thu, 19 Mar 2009 07:40:41 +0000 (UTC) From: Robert Noland <rnoland@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org Subject: svn commit: r190017 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/atkbdc dev/cxgb Message-ID: <200903190740.n2J7efQm052150@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rnoland Date: Thu Mar 19 07:40:41 2009 New Revision: 190017 URL: http://svn.freebsd.org/changeset/base/190017 Log: Merge 189870 Teach psm about O_ASYNC This makes Xorg happy if you aren't using moused. Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/dev/ath/ath_hal/ (props changed) stable/7/sys/dev/atkbdc/psm.c stable/7/sys/dev/cxgb/ (props changed) Modified: stable/7/sys/dev/atkbdc/psm.c ============================================================================== --- stable/7/sys/dev/atkbdc/psm.c Thu Mar 19 07:39:07 2009 (r190016) +++ stable/7/sys/dev/atkbdc/psm.c Thu Mar 19 07:40:41 2009 (r190017) @@ -70,7 +70,10 @@ __FBSDID("$FreeBSD$"); #include <sys/module.h> #include <sys/bus.h> #include <sys/conf.h> +#include <sys/filio.h> #include <sys/poll.h> +#include <sys/sigio.h> +#include <sys/signalvar.h> #include <sys/syslog.h> #include <machine/bus.h> #include <sys/rman.h> @@ -212,6 +215,7 @@ struct psm_softc { /* Driver status inf struct cdev *bdev; int lasterr; int cmdcount; + struct sigio *async; /* Processes waiting for SIGIO */ }; static devclass_t psm_devclass; #define PSM_SOFTC(unit) \ @@ -1383,6 +1387,7 @@ psmopen(struct cdev *dev, int flag, int sc->mode.level = sc->dflt_mode.level; sc->mode.protocol = sc->dflt_mode.protocol; sc->watchdog = FALSE; + sc->async = NULL; /* flush the event queue */ sc->queue.count = 0; @@ -1522,6 +1527,12 @@ psmclose(struct cdev *dev, int flag, int /* remove anything left in the output buffer */ empty_aux_buffer(sc->kbdc, 10); + /* clean up and sigio requests */ + if (sc->async != NULL) { + funsetown(&sc->async); + sc->async = NULL; + } + /* close is almost always successful */ sc->state &= ~PSM_OPEN; kbdc_lock(sc->kbdc, FALSE); @@ -2083,6 +2094,15 @@ psmioctl(struct cdev *dev, u_long cmd, c break; #endif /* MOUSE_GETHWID */ + case FIONBIO: + case FIOASYNC: + break; + case FIOSETOWN: + error = fsetown(*(int *)addr, &sc->async); + break; + case FIOGETOWN: + *(int *) addr = fgetown(&sc->async); + break; default: return (ENOTTY); } @@ -2972,6 +2992,9 @@ next: wakeup(sc); } selwakeuppri(&sc->rsel, PZERO); + if (sc->async != NULL) { + pgsigio(&sc->async, SIGIO, 0); + } sc->state &= ~PSM_SOFTARMED; splx(s); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903190740.n2J7efQm052150>