summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/mmapbus.c
blob: 30ca8c5dad1ace41c8c0311b82dd4d3d718c8c86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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");