Skip to contentSkip to conversation

drivers/telephony/phonedev.c (brings this code up to date with Quicknet CVS)

PATCH In review David Ford 2 participants 4 messages May 13, 2001

lore
Share & tools
lore

David Ford

author
#0 lore raw

PATCH 1/1 drivers/telephony/phonedev.c (brings this code up to date with Quicknet CVS)

phonedev.diff is against 2.4.4 and brings the file phonedev.c up to date with respect to the Quicknet CVS. Changes are very minor, mostly #if LINUX_VERSION_CODE matching and structure updates. Small off by one fixes and file operation semantics updates.

There is no impact to other files or functions functions.

David

zip/code/VoIP/ixj/phonedev.c renamed from telephony/phonedev.c +96 -16
@@ -12,8 +12,14 @@
  *
  * Fixes:       Mar 01 2000 Thomas Sparr, <[email protected]>
  *              phone_register_device now works with unit!=PHONE_UNIT_ANY
+ *
+ *              May 12 2001 David Ford, <[email protected]>
+ *              brought kernel version up to date with CVS, minor changes
  */
 
+#if LINUX_VERSION_CODE < 0x020400
+#include <linux/config.h>
+#endif
 #include <linux/version.h>
 #include <linux/module.h>
 #include <linux/types.h>
@@ -23,13 +29,16 @@
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/phonedev.h>
+#if LINUX_VERSION_CODE >= 0x020400
 #include <linux/init.h>
+#endif
 #include <asm/uaccess.h>
 #include <asm/system.h>
 
 #include <linux/kmod.h>
+#if LINUX_VERSION_CODE >= 0x020400
 #include <linux/sem.h>
-
+#endif
 
 #define PHONE_NUM_DEVICES	256
 
@@ -38,8 +47,9 @@
  */
 
 static struct phone_device *phone_device[PHONE_NUM_DEVICES];
+#if LINUX_VERSION_CODE >= 0x020400
 static DECLARE_MUTEX(phone_lock);
-
+#endif
 /*
  *    Open a phone device.
  */
@@ -49,26 +59,48 @@
 	unsigned int minor = MINOR(inode->i_rdev);
 	int err = 0;
 	struct phone_device *p;
+#if LINUX_VERSION_CODE >= 0x020400
 	struct file_operations *old_fops, *new_fops = NULL;
-
+#endif
 	if (minor >= PHONE_NUM_DEVICES)
 		return -ENODEV;
 
+#if LINUX_VERSION_CODE >= 0x020400
 	down(&phone_lock);
+#endif
 	p = phone_device[minor];
+#if LINUX_VERSION_CODE < 0x020400
+	if (p == NULL) {
+#else
 	if (p)
 		new_fops = fops_get(p->f_op);
 	if (!new_fops) {
+#endif
 		char modname[32];
 
+#if LINUX_VERSION_CODE >= 0x020400
 		up(&phone_lock);
+#endif
 		sprintf(modname, "char-major-%d-%d", PHONE_MAJOR, minor);
 		request_module(modname);
+#if LINUX_VERSION_CODE >= 0x020400
 		down(&phone_lock);
+#endif
 		p = phone_device[minor];
-		if (p == NULL || (new_fops = fops_get(p->f_op)) == NULL)
-		{
-			err=-ENODEV;
+#if LINUX_VERSION_CODE < 0x020400
+		if (p == NULL)
+			return -ENODEV;
+	}
+	if (p->open) {
+		err = p->open(p, file);	/* Tell the device it is open */
+		if (err)
+			return err;
+	}
+	file->f_op = p->f_op;
+	return 0;
+#else
+		if (p == NULL || (new_fops = fops_get(p->f_op)) == NULL) {
+			err = -ENODEV;
 			goto end;
 		}
 	}
@@ -81,9 +113,10 @@
 		file->f_op = fops_get(old_fops);
 	}
 	fops_put(old_fops);
-end:
+      end:
 	up(&phone_lock);
 	return err;
+#endif
 }
 
 /*
@@ -101,20 +134,25 @@
 
 	if (unit != PHONE_UNIT_ANY) {
 		base = unit;
-		end = unit + 1;  /* enter the loop at least one time */
+		end = unit;
 	}
-	
+#if LINUX_VERSION_CODE >= 0x020400
 	down(&phone_lock);
+#endif
 	for (i = base; i < end; i++) {
 		if (phone_device[i] == NULL) {
 			phone_device[i] = p;
 			p->minor = i;
 			MOD_INC_USE_COUNT;
+#if LINUX_VERSION_CODE >= 0x020400
 			up(&phone_lock);
+#endif
 			return 0;
 		}
 	}
+#if LINUX_VERSION_CODE >= 0x020400
 	up(&phone_lock);
+#endif
 	return -ENFILE;
 }
 
@@ -124,48 +162,90 @@
 
 void phone_unregister_device(struct phone_device *pfd)
 {
+#if LINUX_VERSION_CODE >= 0x020400
 	down(&phone_lock);
+#endif
 	if (phone_device[pfd->minor] != pfd)
 		panic("phone: bad unregister");
 	phone_device[pfd->minor] = NULL;
+#if LINUX_VERSION_CODE >= 0x020400
 	up(&phone_lock);
+#endif
 	MOD_DEC_USE_COUNT;
 }
 
 
-static struct file_operations phone_fops =
-{
-	owner:		THIS_MODULE,
-	open:		phone_open,
+static struct file_operations phone_fops = {
+#if LINUX_VERSION_CODE >= 0x020400
+	owner:THIS_MODULE,
+	open:phone_open,
+#else
+	NULL,
+	NULL,
+	NULL,
+	NULL,			/* readdir */
+	NULL,
+	NULL,
+	NULL,
+	phone_open,
+	NULL,			/* flush */
+	NULL
+#endif
 };
 
 /*
- *	Board init functions
+ *    Board init functions
  */
- 
+
+#if LINUX_VERSION_CODE < 0x020400
+extern int ixj_init(void);
 
 /*
  *    Initialise Telephony for linux
  */
 
+int telephony_init(void)
+#else
 static int __init telephony_init(void)
+#endif
 {
 	printk(KERN_INFO "Linux telephony interface: v1.00\n");
 	if (register_chrdev(PHONE_MAJOR, "telephony", &phone_fops)) {
 		printk("phonedev: unable to get major %d\n", PHONE_MAJOR);
 		return -EIO;
 	}
-
+#if LINUX_VERSION_CODE < 0x020400
+	/*
+	 *    Init kernel installed drivers
+	 */
+#ifdef CONFIG_PHONE_IXJ
+	ixj_init();
+#endif
+#endif
 	return 0;
 }
 
+#ifdef MODULE
+#if LINUX_VERSION_CODE < 0x020400
+int init_module(void)
+{
+	return telephony_init();
+}
+
+void cleanup_module(void)
+#else
 static void __exit telephony_exit(void)
+#endif
 {
 	unregister_chrdev(PHONE_MAJOR, "telephony");
 }
 
+#endif
+
+#if LINUX_VERSION_CODE >= 0x020400
 module_init(telephony_init);
 module_exit(telephony_exit);
+#endif
 
 EXPORT_SYMBOL(phone_register_device);
 EXPORT_SYMBOL(phone_unregister_device);
#1 lore raw
Quoted 4 lines

phonedev.diff is against 2.4.4 and brings the file phonedev.c up to date with respect to the Quicknet CVS. Changes are very minor, mostly #if LINUX_VERSION_CODE matching and structure updates. Small off by one fixes and file operation semantics updates.

I intentionally dont keep back compat glue in the mainstream kernel

zip/code/VoIP/ixj/phonedev.c line 137

Quoted 6 lines
zip/code/VoIP/ixj/phonedev.c renamed from telephony/phonedev.c +1 -1
@@ -101,20 +134,25 @@
 
 	if (unit != PHONE_UNIT_ANY) {
 		base = unit;
-		end = unit + 1;  /* enter the loop at least one time */
+		end = unit;

This unfixes a bug too.

All rejected

author
#2 lore raw

Alrighty. That eliminates the patch. I'll rewrite the ixj.c according to this. ixj.c will be a large patch due to the numerous revisions, I don't know how well it can be broken up into small pieces. Do you want small pieces still? The ChangeLog shows all the fixes for the revisions. There have been 68 revisions since the version listed in the kernel's tree.

David

Quoted 17 lines · Alan Cox
Quoted 2 lines

phonedev.diff is against 2.4.4 and brings the file phonedev.c up to date with respect to the Quicknet CVS. Changes are very minor, mostly #if LINUX_VERSION_CODE matching and structure updates. Small off by one fixes and file operation semantics updates.

I intentionally dont keep back compat glue in the mainstream kernel

zip/code/VoIP/ixj/phonedev.c line 138

Quoted 7 lines
zip/code/VoIP/ixj/phonedev.c renamed from telephony/phonedev.c +1 -1
@@ -101,20 +134,25 @@
 
 	if (unit != PHONE_UNIT_ANY) {
 		base = unit;
-		end = unit + 1;  /* enter the loop at least one time */
+		end = unit;
 

This unfixes a bug too.

All rejected

#3 lore raw
Quoted 2 lines

Alrighty. That eliminates the patch. I'll rewrite the ixj.c according to this. ixj.c will be a large patch due to the numerous revisions, I

Im much less worried about having 2.2/2.4 version code in the ixj driver itself. Quicknet have to maintain that for 2.2/2.4 and I dont want to make their life that needlessly painful

Quoted 4 lines

don't know how well it can be broken up into small pieces. Do you want small pieces still? The ChangeLog shows all the fixes for the revisions. There have been 68 revisions since the version listed in the kernel's tree.

See what you can do - if its too hard we may just have to do it the hard way