00001 #ifndef _UVC_COMPAT_H
00002 #define _UVC_COMPAT_H
00003
00004 #include <linux/version.h>
00005
00006 #ifndef __KERNEL__
00007 #ifndef __user
00008 #define __user
00009 #endif
00010 #endif
00011
00012 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
00013
00014
00015
00016 struct v4l2_ext_control {
00017 __u32 id;
00018 __u32 reserved2[2];
00019 union {
00020 __s32 value;
00021 __s64 value64;
00022 void *reserved;
00023 };
00024 } __attribute__ ((packed));
00025
00026 struct v4l2_ext_controls {
00027 __u32 ctrl_class;
00028 __u32 count;
00029 __u32 error_idx;
00030 __u32 reserved[2];
00031 struct v4l2_ext_control *controls;
00032 };
00033
00034
00035 #define V4L2_CTRL_CLASS_USER 0x00980000
00036 #define V4L2_CTRL_CLASS_MPEG 0x00990000
00037
00038 #define V4L2_CTRL_ID_MASK (0x0fffffff)
00039 #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
00040 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
00041
00042
00043 #define V4L2_CTRL_FLAG_READ_ONLY 0x0004
00044 #define V4L2_CTRL_FLAG_UPDATE 0x0008
00045 #define V4L2_CTRL_FLAG_INACTIVE 0x0010
00046 #define V4L2_CTRL_FLAG_SLIDER 0x0020
00047
00048
00049 #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
00050
00051
00052 #undef V4L2_CID_BASE
00053 #define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900)
00054 #define V4L2_CID_USER_BASE V4L2_CID_BASE
00055 #define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1)
00056
00057 #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls)
00058 #define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls)
00059 #define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls)
00060
00061 #endif
00062
00063 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
00064
00065
00066
00067
00068
00069 enum v4l2_frmsizetypes {
00070 V4L2_FRMSIZE_TYPE_DISCRETE = 1,
00071 V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
00072 V4L2_FRMSIZE_TYPE_STEPWISE = 3,
00073 };
00074
00075 struct v4l2_frmsize_discrete {
00076 __u32 width;
00077 __u32 height;
00078 };
00079
00080 struct v4l2_frmsize_stepwise {
00081 __u32 min_width;
00082 __u32 max_width;
00083 __u32 step_width;
00084 __u32 min_height;
00085 __u32 max_height;
00086 __u32 step_height;
00087 };
00088
00089 struct v4l2_frmsizeenum {
00090 __u32 index;
00091 __u32 pixel_format;
00092 __u32 type;
00093
00094 union {
00095 struct v4l2_frmsize_discrete discrete;
00096 struct v4l2_frmsize_stepwise stepwise;
00097 };
00098
00099 __u32 reserved[2];
00100 };
00101
00102 enum v4l2_frmivaltypes {
00103 V4L2_FRMIVAL_TYPE_DISCRETE = 1,
00104 V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
00105 V4L2_FRMIVAL_TYPE_STEPWISE = 3,
00106 };
00107
00108 struct v4l2_frmival_stepwise {
00109 struct v4l2_fract min;
00110 struct v4l2_fract max;
00111 struct v4l2_fract step;
00112 };
00113
00114 struct v4l2_frmivalenum {
00115 __u32 index;
00116 __u32 pixel_format;
00117 __u32 width;
00118 __u32 height;
00119 __u32 type;
00120
00121 union {
00122 struct v4l2_fract discrete;
00123 struct v4l2_frmival_stepwise stepwise;
00124 };
00125
00126 __u32 reserved[2];
00127 };
00128
00129 #define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
00130 #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
00131 #endif
00132
00133 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
00134
00135
00136
00137 #define V4L2_CTRL_CLASS_CAMERA 0x009A0000
00138
00139 #define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24)
00140 enum v4l2_power_line_frequency {
00141 V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0,
00142 V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1,
00143 V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2,
00144 };
00145
00146 #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25)
00147 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26)
00148 #define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27)
00149 #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28)
00150
00151 #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
00152 #define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1)
00153
00154 #define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1)
00155 enum v4l2_exposure_auto_type {
00156 V4L2_EXPOSURE_MANUAL = 0,
00157 V4L2_EXPOSURE_AUTO = 1,
00158 V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
00159 V4L2_EXPOSURE_APERTURE_PRIORITY = 3
00160 };
00161 #define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2)
00162 #define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3)
00163
00164 #define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4)
00165 #define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5)
00166 #define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6)
00167 #define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7)
00168
00169 #define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8)
00170 #define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9)
00171
00172 #define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10)
00173 #define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11)
00174 #define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12)
00175
00176 #endif
00177
00178 #ifdef __KERNEL__
00179
00180 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
00181
00182
00183
00184 static inline void *
00185 kzalloc(size_t size, unsigned int __nocast gfp_flags)
00186 {
00187 void *mem = kmalloc(size, gfp_flags);
00188 if (mem)
00189 memset(mem, 0, size);
00190 return mem;
00191 }
00192 #endif
00193
00194 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
00195
00196
00197
00198 static inline int
00199 vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
00200 struct page *page)
00201 {
00202
00203
00204
00205 vma->vm_flags |= VM_RESERVED;
00206
00207 SetPageReserved(page);
00208 return remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,
00209 vma->vm_page_prot);
00210 }
00211 #endif
00212
00213 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
00214
00215
00216
00217 static inline void
00218 v4l_printk_ioctl(unsigned int cmd)
00219 {
00220 switch (_IOC_TYPE(cmd)) {
00221 case 'v':
00222 printk(KERN_DEBUG "ioctl 0x%x (V4L1)\n", cmd);
00223 break;
00224 case 'V':
00225 printk(KERN_DEBUG "ioctl 0x%x (%s)\n",
00226 cmd, v4l2_ioctl_names[_IOC_NR(cmd)]);
00227 break;
00228 default:
00229 printk(KERN_DEBUG "ioctl 0x%x (?)\n", cmd);
00230 break;
00231 }
00232 }
00233 #endif
00234
00235 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
00236
00237
00238
00239 #include <asm/semaphore.h>
00240 #define mutex_lock(mutex) down(mutex)
00241 #define mutex_lock_interruptible(mutex) down_interruptible(mutex)
00242 #define mutex_unlock(mutex) up(mutex)
00243 #define mutex_init(mutex) init_MUTEX(mutex)
00244 #define mutex semaphore
00245 #else
00246 #include <asm/mutex.h>
00247 #endif
00248
00249 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
00250
00251
00252
00253
00254
00255 static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
00256 {
00257 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
00258 }
00259
00260 static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
00261 {
00262 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
00263 USB_ENDPOINT_XFER_INT);
00264 }
00265
00266 static inline int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd)
00267 {
00268 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
00269 USB_ENDPOINT_XFER_ISOC);
00270 }
00271
00272 static inline int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd)
00273 {
00274 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
00275 USB_ENDPOINT_XFER_BULK);
00276 }
00277
00278 static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
00279 {
00280 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
00281 }
00282
00283
00284
00285
00286
00287
00288 static inline int usb_autopm_get_interface(struct usb_interface *intf)
00289 { return 0; }
00290
00291 static inline void usb_autopm_put_interface(struct usb_interface *intf)
00292 { }
00293
00294 #endif
00295
00296 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
00297
00298
00299
00300 #define list_first_entry(ptr, type, member) \
00301 list_entry((ptr)->next, type, member)
00302 #endif
00303
00304 #endif
00305
00306 #endif
00307