#! /bin/sh /usr/share/dpatch/dpatch-run ## 02_kernel_2.6.32.dpatch by Manan Tuli ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: No description. @DPATCH@ diff --git a/vloopback.c b/vloopback.c index b94bb76..4b07503 100755 --- a/vloopback.c +++ b/vloopback.c @@ -164,6 +164,9 @@ * * 26.11.09 (Angel Carpintero) * Release 1.3 stable working with 2.6.31 + * + * 08.12.09 (Manan Tuli) + * Allow to compile with 2.6.32 */ @@ -175,6 +178,9 @@ #include #include #include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) +#include +#endif #ifndef CONFIG_VIDEO_V4L1_COMPAT #error "need CONFIG_VIDEO_V4L1_COMPAT" @@ -406,8 +412,12 @@ static int vloopback_open(struct file *f) #endif { struct video_device *loopdev = video_devdata(f); - priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else + priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; +#endif int nr = ptr->pipenr; if (debug > LOG_NODEBUG) @@ -466,8 +476,11 @@ static int vloopback_release(struct file *f) #endif { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif int nr = ptr->pipenr; if (debug > LOG_NODEBUG) @@ -520,8 +533,11 @@ static ssize_t vloopback_write(struct file *f, const char *buf, size_t count, loff_t *offset) { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif int nr = ptr->pipenr; unsigned long realcount = count; @@ -572,8 +588,12 @@ static ssize_t vloopback_read(struct file * f, char * buf, size_t count, loff_t *offset) { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif + int nr = ptr->pipenr; unsigned long realcount = count; @@ -655,8 +675,11 @@ static ssize_t vloopback_read(struct file * f, char * buf, size_t count, static int vloopback_mmap(struct file *f, struct vm_area_struct *vma) { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif int nr = ptr->pipenr; unsigned long start = (unsigned long)vma->vm_start; long size = vma->vm_end - vma->vm_start; @@ -732,8 +755,12 @@ static long vloopback_ioctl(struct file *f, unsigned int cmd, unsigned long arg) #endif { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif + int nr = ptr->pipenr; int i; @@ -1129,8 +1156,11 @@ static long vloopback_ioctl(struct file *f, unsigned int cmd, unsigned long arg) static unsigned int vloopback_poll(struct file *f, struct poll_table_struct *wait) { struct video_device *loopdev = video_devdata(f); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#else priv_ptr ptr = (priv_ptr)loopdev->vd_private_data; - //priv_ptr ptr = (priv_ptr)video_get_drvdata(loopdev); +#endif int nr = ptr->pipenr; if (debug > LOG_NODEBUG) @@ -1210,10 +1240,15 @@ static int create_pipe(int nr) return -ENOMEM; *loops[nr]->vloopin = vloopback_template; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + video_set_drvdata(loops[nr]->vloopin, kmalloc(sizeof(struct vloopback_private), + GFP_KERNEL)); + if (video_get_drvdata(loops[nr]->vloopin) == NULL) { +#else loops[nr]->vloopin->vd_private_data = kmalloc(sizeof(struct vloopback_private), GFP_KERNEL); - if (loops[nr]->vloopin->vd_private_data == NULL) { +#endif kfree(loops[nr]->vloopin); return -ENOMEM; } @@ -1221,23 +1256,39 @@ static int create_pipe(int nr) loops[nr]->vloopout = video_device_alloc(); if (loops[nr]->vloopout == NULL) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[nr]->vloopin)); +#else kfree(loops[nr]->vloopin->vd_private_data); +#endif kfree(loops[nr]->vloopin); return -ENOMEM; } *loops[nr]->vloopout = vloopback_template; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + video_set_drvdata(loops[nr]->vloopout, kmalloc(sizeof(struct vloopback_private), + GFP_KERNEL)); + if (video_get_drvdata(loops[nr]->vloopout) == NULL) { + kfree(video_get_drvdata(loops[nr]->vloopin)); +#else loops[nr]->vloopout->vd_private_data = kmalloc(sizeof(struct vloopback_private), GFP_KERNEL); - if (loops[nr]->vloopout->vd_private_data == NULL) { kfree(loops[nr]->vloopin->vd_private_data); +#endif kfree(loops[nr]->vloopin); kfree(loops[nr]->vloopout); return -ENOMEM; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + ((priv_ptr)video_get_drvdata(loops[nr]->vloopin))->pipenr = nr; + ((priv_ptr)video_get_drvdata(loops[nr]->vloopout))->pipenr = nr; +#else ((priv_ptr)loops[nr]->vloopin->vd_private_data)->pipenr = nr; ((priv_ptr)loops[nr]->vloopout->vd_private_data)->pipenr = nr; +#endif loops[nr]->invalid_ioctl = 0; /* tibit */ loops[nr]->buffer = NULL; loops[nr]->width = 0; @@ -1249,9 +1300,15 @@ static int create_pipe(int nr) loops[nr]->wopen = 0; loops[nr]->ropen = 0; loops[nr]->frame = 0; - + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + ((priv_ptr)video_get_drvdata(loops[nr]->vloopin))->in = 1; + ((priv_ptr)video_get_drvdata(loops[nr]->vloopout))->in = 0; +#else ((priv_ptr)loops[nr]->vloopin->vd_private_data)->in = 1; ((priv_ptr)loops[nr]->vloopout->vd_private_data)->in = 0; +#endif + sprintf(loops[nr]->vloopin->name, "Video loopback %d input", nr); sprintf(loops[nr]->vloopout->name, "Video loopback %d output", nr); @@ -1269,9 +1326,17 @@ static int create_pipe(int nr) if ((ret == -1 ) || ( ret == -23 )) { info("error registering device %s", loops[nr]->vloopin->name); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[nr]->vloopin)); +#else kfree(loops[nr]->vloopin->vd_private_data); +#endif kfree(loops[nr]->vloopin); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[nr]->vloopout)); +#else kfree(loops[nr]->vloopout->vd_private_data); +#endif kfree(loops[nr]->vloopout); kfree(loops[nr]); loops[nr] = NULL; @@ -1282,9 +1347,17 @@ static int create_pipe(int nr) if ((ret ==-1) || (ret == -23)) { info("error registering device %s", loops[nr]->vloopout->name); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[nr]->vloopin)); +#else kfree(loops[nr]->vloopin->vd_private_data); +#endif video_unregister_device(loops[nr]->vloopin); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[nr]->vloopout)); +#else kfree(loops[nr]->vloopout->vd_private_data); +#endif kfree(loops[nr]->vloopout); kfree(loops[nr]); loops[nr] = NULL; @@ -1395,9 +1468,17 @@ static void __exit cleanup_vloopback_module(void) for (i = 0; i < nr_o_pipes; i++) { if (loops[i]) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[i]->vloopin)); +#else kfree(loops[i]->vloopin->vd_private_data); +#endif video_unregister_device(loops[i]->vloopin); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) + kfree(video_get_drvdata(loops[i]->vloopout)); +#else kfree(loops[i]->vloopout->vd_private_data); +#endif video_unregister_device(loops[i]->vloopout); if (loops[i]->buffer)