linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH[[2.5][3-11] update dvb subsystem core
@ 2003-05-06 16:04 Michael Hunold
  2003-05-06 20:49 ` Christoph Hellwig
  2003-05-06 21:08 ` Christoph Hellwig
  0 siblings, 2 replies; 14+ messages in thread
From: Michael Hunold @ 2003-05-06 16:04 UTC (permalink / raw)
  To: linux-kernel; +Cc: torvalds

[-- Attachment #1: Type: text/plain, Size: 1007 bytes --]

Hello,

this patch updates the dvb subsystem core.

Fixed problems:
- partly reintroduced the DVB_DEVFS_ONLY switch, which was previously
wiped out by Alan Cox: if enabled, some really obscure code is not
compiled into the kernel that is necessary to xxx
- switched from user-land types like __u8 to u8 and uint16_t to u16
this makes the patch rather large.
- updated the dvr (digital videorecording) facility
- renamed some structures, like "struct dmxdev_s" to "struct dmxdev"
- introduced dvb_functions.[ch], where some linux-kernel specific
functions are encapsulated. by this, the dvb subsystem stays quite
independent from deeper linux kernel functions.
- moved dvb_usercopy() to dvb_functions.c -- this is essentially
video_usercopy() which should be generic_usercopy() instead... ;-)
- Made the dvb-core in dvbdev.c work with devfs again. I had to
introduce some #if KERNELVERSION magic again here, sorry. I'll fix it up
with the next patchset.

Please review and apply.

Thanks
Michael Hunold.





[-- Attachment #2: 03-dvb-core-driver.diff --]
[-- Type: text/plain, Size: 49212 bytes --]

diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/Makefile linux-2.5.69.patch/drivers/media/dvb/Makefile
--- linux-2.5.69/drivers/media/dvb/Makefile	2003-05-06 13:15:30.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/Makefile	2003-05-06 16:23:39.000000000 +0200
@@ -2,4 +2,4 @@
 # Makefile for the kernel multimedia device drivers.
 #
 
-obj-y        := dvb-core/ frontends/ ttpci/ # ttusb-budget/
+obj-y        := dvb-core/ frontends/ ttpci/ # ttusb-dec/ ttusb-budget/ 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/Kconfig linux-2.5.69.patch/drivers/media/dvb/dvb-core/Kconfig
--- linux-2.5.69/drivers/media/dvb/dvb-core/Kconfig	2003-04-07 19:32:50.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/Kconfig	2003-04-24 11:57:09.000000000 +0200
@@ -5,3 +5,13 @@
 	  DVB core utility functions for device handling, software fallbacks etc.
 
 	  Say Y when you have a DVB card and want to use it. If unsure say N.
+
+config DVB_DEVFS_ONLY
+       bool "devfs only"
+       depends on DVB_CORE=y && DEVFS_FS
+       help
+	 If you rely completly on devfs, you can drop support for the old
+	 major/minor device scheme. This omits some really awkward lines of
+	 code and saves some space in your kernel image.
+
+	 But as always: If unsure say N.

diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/Makefile linux-2.5.69.patch/drivers/media/dvb/dvb-core/Makefile
--- linux-2.5.69/drivers/media/dvb/dvb-core/Makefile	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/Makefile	2003-05-06 16:41:01.000000000 +0200
@@ -3,6 +3,6 @@
 #
 
 dvb-core-objs = dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
-		dvb_frontend.o dvb_i2c.o dvb_net.o dvb_ksyms.o dvb_ringbuffer.o
+		dvb_functions.o dvb_frontend.o dvb_i2c.o dvb_net.o dvb_ksyms.o dvb_ringbuffer.o
 
 obj-$(CONFIG_DVB_CORE) += dvb-core.o
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/demux.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/demux.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/demux.h	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/demux.h	2003-04-15 15:25:18.000000000 +0200
@@ -25,14 +25,10 @@
 #ifndef __DEMUX_H 
 #define __DEMUX_H 
 
-#ifndef __KERNEL__ 
-#define __KERNEL__ 
-#endif 
-
-#include <linux/types.h>
+#include <asm/types.h>
+#include <asm/errno.h>
 #include <linux/list.h> 
 #include <linux/time.h> 
-#include <linux/errno.h>
 
 /*--------------------------------------------------------------------------*/ 
 /* Common definitions */ 
@@ -115,7 +111,7 @@
         struct dmx_demux_s *parent; /* Back-pointer */
         void *priv; /* Pointer to private data of the API client */ 
         int (*set) (struct dmx_ts_feed_s *feed, 
-		    uint16_t pid,
+		    u16 pid,
 		    int type, 
 		    dmx_ts_pes_t pes_type,
 		    size_t callback_length, 
@@ -133,9 +129,9 @@
 /*--------------------------------------------------------------------------*/ 
 
 typedef struct { 
-        __u8 filter_value [DMX_MAX_FILTER_SIZE]; 
-        __u8 filter_mask [DMX_MAX_FILTER_SIZE]; 
-        __u8 filter_mode [DMX_MAX_FILTER_SIZE]; 
+        u8 filter_value [DMX_MAX_FILTER_SIZE]; 
+        u8 filter_mask [DMX_MAX_FILTER_SIZE]; 
+        u8 filter_mode [DMX_MAX_FILTER_SIZE]; 
         struct dmx_section_feed_s* parent; /* Back-pointer */ 
         void* priv; /* Pointer to private data of the API client */ 
 } dmx_section_filter_t;
@@ -153,7 +149,7 @@
         int seclen;
 
         int (*set) (struct dmx_section_feed_s* feed, 
-		    __u16 pid, 
+		    u16 pid, 
 		    size_t circular_buffer_size, 
 		    int descramble, 
 		    int check_crc); 
@@ -201,10 +197,6 @@
 } dmx_frontend_source_t; 
 
 typedef struct { 
-        /* The following char* fields point to NULL terminated strings */ 
-        char* id;                    /* Unique front-end identifier */ 
-        char* vendor;                /* Name of the front-end vendor */ 
-        char* model;                 /* Name of the front-end model */ 
         struct list_head connectivity_list; /* List of front-ends that can 
 					       be connected to a particular 
 					       demux */ 
@@ -243,11 +235,7 @@
 #define DMX_FE_ENTRY(list) list_entry(list, dmx_frontend_t, connectivity_list) 
 
 struct dmx_demux_s { 
-        /* The following char* fields point to NULL terminated strings */ 
-        char* id;                    /* Unique demux identifier */ 
-        char* vendor;                /* Name of the demux vendor */ 
-        char* model;                 /* Name of the demux model */ 
-        __u32 capabilities;          /* Bitfield of capability flags */ 
+        u32 capabilities;            /* Bitfield of capability flags */ 
         dmx_frontend_t* frontend;    /* Front-end connected to the demux */ 
         struct list_head reg_list;   /* List of registered demuxes */
         void* priv;                  /* Pointer to private data of the API client */ 
@@ -266,16 +254,16 @@
         int (*release_section_feed) (struct dmx_demux_s* demux,
 				     dmx_section_feed_t* feed); 
         int (*descramble_mac_address) (struct dmx_demux_s* demux, 
-				       __u8* buffer1, 
+				       u8* buffer1, 
 				       size_t buffer1_length, 
-				       __u8* buffer2, 
+				       u8* buffer2, 
 				       size_t buffer2_length,
-				       __u16 pid); 
+				       u16 pid); 
         int (*descramble_section_payload) (struct dmx_demux_s* demux,
-					   __u8* buffer1, 
+					   u8* buffer1, 
 					   size_t buffer1_length,
-					   __u8* buffer2, size_t buffer2_length,
-					   __u16 pid); 
+					   u8* buffer2, size_t buffer2_length,
+					   u16 pid); 
         int (*add_frontend) (struct dmx_demux_s* demux, 
 			     dmx_frontend_t* frontend); 
         int (*remove_frontend) (struct dmx_demux_s* demux,
@@ -285,10 +273,10 @@
 				 dmx_frontend_t* frontend); 
         int (*disconnect_frontend) (struct dmx_demux_s* demux); 
 
-        int (*get_pes_pids) (struct dmx_demux_s* demux, __u16 *pids);
+        int (*get_pes_pids) (struct dmx_demux_s* demux, u16 *pids);
 
         int (*get_stc) (struct dmx_demux_s* demux, unsigned int num,
-			uint64_t *stc, unsigned int *base);
+			u64 *stc, unsigned int *base);
 }; 
 typedef struct dmx_demux_s dmx_demux_t; 
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dmxdev.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dmxdev.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dmxdev.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dmxdev.c	2003-04-30 12:03:49.000000000 +0200
@@ -21,22 +21,20 @@
  *
  */
 
+#include <asm/uaccess.h>
+#include <asm/system.h>
+#include <linux/spinlock.h>
+#include <linux/slab.h>
 #include <linux/vmalloc.h>
 #include <linux/module.h>
+#include <linux/sched.h>
 #include <linux/poll.h>
-#include <asm/uaccess.h>
+#include <linux/ioctl.h>
+#include <linux/wait.h>
 
 #include "dmxdev.h"
+#include "dvb_functions.h"
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)
-	#include "compat.h"
-#endif
-
-//MODULE_DESCRIPTION("");
-//MODULE_AUTHOR("Ralph Metzler, Marcus Metzler");
-//#ifdef MODULE_LICENSE
-//MODULE_LICENSE("GPL");
-//#endif
 MODULE_PARM(debug,"i");
 static int debug = 0;
 
@@ -483,7 +481,7 @@
 {
 	int i;
 	dmxdev_t *dmxdev = filter->dev;
-	uint16_t pid = filter->params.sec.pid;
+	u16 pid = filter->params.sec.pid;
 	
 	for (i=0; i<dmxdev->filternum; i++) 
 		if (dmxdev->filter[i].state>=DMXDEV_STATE_GO &&
@@ -959,7 +957,7 @@
 			ret=-EINVAL;
 			break;
 		}
-		dmxdev->demux->get_pes_pids(dmxdev->demux, (uint16_t *)parg);
+		dmxdev->demux->get_pes_pids(dmxdev->demux, (u16 *)parg);
 		break;
 
 	case DMX_GET_STC:
@@ -999,7 +997,8 @@
 	poll_wait(file, &dmxdevfilter->buffer.queue, wait);
 
 	if (dmxdevfilter->state != DMXDEV_STATE_GO &&
-	    dmxdevfilter->state != DMXDEV_STATE_DONE)
+	    dmxdevfilter->state != DMXDEV_STATE_DONE &&
+	    dmxdevfilter->state != DMXDEV_STATE_TIMEDOUT)
 		return 0;
 
 	if (dmxdevfilter->buffer.error)
@@ -1103,7 +1106,8 @@
 	.poll		= dvb_dvr_poll,
 };
 
-static struct dvb_device dvbdev_dvr = {
+static
+struct dvb_device dvbdev_dvr = {
 	.priv		= 0,
 	.users		= 1,
 	.writers	= 1,
@@ -1125,9 +1129,10 @@
 	dmxdev->dvr=vmalloc(dmxdev->filternum*sizeof(dmxdev_dvr_t));
 	if (!dmxdev->dvr) {
 		vfree(dmxdev->filter);
-		dmxdev->filter=0;
+		dmxdev->filter = NULL;
 		return -ENOMEM;
 	}
+
 	sema_init(&dmxdev->mutex, 1);
 	spin_lock_init(&dmxdev->lock);
 	for (i=0; i<dmxdev->filternum; i++) {
@@ -1143,8 +1149,7 @@
 	dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr, dmxdev, DVB_DEVICE_DVR);
 
 	dvb_dmxdev_buffer_init(&dmxdev->dvr_buffer);
-	/* fixme: is this correct? */
-	try_module_get(THIS_MODULE);
+
 	return 0;
 }
 
@@ -1162,8 +1169,6 @@
 		dmxdev->dvr=0;
 	}
 	dmxdev->demux->close(dmxdev->demux);
-	/* fixme: is this correct? */
-	module_put(THIS_MODULE);
 }
 
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dmxdev.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dmxdev.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dmxdev.h	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dmxdev.h	2003-04-14 23:03:49.000000000 +0200
@@ -24,16 +24,16 @@
 #ifndef _DMXDEV_H_
 #define _DMXDEV_H_
 
-#ifndef __KERNEL__ 
-#define __KERNEL__ 
-#endif 
-
-#include <linux/dvb/dmx.h>
-
-#include <linux/version.h>
+#include <asm/types.h>
+#include <asm/semaphore.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
 #include <linux/wait.h>
-#include <linux/types.h>
 #include <linux/fs.h>
+#include <linux/string.h>
+
+#include <linux/dvb/dmx.h>
 
 #include "dvbdev.h"
 #include "demux.h"
@@ -53,17 +53,17 @@
 	DMXDEV_STATE_TIMEDOUT
 } dmxdev_state_t;
 
-typedef struct dmxdev_buffer_s {
-        uint8_t *data;
-        uint32_t size;
-        int32_t  pread;
-        int32_t  pwrite;
+typedef struct dmxdev_buffer {
+        u8 *data;
+        int size;
+        int pread;
+        int pwrite;
 	wait_queue_head_t queue;
         int error;
 } dmxdev_buffer_t;
 
 
-typedef struct dmxdev_filter_s {
+typedef struct dmxdev_filter {
 	struct dvb_device *dvbdev;
 
         union {
@@ -82,7 +82,7 @@
 
         int type;
         dmxdev_state_t state;
-        struct dmxdev_s *dev;
+        struct dmxdev *dev;
         dmxdev_buffer_t buffer;
 
 	struct semaphore mutex;
@@ -90,20 +90,20 @@
         // only for sections
         struct timer_list timer;
         int todo;
-        uint8_t secheader[3];
+        u8 secheader[3];
 
         u16 pid;
 } dmxdev_filter_t;
 
 
-typedef struct dmxdev_dvr_s {
+typedef struct dmxdev_dvr {
         int state;
-        struct dmxdev_s *dev;
+        struct dmxdev *dev;
         dmxdev_buffer_t buffer;
 } dmxdev_dvr_t;
 
 
-typedef struct dmxdev_s {
+typedef struct dmxdev {
 	struct dvb_device *dvbdev;
 	struct dvb_device *dvr_dvbdev;
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_demux.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_demux.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_demux.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_demux.c	2003-05-06 16:59:56.000000000 +0200
@@ -21,19 +21,17 @@
  *
  */
 
+#include <asm/uaccess.h>
+#include <linux/spinlock.h>
+#include <linux/slab.h>
 #include <linux/vmalloc.h>
 #include <linux/module.h>
 #include <linux/poll.h>
-#include <linux/version.h>
-#include <asm/uaccess.h>
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)
-	#include "compat.h"
-#else
+#include <linux/string.h>
 	#include <linux/crc32.h>
-#endif
 
 #include "dvb_demux.h"
+#include "dvb_functions.h"
 
 #define NOBUFS  
 
@@ -42,21 +40,8 @@
 
 int dmx_register_demux(dmx_demux_t *demux) 
 {
-	struct list_head *pos;
-	
-	if (!(demux->id && demux->vendor && demux->model)) 
-		return -EINVAL;
-
-	list_for_each(pos, &dmx_muxs) {
-		if (!strcmp(DMX_DIR_ENTRY(pos)->id, demux->id))
-			return -EEXIST;
-	}
-
 	demux->users = 0;
 	list_add(&demux->reg_list, &dmx_muxs);
-	/* fixme: is this correct? */
-	try_module_get(THIS_MODULE);
-
 	return 0;
 }
 
@@ -69,8 +54,6 @@
 			if (demux->users>0)
 				return -EINVAL;
 			list_del(pos);
-			/* fixme: is this correct? */
-			module_put(THIS_MODULE);
 			return 0;
 		}
 	}
@@ -506,12 +491,14 @@
 	if (pid == feed->pid)
 		return 0;
 
-	if (feed->pid <= DMX_MAX_PID)
-		list_for_each_safe(pos, n, head)
+	if (feed->pid <= DMX_MAX_PID) {
+		list_for_each_safe(pos, n, head) {
 			if (DMX_FEED_ENTRY(pos)->pid == feed->pid) {
 				list_del(pos);
 				break;
 			}
+		}
+	}
 
 	list_add(&feed->list_head, head);
 	feed->pid = pid;
@@ -684,12 +671,12 @@
 	feed->buffer = 0;
 
 	(*ts_feed) = &feed->feed.ts;
-	(*ts_feed)->is_filtering = 0;
 	(*ts_feed)->parent = dmx;
 	(*ts_feed)->priv = 0;
-	(*ts_feed)->set = dmx_ts_feed_set;
+	(*ts_feed)->is_filtering = 0;
 	(*ts_feed)->start_filtering = dmx_ts_feed_start_filtering;
 	(*ts_feed)->stop_filtering = dmx_ts_feed_stop_filtering;
+	(*ts_feed)->set = dmx_ts_feed_set;
 
 
 	if (!(feed->filter = dvb_dmx_filter_alloc(demux))) {
@@ -767,8 +754,9 @@
 	dvbdmxfilter=dvb_dmx_filter_alloc(dvbdemux);
 	if (!dvbdmxfilter) {
 		up(&dvbdemux->mutex);
-		return -ENOSPC;
+		return -EBUSY;
 	}
+
 	spin_lock_irq(&dvbdemux->lock);
 	*filter=&dvbdmxfilter->filter;
 	(*filter)->parent=feed;
@@ -799,16 +788,18 @@
 	if (down_interruptible (&dvbdmx->mutex))
 		return -ERESTARTSYS;
 	
-	if (dvbdmxfeed->pid <= DMX_MAX_PID)
-		list_for_each_safe(pos, n, head)
+	if (dvbdmxfeed->pid <= DMX_MAX_PID) {
+		list_for_each_safe(pos, n, head) {
 			if (DMX_FEED_ENTRY(pos)->pid == dvbdmxfeed->pid) {
 				list_del(pos);
 				break;
 			}
+		}
+	}
 
 	list_add(&dvbdmxfeed->list_head, head);
-	dvbdmxfeed->pid=pid;
 
+	dvbdmxfeed->pid = pid;
 	dvbdmxfeed->buffer_size=circular_buffer_size;
 	dvbdmxfeed->descramble=descramble;
 	if (dvbdmxfeed->descramble) {
@@ -834,8 +828,8 @@
 static void prepare_secfilters(struct dvb_demux_feed *dvbdmxfeed)
 {
 	int i;
-	dmx_section_filter_t *sf;
 	struct dvb_demux_filter *f;
+	dmx_section_filter_t *sf;
 	u8 mask, mode, doneq;
 		
 	if (!(f=dvbdmxfeed->filter))
@@ -938,9 +941,10 @@
 	
 	spin_lock_irq(&dvbdmx->lock);
 	f=dvbdmxfeed->filter;
-	if (f==dvbdmxfilter)
+
+	if (f == dvbdmxfilter) {
 		dvbdmxfeed->filter=dvbdmxfilter->next;
-	else {
+	} else {
 		while(f->next!=dvbdmxfilter)
 			f=f->next;
 		f->next=f->next->next;
@@ -977,11 +983,12 @@
 	(*feed)->is_filtering=0;
 	(*feed)->parent=demux;
 	(*feed)->priv=0;
+
 	(*feed)->set=dmx_section_feed_set;
 	(*feed)->allocate_filter=dmx_section_feed_allocate_filter;
-	(*feed)->release_filter=dmx_section_feed_release_filter;
 	(*feed)->start_filtering=dmx_section_feed_start_filtering;
 	(*feed)->stop_filtering=dmx_section_feed_stop_filtering;
+	(*feed)->release_filter = dmx_section_feed_release_filter;
 
 	up(&dvbdmx->mutex);
 	return 0;
@@ -1010,11 +1017,12 @@
 	dvbdmxfeed->state=DMX_STATE_FREE;
 
 	if (dvbdmxfeed->pid <= DMX_MAX_PID) {
-		list_for_each_safe(pos, n, head)
+		list_for_each_safe(pos, n, head) {
 			if (DMX_FEED_ENTRY(pos)->pid == dvbdmxfeed->pid) {
 				list_del(pos);
 				break;
 			}
+		}
 		dvbdmxfeed->pid = 0xffff;
 	}
 
@@ -1052,8 +1064,7 @@
 {
 	struct dvb_demux *dvbdemux=(struct dvb_demux *) demux;
 
-	if ((!demux->frontend) ||
-	    (demux->frontend->source!=DMX_MEMORY_FE))
+	if ((!demux->frontend) || (demux->frontend->source != DMX_MEMORY_FE))
 		return -EINVAL;
 
 	if (down_interruptible (&dvbdemux->mutex))
@@ -1065,21 +1077,13 @@
 }
 
 
-static int dvbdmx_add_frontend(dmx_demux_t *demux, 
-			       dmx_frontend_t *frontend)
+static int dvbdmx_add_frontend(dmx_demux_t *demux, dmx_frontend_t *frontend)
 {
 	struct dvb_demux *dvbdemux=(struct dvb_demux *) demux;
-	struct list_head *pos, *head=&dvbdemux->frontend_list;
-	
-	if (!(frontend->id && frontend->vendor && frontend->model)) 
-		return -EINVAL;
-	list_for_each(pos, head) 
-	{
-		if (!strcmp(DMX_FE_ENTRY(pos)->id, frontend->id))
-			return -EEXIST;
-	}
+	struct list_head *head = &dvbdemux->frontend_list;
 
 	list_add(&(frontend->connectivity_list), head);
+
 	return 0;
 }
 
@@ -1083,17 +1087,15 @@
 	return 0;
 }
 
+
 static int 
-dvbdmx_remove_frontend(dmx_demux_t *demux, 
-		       dmx_frontend_t *frontend)
+dvbdmx_remove_frontend(dmx_demux_t *demux, dmx_frontend_t *frontend)
 {
 	struct dvb_demux *dvbdemux=(struct dvb_demux *) demux;
 	struct list_head *pos, *n, *head=&dvbdemux->frontend_list;
 
-	list_for_each_safe (pos, n, head) 
-	{
-		if (DMX_FE_ENTRY(pos)==frontend) 
-		{
+	list_for_each_safe (pos, n, head) {
+		if (DMX_FE_ENTRY(pos) == frontend) {
 			list_del(pos);
 			return 0;
 		}
@@ -1111,8 +1116,8 @@
 	return &dvbdemux->frontend_list;
 }
 
-static int dvbdmx_connect_frontend(dmx_demux_t *demux, 
-				   dmx_frontend_t *frontend)
+
+int dvbdmx_connect_frontend(dmx_demux_t *demux, dmx_frontend_t *frontend)
 {
 	struct dvb_demux *dvbdemux=(struct dvb_demux *) demux;
 
@@ -1127,7 +1132,8 @@
 	return 0;
 }
 
-static int dvbdmx_disconnect_frontend(dmx_demux_t *demux)
+
+int dvbdmx_disconnect_frontend(dmx_demux_t *demux)
 {
 	struct dvb_demux *dvbdemux=(struct dvb_demux *) demux;
 
@@ -1150,7 +1159,7 @@
 int 
 dvb_dmx_init(struct dvb_demux *dvbdemux)
 {
-	int i;
+	int i, err;
 	dmx_demux_t *dmx=&dvbdemux->dmx;
 
 	dvbdemux->users=0;
@@ -1176,8 +1190,11 @@
 		dvbdemux->pesfilter[i]=NULL;
 		dvbdemux->pids[i]=0xffff;
 	}
-	dvbdemux->playing=dvbdemux->recording=0;
+
 	INIT_LIST_HEAD(&dvbdemux->feed_list);
+
+	dvbdemux->playing = 0;
+	dvbdemux->recording = 0;
 	dvbdemux->tsbufp=0;
 
 	if (!dvbdemux->check_crc32)
@@ -1187,9 +1204,8 @@
 		 dvbdemux->memcopy = dvb_dmx_memcopy;
 
 	dmx->frontend=0;
-	dmx->reg_list.next=dmx->reg_list.prev=&dmx->reg_list;
+	dmx->reg_list.prev = dmx->reg_list.next = &dmx->reg_list;
 	dmx->priv=(void *) dvbdemux;
-	//dmx->users=0;		  // reset in dmx_register_demux() 
 	dmx->open=dvbdmx_open;
 	dmx->close=dvbdmx_close;
 	dmx->write=dvbdmx_write;
@@ -1210,8 +1227,8 @@
 	sema_init(&dvbdemux->mutex, 1);
 	spin_lock_init(&dvbdemux->lock);
 
-	if (dmx_register_demux(dmx)<0) 
-		return -1;
+	if ((err = dmx_register_demux(dmx)) < 0) 
+		return err;
 
 	return 0;
 }
@@ -1228,10 +1246,3 @@
 		vfree(dvbdemux->feed);
 	return 0;
 }
-
-#if 0
-MODULE_DESCRIPTION("Software MPEG Demultiplexer");
-MODULE_AUTHOR("Ralph Metzler, Markus Metzler");
-MODULE_LICENSE("GPL");
-#endif
-
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_demux.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_demux.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_demux.h	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_demux.h	2003-04-28 18:49:26.000000000 +0200
@@ -26,7 +26,9 @@
 #define _DVB_DEMUX_H_
 
 #include <asm/semaphore.h>
+#include <linux/time.h>
 #include <linux/timer.h>
+#include <linux/spinlock.h>
 
 #include "demux.h"
 
@@ -140,4 +142,8 @@
 void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf, size_t count);
 void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
 
+int dvbdmx_connect_frontend(dmx_demux_t *demux, dmx_frontend_t *frontend);
+int dvbdmx_disconnect_frontend(dmx_demux_t *demux);
+
 #endif /* _DVB_DEMUX_H_ */
+
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_filter.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_filter.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_filter.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_filter.c	2003-03-21 16:09:54.000000000 +0100
@@ -1,4 +1,6 @@
+#include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/string.h>
 #include "dvb_filter.h"
 
 unsigned int bitrates[3][16] =
@@ -6,14 +8,14 @@
  {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,0},
  {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}};
 
-uint32_t freq[4] = {441, 480, 320, 0};
+u32 freq[4] = {441, 480, 320, 0};
 
 unsigned int ac3_bitrates[32] =
     {32,40,48,56,64,80,96,112,128,160,192,224,256,320,384,448,512,576,640,
      0,0,0,0,0,0,0,0,0,0,0,0,0};
 
-uint32_t ac3_freq[4] = {480, 441, 320, 0};
-uint32_t ac3_frames[3][32] =
+u32 ac3_freq[4] = {480, 441, 320, 0};
+u32 ac3_frames[3][32] =
     {{64,80,96,112,128,160,192,224,256,320,384,448,512,640,768,896,1024,
       1152,1280,0,0,0,0,0,0,0,0,0,0,0,0,0},
      {69,87,104,121,139,174,208,243,278,348,417,487,557,696,835,975,1114,
@@ -67,9 +69,9 @@
 #if 0
 /* needs 5 byte input, returns picture coding type*/
 static
-int read_picture_header(uint8_t *headr, mpg_picture *pic, int field, int pr)
+int read_picture_header(u8 *headr, mpg_picture *pic, int field, int pr)
 {
-	uint8_t pct;
+	u8 pct;
 
 	if (pr) printk( "Pic header: ");
         pic->temporal_reference[field] = (( headr[0] << 2 ) | 
@@ -114,7 +116,7 @@
 #if 0
 /* needs 4 byte input */
 static
-int read_gop_header(uint8_t *headr, mpg_picture *pic, int pr)
+int read_gop_header(u8 *headr, mpg_picture *pic, int pr)
 {
 	if (pr) printk("GOP header: "); 
 
@@ -146,7 +148,7 @@
 #if 0
 /* needs 8 byte input */
 static
-int read_sequence_header(uint8_t *headr, VideoInfo *vi, int pr)
+int read_sequence_header(u8 *headr, VideoInfo *vi, int pr)
 {
         int sw;
 	int form = -1;
@@ -261,14 +263,14 @@
 
 #if 0
 static
-int get_vinfo(uint8_t *mbuf, int count, VideoInfo *vi, int pr)
+int get_vinfo(u8 *mbuf, int count, VideoInfo *vi, int pr)
 {
-	uint8_t *headr;
+	u8 *headr;
 	int found = 0;
 	int c = 0;
 
 	while (found < 4 && c+4 < count){
-		uint8_t *b;
+		u8 *b;
 
 		b = mbuf+c;
 		if ( b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01
@@ -291,15 +293,15 @@
 
 #if 0
 static
-int get_ainfo(uint8_t *mbuf, int count, AudioInfo *ai, int pr)
+int get_ainfo(u8 *mbuf, int count, AudioInfo *ai, int pr)
 {
-	uint8_t *headr;
+	u8 *headr;
 	int found = 0;
 	int c = 0;
 	int fr = 0;
 
 	while (found < 2 && c < count){
-		uint8_t b[2];
+		u8 b[2];
 		memcpy( b, mbuf+c, 2);
 
 		if ( b[0] == 0xff && (b[1] & 0xf8) == 0xf8)
@@ -346,16 +348,16 @@
 #endif
 
 
-int dvb_filter_get_ac3info(uint8_t *mbuf, int count, AudioInfo *ai, int pr)
+int dvb_filter_get_ac3info(u8 *mbuf, int count, AudioInfo *ai, int pr)
 {
-	uint8_t *headr;
+	u8 *headr;
 	int found = 0;
 	int c = 0;
-	uint8_t frame = 0;
+	u8 frame = 0;
 	int fr = 0;
 	
 	while ( !found  && c < count){
-		uint8_t *b = mbuf+c;
+		u8 *b = mbuf+c;
 
 		if ( b[0] == 0x0b &&  b[1] == 0x77 )
 			found = 1;
@@ -378,18 +380,18 @@
 	ai->bit_rate = ac3_bitrates[frame >> 1]*1000;
 
 	if (pr)
-		printk("  BRate: %d kb/s", ai->bit_rate/1000);
+		printk("  BRate: %d kb/s", (int) ai->bit_rate/1000);
 
 	ai->frequency = (headr[2] & 0xc0 ) >> 6;
 	fr = (headr[2] & 0xc0 ) >> 6;
 	ai->frequency = freq[fr]*100;
-	if (pr) printk ("  Freq: %d Hz\n", ai->frequency);
+	if (pr) printk ("  Freq: %d Hz\n", (int) ai->frequency);
 
 
 	ai->framesize = ac3_frames[fr][frame >> 1];
 	if ((frame & 1) &&  (fr == 1)) ai->framesize++;
 	ai->framesize = ai->framesize << 1;
-	if (pr) printk ("  Framesize %d\n", ai->framesize);
+	if (pr) printk ("  Framesize %d\n",(int) ai->framesize);
 
 
 	return 0;
@@ -398,11 +400,11 @@
 
 #if 0
 static
-uint8_t *skip_pes_header(uint8_t **bufp)
+u8 *skip_pes_header(u8 **bufp)
 {
-        uint8_t *inbuf = *bufp;
-        uint8_t *buf = inbuf;
-        uint8_t *pts = NULL;
+        u8 *inbuf = *bufp;
+        u8 *buf = inbuf;
+        u8 *pts = NULL;
         int skip = 0;
 
 	static const int mpeg1_skip_table[16] = {
@@ -437,7 +439,7 @@
 
 #if 0
 static
-void initialize_quant_matrix( uint32_t *matrix )
+void initialize_quant_matrix( u32 *matrix )
 {
         int i;
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_filter.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_filter.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_filter.h	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_filter.h	2003-03-21 16:09:54.000000000 +0100
@@ -2,7 +2,6 @@
 #define _DVB_FILTER_H_
 
 #include <linux/slab.h>
-#include <linux/vmalloc.h>
 
 #include "demux.h"
 
@@ -116,7 +115,7 @@
 	int found;
 	u8 *buf;
 	u8 cid;
-	uint32_t plength;
+	u32 plength;
 	u8 plen[2];
 	u8 flag1;
 	u8 flag2;
@@ -134,17 +133,17 @@
 } ipack;
 
 typedef struct video_i{
-	uint32_t horizontal_size;
-	uint32_t vertical_size;
-	uint32_t aspect_ratio;
-	uint32_t framerate;
-	uint32_t video_format;
-	uint32_t bit_rate;
-	uint32_t comp_bit_rate;
-	uint32_t vbv_buffer_size;
-        int16_t  vbv_delay;
-	uint32_t CSPF;
-	uint32_t off;
+	u32 horizontal_size;
+	u32 vertical_size;
+	u32 aspect_ratio;
+	u32 framerate;
+	u32 video_format;
+	u32 bit_rate;
+	u32 comp_bit_rate;
+	u32 vbv_buffer_size;
+        s16 vbv_delay;
+	u32 CSPF;
+	u32 off;
 } VideoInfo;            
 
 
@@ -156,9 +155,9 @@
 typedef struct mpg_picture_s{
         int       channel;
 	VideoInfo vinfo;
-        uint32_t  *sequence_gop_header;
-        uint32_t  *picture_header;
-        int32_t   time_code;
+        u32      *sequence_gop_header;
+        u32      *picture_header;
+        s32       time_code;
         int       low_delay;
         int       closed_gop;
         int       broken_link;
@@ -166,12 +165,12 @@
         int       gop_flag;              
         int       sequence_end_flag;
                                                                 
-        uint8_t   profile_and_level;
-        int32_t   picture_coding_parameter;
-        uint32_t  matrix[32];
-        int8_t    matrix_change_flag;
+        u8        profile_and_level;
+        s32       picture_coding_parameter;
+        u32       matrix[32];
+        s8        matrix_change_flag;
 
-        uint8_t   picture_header_parameter;
+        u8        picture_header_parameter;
   /* bit 0 - 2: bwd f code
      bit 3    : fpb vector
      bit 4 - 6: fwd f code
@@ -180,11 +179,11 @@
         int       mpeg1_flag;
         int       progressive_sequence;
         int       sequence_display_extension_flag;
-        uint32_t  sequence_header_data;
-        int16_t   last_frame_centre_horizontal_offset;
-        int16_t   last_frame_centre_vertical_offset;
+        u32       sequence_header_data;
+        s16       last_frame_centre_horizontal_offset;
+        s16       last_frame_centre_vertical_offset;
 
-        uint32_t  pts[2]; /* [0] 1st field, [1] 2nd field */
+        u32       pts[2]; /* [0] 1st field, [1] 2nd field */
         int       top_field_first;
         int       repeat_first_field;
         int       progressive_frame;
@@ -192,21 +191,21 @@
         int       forward_bank;
         int       backward_bank;
         int       compress;
-        int16_t   frame_centre_horizontal_offset[OFF_SIZE];                   
+        s16       frame_centre_horizontal_offset[OFF_SIZE];                   
                   /* [0-2] 1st field, [3] 2nd field */
-        int16_t   frame_centre_vertical_offset[OFF_SIZE];
+        s16       frame_centre_vertical_offset[OFF_SIZE];
                   /* [0-2] 1st field, [3] 2nd field */
-        int16_t   temporal_reference[2];                               
+        s16       temporal_reference[2];                               
                   /* [0] 1st field, [1] 2nd field */
 
-        int8_t    picture_coding_type[2];
+        s8        picture_coding_type[2];
                  /* [0] 1st field, [1] 2nd field */
-        int8_t    picture_structure[2];
+        s8        picture_structure[2];
                  /* [0] 1st field, [1] 2nd field */
-        int8_t    picture_display_extension_flag[2];
+        s8        picture_display_extension_flag[2];
                  /* [0] 1st field, [1] 2nd field */
                  /* picture_display_extenion() 0:no 1:exit*/
-        int8_t    pts_flag[2];
+        s8        pts_flag[2];
                  /* [0] 1st field, [1] 2nd field */
 } mpg_picture;
 
@@ -215,16 +214,16 @@
 
 typedef struct audio_i{
 	int layer               ;
-	uint32_t bit_rate    ;
-	uint32_t frequency   ;
-	uint32_t mode                ;
-	uint32_t mode_extension ;
-	uint32_t emphasis    ;
-	uint32_t framesize;
-	uint32_t off;
+	u32 bit_rate;
+	u32 frequency;
+	u32 mode;
+	u32 mode_extension ;
+	u32 emphasis;
+	u32 framesize;
+	u32 off;
 } AudioInfo;
 
-int dvb_filter_get_ac3info(uint8_t *mbuf, int count, AudioInfo *ai, int pr);
+int dvb_filter_get_ac3info(u8 *mbuf, int count, AudioInfo *ai, int pr);
 
 
 #endif
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_frontend.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_frontend.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_frontend.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_frontend.c	2003-05-06 16:46:00.000000000 +0200
@@ -22,8 +22,13 @@
  * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
  */
 
+#include <asm/processor.h>
+#include <asm/semaphore.h>
+#include <asm/errno.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
 #include <linux/sched.h>
-#include <linux/smp_lock.h>
+#include <linux/wait.h>
 #include <linux/slab.h>
 #include <linux/poll.h>
 #include <linux/module.h>
@@ -31,6 +36,7 @@
 
 #include "dvb_frontend.h"
 #include "dvbdev.h"
+#include "dvb_functions.h"
 
 
 static int dvb_frontend_debug = 0;
@@ -98,14 +104,6 @@
 
 
 static
-inline void ddelay (int ms)
-{
-	current->state=TASK_INTERRUPTIBLE;
-	schedule_timeout((HZ*ms)/1000);
-}
-
-
-static
 int dvb_frontend_internal_ioctl (struct dvb_frontend *frontend, 
 				 unsigned int cmd, void *arg)
 {
@@ -198,7 +196,7 @@
 		fe->lost_sync_jiffies = jiffies;
 
 	if (((s ^ fe->status) & FE_HAS_LOCK) && (s & FE_HAS_LOCK))
-		ddelay (fe->info->notifier_delay);
+		dvb_delay (fe->info->notifier_delay);
 
 	fe->status = s;
 
@@ -313,7 +311,7 @@
 	dvb_bend_frequency (fe, 0);
 
 	dprintk ("%s: f == %i, drift == %i\n",
-		 __FUNCTION__, param->frequency, fe->lnb_drift);
+		 __FUNCTION__, (int) param->frequency, (int) fe->lnb_drift);
 
 	param->frequency += fe->lnb_drift + fe->bending;
 	err = dvb_frontend_internal_ioctl (frontend, FE_SET_FRONTEND, param);
@@ -428,33 +426,23 @@
 int dvb_frontend_thread (void *data)
 {
 	struct dvb_frontend_data *fe = (struct dvb_frontend_data *) data;
+	char name [15];
 	int quality = 0, delay = 3*HZ;
 	fe_status_t s;
 
 	dprintk ("%s\n", __FUNCTION__);
 
-	lock_kernel ();
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,61))
-	daemonize ();
-#else
-	daemonize ("dvb fe");
-#endif
-/*	not needed anymore in 2.5.x, done in daemonize() */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-	reparent_to_init ();
-#endif
+	snprintf (name, sizeof(name), "kdvb-fe-%i:%i",
+		  fe->frontend.i2c->adapter->num, fe->frontend.i2c->id);
+
+	dvb_kernel_thread_setup (name);
 
-	sigfillset (&current->blocked);
 	fe->thread = current;
-	snprintf (current->comm, sizeof (current->comm), "kdvb-fe-%i:%i",
-		  fe->frontend.i2c->adapter->num, fe->frontend.i2c->id);
-	unlock_kernel ();
+	fe->lost_sync_count = -1;
 
 	dvb_call_frontend_notifiers (fe, 0);
 	dvb_frontend_init (fe);
 
-	fe->lost_sync_count = -1;
-
 	while (!dvb_frontend_is_exiting (fe)) {
 		up (&fe->sem);      /* is locked when we enter the thread... */
 
@@ -518,7 +506,7 @@
 	while (fe->thread) {
 		fe->exit = 1;
 		wake_up_interruptible (&fe->wait_queue);
-		current->state = TASK_INTERRUPTIBLE;
+		set_current_state(TASK_INTERRUPTIBLE);
 		schedule_timeout (5);
 		if (signal_pending(current))
 			break;
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_functions.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_functions.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_functions.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_functions.c	2003-05-06 16:55:25.000000000 +0200
@@ -0,0 +1,99 @@
+#include <linux/smp_lock.h>
+#include <linux/version.h>
+#include <asm/uaccess.h>
+#include <linux/string.h>
+#include <linux/smp_lock.h>
+#include <linux/version.h>
+#include <linux/fs.h>
+#include <asm/uaccess.h>
+#include <asm/errno.h>
+#include <linux/module.h>
+#include <linux/ioctl.h>
+#include <linux/slab.h>
+#include <linux/fs.h>
+
+void dvb_kernel_thread_setup (const char *thread_name)
+{
+        lock_kernel ();
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,61))
+        daemonize ();
+	strncpy (current->comm, thread_name, sizeof(current->comm));
+#else
+        daemonize (thread_name);
+#endif
+
+/*      not needed anymore in 2.5.x, done in daemonize() */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+        reparent_to_init();
+#endif
+
+        sigfillset (&current->blocked);
+        unlock_kernel ();
+}
+
+/* if the miracle happens and "generic_usercopy()" is included into
+   the kernel, then this can vanish. please don't make the mistake and
+   define this as video_usercopy(). this will introduce a dependecy
+   to the v4l "videodev.o" module, which is unnecessary for some
+   cards (ie. the budget dvb-cards don't need the v4l module...) */
+int dvb_usercopy(struct inode *inode, struct file *file,
+	             unsigned int cmd, unsigned long arg,
+		     int (*func)(struct inode *inode, struct file *file,
+		     unsigned int cmd, void *arg))
+{
+        char    sbuf[128];
+        void    *mbuf = NULL;
+        void    *parg = NULL;
+        int     err  = -EINVAL;
+
+        /*  Copy arguments into temp kernel buffer  */
+        switch (_IOC_DIR(cmd)) {
+        case _IOC_NONE:
+                parg = (void *)arg;
+                break;
+        case _IOC_READ: /* some v4l ioctls are marked wrong ... */
+        case _IOC_WRITE:
+        case (_IOC_WRITE | _IOC_READ):
+                if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
+                        parg = sbuf;
+                } else {
+                        /* too big to allocate from stack */
+                        mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
+                        if (NULL == mbuf)
+                                return -ENOMEM;
+                        parg = mbuf;
+                }
+
+                err = -EFAULT;
+                if (copy_from_user(parg, (void *)arg, _IOC_SIZE(cmd)))
+                        goto out;
+                break;
+        }
+
+        /* call driver */
+        if ((err = func(inode, file, cmd, parg)) == -ENOIOCTLCMD)
+                err = -EINVAL;
+
+        if (err < 0)
+                goto out;
+
+        /*  Copy results into user buffer  */
+        switch (_IOC_DIR(cmd))
+        {
+        case _IOC_READ:
+        case (_IOC_WRITE | _IOC_READ):
+                if (copy_to_user((void *)arg, parg, _IOC_SIZE(cmd)))
+                        err = -EFAULT;
+                break;
+        }
+
+out:
+        if (mbuf)
+                kfree(mbuf);
+
+        return err;
+}
+
+EXPORT_SYMBOL(dvb_usercopy);
+EXPORT_SYMBOL(dvb_kernel_thread_setup);
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_functions.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_functions.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_functions.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_functions.h	2003-05-06 17:02:03.000000000 +0200
@@ -0,0 +1,29 @@
+#ifndef __DVB_FUNCTIONS_H__
+#define __DVB_FUNCTIONS_H__
+
+/**
+ *  a sleeping delay function, waits i ms
+ *
+ */
+static inline
+void dvb_delay(int i)
+{
+	current->state=TASK_INTERRUPTIBLE;
+	schedule_timeout((HZ*i)/1000);
+}
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefull become
+generic_usercopy()  someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+	                    unsigned int cmd, unsigned long arg,
+			    int (*func)(struct inode *inode, struct file *file,
+			    unsigned int cmd, void *arg));
+
+extern void dvb_kernel_thread_setup (const char *thread_name);
+
+#include "dvb_compat.h"
+
+#endif
+
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_i2c.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_i2c.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_i2c.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_i2c.c	2003-04-30 12:03:46.000000000 +0200
@@ -19,16 +19,15 @@
  * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
  */
 
+#include <asm/semaphore.h>
+#include <asm/errno.h>
 #include <linux/slab.h>
 #include <linux/list.h>
 #include <linux/module.h>
-#include <linux/version.h>
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)
-	#include "compat.h"
-#endif
 
 #include "dvb_i2c.h"
+#include "dvb_functions.h"
+
 
 struct dvb_i2c_device {
 	struct list_head list_head;
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ksyms.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ksyms.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ksyms.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ksyms.c	2003-05-06 16:55:20.000000000 +0200
@@ -1,76 +1,15 @@
+#include <asm/uaccess.h>
+#include <asm/errno.h>
 #include <linux/module.h>
+#include <linux/ioctl.h>
+#include <linux/slab.h>
+#include <linux/fs.h>
 
 #include "dmxdev.h"
-#include "dvb_filter.h"
-#include "dvb_frontend.h"
-#include "dvb_i2c.h"
-#include "dvbdev.h"
 #include "dvb_demux.h"
+#include "dvb_frontend.h"
 #include "dvb_net.h"
-
-/* if the miracle happens and "generic_usercopy()" is included into
-   the kernel, then this can vanish. please don't make the mistake and
-   define this as video_usercopy(). this will introduce a dependecy
-   to the v4l "videodev.o" module, which is unnecessary for some
-   cards (ie. the budget dvb-cards don't need the v4l module...) */
-int dvb_usercopy(struct inode *inode, struct file *file,
-	             unsigned int cmd, unsigned long arg,
-		     int (*func)(struct inode *inode, struct file *file,
-		     unsigned int cmd, void *arg))
-{
-        char    sbuf[128];
-        void    *mbuf = NULL;
-        void    *parg = NULL;
-        int     err  = -EINVAL;
-
-        /*  Copy arguments into temp kernel buffer  */
-        switch (_IOC_DIR(cmd)) {
-        case _IOC_NONE:
-                parg = (void *)arg;
-                break;
-        case _IOC_READ: /* some v4l ioctls are marked wrong ... */
-        case _IOC_WRITE:
-        case (_IOC_WRITE | _IOC_READ):
-                if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
-                        parg = sbuf;
-                } else {
-                        /* too big to allocate from stack */
-                        mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
-                        if (NULL == mbuf)
-                                return -ENOMEM;
-                        parg = mbuf;
-                }
-
-                err = -EFAULT;
-                if (copy_from_user(parg, (void *)arg, _IOC_SIZE(cmd)))
-                        goto out;
-                break;
-        }
-
-        /* call driver */
-        if ((err = func(inode, file, cmd, parg)) == -ENOIOCTLCMD)
-                err = -EINVAL;
-
-        if (err < 0)
-                goto out;
-
-        /*  Copy results into user buffer  */
-        switch (_IOC_DIR(cmd))
-        {
-        case _IOC_READ:
-        case (_IOC_WRITE | _IOC_READ):
-                if (copy_to_user((void *)arg, parg, _IOC_SIZE(cmd)))
-                        err = -EFAULT;
-                break;
-        }
-
-out:
-        if (mbuf)
-                kfree(mbuf);
-
-        return err;
-}
-EXPORT_SYMBOL(dvb_usercopy);
+#include "dvb_filter.h"
 
 EXPORT_SYMBOL(dvb_dmxdev_init);
 EXPORT_SYMBOL(dvb_dmxdev_release);
@@ -79,6 +18,8 @@
 EXPORT_SYMBOL(dvb_dmx_swfilter_packet);
 EXPORT_SYMBOL(dvb_dmx_swfilter_packets);
 EXPORT_SYMBOL(dvb_dmx_swfilter);
+EXPORT_SYMBOL(dvbdmx_connect_frontend);
+EXPORT_SYMBOL(dvbdmx_disconnect_frontend);
 
 EXPORT_SYMBOL(dvb_register_frontend);
 EXPORT_SYMBOL(dvb_unregister_frontend);
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_net.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_net.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_net.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_net.c	2003-04-30 12:02:58.000000000 +0200
@@ -24,15 +24,18 @@
  * 
  */
 
+#include <asm/errno.h>
 #include <asm/uaccess.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/ioctl.h>
+#include <linux/slab.h>
 
 #include <linux/dvb/net.h>
+
 #include "dvb_demux.h"
 #include "dvb_net.h"
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)
-	#include "compat.h"
-#endif
+#include "dvb_functions.h"
 
 #define DVB_NET_MULTICAST_MAX 10
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ringbuffer.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ringbuffer.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ringbuffer.c	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ringbuffer.c	2003-03-21 16:09:55.000000000 +0100
@@ -32,10 +32,12 @@
 
 
 #define __KERNEL_SYSCALLS__
+#include <asm/uaccess.h>
+#include <asm/errno.h>
 #include <linux/kernel.h>
-#include <linux/sched.h>
 #include <linux/module.h>
-#include <asm/uaccess.h>
+#include <linux/sched.h>
+#include <linux/string.h>
 
 #include "dvb_ringbuffer.h"
 
@@ -50,7 +52,6 @@
         init_waitqueue_head(&rbuf->queue);
 
         spin_lock_init(&(rbuf->lock));
-        rbuf->lock=SPIN_LOCK_UNLOCKED;
 }
 
 
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ringbuffer.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ringbuffer.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvb_ringbuffer.h	2003-05-06 13:15:32.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvb_ringbuffer.h	2003-03-21 16:09:55.000000000 +0100
@@ -32,6 +32,9 @@
 #ifndef _DVB_RINGBUFFER_H_
 #define _DVB_RINGBUFFER_H_
 
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
 
 typedef struct dvb_ringbuffer {
         u8               *data;
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvbdev.c linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvbdev.c
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvbdev.c	2003-05-06 13:16:20.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvbdev.c	2003-05-06 16:59:46.000000000 +0200
@@ -21,30 +21,26 @@
  *
  */
 
-#include <linux/config.h>
-#include <linux/version.h>
+#include <asm/types.h>
+#include <asm/errno.h>
+#include <asm/semaphore.h>
+#include <linux/string.h>
 #include <linux/module.h>
-#include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/errno.h>
 #include <linux/init.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <linux/kmod.h>
 #include <linux/slab.h>
+#include <linux/version.h>
 
 #include "dvbdev.h"
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)
-	#include "compat.h"
-#endif
+#include "dvb_functions.h"
 
 static int dvbdev_debug = 0;
 #define dprintk if (dvbdev_debug) printk
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+static devfs_handle_t dvb_devfs_handle;
+#endif
 static LIST_HEAD(dvb_adapter_list);
 static DECLARE_MUTEX(dvbdev_register_lock);
 
@@ -55,6 +51,13 @@
 };
 
 
+#ifdef CONFIG_DVB_DEVFS_ONLY
+
+	#define DVB_MAX_IDS              ~0
+	#define nums2minor(num,type,id)  0
+
+#else
+
 #define DVB_MAX_IDS              4
 #define nums2minor(num,type,id)  ((num << 6) | (id << 4) | type)
 
@@ -111,6 +114,8 @@
 	.owner =	THIS_MODULE,
 	.open =		dvb_device_open,
 };
+#endif /* CONFIG_DVB_DEVFS_ONLY */
+
 
 
 int dvb_generic_open(struct inode *inode, struct file *file)
@@ -188,9 +193,9 @@
 int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, 
 			const struct dvb_device *template, void *priv, int type)
 {
-	u32 id;
-	char name [20];
 	struct dvb_device *dvbdev;
+	char name[64];
+	int id;
 
 	if (down_interruptible (&dvbdev_register_lock))
 		return -ERESTARTSYS;
@@ -219,10 +224,23 @@
 
 	list_add_tail (&dvbdev->list_head, &adap->device_list);
 
-	sprintf(name, "dvb/adapter%d%s%d", adap->num, dnames[type], id);
-	devfs_register(NULL, name, 0, DVB_MAJOR, nums2minor(adap->num, type, id),
-			S_IFCHR | S_IRUSR | S_IWUSR, dvbdev->fops, dvbdev);
-
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	snprintf(name, sizeof(name), "%s%d", dnames[type], id);
+	dvbdev->devfs_handle = devfs_register(adap->devfs_handle, name,
+					      DEVFS_FL_DEFAULT,
+					      DVB_MAJOR,
+					      nums2minor(adap->num, type, id),
+					      S_IFCHR | S_IRUSR | S_IWUSR,
+					      dvbdev->fops, dvbdev);
+#else
+	snprintf(name, sizeof(name), "dvb/adapter%d/%s%d", adap->num, dnames[type], id);
+	dvbdev->devfs_handle = devfs_register(NULL, name,
+					      DEVFS_FL_DEFAULT,
+					      DVB_MAJOR,
+					      nums2minor(adap->num, type, id),
+					      S_IFCHR | S_IRUSR | S_IWUSR,
+					      dvbdev->fops, dvbdev);
+#endif
 	dprintk("DVB: register adapter%d/%s @ minor: %i (0x%02x)\n",
 		adap->num, name, nums2minor(adap->num, type, id),
 		nums2minor(adap->num, type, id));
@@ -233,13 +251,25 @@
 
 void dvb_unregister_device(struct dvb_device *dvbdev)
 {
-	if (dvbdev) {
-		devfs_remove("dvb/adapter%d%s%d", dvbdev->adapter->num,
-				dnames[dvbdev->type], dvbdev->id);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+	char name[64];
+	struct dvb_adapter *adap = dvbdev->adapter;
+#endif
+
+	if (!dvbdev)
+		return;
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	devfs_unregister(dvbdev->devfs_handle);
+#else
+	snprintf(name, sizeof(name), "dvb/adapter%d/%s%d", adap->num, dnames[dvbdev->type], dvbdev->id);
+	/* fixme */
+	printk("dvb_unregister_device: %s\n",name);
+	devfs_remove(name);
+#endif
 		list_del(&dvbdev->list_head);
 		kfree(dvbdev);
 	}
-}
 
 
 static
@@ -266,6 +296,7 @@
 
 int dvb_register_adapter(struct dvb_adapter **padap, const char *name)
 {
+	char dirname[64];
 	struct dvb_adapter *adap;
 	int num;
 
@@ -285,13 +316,15 @@
 	memset (adap, 0, sizeof(struct dvb_adapter));
 	INIT_LIST_HEAD (&adap->device_list);
 
- 	/* fixme: is this correct? */
-	/* No */
-	try_module_get(THIS_MODULE);
-
 	printk ("DVB: registering new adapter (%s).\n", name);
 	
-	devfs_mk_dir("dvb/adapter%d", num);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	snprintf(dirname, sizeof(dirname), "adapter%d", num);
+	adap->devfs_handle = devfs_mk_dir(dvb_devfs_handle, dirname, NULL);
+#else
+	snprintf(dirname, sizeof(dirname), "dvb/adapter%d", num);
+	devfs_mk_dir(dirname);
+#endif
 	adap->num = num;
 	adap->name = name;
 
@@ -305,15 +338,18 @@
 
 int dvb_unregister_adapter(struct dvb_adapter *adap)
 {
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	devfs_unregister(adap->devfs_handle);
+#else
+	char dirname[64];	/* fixme */
+	snprintf(dirname, sizeof(dirname), "dvb/adapter%d", adap->num);
+        devfs_remove(dirname);
+#endif
 	if (down_interruptible (&dvbdev_register_lock))
 		return -ERESTARTSYS;
-        devfs_remove("dvb/adapter%d", adap->num);
 	list_del (&adap->list_head);
 	up (&dvbdev_register_lock);
 	kfree (adap);
-	/* fixme: is this correct? */
-	/* No. */
-	module_put(THIS_MODULE);
 	return 0;
 }
 
@@ -321,7 +357,11 @@
 static
 int __init init_dvbdev(void)
 {
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	dvb_devfs_handle = devfs_mk_dir (NULL, "dvb", NULL);
+#else
 	devfs_mk_dir("dvb");
+#endif
 #ifndef CONFIG_DVB_DEVFS_ONLY
 	if(register_chrdev(DVB_MAJOR,"DVB", &dvb_device_fops)) {
 		printk("video_dev: unable to get major %d\n", DVB_MAJOR);
@@ -338,7 +378,11 @@
 #ifndef CONFIG_DVB_DEVFS_ONLY
 	unregister_chrdev(DVB_MAJOR, "DVB");
 #endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+	devfs_unregister(dvb_devfs_handle);
+#else
         devfs_remove("dvb");
+#endif
 }
 
 module_init(init_dvbdev);
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/dvb-core/dvbdev.h linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvbdev.h
--- linux-2.5.69/drivers/media/dvb/dvb-core/dvbdev.h	2003-05-06 13:16:20.000000000 +0200
+++ linux-2.5.69.patch/drivers/media/dvb/dvb-core/dvbdev.h	2003-05-06 16:42:56.000000000 +0200
@@ -24,9 +24,9 @@
 #ifndef _DVBDEV_H_
 #define _DVBDEV_H_
 
-#include <linux/types.h>
-#include <linux/version.h>
+#include <asm/types.h>
 #include <linux/poll.h>
+#include <linux/fs.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/list.h>
 
@@ -45,6 +45,7 @@
 
 struct dvb_adapter {
 	int num;
+	devfs_handle_t devfs_handle;
 	struct list_head list_head;
 	struct list_head device_list;
 	const char *name;
@@ -54,6 +55,7 @@
 struct dvb_device {
 	struct list_head list_head;
 	struct file_operations *fops;
+	devfs_handle_t devfs_handle;
 	struct dvb_adapter *adapter;
 	int type;
 	u32 id;
@@ -84,9 +86,5 @@
 extern int dvb_generic_release (struct inode *inode, struct file *file);
 extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
 			      unsigned int cmd, unsigned long arg);
-int dvb_usercopy(struct inode *inode, struct file *file,
-                     unsigned int cmd, unsigned long arg,
-                     int (*func)(struct inode *inode, struct file *file,
-                     unsigned int cmd, void *arg));
 #endif /* #ifndef _DVBDEV_H_ */
 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-06 16:04 [PATCH[[2.5][3-11] update dvb subsystem core Michael Hunold
@ 2003-05-06 20:49 ` Christoph Hellwig
  2003-05-07  9:19   ` Michael Hunold
  2003-05-06 21:08 ` Christoph Hellwig
  1 sibling, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-06 20:49 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

On Tue, May 06, 2003 at 06:04:00PM +0200, Michael Hunold wrote:
> Hello,
> 
> this patch updates the dvb subsystem core.
> 
> Fixed problems:
> - partly reintroduced the DVB_DEVFS_ONLY switch, which was previously
> wiped out by Alan Cox: if enabled, some really obscure code is not
> compiled into the kernel that is necessary to xxx

No, this is wrong.  I did remove it not Alan Cox and I removed it because
kernel 2.5/2.6 should not behave differently whether devfs is used or
not except nodes showing up in devfs.

> -	/* fixme: is this correct? */
> -	try_module_get(THIS_MODULE);
> +

Just removing this makes the code even more incorrect.  You need to
add a ->owner member and call try_module_get on it before calling into
the module (and handle the return value..)

> -typedef struct dmxdev_dvr_s {
> +typedef struct dmxdev_dvr {
>          int state;
> -        struct dmxdev_s *dev;
> +        struct dmxdev *dev;
>          dmxdev_buffer_t buffer;
>  } dmxdev_dvr_t;

Once you rename everything you can nuke the typedef crap aswel..


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-06 16:04 [PATCH[[2.5][3-11] update dvb subsystem core Michael Hunold
  2003-05-06 20:49 ` Christoph Hellwig
@ 2003-05-06 21:08 ` Christoph Hellwig
  2003-05-07  8:40   ` Michael Hunold
  1 sibling, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-06 21:08 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

and your devfs stuff is a mess.  I already told one of the DVB folks
(it wasn't you IIRC) that I'll publish a 2.5 devfs API on 2.4 header.
But first I have to fix the devfs API on 2.5 and randomly bringing
back old crap and lots of ifdefs in those changing areas won't help.

What the problem with 2.5, dvb and devfs? 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-06 21:08 ` Christoph Hellwig
@ 2003-05-07  8:40   ` Michael Hunold
  2003-05-07  9:22     ` Christoph Hellwig
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Hunold @ 2003-05-07  8:40 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, torvalds

Hello Christoph,

> What the problem with 2.5, dvb and devfs? 

The main problem is that our development "dvb-kernel" CVS tree *should* 
compile under 2.4 aswell, because most of the dvb-users don't want to 
participate in kernel development in general, but only on the 
development of the dvb subsystem. So work is done on the "dvb-kernel" 
tree, which should be synced with the 2.5 kernel frequently.

So, regarding devfs, I introduced #ifdefs around the functions that have 
changed recently. That's not nice, I know. But in my eyes it's important 
to keep the CVS and the kernel version more in sync.

IIRC Gerd Knorr has the same problems with his driver packages 
(regarding the i2c subsystem mainly), but he has written some perl 
scripts to remove the #ifdef stuff before submitting his patches...

> I already told one of the DVB folks
> (it wasn't you IIRC) that I'll publish a 2.5 devfs API on 2.4 header.

No, you spoke to Holger I think, who has maintained the dvb-core kernel 
submissions before me.

> But first I have to fix the devfs API on 2.5 and randomly bringing
> back old crap and lots of ifdefs in those changing areas won't help.

I understand. But delaying the dvb updates just because a few calls to 
the devfs subsystem (which are now separated by #ifdefs and can easily 
be found) is not a good option either, or is it?

CU
Michael.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-06 20:49 ` Christoph Hellwig
@ 2003-05-07  9:19   ` Michael Hunold
  2003-05-07  9:28     ` Christoph Hellwig
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Hunold @ 2003-05-07  9:19 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, torvalds

Hello Christoph,

>>- partly reintroduced the DVB_DEVFS_ONLY switch, which was previously
>>wiped out by Alan Cox: if enabled, some really obscure code is not
>>compiled into the kernel that is necessary to xxx
> 
> 
> No, this is wrong.  I did remove it not Alan Cox and I removed it because
> kernel 2.5/2.6 should not behave differently whether devfs is used or
> not except nodes showing up in devfs.

The code does not behave differently. If DVB_DEVFS_ONLY is set, then the 
old chardev register interface is omitted.

We use the dvb subsystem on set-top-boxes where devfs is present only. 
The DVB_DEVFS_ONLY switch then lets us save some bytes and skips the 
"map-minor-to-actual-device" function stuff.

>>-	/* fixme: is this correct? */
>>-	try_module_get(THIS_MODULE);
>>+
> 
> 
> Just removing this makes the code even more incorrect.  You need to
> add a ->owner member and call try_module_get on it before calling into
> the module (and handle the return value..)

There is a functional dependency between the dvb-core and the actual dvb 
driver. So there is no need to increase the module count of the dvb-core 
if a new adapter is registered IMHO, because you cannot unload the 
dvb-core before the driver anyway.

>>-typedef struct dmxdev_dvr_s {
>>+typedef struct dmxdev_dvr {
>>         int state;
>>-        struct dmxdev_s *dev;
>>+        struct dmxdev *dev;
>>         dmxdev_buffer_t buffer;
>> } dmxdev_dvr_t;
> 
> 
> Once you rename everything you can nuke the typedef crap aswel..

Thanks, added to the TODO list.

CU
Michael.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07  8:40   ` Michael Hunold
@ 2003-05-07  9:22     ` Christoph Hellwig
  2003-05-07 15:56       ` Michael Hunold
  0 siblings, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-07  9:22 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

On Wed, May 07, 2003 at 10:40:26AM +0200, Michael Hunold wrote:
> Hello Christoph,
> 
> > What the problem with 2.5, dvb and devfs? 
> 
> The main problem is that our development "dvb-kernel" CVS tree *should* 
> compile under 2.4 aswell, because most of the dvb-users don't want to 
> participate in kernel development in general, but only on the 
> development of the dvb subsystem. So work is done on the "dvb-kernel" 
> tree, which should be synced with the 2.5 kernel frequently.

That okay in principle, but I'd like to ask you nicely to not touch any
devfs-related stuff currently.  I'ts in flux and any external change
makes my life in cleaning up the mess a lot harder.

> > But first I have to fix the devfs API on 2.5 and randomly bringing
> > back old crap and lots of ifdefs in those changing areas won't help.
> 
> I understand. But delaying the dvb updates just because a few calls to 
> the devfs subsystem (which are now separated by #ifdefs and can easily 
> be found) is not a good option either, or is it?

I think it is :)  Esepcially as you don't just add ifdefs (which give
me lots of rejects and you much uglier code than just using the
compat header I'll send to lkml once I'm done with the API changes) but
you also change the code that's ifdefed for 2.5 to reverse change I
did.  There is a reason why I removed every occurance of devfs_handle_t
from all drivers and the particular reason is that it will go away in
the next series of patches.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07  9:19   ` Michael Hunold
@ 2003-05-07  9:28     ` Christoph Hellwig
  2003-05-07 15:56       ` Michael Hunold
  0 siblings, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-07  9:28 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

On Wed, May 07, 2003 at 11:19:30AM +0200, Michael Hunold wrote:
> The code does not behave differently. If DVB_DEVFS_ONLY is set, then the 
> old chardev register interface is omitted.

Which is a different behaviour, now you can't create a device node
manually anymor.  Also note that the feature you rely on here (devfs
presetting file->private_data) will go away in the next round of patches,
see Al Viro's patchit for a generic replacement that works with or
without devfs.

> > Just removing this makes the code even more incorrect.  You need to
> > add a ->owner member and call try_module_get on it before calling into
> > the module (and handle the return value..)
> 
> There is a functional dependency between the dvb-core and the actual dvb 
> driver. So there is no need to increase the module count of the dvb-core 
> if a new adapter is registered IMHO, because you cannot unload the 
> dvb-core before the driver anyway.

Okay, you're right I should have read more of the code to get the global
picture.  You still wan't an owner field for at least struct dvb_device
device, though - but the try_module_get must go into dvb_generic_open
and maybe in more other places where you use the "backend" modules.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07  9:22     ` Christoph Hellwig
@ 2003-05-07 15:56       ` Michael Hunold
  2003-05-07 15:59         ` Christoph Hellwig
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Hunold @ 2003-05-07 15:56 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, torvalds

Hello Christoph,

> That okay in principle, but I'd like to ask you nicely to not touch any
> devfs-related stuff currently.  I'ts in flux and any external change
> makes my life in cleaning up the mess a lot harder.

The problem was that the devices disappeared. I did not realize that you 
did a typo and they were created at another place, though.

So I rewrote the code for both 2.4 and 2.5 and it worked again.

>>I understand. But delaying the dvb updates just because a few calls to 
>>the devfs subsystem (which are now separated by #ifdefs and can easily 
>>be found) is not a good option either, or is it?

> I think it is :)  Esepcially as you don't just add ifdefs (which give
> me lots of rejects and you much uglier code than just using the
> compat header I'll send to lkml once I'm done with the API changes) but
> you also change the code that's ifdefed for 2.5 to reverse change I
> did.  There is a reason why I removed every occurance of devfs_handle_t
> from all drivers and the particular reason is that it will go away in
> the next series of patches.

Ok, I understand.

I promise that I don't touch the devfs related code anymore. But, how do 
we proceed in general?

Will the other patches be applied and who does that for which tree?
Shall I resend the patches where you had objections?

CU
Michael.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07  9:28     ` Christoph Hellwig
@ 2003-05-07 15:56       ` Michael Hunold
  2003-05-07 16:04         ` Christoph Hellwig
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Hunold @ 2003-05-07 15:56 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, torvalds

Hello Christoph, Linus,

>>The code does not behave differently. If DVB_DEVFS_ONLY is set, then the 
>>old chardev register interface is omitted.

> Which is a different behaviour, now you can't create a device node
> manually anymor.

I won't insist on keeping code that I haven't written. My only point is 
that we use the code in set-top-boxes, where every byte is valuable. But 
  I suspect that there are numerous other places where we could safe 
bytes... 8-)

 >  Also note that the feature you rely on here (devfs
 > presetting file->private_data) will go away in the next round of
 > patches,
 > see Al Viro's patchit for a generic replacement that works with or
 > without devfs.

Ok.

>>There is a functional dependency between the dvb-core and the actual dvb 
>>driver. So there is no need to increase the module count of the dvb-core 
>>if a new adapter is registered IMHO, because you cannot unload the 
>>dvb-core before the driver anyway.

> Okay, you're right I should have read more of the code to get the global
> picture.  You still wan't an owner field for at least struct dvb_device
> device, though - but the try_module_get must go into dvb_generic_open
> and maybe in more other places where you use the "backend" modules.

I don't get that, sorry. The backend modules have functional 
dependencies and register/deregister upon loading/unloading. There is 
never a call from the dvb-core to the backend modules. Do I really need 
an owner field then?

CU
Michael.




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07 15:56       ` Michael Hunold
@ 2003-05-07 15:59         ` Christoph Hellwig
  2003-05-07 16:14           ` Michael Hunold
  0 siblings, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-07 15:59 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

On Wed, May 07, 2003 at 05:56:29PM +0200, Michael Hunold wrote:
> I promise that I don't touch the devfs related code anymore.

Oh, you can of course touch it again in future, I just want to
finish the API transition first, I hope I'll be done by the end of this
week.

> But, how do 
> we proceed in general?
> 
> Will the other patches be applied and who does that for which tree?
> Shall I resend the patches where you had objections?

As nothing got in yet I'd suggest resending everything, with Linus you
sometimes may have to resend quite often anyway :)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07 15:56       ` Michael Hunold
@ 2003-05-07 16:04         ` Christoph Hellwig
  0 siblings, 0 replies; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-07 16:04 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds

On Wed, May 07, 2003 at 05:56:33PM +0200, Michael Hunold wrote:
> I won't insist on keeping code that I haven't written. My only point is 
> that we use the code in set-top-boxes, where every byte is valuable. But 
>   I suspect that there are numerous other places where we could safe 
> bytes... 8-)

This code will go away soon for both the devfs and non-devfs case..

> > Okay, you're right I should have read more of the code to get the global
> > picture.  You still wan't an owner field for at least struct dvb_device
> > device, though - but the try_module_get must go into dvb_generic_open
> > and maybe in more other places where you use the "backend" modules.
> 
> I don't get that, sorry. The backend modules have functional 
> dependencies and register/deregister upon loading/unloading. There is 
> never a call from the dvb-core to the backend modules. Do I really need 
> an owner field then?

It doesn't have to be a call.  Unless I completely misread the code
your dvb core references struct dvb_adapter in certain cases.  But
struct dvb_adapter is allocated in the actual drivers so these could be
unloaded and give you scrambled memory even when it's still in use.

So you need to acquire a reference on those backends whenever you
touch any object that logically belongs to them.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07 15:59         ` Christoph Hellwig
@ 2003-05-07 16:14           ` Michael Hunold
  2003-05-07 16:15             ` Christoph Hellwig
  2003-05-07 18:30             ` Alan Cox
  0 siblings, 2 replies; 14+ messages in thread
From: Michael Hunold @ 2003-05-07 16:14 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, torvalds, Alan Cox

Hello Christoph,

> Oh, you can of course touch it again in future, I just want to
> finish the API transition first, I hope I'll be done by the end of this
> week.

Ok. (see below)

>>Will the other patches be applied and who does that for which tree?
>>Shall I resend the patches where you had objections?

> As nothing got in yet I'd suggest resending everything, with Linus you
> sometimes may have to resend quite often anyway :)

No problem. I'll change the stuff you suggested and resend it.

Last time I sent the patches through Alan Cox, who feeded them to Linus.
It this better? Alan?

CU
Michael.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07 16:14           ` Michael Hunold
@ 2003-05-07 16:15             ` Christoph Hellwig
  2003-05-07 18:30             ` Alan Cox
  1 sibling, 0 replies; 14+ messages in thread
From: Christoph Hellwig @ 2003-05-07 16:15 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, torvalds, Alan Cox

On Wed, May 07, 2003 at 06:14:37PM +0200, Michael Hunold wrote:
> No problem. I'll change the stuff you suggested and resend it.
> 
> Last time I sent the patches through Alan Cox, who feeded them to Linus.
> It this better? Alan?

Well, if it worked I'd try it again..


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH[[2.5][3-11] update dvb subsystem core
  2003-05-07 16:14           ` Michael Hunold
  2003-05-07 16:15             ` Christoph Hellwig
@ 2003-05-07 18:30             ` Alan Cox
  1 sibling, 0 replies; 14+ messages in thread
From: Alan Cox @ 2003-05-07 18:30 UTC (permalink / raw)
  To: Michael Hunold
  Cc: Christoph Hellwig, Linux Kernel Mailing List, Linus Torvalds

On Mer, 2003-05-07 at 17:14, Michael Hunold wrote:
> No problem. I'll change the stuff you suggested and resend it.
> 
> Last time I sent the patches through Alan Cox, who feeded them to Linus.
> It this better? Alan?

Up to you.

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2003-05-07 19:17 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-06 16:04 [PATCH[[2.5][3-11] update dvb subsystem core Michael Hunold
2003-05-06 20:49 ` Christoph Hellwig
2003-05-07  9:19   ` Michael Hunold
2003-05-07  9:28     ` Christoph Hellwig
2003-05-07 15:56       ` Michael Hunold
2003-05-07 16:04         ` Christoph Hellwig
2003-05-06 21:08 ` Christoph Hellwig
2003-05-07  8:40   ` Michael Hunold
2003-05-07  9:22     ` Christoph Hellwig
2003-05-07 15:56       ` Michael Hunold
2003-05-07 15:59         ` Christoph Hellwig
2003-05-07 16:14           ` Michael Hunold
2003-05-07 16:15             ` Christoph Hellwig
2003-05-07 18:30             ` Alan Cox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).