diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-07-21 17:44:15 +0530 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2015-07-22 10:11:05 -0700 |
commit | 007f979216bda08bb899c78d4f20c229d5fe6845 (patch) | |
tree | 14be501085ebb617bb947d5cffeb119b3302385a | |
parent | e602df658888d0dc1d51ab907036c67b87ca9f3a (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.c | 14 | ||||
-rw-r--r-- | drivers/staging/greybus/connection.h | 3 |
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); |