summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-07-21 17:44:15 +0530
committerGreg Kroah-Hartman <gregkh@google.com>2015-07-22 10:11:05 -0700
commit007f979216bda08bb899c78d4f20c229d5fe6845 (patch)
tree14be501085ebb617bb947d5cffeb119b3302385a
parente602df658888d0dc1d51ab907036c67b87ca9f3a (diff)
greybus: connection: Create gb_connection_create_range() to specify hd-cport-id range
We need to allocate specific hd-cport-id for AP's control/svc protocols. Support that by splitting functionality of gb_connection_create() into a new routine, which takes range of hd_cport_id's to allocate from. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
-rw-r--r--drivers/staging/greybus/connection.c14
-rw-r--r--drivers/staging/greybus/connection.h3
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
index 9187a369bcbb..c6e1d701a676 100644
--- a/drivers/staging/greybus/connection.c
+++ b/drivers/staging/greybus/connection.c
@@ -141,8 +141,9 @@ void gb_connection_bind_protocol(struct gb_connection *connection)
* Returns a pointer to the new connection if successful, or a null
* pointer otherwise.
*/
-struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
- u16 cport_id, u8 protocol_id)
+struct gb_connection *
+gb_connection_create_range(struct gb_bundle *bundle, u16 cport_id,
+ u8 protocol_id, u32 ida_start, u32 ida_end)
{
struct gb_connection *connection;
struct greybus_host_device *hd = bundle->intf->hd;
@@ -165,7 +166,7 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
if (!connection)
return NULL;
- retval = ida_simple_get(id_map, 0, CPORT_ID_MAX, GFP_KERNEL);
+ retval = ida_simple_get(id_map, ida_start, ida_end, GFP_KERNEL);
if (retval < 0) {
kfree(connection);
return NULL;
@@ -221,6 +222,13 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
return connection;
}
+struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
+ u16 cport_id, u8 protocol_id)
+{
+ return gb_connection_create_range(bundle, cport_id, protocol_id, 0,
+ CPORT_ID_MAX);
+}
+
/*
* Cancel all active operations on a connection.
*
diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h
index fb7a1fb290ac..bba14b527fed 100644
--- a/drivers/staging/greybus/connection.h
+++ b/drivers/staging/greybus/connection.h
@@ -47,6 +47,9 @@ struct gb_connection {
struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
u16 cport_id, u8 protocol_id);
+struct gb_connection *gb_connection_create_range(struct gb_bundle *bundle,
+ u16 cport_id, u8 protocol_id, u32 ida_start,
+ u32 ida_end);
void gb_connection_destroy(struct gb_connection *connection);
int gb_connection_init(struct gb_connection *connection);