DEVICE_OPS_STATUS_MAX,
};
+struct resource_device {
+ char *name;
+ int type;
+
+ /*
+ * Never initialize it by user of add_resource_device().
+ * It will be initialized by add_resource_device function automatically.
+ */
+ int index;
+};
+
#define DEVICE_OPS_REGISTER(dev) \
static void __CONSTRUCTOR__ module_init(void) \
{ \
remove_device(dev); \
}
+int get_resource_device_count(int resource_type);
+const struct resource_device *find_resource_device(int resource_type, int resource_index);
+int add_resource_device(struct resource_device *resource_device);
+void remove_resource_device(struct resource_device *resource_device);
+
void init_devices(void *data);
void exit_devices(void *data);
void add_device(const struct device_ops *dev);
u_int64_t attr_supported;
};
-struct resource_device {
- char *name;
- int type;
-
- /*
- * Never initialize it by user of add_resource_device().
- * It will be initialized by add_resource_device function automatically.
- */
- int index;
-};
-
#define RESOURCE_DRIVER_REGISTER(resource_driver) \
static void __CONSTRUCTOR__ module_init(void) \
{ \
}
/* Add/remove resource driver and device */
+const struct resource_driver *find_resource_driver(int resource_type);
void add_resource_driver(const struct resource_driver *resource_driver);
void remove_resource_driver(const struct resource_driver *resource_driver);
-int get_resource_device_count_all(void);
-int get_resource_device_count(int resource_type);
-const struct resource_device *find_resource_device(int resource_type, int resource_index);
-int add_resource_device(struct resource_device *resource_device);
-void remove_resource_device(struct resource_device *resource_device);
-
/* Create/delete resource instance */
int create_resource(struct resource **res, int resource_type);
void delete_resource(struct resource *resource);
#include <glib.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <util/thread.h>
return 0;
}
+static int get_resource_count(int resource_type)
+{
+ const struct resource_driver *driver;
+ int count = get_resource_device_count(resource_type);
+
+ if (count > 0)
+ return count;
+
+ driver = find_resource_driver(resource_type);
+ if (!driver)
+ return -EINVAL;
+
+ if (driver->flag & RESOURCE_FLAG_COUNT_ONLY_ONE)
+ return 1;
+ else if (driver->flag & RESOURCE_FLAG_PROCESS)
+ return -EINVAL;
+
+ return 0;
+}
+
static int handle_request_get_resource_count(struct request_client *client, char *args, int *value)
{
int resource_type;
*/
resource_type = atoi(args);
- ret = get_resource_device_count(resource_type);
+ ret = get_resource_count(resource_type);
if (ret < 0) {
_E("failed to get resource device count, res:type(%d)\n", resource_type);
return ret;
#include <hal/hal-power.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <hal/hal-power.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <glib.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <unistd.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <util/gdbus-util.h>
#include <hal/hal-power.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <glib.h>
#include <util/common.h>
+#include <util/devices.h>
#include <util/log.h>
#include <util/resource.h>
#include <util/log.h>
static GList *dev_head;
+static GList *g_resource_device_head;
+
+int get_resource_device_count(int resource_type)
+{
+ GList *node;
+ struct resource_device *device;
+ int count = 0;
+
+ for (node = g_resource_device_head; node != NULL; node = node->next) {
+ device = node->data;
+ if (device->type == resource_type)
+ count++;
+ }
+
+ return count;
+}
+
+const struct resource_device *find_resource_device(int resource_type,
+ int resource_index)
+{
+ GList *node;
+ const struct resource_device *device;
+
+ for (node = g_resource_device_head; node != NULL; node = node->next) {
+ device = node->data;
+ if (device->type == resource_type &&
+ device->index == resource_index)
+ return device;
+ }
+
+ return NULL;
+}
+
+int add_resource_device(struct resource_device *device)
+{
+ int count;
+
+ if (!device)
+ return -EINVAL;
+
+ count = get_resource_device_count(device->type);
+ if (count < 0)
+ return count;
+
+ device->index = count;
+
+ g_resource_device_head =
+ g_list_append(g_resource_device_head, (gpointer)device);
+
+ return 0;
+}
+
+void remove_resource_device(struct resource_device *device)
+{
+ if (!device)
+ return;
+
+ g_resource_device_head =
+ g_list_remove(g_resource_device_head, (gpointer)device);
+}
void add_device(const struct device_ops *dev)
{
#define RESOURCE_CTRL_INDEX(id) BIT64_INDEX(id)
static GList *g_resource_driver_head;
-static GList *g_resource_device_head;
static gint __compare_resource_type(gconstpointer data, gconstpointer input)
{
return -1;
}
-static const struct resource_driver *find_resource_driver(int resource_type)
+const struct resource_driver *find_resource_driver(int resource_type)
{
GList *node;
g_list_remove(g_resource_driver_head, (gpointer)driver);
}
-int get_resource_device_count_all(void)
-{
- return g_list_length(g_resource_device_head);
-}
-
-int get_resource_device_count(int resource_type)
-{
- GList *node;
- struct resource_device *device;
- const struct resource_driver *driver;
- int count = 0;
-
- for (node = g_resource_device_head; node != NULL; node = node->next) {
- device = node->data;
- if (device->type == resource_type)
- count++;
- }
-
- if (count > 0)
- return count;
-
- driver = find_resource_driver(resource_type);
- if (!driver)
- return -EINVAL;
-
- if (driver->flag & RESOURCE_FLAG_COUNT_ONLY_ONE)
- return 1;
- else if (driver->flag & RESOURCE_FLAG_PROCESS)
- return -EINVAL;
-
- return 0;
-}
-
-const struct resource_device *find_resource_device(int resource_type,
- int resource_index)
-{
- GList *node;
- const struct resource_device *device;
-
- for (node = g_resource_device_head; node != NULL; node = node->next) {
- device = node->data;
- if (device->type == resource_type &&
- device->index == resource_index)
- return device;
- }
-
- return NULL;
-}
-
-int add_resource_device(struct resource_device *device)
-{
- int count;
-
- if (!device)
- return -EINVAL;
-
- count = get_resource_device_count(device->type);
- if (count < 0)
- return count;
-
- device->index = count;
-
- g_resource_device_head =
- g_list_append(g_resource_device_head, (gpointer)device);
-
- return 0;
-}
-
-void remove_resource_device(struct resource_device *device)
-{
- if (!device)
- return;
-
- g_resource_device_head =
- g_list_remove(g_resource_device_head, (gpointer)device);
-}
-
static void do_delete_resource(struct resource *resource)
{
if (!resource->name)