summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsd-core/drmP.h11
-rw-r--r--bsd-core/drm_context.c9
-rw-r--r--bsd-core/drm_drv.c9
-rw-r--r--bsd-core/drm_fops.c137
-rw-r--r--bsd-core/drm_os_freebsd.h1
-rw-r--r--bsd-core/drm_os_netbsd.h1
-rw-r--r--bsd/drmP.h11
-rw-r--r--bsd/drm_context.h9
-rw-r--r--bsd/drm_drv.h9
-rw-r--r--bsd/drm_fops.h137
-rw-r--r--bsd/drm_os_freebsd.h1
-rw-r--r--bsd/drm_os_netbsd.h1
12 files changed, 6 insertions, 330 deletions
diff --git a/bsd-core/drmP.h b/bsd-core/drmP.h
index 96dd52d8..e07337cc 100644
--- a/bsd-core/drmP.h
+++ b/bsd-core/drmP.h
@@ -487,21 +487,11 @@ struct drm_device {
drm_histogram_t histo;
#endif
- /* Callback to X server for context switch
- and for heavy-handed reset. */
- char buf[DRM_BSZ]; /* Output buffer */
- char *buf_rp; /* Read pointer */
- char *buf_wp; /* Write pointer */
- char *buf_end; /* End pointer */
#ifdef __FreeBSD__
struct sigio *buf_sigio; /* Processes waiting for SIGIO */
#elif defined(__NetBSD__)
pid_t buf_pgid;
#endif
- struct selinfo buf_sel; /* Workspace for select/poll */
- int buf_selecting;/* True if poll sleeper */
- wait_queue_head_t buf_readers; /* Processes waiting to read */
- wait_queue_head_t buf_writers; /* Processes waiting to ctx switch */
/* Sysctl support */
struct drm_sysctl_info *sysctl;
@@ -527,7 +517,6 @@ extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
/* Driver support (drm_drv.h) */
extern int DRM(version)( DRM_IOCTL_ARGS );
-extern int DRM(write_string)(drm_device_t *dev, const char *s);
/* Memory management support (drm_memory.h) */
extern void DRM(mem_init)(void);
diff --git a/bsd-core/drm_context.c b/bsd-core/drm_context.c
index c3a20f6e..5ceb23f2 100644
--- a/bsd-core/drm_context.c
+++ b/bsd-core/drm_context.c
@@ -206,8 +206,6 @@ bad:
int DRM(context_switch)( drm_device_t *dev, int old, int new )
{
- char buf[64];
-
if ( test_and_set_bit( 0, &dev->context_flag ) ) {
DRM_ERROR( "Reentering -- FIXME\n" );
return DRM_ERR(EBUSY);
@@ -226,9 +224,6 @@ int DRM(context_switch)( drm_device_t *dev, int old, int new )
if ( DRM(flags) & DRM_FLAG_NOCTX ) {
DRM(context_switch_complete)( dev, new );
- } else {
- sprintf( buf, "C %d %d\n", old, new );
- DRM(write_string)( dev, buf );
}
return 0;
@@ -374,7 +369,6 @@ int DRM(rmctx)( DRM_IOCTL_ARGS )
int DRM(context_switch)(drm_device_t *dev, int old, int new)
{
- char buf[64];
drm_queue_t *q;
#if 0
@@ -412,9 +406,6 @@ int DRM(context_switch)(drm_device_t *dev, int old, int new)
if (DRM(flags) & DRM_FLAG_NOCTX) {
DRM(context_switch_complete)(dev, new);
- } else {
- sprintf(buf, "C %d %d\n", old, new);
- DRM(write_string)(dev, buf);
}
atomic_dec(&q->use_count);
diff --git a/bsd-core/drm_drv.c b/bsd-core/drm_drv.c
index d43a4666..4de2d3b5 100644
--- a/bsd-core/drm_drv.c
+++ b/bsd-core/drm_drv.c
@@ -228,7 +228,6 @@ static struct cdevsw DRM(cdevsw) = {
.d_open = DRM( open ),
.d_close = DRM( close ),
.d_read = DRM( read ),
- .d_write = DRM( write ),
.d_ioctl = DRM( ioctl ),
.d_poll = DRM( poll ),
.d_mmap = DRM( mmap ),
@@ -290,7 +289,7 @@ static struct cdevsw DRM(cdevsw) = {
DRM(open),
DRM(close),
DRM(read),
- DRM(write),
+ nowrite,
DRM(ioctl),
nostop,
notty,
@@ -518,17 +517,11 @@ static int DRM(setup)( drm_device_t *dev )
dev->ctx_start = 0;
dev->lck_start = 0;
- dev->buf_rp = dev->buf;
- dev->buf_wp = dev->buf;
- dev->buf_end = dev->buf + DRM_BSZ;
#ifdef __FreeBSD__
dev->buf_sigio = NULL;
#elif defined(__NetBSD__)
dev->buf_pgid = 0;
#endif
- dev->buf_readers = 0;
- dev->buf_writers = 0;
- dev->buf_selecting = 0;
DRM_DEBUG( "\n" );
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;
}
diff --git a/bsd-core/drm_os_freebsd.h b/bsd-core/drm_os_freebsd.h
index 30a6e362..93e768fe 100644
--- a/bsd-core/drm_os_freebsd.h
+++ b/bsd-core/drm_os_freebsd.h
@@ -385,7 +385,6 @@ extern d_ioctl_t DRM(ioctl);
extern d_open_t DRM(open);
extern d_close_t DRM(close);
extern d_read_t DRM(read);
-extern d_write_t DRM(write);
extern d_poll_t DRM(poll);
extern d_mmap_t DRM(mmap);
extern int DRM(open_helper)(dev_t kdev, int flags, int fmt,
diff --git a/bsd-core/drm_os_netbsd.h b/bsd-core/drm_os_netbsd.h
index fa158254..e0a332d7 100644
--- a/bsd-core/drm_os_netbsd.h
+++ b/bsd-core/drm_os_netbsd.h
@@ -338,7 +338,6 @@ extern dev_type_ioctl(DRM(ioctl));
extern dev_type_open(DRM(open));
extern dev_type_close(DRM(close));
extern dev_type_read(DRM(read));
-extern dev_type_write(DRM(write));
extern dev_type_poll(DRM(poll));
extern dev_type_mmap(DRM(mmap));
extern int DRM(open_helper)(dev_t kdev, int flags, int fmt,
diff --git a/bsd/drmP.h b/bsd/drmP.h
index 96dd52d8..e07337cc 100644
--- a/bsd/drmP.h
+++ b/bsd/drmP.h
@@ -487,21 +487,11 @@ struct drm_device {
drm_histogram_t histo;
#endif
- /* Callback to X server for context switch
- and for heavy-handed reset. */
- char buf[DRM_BSZ]; /* Output buffer */
- char *buf_rp; /* Read pointer */
- char *buf_wp; /* Write pointer */
- char *buf_end; /* End pointer */
#ifdef __FreeBSD__
struct sigio *buf_sigio; /* Processes waiting for SIGIO */
#elif defined(__NetBSD__)
pid_t buf_pgid;
#endif
- struct selinfo buf_sel; /* Workspace for select/poll */
- int buf_selecting;/* True if poll sleeper */
- wait_queue_head_t buf_readers; /* Processes waiting to read */
- wait_queue_head_t buf_writers; /* Processes waiting to ctx switch */
/* Sysctl support */
struct drm_sysctl_info *sysctl;
@@ -527,7 +517,6 @@ extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
/* Driver support (drm_drv.h) */
extern int DRM(version)( DRM_IOCTL_ARGS );
-extern int DRM(write_string)(drm_device_t *dev, const char *s);
/* Memory management support (drm_memory.h) */
extern void DRM(mem_init)(void);
diff --git a/bsd/drm_context.h b/bsd/drm_context.h
index c3a20f6e..5ceb23f2 100644
--- a/bsd/drm_context.h
+++ b/bsd/drm_context.h
@@ -206,8 +206,6 @@ bad:
int DRM(context_switch)( drm_device_t *dev, int old, int new )
{
- char buf[64];
-
if ( test_and_set_bit( 0, &dev->context_flag ) ) {
DRM_ERROR( "Reentering -- FIXME\n" );
return DRM_ERR(EBUSY);
@@ -226,9 +224,6 @@ int DRM(context_switch)( drm_device_t *dev, int old, int new )
if ( DRM(flags) & DRM_FLAG_NOCTX ) {
DRM(context_switch_complete)( dev, new );
- } else {
- sprintf( buf, "C %d %d\n", old, new );
- DRM(write_string)( dev, buf );
}
return 0;
@@ -374,7 +369,6 @@ int DRM(rmctx)( DRM_IOCTL_ARGS )
int DRM(context_switch)(drm_device_t *dev, int old, int new)
{
- char buf[64];
drm_queue_t *q;
#if 0
@@ -412,9 +406,6 @@ int DRM(context_switch)(drm_device_t *dev, int old, int new)
if (DRM(flags) & DRM_FLAG_NOCTX) {
DRM(context_switch_complete)(dev, new);
- } else {
- sprintf(buf, "C %d %d\n", old, new);
- DRM(write_string)(dev, buf);
}
atomic_dec(&q->use_count);
diff --git a/bsd/drm_drv.h b/bsd/drm_drv.h
index d43a4666..4de2d3b5 100644
--- a/bsd/drm_drv.h
+++ b/bsd/drm_drv.h
@@ -228,7 +228,6 @@ static struct cdevsw DRM(cdevsw) = {
.d_open = DRM( open ),
.d_close = DRM( close ),
.d_read = DRM( read ),
- .d_write = DRM( write ),
.d_ioctl = DRM( ioctl ),
.d_poll = DRM( poll ),
.d_mmap = DRM( mmap ),
@@ -290,7 +289,7 @@ static struct cdevsw DRM(cdevsw) = {
DRM(open),
DRM(close),
DRM(read),
- DRM(write),
+ nowrite,
DRM(ioctl),
nostop,
notty,
@@ -518,17 +517,11 @@ static int DRM(setup)( drm_device_t *dev )
dev->ctx_start = 0;
dev->lck_start = 0;
- dev->buf_rp = dev->buf;
- dev->buf_wp = dev->buf;
- dev->buf_end = dev->buf + DRM_BSZ;
#ifdef __FreeBSD__
dev->buf_sigio = NULL;
#elif defined(__NetBSD__)
dev->buf_pgid = 0;
#endif
- dev->buf_readers = 0;
- dev->buf_writers = 0;
- dev->buf_selecting = 0;
DRM_DEBUG( "\n" );
diff --git a/bsd/drm_fops.h b/bsd/drm_fops.h
index 75baa5f2..b0c18fa3 100644
--- a/bsd/drm_fops.h
+++ b/bsd/drm_fops.h
@@ -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;
}
diff --git a/bsd/drm_os_freebsd.h b/bsd/drm_os_freebsd.h
index 30a6e362..93e768fe 100644
--- a/bsd/drm_os_freebsd.h
+++ b/bsd/drm_os_freebsd.h
@@ -385,7 +385,6 @@ extern d_ioctl_t DRM(ioctl);
extern d_open_t DRM(open);
extern d_close_t DRM(close);
extern d_read_t DRM(read);
-extern d_write_t DRM(write);
extern d_poll_t DRM(poll);
extern d_mmap_t DRM(mmap);
extern int DRM(open_helper)(dev_t kdev, int flags, int fmt,
diff --git a/bsd/drm_os_netbsd.h b/bsd/drm_os_netbsd.h
index fa158254..e0a332d7 100644
--- a/bsd/drm_os_netbsd.h
+++ b/bsd/drm_os_netbsd.h
@@ -338,7 +338,6 @@ extern dev_type_ioctl(DRM(ioctl));
extern dev_type_open(DRM(open));
extern dev_type_close(DRM(close));
extern dev_type_read(DRM(read));
-extern dev_type_write(DRM(write));
extern dev_type_poll(DRM(poll));
extern dev_type_mmap(DRM(mmap));
extern int DRM(open_helper)(dev_t kdev, int flags, int fmt,