Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / drivers / media / video / pwc / pwc.h
index 7e9c423..1b0ee0c 100644 (file)
@@ -1,5 +1,5 @@
 /* (C) 1999-2003 Nemosoft Unv.
-   (C) 2004-2006 Luc Saillard (luc@saillard.org)
+   (C) 2004      Luc Saillard (luc@saillard.org)
 
    NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx
    driver and thus may have bugs that are not present in the original version.
 #ifndef PWC_H
 #define PWC_H
 
+#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/usb.h>
 #include <linux/spinlock.h>
+#include <linux/videodev.h>
 #include <linux/wait.h>
 #include <linux/smp_lock.h>
-#include <linux/version.h>
 #include <asm/semaphore.h>
 #include <asm/errno.h>
-#include <linux/videodev.h>
-#include <media/v4l2-common.h>
 
 #include "pwc-uncompress.h"
-#include <media/pwc-ioctl.h>
+#include "pwc-ioctl.h"
 
-/* Turn some debugging options on/off */
-#ifndef CONFIG_PWC_DEBUG
-#define CONFIG_PWC_DEBUG 1
-#endif
-
-/* Version block */
-#define PWC_MAJOR      10
-#define PWC_MINOR      0
-#define PWC_EXTRAMINOR 12
-#define PWC_VERSION_CODE KERNEL_VERSION(PWC_MAJOR,PWC_MINOR,PWC_EXTRAMINOR)
-#define PWC_VERSION    "10.0.12"
-#define PWC_NAME       "pwc"
-#define PFX            PWC_NAME ": "
+/* Defines and structures for the Philips webcam */
+/* Used for checking memory corruption/pointer validation */
+#define PWC_MAGIC 0x89DC10ABUL
+#undef PWC_MAGIC
 
+/* Turn some debugging options on/off */
+#define PWC_DEBUG 0
 
 /* Trace certain actions in the driver */
-#define PWC_DEBUG_LEVEL_MODULE (1<<0)
-#define PWC_DEBUG_LEVEL_PROBE  (1<<1)
-#define PWC_DEBUG_LEVEL_OPEN   (1<<2)
-#define PWC_DEBUG_LEVEL_READ   (1<<3)
-#define PWC_DEBUG_LEVEL_MEMORY (1<<4)
-#define PWC_DEBUG_LEVEL_FLOW   (1<<5)
-#define PWC_DEBUG_LEVEL_SIZE   (1<<6)
-#define PWC_DEBUG_LEVEL_IOCTL  (1<<7)
-#define PWC_DEBUG_LEVEL_TRACE  (1<<8)
-
-#define PWC_DEBUG_MODULE(fmt, args...) PWC_DEBUG(MODULE, fmt, ##args)
-#define PWC_DEBUG_PROBE(fmt, args...) PWC_DEBUG(PROBE, fmt, ##args)
-#define PWC_DEBUG_OPEN(fmt, args...) PWC_DEBUG(OPEN, fmt, ##args)
-#define PWC_DEBUG_READ(fmt, args...) PWC_DEBUG(READ, fmt, ##args)
-#define PWC_DEBUG_MEMORY(fmt, args...) PWC_DEBUG(MEMORY, fmt, ##args)
-#define PWC_DEBUG_FLOW(fmt, args...) PWC_DEBUG(FLOW, fmt, ##args)
-#define PWC_DEBUG_SIZE(fmt, args...) PWC_DEBUG(SIZE, fmt, ##args)
-#define PWC_DEBUG_IOCTL(fmt, args...) PWC_DEBUG(IOCTL, fmt, ##args)
-#define PWC_DEBUG_TRACE(fmt, args...) PWC_DEBUG(TRACE, fmt, ##args)
-
-
-#if CONFIG_PWC_DEBUG
-
-#define PWC_DEBUG_LEVEL        (PWC_DEBUG_LEVEL_MODULE)
-
-#define PWC_DEBUG(level, fmt, args...) do {\
-         if ((PWC_DEBUG_LEVEL_ ##level) & pwc_trace) \
-            printk(KERN_DEBUG PFX fmt, ##args); \
-         } while(0)
-
-#define PWC_ERROR(fmt, args...) printk(KERN_ERR PFX fmt, ##args)
-#define PWC_WARNING(fmt, args...) printk(KERN_WARNING PFX fmt, ##args)
-#define PWC_INFO(fmt, args...) printk(KERN_INFO PFX fmt, ##args)
-#define PWC_TRACE(fmt, args...) PWC_DEBUG(TRACE, fmt, ##args)
-
-#else /* if ! CONFIG_PWC_DEBUG */
-
-#define PWC_ERROR(fmt, args...) printk(KERN_ERR PFX fmt, ##args)
-#define PWC_WARNING(fmt, args...) printk(KERN_WARNING PFX fmt, ##args)
-#define PWC_INFO(fmt, args...) printk(KERN_INFO PFX fmt, ##args)
-#define PWC_TRACE(fmt, args...) do { } while(0)
-#define PWC_DEBUG(level, fmt, args...) do { } while(0)
-
-#define pwc_trace 0
+#define TRACE_MODULE   0x0001
+#define TRACE_PROBE    0x0002
+#define TRACE_OPEN     0x0004
+#define TRACE_READ     0x0008
+#define TRACE_MEMORY   0x0010
+#define TRACE_FLOW     0x0020
+#define TRACE_SIZE     0x0040
+#define TRACE_PWCX     0x0080
+#define TRACE_SEQUENCE 0x1000
+
+#define Trace(R, A...) if (pwc_trace & R) printk(KERN_DEBUG PWC_NAME " " A)
+#define Debug(A...) printk(KERN_DEBUG PWC_NAME " " A)
+#define Info(A...)  printk(KERN_INFO  PWC_NAME " " A)
+#define Err(A...)   printk(KERN_ERR   PWC_NAME " " A)
 
-#endif
 
 /* Defines for ToUCam cameras */
 #define TOUCAM_HEADER_SIZE             8
 #define TOUCAM_TRAILER_SIZE            4
 
 #define FEATURE_MOTOR_PANTILT          0x0001
-#define FEATURE_CODEC1                 0x0002
-#define FEATURE_CODEC2                 0x0004
+
+/* Version block */
+#define PWC_MAJOR      9
+#define PWC_MINOR      0
+#define PWC_VERSION    "9.0.2-unofficial"
+#define PWC_NAME       "pwc"
 
 /* Turn certain features on/off */
 #define PWC_INT_PIPE 0
 /* Absolute maximum number of buffers available for mmap() */
 #define MAX_IMAGES             10
 
-/* Some macros to quickly find the type of a webcam */
-#define DEVICE_USE_CODEC1(x) ((x)<675)
-#define DEVICE_USE_CODEC2(x) ((x)>=675 && (x)<700)
-#define DEVICE_USE_CODEC3(x) ((x)>=700)
-#define DEVICE_USE_CODEC23(x) ((x)>=675)
-
-
-#ifndef V4L2_PIX_FMT_PWC1
-#define V4L2_PIX_FMT_PWC1      v4l2_fourcc('P','W','C','1')
-#define V4L2_PIX_FMT_PWC2      v4l2_fourcc('P','W','C','2')
-#endif
-
 /* The following structures were based on cpia.h. Why reinvent the wheel? :-) */
 struct pwc_iso_buf
 {
@@ -157,19 +110,17 @@ struct pwc_frame_buf
    void *data;
    volatile int filled;                /* number of bytes filled */
    struct pwc_frame_buf *next; /* list */
-};
-
-/* additionnal informations used when dealing image between kernel and userland */
-struct pwc_imgbuf
-{
-       unsigned long offset;   /* offset of this buffer in the big array of image_data */
-       int   vma_use_count;    /* count the number of time this memory is mapped */
+#if PWC_DEBUG
+   int sequence;               /* Sequence number */
+#endif
 };
 
 struct pwc_device
 {
    struct video_device *vdev;
-
+#ifdef PWC_MAGIC
+   int magic;
+#endif
    /* Pointer to our usb_device */
    struct usb_device *udev;
 
@@ -226,8 +177,12 @@ struct pwc_device
    int frame_size;
    int frame_total_size; /* including header & trailer */
    int drop_frames;
+#if PWC_DEBUG
+   int sequence;                       /* Debugging aid */
+#endif
 
    /* 3: decompression */
+   struct pwc_decompressor *decompressor;      /* function block with decompression routines */
    void *decompress_data;              /* private data for decompression engine */
 
    /* 4: image */
@@ -243,7 +198,7 @@ struct pwc_device
    struct pwc_coord offset;            /* offset within the viewport */
 
    void *image_data;                   /* total buffer, which is subdivided into ... */
-   struct pwc_imgbuf images[MAX_IMAGES];/* ...several images... */
+   void *image_ptr[MAX_IMAGES];                /* ...several images... */
    int fill_image;                     /* ...which are rotated. */
    int len_per_image;                  /* length per image */
    int image_read_pos;                 /* In case we read data in pieces, keep track of were we are in the imagebuffer */
@@ -256,7 +211,6 @@ struct pwc_device
    struct pwc_mpt_range angle_range;
    int pan_angle;                      /* in degrees * 100 */
    int tilt_angle;                     /* absolute angle; 0,0 is home position */
-   int snapshot_button_status;         /* set to 1 when the user push the button, reset to 0 when this value is read */
 
    /*** Misc. data ***/
    wait_queue_head_t frameq;           /* When waiting for a frame to finish... */
@@ -265,26 +219,20 @@ struct pwc_device
 #endif
 };
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Global variables */
-#if CONFIG_PWC_DEBUG
+/* Global variable */
 extern int pwc_trace;
-#endif
-extern int pwc_mbufs;
 
 /** functions in pwc-if.c */
 int pwc_try_video_mode(struct pwc_device *pdev, int width, int height, int new_fps, int new_compression, int new_snapshot);
-int pwc_handle_frame(struct pwc_device *pdev);
-void pwc_next_image(struct pwc_device *pdev);
-int pwc_isoc_init(struct pwc_device *pdev);
-void pwc_isoc_cleanup(struct pwc_device *pdev);
 
 /** Functions in pwc-misc.c */
 /* sizes in pixels */
-extern const struct pwc_coord pwc_image_sizes[PSZ_MAX];
+extern struct pwc_coord pwc_image_sizes[PSZ_MAX];
 
 int pwc_decode_size(struct pwc_device *pdev, int width, int height);
 void pwc_construct(struct pwc_device *pdev);
@@ -292,9 +240,6 @@ void pwc_construct(struct pwc_device *pdev);
 /** Functions in pwc-ctrl.c */
 /* Request a certain video mode. Returns < 0 if not possible */
 extern int pwc_set_video_mode(struct pwc_device *pdev, int width, int height, int frames, int compression, int snapshot);
-/* Calculate the number of bytes per image (not frame) */
-extern int pwc_mpt_reset(struct pwc_device *pdev, int flags);
-extern int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt);
 
 /* Various controls; should be obvious. Value 0..65535, or < 0 on error */
 extern int pwc_get_brightness(struct pwc_device *pdev);
@@ -303,36 +248,10 @@ extern int pwc_get_contrast(struct pwc_device *pdev);
 extern int pwc_set_contrast(struct pwc_device *pdev, int value);
 extern int pwc_get_gamma(struct pwc_device *pdev);
 extern int pwc_set_gamma(struct pwc_device *pdev, int value);
-extern int pwc_get_saturation(struct pwc_device *pdev, int *value);
+extern int pwc_get_saturation(struct pwc_device *pdev);
 extern int pwc_set_saturation(struct pwc_device *pdev, int value);
 extern int pwc_set_leds(struct pwc_device *pdev, int on_value, int off_value);
 extern int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor);
-extern int pwc_restore_user(struct pwc_device *pdev);
-extern int pwc_save_user(struct pwc_device *pdev);
-extern int pwc_restore_factory(struct pwc_device *pdev);
-
-/* exported for use by v4l2 controls */
-extern int pwc_get_red_gain(struct pwc_device *pdev, int *value);
-extern int pwc_set_red_gain(struct pwc_device *pdev, int value);
-extern int pwc_get_blue_gain(struct pwc_device *pdev, int *value);
-extern int pwc_set_blue_gain(struct pwc_device *pdev, int value);
-extern int pwc_get_awb(struct pwc_device *pdev);
-extern int pwc_set_awb(struct pwc_device *pdev, int mode);
-extern int pwc_set_agc(struct pwc_device *pdev, int mode, int value);
-extern int pwc_get_agc(struct pwc_device *pdev, int *value);
-extern int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value);
-extern int pwc_get_shutter_speed(struct pwc_device *pdev, int *value);
-
-extern int pwc_set_colour_mode(struct pwc_device *pdev, int colour);
-extern int pwc_get_colour_mode(struct pwc_device *pdev, int *colour);
-extern int pwc_set_contour(struct pwc_device *pdev, int contour);
-extern int pwc_get_contour(struct pwc_device *pdev, int *contour);
-extern int pwc_set_backlight(struct pwc_device *pdev, int backlight);
-extern int pwc_get_backlight(struct pwc_device *pdev, int *backlight);
-extern int pwc_set_flicker(struct pwc_device *pdev, int flicker);
-extern int pwc_get_flicker(struct pwc_device *pdev, int *flicker);
-extern int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise);
-extern int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise);
 
 /* Power down or up the camera; not supported by all models */
 extern int pwc_camera_power(struct pwc_device *pdev, int power);
@@ -340,9 +259,6 @@ extern int pwc_camera_power(struct pwc_device *pdev, int power);
 /* Private ioctl()s; see pwc-ioctl.h */
 extern int pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg);
 
-/** Functions in pwc-v4l.c */
-extern int pwc_video_do_ioctl(struct inode *inode, struct file *file,
-                             unsigned int cmd, void *arg);
 
 /** pwc-uncompress.c */
 /* Expand frame to image, possibly including decompression. Uses read_frame and fill_image */
@@ -354,4 +270,3 @@ extern int pwc_decompress(struct pwc_device *pdev);
 
 
 #endif
-/* vim: set cino= formatoptions=croql cindent shiftwidth=8 tabstop=8: */