From: Greg Kroah-Hartman Date: Fri, 12 Dec 2014 22:10:16 +0000 (-0500) Subject: greybus: bundle: rename interface.[c|h] to bundle.[c|h] X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=3bdec69931d889f2ee5dccafbc8cee6a364bb249;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git greybus: bundle: rename interface.[c|h] to bundle.[c|h] We are renameing the "interface" term to "bundle" so rename the files before we start changing structure names to make it easier for people to see what really is happening in the changes. Signed-off-by: Greg Kroah-Hartman Reviewed-by: Alex Elder --- diff --git a/drivers/staging/greybus/Makefile b/drivers/staging/greybus/Makefile index 29aa4d665877..08cdaf1affb8 100644 --- a/drivers/staging/greybus/Makefile +++ b/drivers/staging/greybus/Makefile @@ -3,7 +3,7 @@ greybus-y := core.o \ ap.o \ manifest.o \ interface_block.o \ - interface.o \ + bundle.o \ connection.o \ protocol.o \ operation.o \ diff --git a/drivers/staging/greybus/bundle.c b/drivers/staging/greybus/bundle.c new file mode 100644 index 000000000000..742781ceb135 --- /dev/null +++ b/drivers/staging/greybus/bundle.c @@ -0,0 +1,186 @@ +/* + * Greybus interfaces + * + * Copyright 2014 Google Inc. + * Copyright 2014 Linaro Ltd. + * + * Released under the GPLv2 only. + */ + +#include "greybus.h" + +static ssize_t device_id_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct gb_interface *interface = to_gb_interface(dev); + + return sprintf(buf, "%d", interface->device_id); +} +static DEVICE_ATTR_RO(device_id); + +static struct attribute *interface_attrs[] = { + &dev_attr_device_id.attr, + NULL, +}; + +ATTRIBUTE_GROUPS(interface); + +static void gb_interface_release(struct device *dev) +{ + struct gb_interface *interface = to_gb_interface(dev); + + kfree(interface); +} + +struct device_type greybus_interface_type = { + .name = "greybus_interface", + .release = gb_interface_release, +}; + + +/* XXX This could be per-host device or per-module */ +static DEFINE_SPINLOCK(gb_interfaces_lock); + +/* + * A Greybus interface represents a UniPro device present on a + * module. For Project Ara, each active Interface Block on a module + * implements a UniPro device, and therefore a Greybus interface. A + * Greybus module has at least one interface, but can have two (or + * even more). + * + * Create a gb_interface structure to represent a discovered + * interface. Returns a pointer to the new interface or a null + * pointer if a failure occurs due to memory exhaustion. + */ +struct gb_interface * +gb_interface_create(struct gb_interface_block *gb_ib, u8 interface_id) +{ + struct gb_interface *interface; + int retval; + + interface = kzalloc(sizeof(*interface), GFP_KERNEL); + if (!interface) + return NULL; + + interface->gb_ib = gb_ib; + interface->id = interface_id; + interface->device_id = 0xff; /* Invalid device id to start with */ + INIT_LIST_HEAD(&interface->connections); + + /* Build up the interface device structures and register it with the + * driver core */ + interface->dev.parent = &gb_ib->dev; + interface->dev.bus = &greybus_bus_type; + interface->dev.type = &greybus_interface_type; + interface->dev.groups = interface_groups; + device_initialize(&interface->dev); + dev_set_name(&interface->dev, "%d:%d", gb_ib->module_id, interface_id); + + retval = device_add(&interface->dev); + if (retval) { + pr_err("failed to add interface device for id 0x%02hhx\n", + interface_id); + put_device(&interface->dev); + kfree(interface); + return NULL; + } + + spin_lock_irq(&gb_interfaces_lock); + list_add_tail(&interface->links, &gb_ib->interfaces); + spin_unlock_irq(&gb_interfaces_lock); + + return interface; +} + +/* + * Tear down a previously set up interface. + */ +void gb_interface_destroy(struct gb_interface_block *gb_ib) +{ + struct gb_interface *interface; + struct gb_interface *temp; + + if (WARN_ON(!gb_ib)) + return; + + spin_lock_irq(&gb_interfaces_lock); + list_for_each_entry_safe(interface, temp, &gb_ib->interfaces, links) { + list_del(&interface->links); + gb_interface_connections_exit(interface); + device_del(&interface->dev); + } + spin_unlock_irq(&gb_interfaces_lock); +} + +int gb_interface_init(struct gb_interface_block *gb_ib, u8 interface_id, u8 device_id) +{ + struct gb_interface *interface; + int ret; + + interface = gb_interface_find(gb_ib, interface_id); + if (!interface) { + dev_err(gb_ib->hd->parent, "module %hhu not found\n", + interface_id); + return -ENOENT; + } + interface->device_id = device_id; + + ret = svc_set_route_send(interface, gb_ib->hd); + if (ret) { + dev_err(gb_ib->hd->parent, "failed to set route (%d)\n", ret); + return ret; + } + + ret = gb_interface_connections_init(interface); + if (ret) { + dev_err(gb_ib->hd->parent, "module interface init error %d\n", + ret); + /* XXX clear route */ + return ret; + } + + return 0; +} + +struct gb_interface *gb_interface_find(struct gb_interface_block *gb_ib, + u8 interface_id) +{ + struct gb_interface *interface; + + spin_lock_irq(&gb_interfaces_lock); + list_for_each_entry(interface, &gb_ib->interfaces, links) + if (interface->id == interface_id) { + spin_unlock_irq(&gb_interfaces_lock); + return interface; + } + spin_unlock_irq(&gb_interfaces_lock); + + return NULL; +} + +int gb_interface_connections_init(struct gb_interface *interface) +{ + struct gb_connection *connection; + int ret = 0; + + list_for_each_entry(connection, &interface->connections, + interface_links) { + ret = gb_connection_init(connection); + if (ret) + break; + } + + return ret; +} + +void gb_interface_connections_exit(struct gb_interface *interface) +{ + struct gb_connection *connection; + struct gb_connection *next; + + list_for_each_entry_safe(connection, next, &interface->connections, + interface_links) { + gb_connection_exit(connection); + gb_connection_destroy(connection); + } +} diff --git a/drivers/staging/greybus/bundle.h b/drivers/staging/greybus/bundle.h new file mode 100644 index 000000000000..c0c66b851c5d --- /dev/null +++ b/drivers/staging/greybus/bundle.h @@ -0,0 +1,35 @@ +/* + * Greybus interfaces + * + * Copyright 2014 Google Inc. + * Copyright 2014 Linaro Ltd. + * + * Released under the GPLv2 only. + */ + +#ifndef __INTERFACE_H +#define __INTERFACE_H + +#include + +struct gb_interface { + struct device dev; + struct gb_interface_block *gb_ib; + u8 id; + u8 device_id; + struct list_head connections; + + struct list_head links; /* module->interfaces */ +}; +#define to_gb_interface(d) container_of(d, struct gb_interface, dev) + +struct gb_interface *gb_interface_create(struct gb_interface_block *gb_ib, u8 module_id); +void gb_interface_destroy(struct gb_interface_block *gb_ib); +int gb_interface_init(struct gb_interface_block *gb_ib, u8 module_id, u8 device_id); + +struct gb_interface *gb_interface_find(struct gb_interface_block *gb_ib, u8 interface_id); + +int gb_interface_connections_init(struct gb_interface *interface); +void gb_interface_connections_exit(struct gb_interface *interface); + +#endif /* __INTERFACE_H */ diff --git a/drivers/staging/greybus/greybus.h b/drivers/staging/greybus/greybus.h index 8216c9365503..f243dd2c1835 100644 --- a/drivers/staging/greybus/greybus.h +++ b/drivers/staging/greybus/greybus.h @@ -25,7 +25,7 @@ #include "greybus_manifest.h" #include "manifest.h" #include "interface_block.h" -#include "interface.h" +#include "bundle.h" #include "connection.h" #include "protocol.h" #include "operation.h" diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c deleted file mode 100644 index 742781ceb135..000000000000 --- a/drivers/staging/greybus/interface.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Greybus interfaces - * - * Copyright 2014 Google Inc. - * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. - */ - -#include "greybus.h" - -static ssize_t device_id_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct gb_interface *interface = to_gb_interface(dev); - - return sprintf(buf, "%d", interface->device_id); -} -static DEVICE_ATTR_RO(device_id); - -static struct attribute *interface_attrs[] = { - &dev_attr_device_id.attr, - NULL, -}; - -ATTRIBUTE_GROUPS(interface); - -static void gb_interface_release(struct device *dev) -{ - struct gb_interface *interface = to_gb_interface(dev); - - kfree(interface); -} - -struct device_type greybus_interface_type = { - .name = "greybus_interface", - .release = gb_interface_release, -}; - - -/* XXX This could be per-host device or per-module */ -static DEFINE_SPINLOCK(gb_interfaces_lock); - -/* - * A Greybus interface represents a UniPro device present on a - * module. For Project Ara, each active Interface Block on a module - * implements a UniPro device, and therefore a Greybus interface. A - * Greybus module has at least one interface, but can have two (or - * even more). - * - * Create a gb_interface structure to represent a discovered - * interface. Returns a pointer to the new interface or a null - * pointer if a failure occurs due to memory exhaustion. - */ -struct gb_interface * -gb_interface_create(struct gb_interface_block *gb_ib, u8 interface_id) -{ - struct gb_interface *interface; - int retval; - - interface = kzalloc(sizeof(*interface), GFP_KERNEL); - if (!interface) - return NULL; - - interface->gb_ib = gb_ib; - interface->id = interface_id; - interface->device_id = 0xff; /* Invalid device id to start with */ - INIT_LIST_HEAD(&interface->connections); - - /* Build up the interface device structures and register it with the - * driver core */ - interface->dev.parent = &gb_ib->dev; - interface->dev.bus = &greybus_bus_type; - interface->dev.type = &greybus_interface_type; - interface->dev.groups = interface_groups; - device_initialize(&interface->dev); - dev_set_name(&interface->dev, "%d:%d", gb_ib->module_id, interface_id); - - retval = device_add(&interface->dev); - if (retval) { - pr_err("failed to add interface device for id 0x%02hhx\n", - interface_id); - put_device(&interface->dev); - kfree(interface); - return NULL; - } - - spin_lock_irq(&gb_interfaces_lock); - list_add_tail(&interface->links, &gb_ib->interfaces); - spin_unlock_irq(&gb_interfaces_lock); - - return interface; -} - -/* - * Tear down a previously set up interface. - */ -void gb_interface_destroy(struct gb_interface_block *gb_ib) -{ - struct gb_interface *interface; - struct gb_interface *temp; - - if (WARN_ON(!gb_ib)) - return; - - spin_lock_irq(&gb_interfaces_lock); - list_for_each_entry_safe(interface, temp, &gb_ib->interfaces, links) { - list_del(&interface->links); - gb_interface_connections_exit(interface); - device_del(&interface->dev); - } - spin_unlock_irq(&gb_interfaces_lock); -} - -int gb_interface_init(struct gb_interface_block *gb_ib, u8 interface_id, u8 device_id) -{ - struct gb_interface *interface; - int ret; - - interface = gb_interface_find(gb_ib, interface_id); - if (!interface) { - dev_err(gb_ib->hd->parent, "module %hhu not found\n", - interface_id); - return -ENOENT; - } - interface->device_id = device_id; - - ret = svc_set_route_send(interface, gb_ib->hd); - if (ret) { - dev_err(gb_ib->hd->parent, "failed to set route (%d)\n", ret); - return ret; - } - - ret = gb_interface_connections_init(interface); - if (ret) { - dev_err(gb_ib->hd->parent, "module interface init error %d\n", - ret); - /* XXX clear route */ - return ret; - } - - return 0; -} - -struct gb_interface *gb_interface_find(struct gb_interface_block *gb_ib, - u8 interface_id) -{ - struct gb_interface *interface; - - spin_lock_irq(&gb_interfaces_lock); - list_for_each_entry(interface, &gb_ib->interfaces, links) - if (interface->id == interface_id) { - spin_unlock_irq(&gb_interfaces_lock); - return interface; - } - spin_unlock_irq(&gb_interfaces_lock); - - return NULL; -} - -int gb_interface_connections_init(struct gb_interface *interface) -{ - struct gb_connection *connection; - int ret = 0; - - list_for_each_entry(connection, &interface->connections, - interface_links) { - ret = gb_connection_init(connection); - if (ret) - break; - } - - return ret; -} - -void gb_interface_connections_exit(struct gb_interface *interface) -{ - struct gb_connection *connection; - struct gb_connection *next; - - list_for_each_entry_safe(connection, next, &interface->connections, - interface_links) { - gb_connection_exit(connection); - gb_connection_destroy(connection); - } -} diff --git a/drivers/staging/greybus/interface.h b/drivers/staging/greybus/interface.h deleted file mode 100644 index c0c66b851c5d..000000000000 --- a/drivers/staging/greybus/interface.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Greybus interfaces - * - * Copyright 2014 Google Inc. - * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. - */ - -#ifndef __INTERFACE_H -#define __INTERFACE_H - -#include - -struct gb_interface { - struct device dev; - struct gb_interface_block *gb_ib; - u8 id; - u8 device_id; - struct list_head connections; - - struct list_head links; /* module->interfaces */ -}; -#define to_gb_interface(d) container_of(d, struct gb_interface, dev) - -struct gb_interface *gb_interface_create(struct gb_interface_block *gb_ib, u8 module_id); -void gb_interface_destroy(struct gb_interface_block *gb_ib); -int gb_interface_init(struct gb_interface_block *gb_ib, u8 module_id, u8 device_id); - -struct gb_interface *gb_interface_find(struct gb_interface_block *gb_ib, u8 interface_id); - -int gb_interface_connections_init(struct gb_interface *interface); -void gb_interface_connections_exit(struct gb_interface *interface); - -#endif /* __INTERFACE_H */