diff options
author | Eric Anholt <anholt@freebsd.org> | 2003-04-24 00:25:36 +0000 |
---|---|---|
committer | Eric Anholt <anholt@freebsd.org> | 2003-04-24 00:25:36 +0000 |
commit | 1fc0a5e1e4c43a0e9fe8b0d9860f22ae8e820d46 (patch) | |
tree | 396b905a16cb361eefbd6dc884c931a51fe9c7b2 /bsd-core/drm_fops.c | |
parent | e15b0b6a1b95e4145363b15e1a581ee230b2f9a2 (diff) |
Make DRM(read) and DRM(poll) stubs and remove DRM(write) and
DRM(write_string). This is the first part of removing much of the
support code for gamma from the BSD DRM, since it appears that no new
drivers are using it and nobody has ever shown interest in gamma on
BSD.
Diffstat (limited to 'bsd-core/drm_fops.c')
-rw-r--r-- | bsd-core/drm_fops.c | 137 |
1 files changed, 2 insertions, 135 deletions
diff --git a/bsd-core/drm_fops.c b/bsd-core/drm_fops.c index 75baa5f2..b0c18fa3 100644 --- a/bsd-core/drm_fops.c +++ b/bsd-core/drm_fops.c @@ -98,148 +98,15 @@ int DRM(open_helper)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p, } -/* The drm_read and drm_write_string code (especially that which manages - the circular buffer), is based on Alessandro Rubini's LINUX DEVICE - DRIVERS (Cambridge: O'Reilly, 1998), pages 111-113. */ +/* The DRM(read) and DRM(poll) are stubs to prevent spurious errors + * on older X Servers (4.3.0 and earlier) */ int DRM(read)(dev_t kdev, struct uio *uio, int ioflag) { - DRM_DEVICE; - int left; - int avail; - int send; - int cur; - int error = 0; - - DRM_DEBUG("%p, %p\n", dev->buf_rp, dev->buf_wp); - - while (dev->buf_rp == dev->buf_wp) { - DRM_DEBUG(" sleeping\n"); - if (dev->flags & FASYNC) - return EWOULDBLOCK; - error = tsleep(&dev->buf_rp, PZERO|PCATCH, "drmrd", 0); - if (error) { - DRM_DEBUG(" interrupted\n"); - return error; - } - DRM_DEBUG(" awake\n"); - } - - left = (dev->buf_rp + DRM_BSZ - dev->buf_wp) % DRM_BSZ; - avail = DRM_BSZ - left; - send = DRM_MIN(avail, uio->uio_resid); - - while (send) { - if (dev->buf_wp > dev->buf_rp) { - cur = DRM_MIN(send, dev->buf_wp - dev->buf_rp); - } else { - cur = DRM_MIN(send, dev->buf_end - dev->buf_rp); - } - error = uiomove(dev->buf_rp, cur, uio); - if (error) - break; - dev->buf_rp += cur; - if (dev->buf_rp == dev->buf_end) dev->buf_rp = dev->buf; - send -= cur; - } - - wakeup(&dev->buf_wp); - return error; -} - -int DRM(write_string)(drm_device_t *dev, const char *s) -{ - int left = (dev->buf_rp + DRM_BSZ - dev->buf_wp) % DRM_BSZ; - int send = strlen(s); - int count; -#ifdef __NetBSD__ - struct proc *p; -#endif /* __NetBSD__ */ - - DRM_DEBUG("%d left, %d to send (%p, %p)\n", - left, send, dev->buf_rp, dev->buf_wp); - - if (left == 1 || dev->buf_wp != dev->buf_rp) { - DRM_ERROR("Buffer not empty (%d left, wp = %p, rp = %p)\n", - left, - dev->buf_wp, - dev->buf_rp); - } - - while (send) { - if (dev->buf_wp >= dev->buf_rp) { - count = DRM_MIN(send, dev->buf_end - dev->buf_wp); - if (count == left) --count; /* Leave a hole */ - } else { - count = DRM_MIN(send, dev->buf_rp - dev->buf_wp - 1); - } - strncpy(dev->buf_wp, s, count); - dev->buf_wp += count; - if (dev->buf_wp == dev->buf_end) dev->buf_wp = dev->buf; - send -= count; - } - - if (dev->buf_selecting) { - dev->buf_selecting = 0; - selwakeup(&dev->buf_sel); - } - -#ifdef __FreeBSD__ - DRM_DEBUG("dev->buf_sigio=%p\n", dev->buf_sigio); - if (dev->buf_sigio) { - DRM_DEBUG("dev->buf_sigio->sio_pgid=%d\n", dev->buf_sigio->sio_pgid); -#if __FreeBSD_version >= 500000 - pgsigio(&dev->buf_sigio, SIGIO, 0); -#else - pgsigio(dev->buf_sigio, SIGIO, 0); -#endif /* __FreeBSD_version */ - } -#endif /* __FreeBSD__ */ -#ifdef __NetBSD__ - if (dev->buf_pgid) { - DRM_DEBUG("dev->buf_pgid=%d\n", dev->buf_pgid); - if(dev->buf_pgid > 0) - gsignal(dev->buf_pgid, SIGIO); - else if(dev->buf_pgid && (p = pfind(-dev->buf_pgid)) != NULL) - psignal(p, SIGIO); - } -#endif /* __NetBSD__ */ - DRM_DEBUG("waking\n"); - wakeup(&dev->buf_rp); - return 0; } int DRM(poll)(dev_t kdev, int events, DRM_STRUCTPROC *p) { - DRM_DEVICE; - int s; - int revents = 0; - - s = spldrm(); - if (events & (POLLIN | POLLRDNORM)) { - int left = (dev->buf_rp + DRM_BSZ - dev->buf_wp) % DRM_BSZ; - if (left > 0) - revents |= events & (POLLIN | POLLRDNORM); - else - selrecord(p, &dev->buf_sel); - } - splx(s); - - return revents; -} - -int DRM(write)(dev_t kdev, struct uio *uio, int ioflag) -{ -#if DRM_DEBUG_CODE - DRM_DEVICE; -#endif -#ifdef __FreeBSD__ - DRM_DEBUG("pid = %d, device = %p, open_count = %d\n", - curproc->p_pid, dev->device, dev->open_count); -#elif defined(__NetBSD__) - DRM_DEBUG("pid = %d, device = %p, open_count = %d\n", - curproc->p_pid, &dev->device, dev->open_count); -#endif return 0; } |