|  | /********************************************************************* | 
|  | * | 
|  | * Filename:      irproc.c | 
|  | * Version:       1.0 | 
|  | * Description:   Various entries in the /proc file system | 
|  | * Status:        Experimental. | 
|  | * Author:        Thomas Davis, <ratbert@radiks.net> | 
|  | * Created at:    Sat Feb 21 21:33:24 1998 | 
|  | * Modified at:   Sun Nov 14 08:54:54 1999 | 
|  | * Modified by:   Dag Brattli <dagb@cs.uit.no> | 
|  | * | 
|  | *     Copyright (c) 1998-1999, Dag Brattli <dagb@cs.uit.no> | 
|  | *     Copyright (c) 1998, Thomas Davis, <ratbert@radiks.net>, | 
|  | *     All Rights Reserved. | 
|  | * | 
|  | *     This program is free software; you can redistribute it and/or | 
|  | *     modify it under the terms of the GNU General Public License as | 
|  | *     published by the Free Software Foundation; either version 2 of | 
|  | *     the License, or (at your option) any later version. | 
|  | * | 
|  | *     I, Thomas Davis, provide no warranty for any of this software. | 
|  | *     This material is provided "AS-IS" and at no charge. | 
|  | * | 
|  | ********************************************************************/ | 
|  |  | 
|  | #include <linux/miscdevice.h> | 
|  | #include <linux/proc_fs.h> | 
|  | #include <linux/seq_file.h> | 
|  | #include <linux/module.h> | 
|  | #include <linux/init.h> | 
|  |  | 
|  | #include <net/irda/irda.h> | 
|  | #include <net/irda/irlap.h> | 
|  | #include <net/irda/irlmp.h> | 
|  |  | 
|  | extern struct file_operations discovery_seq_fops; | 
|  | extern struct file_operations irlap_seq_fops; | 
|  | extern struct file_operations irlmp_seq_fops; | 
|  | extern struct file_operations irttp_seq_fops; | 
|  | extern struct file_operations irias_seq_fops; | 
|  |  | 
|  | struct irda_entry { | 
|  | const char *name; | 
|  | struct file_operations *fops; | 
|  | }; | 
|  |  | 
|  | struct proc_dir_entry *proc_irda; | 
|  | EXPORT_SYMBOL(proc_irda); | 
|  |  | 
|  | static struct irda_entry irda_dirs[] = { | 
|  | {"discovery",	&discovery_seq_fops}, | 
|  | {"irttp",	&irttp_seq_fops}, | 
|  | {"irlmp",	&irlmp_seq_fops}, | 
|  | {"irlap",	&irlap_seq_fops}, | 
|  | {"irias",	&irias_seq_fops}, | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Function irda_proc_register (void) | 
|  | * | 
|  | *    Register irda entry in /proc file system | 
|  | * | 
|  | */ | 
|  | void __init irda_proc_register(void) | 
|  | { | 
|  | int i; | 
|  | struct proc_dir_entry *d; | 
|  |  | 
|  | proc_irda = proc_mkdir("irda", proc_net); | 
|  | if (proc_irda == NULL) | 
|  | return; | 
|  | proc_irda->owner = THIS_MODULE; | 
|  |  | 
|  | for (i=0; i<ARRAY_SIZE(irda_dirs); i++) { | 
|  | d = create_proc_entry(irda_dirs[i].name, 0, proc_irda); | 
|  | if (d) | 
|  | d->proc_fops = irda_dirs[i].fops; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Function irda_proc_unregister (void) | 
|  | * | 
|  | *    Unregister irda entry in /proc file system | 
|  | * | 
|  | */ | 
|  | void __exit irda_proc_unregister(void) | 
|  | { | 
|  | int i; | 
|  |  | 
|  | if (proc_irda) { | 
|  | for (i=0; i<ARRAY_SIZE(irda_dirs); i++) | 
|  | remove_proc_entry(irda_dirs[i].name, proc_irda); | 
|  |  | 
|  | remove_proc_entry("irda", proc_net); | 
|  | proc_irda = NULL; | 
|  | } | 
|  | } | 
|  |  | 
|  |  |