summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/mmapbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/xpp/mmapbus.c')
-rw-r--r--drivers/dahdi/xpp/mmapbus.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/drivers/dahdi/xpp/mmapbus.c b/drivers/dahdi/xpp/mmapbus.c
new file mode 100644
index 0000000..30ca8c5
--- /dev/null
+++ b/drivers/dahdi/xpp/mmapbus.c
@@ -0,0 +1,91 @@
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/device.h>
+#include "mmapbus.h"
+
+static int mmap_match(struct device *dev, struct device_driver *driver)
+{
+ return !strncmp(dev->bus_id, driver->name, strlen(driver->name));
+}
+static int mmap_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+{
+ envp[0] = buffer;
+ envp[1] = NULL;
+ return 0;
+}
+
+static void mmap_bus_release(struct device *dev)
+{
+}
+
+static void mmap_dev_release(struct device *dev)
+{
+}
+
+static struct bus_type mmap_bus_type = {
+ .name = "mmap",
+ .match = mmap_match,
+ .uevent = mmap_uevent,
+};
+
+static struct device mmap_bus = {
+ .bus_id = "mmap0",
+ .release = mmap_bus_release,
+};
+
+
+
+int register_mmap_device(struct mmap_device *dev)
+{
+ dev->dev.bus = &mmap_bus_type;
+ dev->dev.parent = &mmap_bus;
+ dev->dev.release = mmap_dev_release;
+ strncpy(dev->dev.bus_id, dev->name, BUS_ID_SIZE);
+ return device_register(&dev->dev);
+}
+
+void unregister_mmap_device(struct mmap_device *dev)
+{
+ device_unregister(&dev->dev);
+}
+EXPORT_SYMBOL(register_mmap_device);
+EXPORT_SYMBOL(unregister_mmap_device);
+
+int register_mmap_driver(struct mmap_driver *driver)
+{
+ driver->driver.bus = &mmap_bus_type;
+ return driver_register(&driver->driver);
+}
+
+void unregister_mmap_driver(struct mmap_driver *driver)
+{
+ driver_unregister(&driver->driver);
+}
+EXPORT_SYMBOL(register_mmap_driver);
+EXPORT_SYMBOL(unregister_mmap_driver);
+
+int register_mmap_bus(void)
+{
+ int ret = 0;
+ if ((ret = bus_register(&mmap_bus_type)) < 0)
+ goto bus_type_reg;
+ if ((ret = device_register(&mmap_bus)) < 0)
+ goto bus_reg;
+ return ret;
+
+bus_reg:
+ bus_unregister(&mmap_bus_type);
+bus_type_reg:
+ return ret;
+}
+
+void unregister_mmap_bus(void)
+{
+ device_unregister(&mmap_bus);
+ bus_unregister(&mmap_bus_type);
+}
+EXPORT_SYMBOL(register_mmap_bus);
+EXPORT_SYMBOL(unregister_mmap_bus);
+
+MODULE_AUTHOR("Alexander Landau <landau.alex@gmail.com>");
+MODULE_LICENSE("GPL");