diff options
Diffstat (limited to 'net-misc/zaptel/files/zaptel-1.0.10-devfs26.diff')
-rw-r--r-- | net-misc/zaptel/files/zaptel-1.0.10-devfs26.diff | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/net-misc/zaptel/files/zaptel-1.0.10-devfs26.diff b/net-misc/zaptel/files/zaptel-1.0.10-devfs26.diff new file mode 100644 index 000000000000..9b62e69764c1 --- /dev/null +++ b/net-misc/zaptel/files/zaptel-1.0.10-devfs26.diff @@ -0,0 +1,220 @@ +--- zaptel-1.0.10/zaptel.c.orig 2005-09-02 22:27:45.000000000 +0200 ++++ zaptel-1.0.10/zaptel.c 2005-11-22 19:25:39.000000000 +0100 +@@ -148,12 +148,14 @@ + + /* Here are a couple important little additions for devfs */ + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + static devfs_handle_t zaptel_devfs_dir; + static devfs_handle_t channel; + static devfs_handle_t pseudo; + static devfs_handle_t ctl; + static devfs_handle_t timer; + #endif ++#endif + + /* udev necessary data structures. Yeah! */ + #ifdef CONFIG_ZAP_UDEV +@@ -1123,6 +1125,7 @@ + } + + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + static devfs_handle_t register_devfs_channel(struct zt_chan *chan, devfs_handle_t dir) + { + char path[100]; +@@ -1165,6 +1168,36 @@ + + return chan_dev; + } ++#else ++static dev_t register_devfs_channel(struct zt_chan *chan, dev_t dir) ++{ ++#ifdef HAS_DEVFS_MK_SYMLINK ++ char link[100]; ++ char path[100]; ++#endif ++ dev_t chan_dev; ++ umode_t mode = S_IFCHR|S_IRUGO|S_IWUGO; ++ ++ /* create /dev/zap/span%d/%d channel device node */ ++ if ((chan_dev = devfs_mk_cdev(MKDEV(ZT_MAJOR, chan->channo), mode, "zap/span%d/%d", dir, chan->chanpos)) < 0) { ++ printk("zaptel: Something really bad happened. Unable to register devfs entry\n"); ++ return 0; ++ } ++ ++#ifdef HAS_DEVFS_MK_SYMLINK ++ /* link /dev/zap/span%d/%d -> /dev/zap/%d ?!? */ ++ sprintf(path, "zap/span%d/%d", dir, chan->chanpos); ++ sprintf(link, "zap/%d", chan->channo); ++ devfs_mk_symlink(link, path); ++#else ++ /* register /dev/zap/%d channel node directly */ ++ if(devfs_mk_cdev(MKDEV(ZT_MAJOR, chan->channo), mode, "zap/%d", chan->channo) < 0) { ++ printk("zaptel: Unable to register compat devfs entry\n"); ++ } ++#endif ++ return chan_dev; ++} ++#endif + #endif /* CONFIG_DEVFS_FS */ + + static int zt_chan_reg(struct zt_chan *chan) +@@ -4404,6 +4437,7 @@ + #endif + + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + { + char span_name[50]; + sprintf(span_name, "span%d", span->spanno); +@@ -4413,6 +4447,15 @@ + chan->fhandle = register_devfs_channel(chan, chan->span->dhandle); /* Register our stuff with devfs */ + } + } ++#else ++ { ++ devfs_mk_dir("zap/span%d", span->spanno); ++ for (x = 0; x < span->channels; x++) { ++ struct zt_chan *chan = &span->chans[x]; ++ register_devfs_channel(chan, span->spanno); /* Register our stuff with devfs */ ++ } ++ } ++#endif + #endif /* CONFIG_DEVFS_FS */ + + #ifdef CONFIG_ZAP_UDEV +@@ -4460,11 +4503,22 @@ + remove_proc_entry(tempfile, NULL); + #endif /* CONFIG_PROC_FS */ + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + for (x = 0; x < span->channels; x++) { + devfs_unregister(span->chans[x].fhandle); + devfs_unregister(span->chans[x].fhandle_symlink); + } + devfs_unregister(span->dhandle); ++#else ++ for (x = 0; x < span->channels; x++) { ++ /* remove symlink/compat device first */ ++ devfs_remove("zap/%d", span->chans[x].channo); ++ /* remove channel device */ ++ devfs_remove("zap/span%d/%d", span->spanno, span->chans[x].chanpos); ++ } ++ /* remove span dir */ ++ devfs_remove("zap/span%d", span->spanno); ++#endif + #endif /* CONFIG_DEVFS_FS */ + + #ifdef CONFIG_ZAP_UDEV +@@ -6452,6 +6506,7 @@ + #endif /* CONFIG_ZAP_UDEV */ + + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + { + umode_t mode = S_IFCHR|S_IRUGO|S_IWUGO; + devfs_register_chrdev(ZT_MAJOR, "zaptel", &zt_fops); +@@ -6463,6 +6518,22 @@ + ctl = devfs_register(zaptel_devfs_dir, "ctl", DEVFS_FL_DEFAULT, ZT_MAJOR, 0, mode, &zt_fops, NULL); + } + #else ++ { ++ umode_t mode = S_IFCHR|S_IRUGO|S_IWUGO; ++ if ((res = register_chrdev(ZT_MAJOR, "zaptel", &zt_fops)) < 0) { ++ printk(KERN_ERR "Unable to register for device on %d, error: %d\n", ZT_MAJOR, res); ++ return res; ++ } ++ ++ devfs_mk_dir("zap"); ++ ++ devfs_mk_cdev(MKDEV(ZT_MAJOR, 253), mode, "zap/timer"); ++ devfs_mk_cdev(MKDEV(ZT_MAJOR, 254), mode, "zap/channel"); ++ devfs_mk_cdev(MKDEV(ZT_MAJOR, 255), mode, "zap/pseudo"); ++ devfs_mk_cdev(MKDEV(ZT_MAJOR, 0), mode, "zap/ctl"); ++ } ++#endif ++#else + if ((res = register_chrdev(ZT_MAJOR, "zaptel", &zt_fops))) { + printk(KERN_ERR "Unable to register tor device on %d\n", ZT_MAJOR); + return res; +@@ -6493,6 +6564,7 @@ + if (tone_zones[x]) + kfree(tone_zones[x]); + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + devfs_unregister(timer); + devfs_unregister(channel); + devfs_unregister(pseudo); +@@ -6508,6 +6580,16 @@ + class_destroy(zap_class); + #endif /* CONFIG_ZAP_UDEV */ + unregister_chrdev(ZT_MAJOR, "zaptel"); ++ ++ devfs_remove("zap/timer"); ++ devfs_remove("zap/ctl"); ++ devfs_remove("zap/pseudo"); ++ devfs_remove("zap/channel"); ++ ++ devfs_remove("zap"); ++#endif ++#else ++ unregister_chrdev(ZT_MAJOR, "zaptel"); + #endif + #ifdef CONFIG_ZAPTEL_WATCHDOG + watchdog_cleanup(); +--- zaptel-1.0.10/zaptel.h.orig 2005-11-15 15:28:44.000000000 +0100 ++++ zaptel-1.0.10/zaptel.h 2005-11-22 19:25:39.000000000 +0100 +@@ -52,18 +52,17 @@ + #define zap_pci_module pci_register_driver + #else + #define zap_pci_module pci_module_init ++/* devfs_mk_symlink has been removed in 2.6.10 */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) ++#define HAS_DEVFS_MK_SYMLINK ++#endif + #endif + + #include "ecdis.h" + #include "fasthdlc.h" + #endif + #ifdef CONFIG_DEVFS_FS +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + #include <linux/devfs_fs_kernel.h> +-#else +-#undef CONFIG_DEVFS_FS +-//#warning "Zaptel doesn't support DEVFS in post 2.4 kernels. Disabling DEVFS in zaptel" +-#endif + #endif /* CONFIG_DEVFS_FS */ + #include <linux/ioctl.h> + +@@ -71,6 +70,8 @@ + #define ELAST 500 + #endif + ++ ++ + /* Per-span configuration values */ + #define ZT_CONFIG_TXLEVEL 7 /* bits 0-2 are tx level */ + +@@ -1153,8 +1154,10 @@ + #endif + + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + devfs_handle_t fhandle; /* File handle in devfs for the channel */ + devfs_handle_t fhandle_symlink; ++#endif + #endif /* CONFIG_DEVFS_FS */ + }; + +@@ -1290,7 +1293,9 @@ + int lastalarms; /* Previous alarms */ + + #ifdef CONFIG_DEVFS_FS ++#ifndef LINUX26 + devfs_handle_t dhandle; /* Directory name */ ++#endif + #endif + /* If the watchdog detects no received data, it will call the + watchdog routine */ |