at v2.6.26 131 lines 3.2 kB view raw
1/* 2 * net/9p/9p.c 3 * 4 * 9P entry point 5 * 6 * Copyright (C) 2007 by Latchesar Ionkov <lucho@ionkov.net> 7 * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com> 8 * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 12 * as published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to: 21 * Free Software Foundation 22 * 51 Franklin Street, Fifth Floor 23 * Boston, MA 02111-1301 USA 24 * 25 */ 26 27#include <linux/module.h> 28#include <linux/moduleparam.h> 29#include <net/9p/9p.h> 30#include <linux/fs.h> 31#include <linux/parser.h> 32#include <net/9p/transport.h> 33#include <linux/list.h> 34 35#ifdef CONFIG_NET_9P_DEBUG 36unsigned int p9_debug_level = 0; /* feature-rific global debug level */ 37EXPORT_SYMBOL(p9_debug_level); 38module_param_named(debug, p9_debug_level, uint, 0); 39MODULE_PARM_DESC(debug, "9P debugging level"); 40#endif 41 42/* 43 * Dynamic Transport Registration Routines 44 * 45 */ 46 47static LIST_HEAD(v9fs_trans_list); 48static struct p9_trans_module *v9fs_default_transport; 49 50/** 51 * v9fs_register_trans - register a new transport with 9p 52 * @m: structure describing the transport module and entry points 53 * 54 */ 55void v9fs_register_trans(struct p9_trans_module *m) 56{ 57 list_add_tail(&m->list, &v9fs_trans_list); 58 if (m->def) 59 v9fs_default_transport = m; 60} 61EXPORT_SYMBOL(v9fs_register_trans); 62 63/** 64 * v9fs_match_trans - match transport versus registered transports 65 * @name: string identifying transport 66 * 67 */ 68struct p9_trans_module *v9fs_match_trans(const substring_t *name) 69{ 70 struct list_head *p; 71 struct p9_trans_module *t = NULL; 72 73 list_for_each(p, &v9fs_trans_list) { 74 t = list_entry(p, struct p9_trans_module, list); 75 if (strncmp(t->name, name->from, name->to-name->from) == 0) 76 return t; 77 } 78 return NULL; 79} 80EXPORT_SYMBOL(v9fs_match_trans); 81 82/** 83 * v9fs_default_trans - returns pointer to default transport 84 * 85 */ 86 87struct p9_trans_module *v9fs_default_trans(void) 88{ 89 if (v9fs_default_transport) 90 return v9fs_default_transport; 91 else if (!list_empty(&v9fs_trans_list)) 92 return list_first_entry(&v9fs_trans_list, 93 struct p9_trans_module, list); 94 else 95 return NULL; 96} 97EXPORT_SYMBOL(v9fs_default_trans); 98 99 100/** 101 * v9fs_init - Initialize module 102 * 103 */ 104static int __init init_p9(void) 105{ 106 int ret = 0; 107 108 p9_error_init(); 109 printk(KERN_INFO "Installing 9P2000 support\n"); 110 p9_trans_fd_init(); 111 112 return ret; 113} 114 115/** 116 * v9fs_init - shutdown module 117 * 118 */ 119 120static void __exit exit_p9(void) 121{ 122 printk(KERN_INFO "Unloading 9P2000 support\n"); 123} 124 125module_init(init_p9) 126module_exit(exit_p9) 127 128MODULE_AUTHOR("Latchesar Ionkov <lucho@ionkov.net>"); 129MODULE_AUTHOR("Eric Van Hensbergen <ericvh@gmail.com>"); 130MODULE_AUTHOR("Ron Minnich <rminnich@lanl.gov>"); 131MODULE_LICENSE("GPL");