Date: Mon, 23 Mar 1998 21:46:03 -0500 From: Randall Hopper <rhh@ct.picker.com> To: Amancio Hasty <hasty@rah.star-gate.com>, Mark Murray <mark@grondar.za> Cc: asami@FreeBSD.ORG, multimedia@FreeBSD.ORG, committers@FreeBSD.ORG, stable@FreeBSD.ORG Subject: Re: Fxtv vs Stable Message-ID: <19980323214603.15285@ct.picker.com> In-Reply-To: <199803231847.KAA14308@rah.star-gate.com>; from Amancio Hasty on Mon, Mar 23, 1998 at 10:47:57AM -0800 References: <19980323065624.22389@ct.picker.com> <199803231847.KAA14308@rah.star-gate.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--TB36FDmn/VVEgNH/
Content-Type: text/plain; charset=us-ascii
...
<design discussion omitted>
...
Ok. Here are the patches for the discussed method of dealing with the
mmap() PROT_WRITE root-only changes recently in -current and -stable as
pertains to Fxtv and the bktr driver. As 2.2.6 is the hot topic, these are
against stable.
Attached is a bktr driver patch (bktr-stable.patch) which adds the trivial
BT848[SG]CBUF ioctls, and a replacement "patch-ab" for the Fxtv port.
As I don't have 2.2.6-beta installed here, I'd be grateful Mark if you
could double-check these, and barring any unexpected problems, commit the
changes to -current and -stable.
Thanks,
Randall
--TB36FDmn/VVEgNH/
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="bktr-stable.patch"
--- sys/i386/include/ioctl_bt848.h-2.2.6-ORIG Mon Mar 23 19:01:02 1998
+++ sys/i386/include/ioctl_bt848.h Mon Mar 23 20:49:52 1998
@@ -193,6 +193,10 @@
#define BT848SFMT _IOW('x', 67, unsigned long )
#define BT848GFMT _IOR('x', 67, unsigned long )
+/* set clear-buffer-on-start */
+#define BT848SCBUF _IOW('x', 68, int)
+#define BT848GCBUF _IOR('x', 68, int)
+
/* Read/Write the BT848's I2C bus directly
* b7-b0: data (read/write)
* b15-b8: internal peripheral register (write)
--- sys/pci/brktree_reg.h-2.2.6-ORIG Mon Mar 23 19:01:02 1998
+++ sys/pci/brktree_reg.h Mon Mar 23 19:42:37 1998
@@ -369,6 +369,7 @@
int alloc_pages; /* number of pages in bigbuf */
struct proc *proc; /* process to receive raised signal */
int signal; /* signal to send to process */
+ int clr_on_start; /* clear cap buf on capture start? */
#define METEOR_SIG_MODE_MASK 0xffff0000
#define METEOR_SIG_FIELD_MODE 0x00010000
#define METEOR_SIG_FRAME_MODE 0x00000000
--- sys/pci/brooktree848.c-2.2.6-ORIG Mon Mar 23 19:01:02 1998
+++ sys/pci/brooktree848.c Mon Mar 23 21:25:26 1998
@@ -879,6 +879,7 @@
bt848->int_mask = ALL_INTS_DISABLED;
bt848->gpio_dma_ctl = FIFO_RISC_DISABLED;
}
+ bktr->clr_on_start = FALSE;
/* defaults for the tuner section of the card */
bktr->tflags = TUNER_INITALIZED;
@@ -1731,6 +1732,14 @@
*(u_char *)arg = (u_char)((temp >> 1) & 0xff);
break;
+ case BT848SCBUF: /* set Clear-Buffer-on-start flag */
+ bktr->clr_on_start = (*(int *)arg != 0);
+ break;
+
+ case BT848GCBUF: /* get Clear-Buffer-on-start flag */
+ *(int *)arg = (int) bktr->clr_on_start;
+ break;
+
case METEORSSIGNAL:
if(*(int *)arg == 0 || *(int *)arg >= NSIG) {
return( EINVAL );
@@ -3343,6 +3352,13 @@
struct format_params *fp;
fp = &format_params[bktr->format_params];
+
+ /* If requested, clear out capture buf first */
+ if (bktr->clr_on_start && (bktr->video.addr == 0)) {
+ bzero((caddr_t)bktr->bigbuf,
+ (size_t)bktr->rows * bktr->cols * bktr->frames *
+ pixfmt_table[ bktr->pixfmt ].public.Bpp);
+ }
bt848 = bktr->base;
--TB36FDmn/VVEgNH/
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="patch-ab.fxtv"
--- ORIG/tvcapture.c Mon Oct 27 23:59:41 1997
+++ tvcapture.c Mon Mar 23 21:29:10 1998
@@ -1126,7 +1126,7 @@
/* Just mmap the biggest buffer we'll need and be done with it. */
/* (Buffer used for non-directvideo captures) */
c->drv_buf = (TV_UINT8 *) mmap( (caddr_t)0, MAX_MMAP_BUF_SIZE,
- PROT_READ|PROT_WRITE, 0, c->fd, (off_t)0 );
+ PROT_READ, MAP_SHARED, c->fd, (off_t)0 );
if ( c->drv_buf == (TV_UINT8 *) -1 ) {
fprintf( stderr, "mmap of driver buffer failed: %s\n",
strerror(errno) );
@@ -1474,7 +1474,8 @@
TV_INT32 Bpp,
idx;
char *cfg_fail_msg;
- TV_BOOL audio_mute;
+ TV_BOOL audio_mute,
+ flush_buf;
DRVPRINTF(( "\tCAPTURE Start %s\n",
c->cap_mode == TV_CAPTURE_CONTINUOUS ? "Continuous":"Single"));
@@ -1499,6 +1500,7 @@
geom.columns = g.w;
geom.rows = g.h;
geom.frames = 1;
+ flush_buf = FALSE;
if ( c->xfer_mode == TV_TRANSFER_DIRECT ) {
TV_BOOL swap_b,
@@ -1536,10 +1538,11 @@
video.banksize = 0,
video.ramsize = 0;
- /* If TDEC is on, may be a while before old trash gets written on */
+ /* If TDEC is on, may be a while before old trash gets written on. */
+ /* So tell the driver to flush the frame buffer before starting */
+ /* capture. */
if ( c->fps != c->fps_max )
- memset( c->drv_buf, '\0',
- g.w * g.h * c->pix_geom_list[ c->pix_geom_idx ].Bpp );
+ flush_buf = TRUE;
}
memcpy( &pix_geom, &c->pix_geom_list[ c->pix_geom_idx ],
sizeof( pix_geom ) );
@@ -1564,6 +1567,12 @@
}
if ( ioctl( c->fd, METEORSACTPIXFMT, &pix_geom.index ) < 0 ) {
DO_IOCTL_SERR( "METEORSACTPIXFMT", &geom );
+ return;
+ }
+
+ larg = flush_buf;
+ if ( ioctl( c->fd, BT848SCBUF, &larg ) < 0 ) {
+ DO_IOCTL_SERR( "BT848SCBUF", larg );
return;
}
--TB36FDmn/VVEgNH/--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980323214603.15285>
