summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/core.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2015-11-03 18:03:22 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2015-11-04 20:25:57 -0800
commit7bc6faaca7d829d4e6f5d65909d5068f73b76bda (patch)
tree80ebab1a7366c6aaae4fd197cac39d4cd3b236c3 /drivers/staging/greybus/core.c
parent04fdd6a51a5b3b448047b83624dbfac85d3daf9a (diff)
greybus: create host-device compilation unit
Move everything host-device related to hd.c and hd.h. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/core.c')
-rw-r--r--drivers/staging/greybus/core.c100
1 files changed, 0 insertions, 100 deletions
diff --git a/drivers/staging/greybus/core.c b/drivers/staging/greybus/core.c
index 726bf6480af3..4396f90e65d6 100644
--- a/drivers/staging/greybus/core.c
+++ b/drivers/staging/greybus/core.c
@@ -146,106 +146,6 @@ void greybus_deregister_driver(struct greybus_driver *driver)
}
EXPORT_SYMBOL_GPL(greybus_deregister_driver);
-
-static DEFINE_MUTEX(hd_mutex);
-
-static void free_hd(struct kref *kref)
-{
- struct greybus_host_device *hd;
-
- hd = container_of(kref, struct greybus_host_device, kref);
-
- ida_destroy(&hd->cport_id_map);
- kfree(hd);
- mutex_unlock(&hd_mutex);
-}
-
-struct greybus_host_device *greybus_create_hd(struct greybus_host_driver *driver,
- struct device *parent,
- size_t buffer_size_max,
- size_t num_cports)
-{
- struct greybus_host_device *hd;
-
- /*
- * Validate that the driver implements all of the callbacks
- * so that we don't have to every time we make them.
- */
- if ((!driver->message_send) || (!driver->message_cancel)) {
- pr_err("Must implement all greybus_host_driver callbacks!\n");
- return ERR_PTR(-EINVAL);
- }
-
- if (buffer_size_max < GB_OPERATION_MESSAGE_SIZE_MIN) {
- dev_err(parent, "greybus host-device buffers too small\n");
- return ERR_PTR(-EINVAL);
- }
-
- if (num_cports == 0 || num_cports > CPORT_ID_MAX) {
- dev_err(parent, "Invalid number of CPorts: %zu\n", num_cports);
- return ERR_PTR(-EINVAL);
- }
-
- /*
- * Make sure to never allocate messages larger than what the Greybus
- * protocol supports.
- */
- if (buffer_size_max > GB_OPERATION_MESSAGE_SIZE_MAX) {
- dev_warn(parent, "limiting buffer size to %u\n",
- GB_OPERATION_MESSAGE_SIZE_MAX);
- buffer_size_max = GB_OPERATION_MESSAGE_SIZE_MAX;
- }
-
- hd = kzalloc(sizeof(*hd) + driver->hd_priv_size, GFP_KERNEL);
- if (!hd)
- return ERR_PTR(-ENOMEM);
-
- kref_init(&hd->kref);
- hd->parent = parent;
- hd->driver = driver;
- INIT_LIST_HEAD(&hd->interfaces);
- INIT_LIST_HEAD(&hd->connections);
- ida_init(&hd->cport_id_map);
- hd->buffer_size_max = buffer_size_max;
- hd->num_cports = num_cports;
-
- /*
- * Initialize AP's SVC protocol connection:
- *
- * This is required as part of early initialization of the host device
- * as we need this connection in order to start any kind of message
- * exchange between the AP and the SVC. SVC will start with a
- * 'get-version' request followed by a 'svc-hello' message and at that
- * time we will create a fully initialized svc-connection, as we need
- * endo-id and AP's interface id for that.
- */
- if (!gb_ap_svc_connection_create(hd)) {
- kref_put_mutex(&hd->kref, free_hd, &hd_mutex);
- return ERR_PTR(-ENOMEM);
- }
-
- return hd;
-}
-EXPORT_SYMBOL_GPL(greybus_create_hd);
-
-void greybus_remove_hd(struct greybus_host_device *hd)
-{
- /*
- * Tear down all interfaces, modules, and the endo that is associated
- * with this host controller before freeing the memory associated with
- * the host controller.
- */
- gb_interfaces_remove(hd);
- gb_endo_remove(hd->endo);
-
- /* Is the SVC still using the partially uninitialized connection ? */
- if (hd->initial_svc_connection)
- gb_connection_destroy(hd->initial_svc_connection);
-
- kref_put_mutex(&hd->kref, free_hd, &hd_mutex);
-}
-EXPORT_SYMBOL_GPL(greybus_remove_hd);
-
static int __init gb_init(void)
{
int retval;