From 7b559095361b683adf58cbca5299627049d42db9 Mon Sep 17 00:00:00 2001 From: Dongwoo Lee Date: Tue, 8 Feb 2022 19:38:52 +0900 Subject: [PATCH] util: resource: Bypass checking device for virtual device Change-Id: I07076a0549130d452d82e611011389bd58843d88 Signed-off-by: Dongwoo Lee --- include/util/resource.h | 4 ++++ src/util/resource.c | 25 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/include/util/resource.h b/include/util/resource.h index 107c194..c996f7d 100644 --- a/include/util/resource.h +++ b/include/util/resource.h @@ -70,9 +70,13 @@ struct resource_driver_ops { void (*exit)(struct resource *res); }; +/* resource driver flags */ +#define RESOURCE_DRIVER_NO_DEVICE BIT32(1) + struct resource_driver { const char *name; const int type; + const int flags; const int num_attrs; const struct resource_attribute *attrs; const struct resource_driver_ops ops; diff --git a/src/util/resource.c b/src/util/resource.c index 7895213..c71c10b 100644 --- a/src/util/resource.c +++ b/src/util/resource.c @@ -169,21 +169,32 @@ struct resource *create_resource(int resource_type, int resource_index, struct resource *resource = NULL; int i, ret; - device = find_resource_device(resource_type, resource_index); - if (!device) - return NULL; - driver = find_resource_driver(resource_type); if (!driver) return NULL; + if (!(driver->flags & RESOURCE_DRIVER_NO_DEVICE)) { + device = find_resource_device(resource_type, resource_index); + if (!device) { + _E("Not available resource: type: %d, index: %d\n", + resource_type, resource_index); + return NULL; + } + } + resource = calloc(1, sizeof(*resource)); if (!resource) return NULL; - resource->type = device->type; - resource->name = g_strdup(device->name); - resource->index = device->index; + if (device) { + resource->type = device->type; + resource->name = g_strdup(device->name); + resource->index = device->index; + } else { + resource->type = resource_type; + resource->name = g_strdup(driver->name); + resource->index = resource_index; + } resource->user_data = user_data; resource->num_attrs = driver->num_attrs; resource->attrs = driver->attrs; -- 2.7.4