greybus: connection: add offloaded connection flag

Add an offloaded connection flag, which is used to mark a connection as
offloaded and prevent drivers from initiating operation over it.

This will be used for the audio and camera data connections.

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>
This commit is contained in:
Johan Hovold 2016-05-11 10:17:56 +02:00 committed by Greg Kroah-Hartman
parent 0e9b41ab98
commit ca1f8f8090
2 changed files with 12 additions and 2 deletions

View File

@ -15,6 +15,7 @@
#define GB_CONNECTION_FLAG_CSD BIT(0)
#define GB_CONNECTION_FLAG_NO_FLOWCTRL BIT(1)
#define GB_CONNECTION_FLAG_OFFLOADED BIT(2)
enum gb_connection_state {
GB_CONNECTION_STATE_INVALID = 0,
@ -95,6 +96,11 @@ gb_connection_flow_control_disabled(struct gb_connection *connection)
return connection->flags & GB_CONNECTION_FLAG_NO_FLOWCTRL;
}
static inline bool gb_connection_is_offloaded(struct gb_connection *connection)
{
return connection->flags & GB_CONNECTION_FLAG_OFFLOADED;
}
static inline void *gb_connection_get_data(struct gb_connection *connection)
{
return connection->private;

View File

@ -654,6 +654,9 @@ int gb_operation_request_send(struct gb_operation *operation,
unsigned int cycle;
int ret;
if (gb_connection_is_offloaded(connection))
return -EBUSY;
if (!callback)
return -EINVAL;
@ -950,8 +953,9 @@ void gb_connection_recv(struct gb_connection *connection,
size_t msg_size;
u16 operation_id;
if (connection->state != GB_CONNECTION_STATE_ENABLED &&
connection->state != GB_CONNECTION_STATE_ENABLED_TX) {
if ((connection->state != GB_CONNECTION_STATE_ENABLED &&
connection->state != GB_CONNECTION_STATE_ENABLED_TX) ||
gb_connection_is_offloaded(connection)) {
dev_warn(dev, "%s: dropping %zu received bytes\n",
connection->name, size);
return;