From owner-cvs-all Mon Mar 23 18:48:20 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id SAA17465 for cvs-all-outgoing; Mon, 23 Mar 1998 18:48:20 -0800 (PST) (envelope-from owner-cvs-all@FreeBSD.ORG) Received: from whqvax.picker.com (whqvax.picker.com [144.54.1.1]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id SAA17443; Mon, 23 Mar 1998 18:48:15 -0800 (PST) (envelope-from rhh@ct.picker.com) Received: from ct.picker.com by whqvax.picker.com with SMTP; Mon, 23 Mar 1998 21:46:33 -0500 (EST) Received: from elmer.ct.picker.com by ct.picker.com (4.1/SMI-4.1) id AA14262; Mon, 23 Mar 98 21:46:31 EST Received: by elmer.ct.picker.com (SMI-8.6/SMI-SVR4) id VAA20458; Mon, 23 Mar 1998 21:46:04 -0500 Message-Id: <19980323214603.15285@ct.picker.com> Date: Mon, 23 Mar 1998 21:46:03 -0500 From: Randall Hopper To: Amancio Hasty , Mark Murray Cc: asami@FreeBSD.ORG, multimedia@FreeBSD.ORG, committers@FreeBSD.ORG, stable@FreeBSD.ORG Subject: Re: Fxtv vs Stable Mail-Followup-To: Amancio Hasty , Mark Murray , asami@FreeBSD.ORG, multimedia@freebsd.org, committers@FreeBSD.ORG, stable@FreeBSD.ORG References: <19980323065624.22389@ct.picker.com> <199803231847.KAA14308@rah.star-gate.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="TB36FDmn/VVEgNH/" X-Mailer: Mutt 0.89.1i In-Reply-To: <199803231847.KAA14308@rah.star-gate.com>; from Amancio Hasty on Mon, Mar 23, 1998 at 10:47:57AM -0800 Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk --TB36FDmn/VVEgNH/ Content-Type: text/plain; charset=us-ascii ... ... 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