patch-2.2.8 linux/drivers/char/planb.h

Next file: linux/drivers/char/radio-cadet.c
Previous file: linux/drivers/char/planb.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.2.7/linux/drivers/char/planb.h linux/drivers/char/planb.h
@@ -0,0 +1,229 @@
+/* 
+    planb - PlanB frame grabber driver
+
+    PlanB is used in the 7x00/8x00 series of PowerMacintosh
+    Computers as video input DMA controller.
+
+    Copyright (C) 1998 Michel Lanners (mlan@cpu.lu)
+
+    Based largely on the bttv driver by Ralph Metzler (rjkm@thp.uni-koeln.de)
+
+    Additional debugging and coding by Takashi Oe (toe@unlinfo.unl.edu)
+
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/* $Id: planb.h,v 1.13 1999/05/03 19:28:56 mlan Exp $ */
+
+#ifndef _PLANB_H_
+#define _PLANB_H_
+
+#ifdef __KERNEL__
+#include <asm/dbdma.h>
+#include "saa7196.h"
+#endif /* __KERNEL__ */
+
+#define PLANB_DEVICE_NAME	"Apple PlanB Video-In"
+#define PLANB_REV		"1.0"
+
+#ifdef __KERNEL__
+//#define PLANB_GSCANLINE	/* use this if apps have the notion of */
+				/* grab buffer scanline */
+/* This should be safe for both PAL and NTSC */
+#define PLANB_MAXPIXELS 768
+#define PLANB_MAXLINES 576
+#define PLANB_NTSC_MAXLINES 480
+
+/* Uncomment your preferred norm ;-) */
+#define PLANB_DEF_NORM VIDEO_MODE_PAL
+//#define PLANB_DEF_NORM VIDEO_MODE_NTSC
+//#define PLANB_DEF_NORM VIDEO_MODE_SECAM
+
+/* fields settings */
+#define PLANB_GRAY	0x1	/*  8-bit mono? */
+#define PLANB_COLOUR15	0x2	/* 16-bit mode */
+#define PLANB_COLOUR32	0x4	/* 32-bit mode */
+#define PLANB_CLIPMASK	0x8	/* hardware clipmasking */
+
+/* misc. flags for PlanB DMA operation */
+#define	CH_SYNC		0x1	/* synchronize channels (set by ch1;
+				   cleared by ch2) */
+#define FIELD_SYNC	0x2     /* used for the start of each field
+				   (0 -> 1 -> 0 for ch1; 0 -> 1 for ch2) */
+#define EVEN_FIELD	0x0	/* even field is detected if unset */
+#define DMA_ABORT	0x2	/* error or just out of sync if set */
+#define ODD_FIELD	0x4	/* odd field is detected if set */
+
+/* for capture operations */
+#define MAX_GBUFFERS	2
+#ifdef PLANB_GSCANLINE
+#define PLANB_MAX_FBUF	0x240000	/* 576 * 1024 * 4 */
+#define TAB_FACTOR	(1)
+#else
+#define PLANB_MAX_FBUF	0x1b0000	/* 576 * 768 * 4 */
+#define TAB_FACTOR	(2)
+#endif
+#endif /* __KERNEL__ */
+
+struct planb_saa_regs {
+	unsigned char addr;
+	unsigned char val;
+};
+
+struct planb_stat_regs {
+	unsigned int ch1_stat;
+	unsigned int ch2_stat;
+	unsigned char saa_stat0;
+	unsigned char saa_stat1;
+};
+
+struct planb_any_regs {
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned char data[128];
+};
+
+/* planb private ioctls */
+#define PLANBIOCGSAAREGS	_IOWR('v', BASE_VIDIOCPRIVATE, struct planb_saa_regs)	/* Read a saa7196 reg value */
+#define PLANBIOCSSAAREGS	_IOW('v', BASE_VIDIOCPRIVATE + 1, struct planb_saa_regs)	/* Set a saa7196 reg value */
+#define PLANBIOCGSTAT		_IOR('v', BASE_VIDIOCPRIVATE + 2, struct planb_stat_regs)	/* Read planb status */
+#define PLANB_TV_MODE		1
+#define PLANB_VTR_MODE		2
+#define PLANBIOCGMODE		_IOR('v', BASE_VIDIOCPRIVATE + 3, int)	/* Get TV/VTR mode */
+#define PLANBIOCSMODE		_IOW('v', BASE_VIDIOCPRIVATE + 4, int)	/* Set TV/VTR mode */
+
+#ifdef PLANB_GSCANLINE
+#define PLANBG_GRAB_BPL		_IOR('v', BASE_VIDIOCPRIVATE + 5, int)	/* # of bytes per scanline in grab buffer */
+#endif
+
+/* call wake_up_interruptible() with appropriate actions */
+#define PLANB_INTR_DEBUG	_IOW('v', BASE_VIDIOCPRIVATE + 20, int)
+/* investigate which reg does what */
+#define PLANB_INV_REGS		_IOWR('v', BASE_VIDIOCPRIVATE + 21, struct planb_any_regs)
+
+#ifdef __KERNEL__
+
+/* Potentially useful macros */
+#define PLANB_SET(x)	((x) << 16 | (x))
+#define PLANB_CLR(x)	((x) << 16)
+
+/* This represents the physical register layout */
+struct planb_registers {
+	volatile struct dbdma_regs	ch1;		/* 0x00: video in */
+	volatile unsigned int		even;		/* 0x40: even field setting */
+	volatile unsigned int		odd;		/* 0x44; odd field setting */
+	unsigned int			pad1[14];	/* empty? */
+	volatile struct dbdma_regs	ch2;		/* 0x80: clipmask out */
+	unsigned int			pad2[16];	/* 0xc0: empty? */
+	volatile unsigned int		reg3;		/* 0x100: ???? */
+	volatile unsigned int		intr_stat;	/* 0x104: irq status */
+#define PLANB_CLR_IRQ		0x00		/* clear Plan B interrupt */
+#define PLANB_GEN_IRQ		0x01		/* assert Plan B interrupt */
+#define PLANB_FRM_IRQ		0x02		/* end of frame */
+#define PLANB_IRQ_CMD_MASK	0x00000003U	/* reserve 2 lsbs for command */
+	unsigned int			pad3[1];	/* empty? */
+	volatile unsigned int		reg5;		/* 0x10c: ??? */
+	unsigned int			pad4[60];	/* empty? */
+	volatile unsigned char		saa_addr;	/* 0x200: SAA subadr */
+	char				pad5[3];
+	volatile unsigned char		saa_regval;	/* SAA7196 write reg. val */
+	char				pad6[3];
+	volatile unsigned char		saa_status;	/* SAA7196 status byte */
+	/* There is more unused stuff here */
+};
+
+struct planb_window {
+	int	x, y;
+	ushort	width, height;
+	ushort	bpp, bpl, depth, pad;
+	ushort	swidth, sheight;
+	int	norm;
+	int	interlace;
+	u32	color_fmt;
+	int	chromakey;
+	int	mode;		/* used to switch between TV/VTR modes */
+};
+
+struct planb_suspend {
+	int overlay;
+	int frame;
+	struct dbdma_cmd cmd;
+};
+
+struct planb {
+	struct	video_device video_dev;
+	struct	video_picture picture;		/* Current picture params */
+	struct	video_audio audio_dev;		/* Current audio params */
+  
+	volatile struct planb_registers *planb_base;	/* virt base of planb */
+	struct planb_registers *planb_base_phys;	/* phys base of planb */
+	void	*priv_space;			/* Org. alloc. mem for kfree */
+	int	user;
+	unsigned int tab_size;
+	int     maxlines;
+	int lock;
+	struct wait_queue *lockq;
+	unsigned int	irq;			/* interrupt number */
+	volatile unsigned int intr_mask;
+
+	int	overlay;			/* overlay running? */
+	struct	planb_window win;
+	unsigned long frame_buffer_phys;	/* We need phys for DMA */
+	int	offset;				/* offset of pixel 1 */
+	volatile struct dbdma_cmd *ch1_cmd;	/* Video In DMA cmd buffer */
+	volatile struct dbdma_cmd *ch2_cmd;	/* Clip Out DMA cmd buffer */
+	volatile struct dbdma_cmd *overlay_last1;
+	volatile struct dbdma_cmd *overlay_last2;
+	unsigned long ch1_cmd_phys;
+	volatile unsigned char *mask;		/* Clipmask buffer */
+	int suspend;
+	struct wait_queue *suspendq;
+	struct planb_suspend suspended;
+	int	cmd_buff_inited;		/* cmd buffer inited? */
+
+	int grabbing;
+	unsigned int gcount;
+	struct wait_queue *capq;
+	int last_fr;
+	int prev_last_fr;
+        unsigned char *fbuffer;
+	unsigned char *gbuffer[MAX_GBUFFERS];
+	volatile struct dbdma_cmd *cap_cmd[MAX_GBUFFERS];
+	volatile struct dbdma_cmd *last_cmd[MAX_GBUFFERS];
+	volatile struct dbdma_cmd *pre_cmd[MAX_GBUFFERS];
+	int need_pre_capture[MAX_GBUFFERS];
+#define PLANB_DUMMY 40	/* # of command buf's allocated for pre-capture seq. */
+	int gwidth[MAX_GBUFFERS], gheight[MAX_GBUFFERS];
+	unsigned int gfmt[MAX_GBUFFERS];
+	int gnorm_switch[MAX_GBUFFERS];
+        volatile unsigned int *frame_stat;
+#define GBUFFER_UNUSED       0x00U
+#define GBUFFER_GRABBING     0x01U
+#define GBUFFER_DONE         0x02U
+#ifdef PLANB_GSCANLINE
+	int gbytes_per_line;
+#else
+#define MAX_LNUM 431	/* change this if PLANB_MAXLINES or */
+			/* PLANB_MAXPIXELS changes */
+	unsigned char *l_fr_addr[MAX_GBUFFERS];
+	unsigned char *l_to_addr[MAX_GBUFFERS][MAX_LNUM];
+	int lsize[MAX_GBUFFERS], lnum[MAX_GBUFFERS];
+#endif
+};
+
+#endif /* __KERNEL__ */
+
+#endif /* _PLANB_H_ */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)