diff options
author | Johan Hovold <johan@hovoldconsulting.com> | 2015-04-07 11:27:15 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2015-04-07 17:31:05 +0200 |
commit | ac67acd3040affb7a7baa0cc626a3757758ed8a7 (patch) | |
tree | 810028dcdda04e059221d357697a3e4965a1746f /drivers/staging/greybus/operation.h | |
parent | cbba76f5cdbc14d2ae415c6f949c7d725b06a27b (diff) |
greybus: operation: move message-header definition to header file
Move operation message-header to operation.h so that it can be used
by host drivers.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/operation.h')
-rw-r--r-- | drivers/staging/greybus/operation.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h index 6784f9832c8e..5ed1f6e3e97e 100644 --- a/drivers/staging/greybus/operation.h +++ b/drivers/staging/greybus/operation.h @@ -41,6 +41,35 @@ enum gb_operation_result { }; /* + * All operation messages (both requests and responses) begin with + * a header that encodes the size of the message (header included). + * This header also contains a unique identifier, that associates a + * response message with its operation. The header contains an + * operation type field, whose interpretation is dependent on what + * type of protocol is used over the connection. The high bit + * (0x80) of the operation type field is used to indicate whether + * the message is a request (clear) or a response (set). + * + * Response messages include an additional result byte, which + * communicates the result of the corresponding request. A zero + * result value means the operation completed successfully. Any + * other value indicates an error; in this case, the payload of the + * response message (if any) is ignored. The result byte must be + * zero in the header for a request message. + * + * The wire format for all numeric fields in the header is little + * endian. Any operation-specific data begins immediately after the + * header, and is 64-bit aligned. + */ +struct gb_operation_msg_hdr { + __le16 size; /* Size in bytes of header + payload */ + __le16 operation_id; /* Operation unique id */ + __u8 type; /* E.g GB_I2C_TYPE_* or GB_GPIO_TYPE_* */ + __u8 result; /* Result of request (in responses only) */ + /* 2 bytes pad, must be zero (ignore when read) */ +} __aligned(sizeof(u64)); + +/* * Protocol code should only examine the payload and payload_size * fields. All other fields are intended to be private to the * operations core code. |