embox

Форк
0
/
device.c 
92 строки · 2.2 Кб
1
/**
2
 * @file device.c
3
 * @brief Most common stuff for block, char and other devices
4
 * 
5
 * @author Denis Deryugin <deryugin.denis@gmail.com>
6
 * @date 2015-11-03
7
 */
8

9
#include <assert.h>
10
#include <stddef.h>
11
#include <string.h>
12

13
#include <drivers/device.h>
14

15
#include <mem/misc/pool.h>
16

17
POOL_DEF(dev_module_pool, struct dev_module, MAX_DEV_MODULE_COUNT);
18

19
/**
20
 * @brief Initialize device module with given parameters
21
 *
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
25
 *
26
 * @return Initialized device module
27
 */
28
struct dev_module *dev_module_init(struct dev_module *devmod, const char *name,
29
    const struct idesc_ops *dev_iops, void *privdata) {
30
	assert(devmod);
31
	assert(dev_iops);
32
	assert(name);
33

34
	memset(devmod, 0, sizeof(*devmod));
35

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;
40

41
	devfs_notify_new_module(devmod);
42

43
	return devmod;
44
}
45

46
/**
47
 * @brief Alloc and initialize device module with given parameters
48
 *
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
52
 *
53
 * @return Allocated device module or NULL if failed
54
 */
55
struct dev_module *dev_module_create(const char *name,
56
    const struct idesc_ops *dev_iops, void *privdata) {
57
	struct dev_module *devmod;
58

59
	devmod = pool_alloc(&dev_module_pool);
60
	if (devmod == NULL) {
61
		return NULL;
62
	}
63

64
	return dev_module_init(devmod, name, dev_iops, privdata);
65
}
66

67
/**
68
 * @brief Free system resources related to given device module
69
 *
70
 * @param dev Given device module
71
 *
72
 * @return Zero or negative error number if failed
73
 */
74
int dev_module_deinit(struct dev_module *dev) {
75
	devfs_notify_del_module(dev);
76

77
	return 0;
78
}
79

80
/**
81
 * @brief Free system resources related to given device module
82
 *
83
 * @param dev Given device module
84
 *
85
 * @return Zero or negative error number if failed
86
 */
87
int dev_module_destroy(struct dev_module *dev) {
88
	dev_module_deinit(dev);
89
	pool_free(&dev_module_pool, dev);
90

91
	return 0;
92
}
93

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.