summaryrefslogtreecommitdiff
path: root/bsd-core/drm_fops.c
diff options
context:
space:
mode:
authorEric Anholt <anholt@freebsd.org>2003-04-24 00:25:36 +0000
committerEric Anholt <anholt@freebsd.org>2003-04-24 00:25:36 +0000
commit1fc0a5e1e4c43a0e9fe8b0d9860f22ae8e820d46 (patch)
tree396b905a16cb361eefbd6dc884c931a51fe9c7b2 /bsd-core/drm_fops.c
parente15b0b6a1b95e4145363b15e1a581ee230b2f9a2 (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.c137
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;
}