3
* @brief Most common stuff for block, char and other devices
5
* @author Denis Deryugin <deryugin.denis@gmail.com>
13
#include <drivers/device.h>
15
#include <mem/misc/pool.h>
17
POOL_DEF(dev_module_pool, struct dev_module, MAX_DEV_MODULE_COUNT);
20
* @brief Initialize device module with given parameters
22
* @param dev Device driver to which dev module would be realted
23
* @param name How device should be introduced in devfs
24
* @param privdata Pointer to block_dev, char_dev and so on
26
* @return Initialized device module
28
struct dev_module *dev_module_init(struct dev_module *devmod, const char *name,
29
const struct idesc_ops *dev_iops, void *privdata) {
34
memset(devmod, 0, sizeof(*devmod));
36
strncpy(devmod->name, name, DEV_NAME_LEN);
37
devmod->name[DEV_NAME_LEN - 1] = '\0';
38
devmod->dev_iops = dev_iops;
39
devmod->dev_priv = privdata;
41
devfs_notify_new_module(devmod);
47
* @brief Alloc and initialize device module with given parameters
49
* @param dev Device driver to which dev module would be realted
50
* @param name How device should be introduced in devfs
51
* @param privdata Pointer to block_dev, char_dev and so on
53
* @return Allocated device module or NULL if failed
55
struct dev_module *dev_module_create(const char *name,
56
const struct idesc_ops *dev_iops, void *privdata) {
57
struct dev_module *devmod;
59
devmod = pool_alloc(&dev_module_pool);
64
return dev_module_init(devmod, name, dev_iops, privdata);
68
* @brief Free system resources related to given device module
70
* @param dev Given device module
72
* @return Zero or negative error number if failed
74
int dev_module_deinit(struct dev_module *dev) {
75
devfs_notify_del_module(dev);
81
* @brief Free system resources related to given device module
83
* @param dev Given device module
85
* @return Zero or negative error number if failed
87
int dev_module_destroy(struct dev_module *dev) {
88
dev_module_deinit(dev);
89
pool_free(&dev_module_pool, dev);