patch-2.3.27 linux/drivers/char/ftape/lowlevel/ftape-proc.c
Next file: linux/drivers/char/ibmmpeg2.h
Previous file: linux/drivers/char/dsp56k.c
Back to the patch index
Back to the overall index
- Lines: 265
- Date:
Tue Nov 9 19:39:02 1999
- Orig file:
v2.3.26/linux/drivers/char/ftape/lowlevel/ftape-proc.c
- Orig date:
Tue Jul 6 19:16:55 1999
diff -u --recursive --new-file v2.3.26/linux/drivers/char/ftape/lowlevel/ftape-proc.c linux/drivers/char/ftape/lowlevel/ftape-proc.c
@@ -22,245 +22,25 @@
*
* This file contains the procfs interface for the
* QIC-40/80/3010/3020 floppy-tape driver "ftape" for Linux.
+
+ * Old code removed, switched to dynamic proc entry.
*/
#include <linux/config.h>
#if defined(CONFIG_PROC_FS) && defined(CONFIG_FT_PROC_FS)
-/* adding proc entries from inside a module is REALLY complicated
- * for pre-2.1.28 kernels. I don't want to care about it.
- */
-
#include <linux/proc_fs.h>
#include <linux/ftape.h>
-#if LINUX_VERSION_CODE <= KERNEL_VER(1,2,13) /* bail out */
-#error \
-Please disable CONFIG_FT_PROC_FS in "MCONFIG" or upgrade to a newer kernel!
-#endif
-#if LINUX_VERSION_CODE >= KERNEL_VER(2,1,16)
#include <linux/init.h>
-#else
-#define __initdata
-#define __initfunc(__arg) __arg
-#endif
#include <linux/qic117.h>
-
#include "../lowlevel/ftape-io.h"
#include "../lowlevel/ftape-ctl.h"
#include "../lowlevel/ftape-proc.h"
#include "../lowlevel/ftape-tracing.h"
-static int ftape_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data);
-
-#if LINUX_VERSION_CODE < KERNEL_VER(2,1,28)
-
-#include <asm/segment.h> /* for memcpy_tofs() */
-
-#if LINUX_VERSION_CODE >= KERNEL_VER(2,1,0)
-static long ftape_proc_read(struct inode* inode, struct file* file,
- char* buf, unsigned long count);
-#else
-static int ftape_proc_read(struct inode* inode, struct file* file,
- char* buf, int count);
-#endif
-
-#define FT_PROC_REGISTER(parent, child) proc_register_dynamic(parent, child)
-
-/*
- * Structures for interfacing with the /proc filesystem.
- * Router creates its own directory /proc/net/router with the folowing
- * entries:
- * config device configuration
- * status global device statistics
- * <device> entry for each WAN device
- */
-
-/*
- * Generic /proc/net/ftape/<file> file and inode operations
- */
-
-
-static struct file_operations ftape_proc_fops =
-{
- NULL, /* lseek */
- ftape_proc_read, /* read */
- NULL, /* write */
- NULL, /* readdir */
- NULL, /* select */
- NULL, /* ioctl */
- NULL, /* mmap */
- NULL, /* no special open code */
- NULL, /* flush */
- NULL, /* no special release code */
- NULL, /* can't fsync */
-};
-
-static struct inode_operations ftape_proc_inode_operations =
-{
- &ftape_proc_fops,
- NULL, /* create */
- NULL, /* lookup */
- NULL, /* link */
- NULL, /* unlink */
- NULL, /* symlink */
- NULL, /* mkdir */
- NULL, /* rmdir */
- NULL, /* mknod */
- NULL, /* rename */
- NULL, /* readlink */
- NULL, /* follow_link */
- NULL, /* get_block */
- NULL, /* readpage */
- NULL, /* writepage */
- NULL, /* flushpage */
- NULL, /* truncate */
- NULL, /* permission */
- NULL, /* smap */
- NULL, /* revalidate */
-};
-
-/*
- * Proc filesystem directory entries.
- */
-
-static int ftape_get_info(char *page, char **start, off_t off,
- int count, int dummy)
-{
- int dummy_eof;
-
- return ftape_read_proc(page, start, off, count, &dummy_eof, NULL);
-}
-
-static struct proc_dir_entry proc_ftape = {
- 0, /* low_ino */
- sizeof("ftape")-1, /* namelen */
- "ftape", /* name */
- S_IFREG | S_IRUGO, /* mode */
- 1, /* nlink */
- 0, /* uid */
- 0, /* gid */
- 0, /* size */
- &ftape_proc_inode_operations, /* ops */
- ftape_get_info, /* get_info */
- NULL, /* fill_inode */
- NULL, /* next */
- NULL, /* parent */
- NULL, /* subdir */
- NULL /* data */
-};
-
-/* Read ftape proc directory entry.
- */
-
-#define PROC_BLOCK_SIZE PAGE_SIZE
-
-#if LINUX_VERSION_CODE >= KERNEL_VER(2,1,0)
-static long ftape_proc_read(struct inode * inode, struct file * file,
- char * buf, unsigned long nbytes)
-#else
-static int ftape_proc_read(struct inode * inode, struct file * file,
- char * buf, int nbytes)
-#endif
-{
- char *page;
- int retval=0;
- int eof=0;
- int n, count;
- char *start;
- struct proc_dir_entry * dp;
-
- if (nbytes < 0)
- return -EINVAL;
- dp = (struct proc_dir_entry *) inode->u.generic_ip;
- if (!(page = (char*) __get_free_page(GFP_KERNEL)))
- return -ENOMEM;
-
- while ((nbytes > 0) && !eof)
- {
- count = PROC_BLOCK_SIZE <= nbytes ? PROC_BLOCK_SIZE : nbytes;
-
- start = NULL;
- if (dp->get_info) {
- /*
- * Handle backwards compatibility with the old net
- * routines.
- *
- * XXX What gives with the file->f_flags & O_ACCMODE
- * test? Seems stupid to me....
- */
- n = dp->get_info(page, &start, file->f_pos, count,
- (file->f_flags & O_ACCMODE) == O_RDWR);
- if (n < count)
- eof = 1;
- } else
- break;
-
- if (!start) {
- /*
- * For proc files that are less than 4k
- */
- start = page + file->f_pos;
- n -= file->f_pos;
- if (n <= 0)
- break;
- if (n > count)
- n = count;
- }
- if (n == 0)
- break; /* End of file */
- if (n < 0) {
- if (retval == 0)
- retval = n;
- break;
- }
-#if LINUX_VERSION_CODE > KERNEL_VER(2,1,3)
- copy_to_user(buf, start, n);
-#else
- memcpy_tofs(buf, start, n);
-#endif
- file->f_pos += n; /* Move down the file */
- nbytes -= n;
- buf += n;
- retval += n;
- }
- free_page((unsigned long) page);
- return retval;
-}
-
-#else /* LINUX_VERSION_CODE < KERNEL_VER(2,1,28) */
-
-#define FT_PROC_REGISTER(parent, child) proc_register(parent, child)
-
-/*
- * Proc filesystem directory entries.
- */
-
-static struct proc_dir_entry proc_ftape = {
- 0, /* low_ino */
- sizeof("ftape")-1, /* namelen */
- "ftape", /* name */
- S_IFREG | S_IRUGO, /* mode */
- 1, /* nlink */
- 0, /* uid */
- 0, /* gid */
- 0, /* size */
- NULL, /* ops */
- NULL, /* get_info */
- NULL, /* fill_inode */
- NULL, /* next */
- NULL, /* parent */
- NULL, /* subdir */
- NULL, /* data */
- ftape_read_proc, /* read_proc */
- NULL /* write_proc */
-};
-
-#endif
-
static size_t get_driver_info(char *buf)
{
const char *debug_level[] = { "bugs" ,
@@ -423,13 +203,14 @@
int __init ftape_proc_init(void)
{
- return FT_PROC_REGISTER(&proc_root, &proc_ftape);
+ return create_proc_read_entry("ftape", 0, &proc_root,
+ ftape_read_proc, NULL) != NULL;
}
#ifdef MODULE
void ftape_proc_destroy(void)
{
- proc_unregister(&proc_root, proc_ftape.low_ino);
+ remove_proc_entry("ftape", &proc_root);
}
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)