xref: /linux/drivers/media/pci/zoran/videocodec.h (revision 0337966d121ebebf73a1c346123e8112796e684e)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * VIDEO MOTION CODECs internal API for video devices
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * Interface for MJPEG (and maybe later MPEG/WAVELETS) codec's
51da177e4SLinus Torvalds  * bound to a master device.
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * (c) 2002 Wolfgang Scherr <scherr@net4you.at>
81da177e4SLinus Torvalds  *
91da177e4SLinus Torvalds  * $Id: videocodec.h,v 1.1.2.4 2003/01/14 21:15:03 rbultje Exp $
101da177e4SLinus Torvalds  *
111da177e4SLinus Torvalds  * ------------------------------------------------------------------------
121da177e4SLinus Torvalds  *
131da177e4SLinus Torvalds  * This program is free software; you can redistribute it and/or modify
141da177e4SLinus Torvalds  * it under the terms of the GNU General Public License as published by
151da177e4SLinus Torvalds  * the Free Software Foundation; either version 2 of the License, or
161da177e4SLinus Torvalds  * (at your option) any later version.
171da177e4SLinus Torvalds  *
181da177e4SLinus Torvalds  * This program is distributed in the hope that it will be useful,
191da177e4SLinus Torvalds  * but WITHOUT ANY WARRANTY; without even the implied warranty of
201da177e4SLinus Torvalds  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
211da177e4SLinus Torvalds  * GNU General Public License for more details.
221da177e4SLinus Torvalds  *
231da177e4SLinus Torvalds  * ------------------------------------------------------------------------
241da177e4SLinus Torvalds  */
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds /* =================== */
271da177e4SLinus Torvalds /* general description */
281da177e4SLinus Torvalds /* =================== */
291da177e4SLinus Torvalds 
301da177e4SLinus Torvalds /* Should ease the (re-)usage of drivers supporting cards with (different)
311da177e4SLinus Torvalds    video codecs. The codecs register to this module their functionality,
321da177e4SLinus Torvalds    and the processors (masters) can attach to them if they fit.
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds    The codecs are typically have a "strong" binding to their master - so I
351da177e4SLinus Torvalds    don't think it makes sense to have a full blown interfacing as with e.g.
361da177e4SLinus Torvalds    i2c. If you have an other opinion, let's discuss & implement it :-)))
371da177e4SLinus Torvalds 
381da177e4SLinus Torvalds    Usage:
391da177e4SLinus Torvalds 
401da177e4SLinus Torvalds    The slave has just to setup the videocodec structure and use two functions:
411da177e4SLinus Torvalds    videocodec_register(codecdata);
421da177e4SLinus Torvalds    videocodec_unregister(codecdata);
431da177e4SLinus Torvalds    The best is just calling them at module (de-)initialisation.
441da177e4SLinus Torvalds 
451da177e4SLinus Torvalds    The master sets up the structure videocodec_master and calls:
461da177e4SLinus Torvalds    codecdata=videocodec_attach(master_codecdata);
471da177e4SLinus Torvalds    videocodec_detach(codecdata);
481da177e4SLinus Torvalds 
491da177e4SLinus Torvalds    The slave is called during attach/detach via functions setup previously
501da177e4SLinus Torvalds    during register. At that time, the master_data pointer is set up
511da177e4SLinus Torvalds    and the slave can access any io registers of the master device (in the case
521da177e4SLinus Torvalds    the slave is bound to it). Otherwise it doesn't need this functions and
531da177e4SLinus Torvalds    therfor they may not be initialized.
541da177e4SLinus Torvalds 
55eef35c2dSStefan Weil    The other functions are just for convenience, as they are for sure used by
56*25985edcSLucas De Marchi    most/all of the codecs. The last ones may be omitted, too.
571da177e4SLinus Torvalds 
581da177e4SLinus Torvalds    See the structure declaration below for more information and which data has
591da177e4SLinus Torvalds    to be set up for the master and the slave.
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds    ----------------------------------------------------------------------------
621da177e4SLinus Torvalds    The master should have "knowledge" of the slave and vice versa.  So the data
631da177e4SLinus Torvalds    structures sent to/from slave via set_data/get_data set_image/get_image are
641da177e4SLinus Torvalds    device dependent and vary between MJPEG/MPEG/WAVELET/... devices. (!!!!)
651da177e4SLinus Torvalds    ----------------------------------------------------------------------------
661da177e4SLinus Torvalds */
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds /* ========================================== */
701da177e4SLinus Torvalds /* description of the videocodec_io structure */
711da177e4SLinus Torvalds /* ========================================== */
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds /*
741da177e4SLinus Torvalds    ==== master setup ====
751da177e4SLinus Torvalds    name -> name of the device structure for reference and debugging
761da177e4SLinus Torvalds    master_data ->  data ref. for the master (e.g. the zr36055,57,67)
771da177e4SLinus Torvalds    readreg -> ref. to read-fn from register (setup by master, used by slave)
781da177e4SLinus Torvalds    writereg -> ref. to write-fn to register (setup by master, used by slave)
791da177e4SLinus Torvalds 	       this two functions do the lowlevel I/O job
801da177e4SLinus Torvalds 
811da177e4SLinus Torvalds    ==== slave functionality setup ====
821da177e4SLinus Torvalds    slave_data -> data ref. for the slave (e.g. the zr36050,60)
831da177e4SLinus Torvalds    check -> fn-ref. checks availability of an device, returns -EIO on failure or
841da177e4SLinus Torvalds 	    the type on success
851da177e4SLinus Torvalds 	    this makes espcecially sense if a driver module supports more than
861da177e4SLinus Torvalds 	    one codec which may be quite similar to access, nevertheless it
871da177e4SLinus Torvalds 	    is good for a first functionality check
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds    -- main functions you always need for compression/decompression --
901da177e4SLinus Torvalds 
911da177e4SLinus Torvalds    set_mode -> this fn-ref. resets the entire codec, and sets up the mode
921da177e4SLinus Torvalds 	       with the last defined norm/size (or device default if not
931da177e4SLinus Torvalds 	       available) - it returns 0 if the mode is possible
941da177e4SLinus Torvalds    set_size -> this fn-ref. sets the norm and image size for
951da177e4SLinus Torvalds 	       compression/decompression (returns 0 on success)
967f6adeafSHans Verkuil 	       the norm param is defined in videodev2.h (V4L2_STD_*)
971da177e4SLinus Torvalds 
981da177e4SLinus Torvalds    additional setup may be available, too - but the codec should work with
991da177e4SLinus Torvalds    some default values even without this
1001da177e4SLinus Torvalds 
1011da177e4SLinus Torvalds    set_data -> sets device-specific data (tables, quality etc.)
1021da177e4SLinus Torvalds    get_data -> query device-specific data (tables, quality etc.)
1031da177e4SLinus Torvalds 
1041da177e4SLinus Torvalds    if the device delivers interrupts, they may be setup/handled here
1051da177e4SLinus Torvalds    setup_interrupt -> codec irq setup (not needed for 36050/60)
1061da177e4SLinus Torvalds    handle_interrupt -> codec irq handling (not needed for 36050/60)
1071da177e4SLinus Torvalds 
1081da177e4SLinus Torvalds    if the device delivers pictures, they may be handled here
1091da177e4SLinus Torvalds    put_image -> puts image data to the codec (not needed for 36050/60)
1101da177e4SLinus Torvalds    get_image -> gets image data from the codec (not needed for 36050/60)
1111da177e4SLinus Torvalds 		the calls include frame numbers and flags (even/odd/...)
1121da177e4SLinus Torvalds 		if needed and a flag which allows blocking until its ready
1131da177e4SLinus Torvalds */
1141da177e4SLinus Torvalds 
1151da177e4SLinus Torvalds /* ============== */
1161da177e4SLinus Torvalds /* user interface */
1171da177e4SLinus Torvalds /* ============== */
1181da177e4SLinus Torvalds 
1191da177e4SLinus Torvalds /*
1201da177e4SLinus Torvalds    Currently there is only a information display planned, as the layer
1211da177e4SLinus Torvalds    is not visible for the user space at all.
1221da177e4SLinus Torvalds 
1231da177e4SLinus Torvalds    Information is available via procfs. The current entry is "/proc/videocodecs"
1241da177e4SLinus Torvalds    but it makes sense to "hide" it in the /proc/video tree of v4l(2) --TODO--.
1251da177e4SLinus Torvalds 
1261da177e4SLinus Torvalds A example for such an output is:
1271da177e4SLinus Torvalds 
1281da177e4SLinus Torvalds <S>lave or attached <M>aster name  type flags    magic    (connected as)
1291da177e4SLinus Torvalds S                          zr36050 0002 0000d001 00000000 (TEMPLATE)
1301da177e4SLinus Torvalds M                       zr36055[0] 0001 0000c001 00000000 (zr36050[0])
1311da177e4SLinus Torvalds M                       zr36055[1] 0001 0000c001 00000000 (zr36050[1])
1321da177e4SLinus Torvalds 
1331da177e4SLinus Torvalds */
1341da177e4SLinus Torvalds 
1351da177e4SLinus Torvalds 
1361da177e4SLinus Torvalds /* =============================================== */
1371da177e4SLinus Torvalds /* special defines for the videocodec_io structure */
1381da177e4SLinus Torvalds /* =============================================== */
1391da177e4SLinus Torvalds 
1401da177e4SLinus Torvalds #ifndef __LINUX_VIDEOCODEC_H
1411da177e4SLinus Torvalds #define __LINUX_VIDEOCODEC_H
1421da177e4SLinus Torvalds 
1437f6adeafSHans Verkuil #include <linux/videodev2.h>
1441da177e4SLinus Torvalds 
1451da177e4SLinus Torvalds #define CODEC_DO_COMPRESSION 0
1461da177e4SLinus Torvalds #define CODEC_DO_EXPANSION   1
1471da177e4SLinus Torvalds 
1481da177e4SLinus Torvalds /* this are the current codec flags I think they are needed */
1491da177e4SLinus Torvalds /*  -> type value in structure */
1501da177e4SLinus Torvalds #define CODEC_FLAG_JPEG      0x00000001L	// JPEG codec
1511da177e4SLinus Torvalds #define CODEC_FLAG_MPEG      0x00000002L	// MPEG1/2/4 codec
1521da177e4SLinus Torvalds #define CODEC_FLAG_DIVX      0x00000004L	// DIVX codec
1531da177e4SLinus Torvalds #define CODEC_FLAG_WAVELET   0x00000008L	// WAVELET codec
1541da177e4SLinus Torvalds 					  // room for other types
1551da177e4SLinus Torvalds 
1561da177e4SLinus Torvalds #define CODEC_FLAG_MAGIC     0x00000800L	// magic key must match
1571da177e4SLinus Torvalds #define CODEC_FLAG_HARDWARE  0x00001000L	// is a hardware codec
1581da177e4SLinus Torvalds #define CODEC_FLAG_VFE       0x00002000L	// has direct video frontend
1591da177e4SLinus Torvalds #define CODEC_FLAG_ENCODER   0x00004000L	// compression capability
1601da177e4SLinus Torvalds #define CODEC_FLAG_DECODER   0x00008000L	// decompression capability
1611da177e4SLinus Torvalds #define CODEC_FLAG_NEEDIRQ   0x00010000L	// needs irq handling
1621da177e4SLinus Torvalds #define CODEC_FLAG_RDWRPIC   0x00020000L	// handles picture I/O
1631da177e4SLinus Torvalds 
1641da177e4SLinus Torvalds /* a list of modes, some are just examples (is there any HW?) */
1651da177e4SLinus Torvalds #define CODEC_MODE_BJPG      0x0001	// Baseline JPEG
1661da177e4SLinus Torvalds #define CODEC_MODE_LJPG      0x0002	// Lossless JPEG
1671da177e4SLinus Torvalds #define CODEC_MODE_MPEG1     0x0003	// MPEG 1
1681da177e4SLinus Torvalds #define CODEC_MODE_MPEG2     0x0004	// MPEG 2
1691da177e4SLinus Torvalds #define CODEC_MODE_MPEG4     0x0005	// MPEG 4
1701da177e4SLinus Torvalds #define CODEC_MODE_MSDIVX    0x0006	// MS DivX
1711da177e4SLinus Torvalds #define CODEC_MODE_ODIVX     0x0007	// Open DivX
1721da177e4SLinus Torvalds #define CODEC_MODE_WAVELET   0x0008	// Wavelet
1731da177e4SLinus Torvalds 
1741da177e4SLinus Torvalds /* this are the current codec types I want to implement */
1751da177e4SLinus Torvalds /*  -> type value in structure */
1761da177e4SLinus Torvalds #define CODEC_TYPE_NONE    0
1771da177e4SLinus Torvalds #define CODEC_TYPE_L64702  1
1781da177e4SLinus Torvalds #define CODEC_TYPE_ZR36050 2
1791da177e4SLinus Torvalds #define CODEC_TYPE_ZR36016 3
1801da177e4SLinus Torvalds #define CODEC_TYPE_ZR36060 4
1811da177e4SLinus Torvalds 
1821da177e4SLinus Torvalds /* the type of data may be enhanced by future implementations (data-fn.'s) */
1831da177e4SLinus Torvalds /*  -> used in command                                                     */
1841da177e4SLinus Torvalds #define CODEC_G_STATUS         0x0000	/* codec status (query only) */
1851da177e4SLinus Torvalds #define CODEC_S_CODEC_MODE     0x0001	/* codec mode (baseline JPEG, MPEG1,... */
1861da177e4SLinus Torvalds #define CODEC_G_CODEC_MODE     0x8001
1871da177e4SLinus Torvalds #define CODEC_S_VFE            0x0002	/* additional video frontend setup */
1881da177e4SLinus Torvalds #define CODEC_G_VFE            0x8002
1891da177e4SLinus Torvalds #define CODEC_S_MMAP           0x0003	/* MMAP setup (if available) */
1901da177e4SLinus Torvalds 
1911da177e4SLinus Torvalds #define CODEC_S_JPEG_TDS_BYTE  0x0010	/* target data size in bytes */
1921da177e4SLinus Torvalds #define CODEC_G_JPEG_TDS_BYTE  0x8010
1931da177e4SLinus Torvalds #define CODEC_S_JPEG_SCALE     0x0011	/* scaling factor for quant. tables */
1941da177e4SLinus Torvalds #define CODEC_G_JPEG_SCALE     0x8011
1951da177e4SLinus Torvalds #define CODEC_S_JPEG_HDT_DATA  0x0018	/* huffman-tables */
1961da177e4SLinus Torvalds #define CODEC_G_JPEG_HDT_DATA  0x8018
1971da177e4SLinus Torvalds #define CODEC_S_JPEG_QDT_DATA  0x0019	/* quantizing-tables */
1981da177e4SLinus Torvalds #define CODEC_G_JPEG_QDT_DATA  0x8019
1991da177e4SLinus Torvalds #define CODEC_S_JPEG_APP_DATA  0x001A	/* APP marker */
2001da177e4SLinus Torvalds #define CODEC_G_JPEG_APP_DATA  0x801A
2011da177e4SLinus Torvalds #define CODEC_S_JPEG_COM_DATA  0x001B	/* COM marker */
2021da177e4SLinus Torvalds #define CODEC_G_JPEG_COM_DATA  0x801B
2031da177e4SLinus Torvalds 
2041da177e4SLinus Torvalds #define CODEC_S_PRIVATE        0x1000	/* "private" commands start here */
2051da177e4SLinus Torvalds #define CODEC_G_PRIVATE        0x9000
2061da177e4SLinus Torvalds 
2071da177e4SLinus Torvalds #define CODEC_G_FLAG           0x8000	/* this is how 'get' is detected */
2081da177e4SLinus Torvalds 
2091da177e4SLinus Torvalds /* types of transfer, directly user space or a kernel buffer (image-fn.'s) */
2101da177e4SLinus Torvalds /*  -> used in get_image, put_image                                        */
2111da177e4SLinus Torvalds #define CODEC_TRANSFER_KERNEL 0	/* use "memcopy" */
2121da177e4SLinus Torvalds #define CODEC_TRANSFER_USER   1	/* use "to/from_user" */
2131da177e4SLinus Torvalds 
2141da177e4SLinus Torvalds 
2151da177e4SLinus Torvalds /* ========================= */
2161da177e4SLinus Torvalds /* the structures itself ... */
2171da177e4SLinus Torvalds /* ========================= */
2181da177e4SLinus Torvalds 
2191da177e4SLinus Torvalds struct vfe_polarity {
2200a115373SRandy Dunlap 	unsigned int vsync_pol:1;
2210a115373SRandy Dunlap 	unsigned int hsync_pol:1;
2220a115373SRandy Dunlap 	unsigned int field_pol:1;
2230a115373SRandy Dunlap 	unsigned int blank_pol:1;
2240a115373SRandy Dunlap 	unsigned int subimg_pol:1;
2250a115373SRandy Dunlap 	unsigned int poe_pol:1;
2260a115373SRandy Dunlap 	unsigned int pvalid_pol:1;
2270a115373SRandy Dunlap 	unsigned int vclk_pol:1;
2281da177e4SLinus Torvalds };
2291da177e4SLinus Torvalds 
2301da177e4SLinus Torvalds struct vfe_settings {
2311da177e4SLinus Torvalds 	__u32 x, y;		/* Offsets into image */
2321da177e4SLinus Torvalds 	__u32 width, height;	/* Area to capture */
2331da177e4SLinus Torvalds 	__u16 decimation;	/* Decimation divider */
2341da177e4SLinus Torvalds 	__u16 flags;		/* Flags for capture */
2351da177e4SLinus Torvalds 	__u16 quality;		/* quality of the video */
2361da177e4SLinus Torvalds };
2371da177e4SLinus Torvalds 
2381da177e4SLinus Torvalds struct tvnorm {
2391da177e4SLinus Torvalds 	u16 Wt, Wa, HStart, HSyncStart, Ht, Ha, VStart;
2401da177e4SLinus Torvalds };
2411da177e4SLinus Torvalds 
2421da177e4SLinus Torvalds struct jpeg_com_marker {
2431da177e4SLinus Torvalds 	int len; /* number of usable bytes in data */
2441da177e4SLinus Torvalds 	char data[60];
2451da177e4SLinus Torvalds };
2461da177e4SLinus Torvalds 
2471da177e4SLinus Torvalds struct jpeg_app_marker {
2481da177e4SLinus Torvalds 	int appn; /* number app segment */
2491da177e4SLinus Torvalds 	int len; /* number of usable bytes in data */
2501da177e4SLinus Torvalds 	char data[60];
2511da177e4SLinus Torvalds };
2521da177e4SLinus Torvalds 
2531da177e4SLinus Torvalds struct videocodec {
2541da177e4SLinus Torvalds 	struct module *owner;
2551da177e4SLinus Torvalds 	/* -- filled in by slave device during register -- */
2561da177e4SLinus Torvalds 	char name[32];
2571da177e4SLinus Torvalds 	unsigned long magic;	/* may be used for client<->master attaching */
2581da177e4SLinus Torvalds 	unsigned long flags;	/* functionality flags */
2591da177e4SLinus Torvalds 	unsigned int type;	/* codec type */
2601da177e4SLinus Torvalds 
2611da177e4SLinus Torvalds 	/* -- these is filled in later during master device attach -- */
2621da177e4SLinus Torvalds 
2631da177e4SLinus Torvalds 	struct videocodec_master *master_data;
2641da177e4SLinus Torvalds 
2651da177e4SLinus Torvalds 	/* -- these are filled in by the slave device during register -- */
2661da177e4SLinus Torvalds 
2671da177e4SLinus Torvalds 	void *data;		/* private slave data */
2681da177e4SLinus Torvalds 
2691da177e4SLinus Torvalds 	/* attach/detach client functions (indirect call) */
2701da177e4SLinus Torvalds 	int (*setup) (struct videocodec * codec);
2711da177e4SLinus Torvalds 	int (*unset) (struct videocodec * codec);
2721da177e4SLinus Torvalds 
2731da177e4SLinus Torvalds 	/* main functions, every client needs them for sure! */
2741da177e4SLinus Torvalds 	// set compression or decompression (or freeze, stop, standby, etc)
2751da177e4SLinus Torvalds 	int (*set_mode) (struct videocodec * codec,
2761da177e4SLinus Torvalds 			 int mode);
2771da177e4SLinus Torvalds 	// setup picture size and norm (for the codec's video frontend)
2781da177e4SLinus Torvalds 	int (*set_video) (struct videocodec * codec,
2791da177e4SLinus Torvalds 			  struct tvnorm * norm,
2801da177e4SLinus Torvalds 			  struct vfe_settings * cap,
2811da177e4SLinus Torvalds 			  struct vfe_polarity * pol);
2821da177e4SLinus Torvalds 	// other control commands, also mmap setup etc.
2831da177e4SLinus Torvalds 	int (*control) (struct videocodec * codec,
2841da177e4SLinus Torvalds 			int type,
2851da177e4SLinus Torvalds 			int size,
2861da177e4SLinus Torvalds 			void *data);
2871da177e4SLinus Torvalds 
2881da177e4SLinus Torvalds 	/* additional setup/query/processing (may be NULL pointer) */
2891da177e4SLinus Torvalds 	// interrupt setup / handling (for irq's delivered by master)
2901da177e4SLinus Torvalds 	int (*setup_interrupt) (struct videocodec * codec,
2911da177e4SLinus Torvalds 				long mode);
2921da177e4SLinus Torvalds 	int (*handle_interrupt) (struct videocodec * codec,
2931da177e4SLinus Torvalds 				 int source,
2941da177e4SLinus Torvalds 				 long flag);
2951da177e4SLinus Torvalds 	// picture interface (if any)
2961da177e4SLinus Torvalds 	long (*put_image) (struct videocodec * codec,
2971da177e4SLinus Torvalds 			   int tr_type,
2981da177e4SLinus Torvalds 			   int block,
2991da177e4SLinus Torvalds 			   long *fr_num,
3001da177e4SLinus Torvalds 			   long *flag,
3011da177e4SLinus Torvalds 			   long size,
3021da177e4SLinus Torvalds 			   void *buf);
3031da177e4SLinus Torvalds 	long (*get_image) (struct videocodec * codec,
3041da177e4SLinus Torvalds 			   int tr_type,
3051da177e4SLinus Torvalds 			   int block,
3061da177e4SLinus Torvalds 			   long *fr_num,
3071da177e4SLinus Torvalds 			   long *flag,
3081da177e4SLinus Torvalds 			   long size,
3091da177e4SLinus Torvalds 			   void *buf);
3101da177e4SLinus Torvalds };
3111da177e4SLinus Torvalds 
3121da177e4SLinus Torvalds struct videocodec_master {
3131da177e4SLinus Torvalds 	/* -- filled in by master device for registration -- */
3141da177e4SLinus Torvalds 	char name[32];
3151da177e4SLinus Torvalds 	unsigned long magic;	/* may be used for client<->master attaching */
3161da177e4SLinus Torvalds 	unsigned long flags;	/* functionality flags */
3171da177e4SLinus Torvalds 	unsigned int type;	/* master type */
3181da177e4SLinus Torvalds 
3191da177e4SLinus Torvalds 	void *data;		/* private master data */
3201da177e4SLinus Torvalds 
3211da177e4SLinus Torvalds 	 __u32(*readreg) (struct videocodec * codec,
3221da177e4SLinus Torvalds 			  __u16 reg);
3231da177e4SLinus Torvalds 	void (*writereg) (struct videocodec * codec,
3241da177e4SLinus Torvalds 			  __u16 reg,
3251da177e4SLinus Torvalds 			  __u32 value);
3261da177e4SLinus Torvalds };
3271da177e4SLinus Torvalds 
3281da177e4SLinus Torvalds 
3291da177e4SLinus Torvalds /* ================================================= */
3301da177e4SLinus Torvalds /* function prototypes of the master/slave interface */
3311da177e4SLinus Torvalds /* ================================================= */
3321da177e4SLinus Torvalds 
3331da177e4SLinus Torvalds /* attach and detach commands for the master */
3341da177e4SLinus Torvalds // * master structure needs to be kmalloc'ed before calling attach
3351da177e4SLinus Torvalds //   and free'd after calling detach
3361da177e4SLinus Torvalds // * returns pointer on success, NULL on failure
3371da177e4SLinus Torvalds extern struct videocodec *videocodec_attach(struct videocodec_master *);
3381da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure
3391da177e4SLinus Torvalds extern int videocodec_detach(struct videocodec *);
3401da177e4SLinus Torvalds 
3411da177e4SLinus Torvalds /* register and unregister commands for the slaves */
3421da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure
3431da177e4SLinus Torvalds extern int videocodec_register(const struct videocodec *);
3441da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure
3451da177e4SLinus Torvalds extern int videocodec_unregister(const struct videocodec *);
3461da177e4SLinus Torvalds 
3471da177e4SLinus Torvalds /* the other calls are directly done via the videocodec structure! */
3481da177e4SLinus Torvalds 
3491da177e4SLinus Torvalds #endif				/*ifndef __LINUX_VIDEOCODEC_H */
350