Commit 007f9792 authored by Viresh Kumar's avatar Viresh Kumar Committed by Greg Kroah-Hartman

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: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent e602df65
...@@ -141,8 +141,9 @@ void gb_connection_bind_protocol(struct gb_connection *connection) ...@@ -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 * Returns a pointer to the new connection if successful, or a null
* pointer otherwise. * pointer otherwise.
*/ */
struct gb_connection *gb_connection_create(struct gb_bundle *bundle, struct gb_connection *
u16 cport_id, u8 protocol_id) 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 gb_connection *connection;
struct greybus_host_device *hd = bundle->intf->hd; struct greybus_host_device *hd = bundle->intf->hd;
...@@ -165,7 +166,7 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle, ...@@ -165,7 +166,7 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
if (!connection) if (!connection)
return NULL; 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) { if (retval < 0) {
kfree(connection); kfree(connection);
return NULL; return NULL;
...@@ -221,6 +222,13 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle, ...@@ -221,6 +222,13 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
return connection; 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. * Cancel all active operations on a connection.
* *
......
...@@ -47,6 +47,9 @@ struct gb_connection { ...@@ -47,6 +47,9 @@ struct gb_connection {
struct gb_connection *gb_connection_create(struct gb_bundle *bundle, struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
u16 cport_id, u8 protocol_id); 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); void gb_connection_destroy(struct gb_connection *connection);
int gb_connection_init(struct gb_connection *connection); int gb_connection_init(struct gb_connection *connection);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment