]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
greybus: operation: add unidirectional-operation flag
authorJohan Hovold <johan@hovoldconsulting.com>
Wed, 1 Jul 2015 10:37:27 +0000 (12:37 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 1 Jul 2015 23:50:59 +0000 (16:50 -0700)
Add flag to identify unidirectional operations.

Use convenience helper rather than open coding the identification when
suppressing response messages.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/operation.c
drivers/staging/greybus/operation.h

index ad0959985aa30895a7053acc7ec41591d1ee50c8..b32010ba7bc191fa83a83ffb187b9172d9967d01 100644 (file)
@@ -500,6 +500,9 @@ gb_operation_create_incoming(struct gb_connection *connection, u16 id,
        /* Caller has made sure we at least have a message header. */
        request_size = size - sizeof(struct gb_operation_msg_hdr);
 
+       if (!id)
+               flags |= GB_OPERATION_FLAG_UNIDIRECTIONAL;
+
        operation = gb_operation_create_common(connection, type,
                                        request_size, 0, flags, GFP_ATOMIC);
        if (operation) {
@@ -666,7 +669,7 @@ static int gb_operation_response_send(struct gb_operation *operation,
        }
 
        /* Sender of request does not care about response. */
-       if (!operation->id)
+       if (gb_operation_is_unidirectional(operation))
                return 0;
 
        if (!operation->response) {
index b6bbc8419a3a21d85e28f9edd3f2a1e52448dff7..07e43a771f8b541fbbf2ad4e5527304291a1ad13 100644 (file)
@@ -90,6 +90,7 @@ struct gb_message {
 };
 
 #define GB_OPERATION_FLAG_INCOMING             BIT(0)
+#define GB_OPERATION_FLAG_UNIDIRECTIONAL       BIT(1)
 
 /*
  * A Greybus operation is a remote procedure call performed over a
@@ -135,6 +136,12 @@ gb_operation_is_incoming(struct gb_operation *operation)
        return operation->flags & GB_OPERATION_FLAG_INCOMING;
 }
 
+static inline bool
+gb_operation_is_unidirectional(struct gb_operation *operation)
+{
+       return operation->flags & GB_OPERATION_FLAG_UNIDIRECTIONAL;
+}
+
 void gb_connection_recv(struct gb_connection *connection,
                                        void *data, size_t size);