[Bluetooth] Track status of Simple Pairing mode
[pandora-kernel.git] / net / 9p / mod.c
index 4f9e1d2..bdee1fb 100644 (file)
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <net/9p/9p.h>
+#include <linux/fs.h>
+#include <linux/parser.h>
+#include <net/9p/transport.h>
+#include <linux/list.h>
 
 #ifdef CONFIG_NET_9P_DEBUG
 unsigned int p9_debug_level = 0;       /* feature-rific global debug level  */
@@ -35,10 +39,63 @@ module_param_named(debug, p9_debug_level, uint, 0);
 MODULE_PARM_DESC(debug, "9P debugging level");
 #endif
 
-extern int p9_mux_global_init(void);
-extern void p9_mux_global_exit(void);
-extern int p9_sysctl_register(void);
-extern void p9_sysctl_unregister(void);
+/*
+ * Dynamic Transport Registration Routines
+ *
+ */
+
+static LIST_HEAD(v9fs_trans_list);
+static struct p9_trans_module *v9fs_default_transport;
+
+/**
+ * v9fs_register_trans - register a new transport with 9p
+ * @m: structure describing the transport module and entry points
+ *
+ */
+void v9fs_register_trans(struct p9_trans_module *m)
+{
+       list_add_tail(&m->list, &v9fs_trans_list);
+       if (m->def)
+               v9fs_default_transport = m;
+}
+EXPORT_SYMBOL(v9fs_register_trans);
+
+/**
+ * v9fs_match_trans - match transport versus registered transports
+ * @name: string identifying transport
+ *
+ */
+struct p9_trans_module *v9fs_match_trans(const substring_t *name)
+{
+       struct list_head *p;
+       struct p9_trans_module *t = NULL;
+
+       list_for_each(p, &v9fs_trans_list) {
+               t = list_entry(p, struct p9_trans_module, list);
+               if (strncmp(t->name, name->from, name->to-name->from) == 0)
+                       return t;
+       }
+       return NULL;
+}
+EXPORT_SYMBOL(v9fs_match_trans);
+
+/**
+ * v9fs_default_trans - returns pointer to default transport
+ *
+ */
+
+struct p9_trans_module *v9fs_default_trans(void)
+{
+       if (v9fs_default_transport)
+               return v9fs_default_transport;
+       else if (!list_empty(&v9fs_trans_list))
+               return list_first_entry(&v9fs_trans_list,
+                                       struct p9_trans_module, list);
+       else
+               return NULL;
+}
+EXPORT_SYMBOL(v9fs_default_trans);
+
 
 /**
  * v9fs_init - Initialize module
@@ -46,21 +103,11 @@ extern void p9_sysctl_unregister(void);
  */
 static int __init init_p9(void)
 {
-       int ret;
+       int ret = 0;
 
        p9_error_init();
        printk(KERN_INFO "Installing 9P2000 support\n");
-       ret = p9_mux_global_init();
-       if (ret) {
-               printk(KERN_WARNING "9p: starting mux failed\n");
-               return ret;
-       }
-
-       ret = p9_sysctl_register();
-       if (ret) {
-               printk(KERN_WARNING "9p: registering sysctl failed\n");
-               return ret;
-       }
+       p9_trans_fd_init();
 
        return ret;
 }
@@ -72,8 +119,7 @@ static int __init init_p9(void)
 
 static void __exit exit_p9(void)
 {
-       p9_sysctl_unregister();
-       p9_mux_global_exit();
+       printk(KERN_INFO "Unloading 9P2000 support\n");
 }
 
 module_init(init_p9)