tizen 2.3 release
[framework/system/deviced.git] / src / core / devices.c
1 /*
2  * deviced
3  *
4  * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19
20 #include <stdio.h>
21
22 #include "log.h"
23 #include "list.h"
24 #include "common.h"
25 #include "devices.h"
26
27 static const struct device_ops default_ops = {
28         .name = "default-ops",
29 };
30
31 static dd_list *dev_head;
32
33 void add_device(const struct device_ops *dev)
34 {
35         if (dev->priority == DEVICE_PRIORITY_HIGH)
36                 DD_LIST_PREPEND(dev_head, dev);
37         else
38                 DD_LIST_APPEND(dev_head, dev);
39 }
40
41 void remove_device(const struct device_ops *dev)
42 {
43         DD_LIST_REMOVE(dev_head, dev);
44 }
45
46 const struct device_ops *find_device(const char *name)
47 {
48         dd_list *elem;
49         const struct device_ops *dev;
50
51         DD_LIST_FOREACH(dev_head, elem, dev) {
52                 if (!strcmp(dev->name, name))
53                         return dev;
54         }
55
56         dev = &default_ops;
57         return dev;
58 }
59
60 int check_default(const struct device_ops *dev)
61 {
62         return (dev == &default_ops);
63 }
64
65 void devices_init(void *data)
66 {
67         dd_list *elem;
68         const struct device_ops *dev;
69
70         DD_LIST_FOREACH(dev_head, elem, dev) {
71                 _D("[%s] initialize", dev->name);
72                 if (dev->init)
73                         dev->init(data);
74         }
75 }
76
77 void devices_exit(void *data)
78 {
79         dd_list *elem;
80         const struct device_ops *dev;
81
82         DD_LIST_FOREACH(dev_head, elem, dev) {
83                 _D("[%s] deinitialize", dev->name);
84                 if (dev->exit)
85                         dev->exit(data);
86         }
87 }