Commit 0c90fff4 authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: introduce gb_operation_errno_map()

Define gb_operation_errno_map(), which maps an operation->errno
into the u8 value that represents it in the status field of an
operation response header.  It'll be used in an upcoming patch.

Make gb_operation_status_map() a private function.  It's not used
outside "operation.c" and I don't believe it ever should be.
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent d4a1ff67
...@@ -411,7 +411,7 @@ static void gb_operation_message_free(struct gb_message *message) ...@@ -411,7 +411,7 @@ static void gb_operation_message_free(struct gb_message *message)
* Map an enum gb_operation_status value (which is represented in a * Map an enum gb_operation_status value (which is represented in a
* message as a single byte) to an appropriate Linux negative errno. * message as a single byte) to an appropriate Linux negative errno.
*/ */
int gb_operation_status_map(u8 status) static int gb_operation_status_map(u8 status)
{ {
switch (status) { switch (status) {
case GB_OP_SUCCESS: case GB_OP_SUCCESS:
...@@ -438,6 +438,39 @@ int gb_operation_status_map(u8 status) ...@@ -438,6 +438,39 @@ int gb_operation_status_map(u8 status)
} }
} }
/*
* Map a Linux errno value (from operation->errno) into the value
* that should represent it in a response message status sent
* over the wire. Returns an enum gb_operation_status value (which
* is represented in a message as a single byte).
*/
static u8 gb_operation_errno_map(int errno)
{
switch (errno) {
case 0:
return GB_OP_SUCCESS;
case -EINTR:
return GB_OP_INTERRUPTED;
case -ETIMEDOUT:
return GB_OP_TIMEOUT;
case -ENOMEM:
return GB_OP_NO_MEMORY;
case -EPROTONOSUPPORT:
return GB_OP_PROTOCOL_BAD;
case -EMSGSIZE:
return GB_OP_OVERFLOW; /* Could be underflow too */
case -EINVAL:
return GB_OP_INVALID;
case -EAGAIN:
return GB_OP_RETRY;
case -EILSEQ:
return GB_OP_MALFUNCTION;
case -EIO:
default:
return GB_OP_UNKNOWN_ERROR;
}
}
/* /*
* Create a Greybus operation to be sent over the given connection. * Create a Greybus operation to be sent over the given connection.
* The request buffer will be big enough for a payload of the given * The request buffer will be big enough for a payload of the given
...@@ -656,6 +689,7 @@ int gb_operation_response_send(struct gb_operation *operation, int errno) ...@@ -656,6 +689,7 @@ int gb_operation_response_send(struct gb_operation *operation, int errno)
pr_err("request result already set\n"); pr_err("request result already set\n");
return -EIO; /* Shouldn't happen */ return -EIO; /* Shouldn't happen */
} }
(void)gb_operation_errno_map; /* avoid a build warning */
gb_operation_destroy(operation); gb_operation_destroy(operation);
return 0; return 0;
......
...@@ -104,8 +104,6 @@ int gb_operation_response_send(struct gb_operation *operation, int errno); ...@@ -104,8 +104,6 @@ int gb_operation_response_send(struct gb_operation *operation, int errno);
void gb_operation_cancel(struct gb_operation *operation, int errno); void gb_operation_cancel(struct gb_operation *operation, int errno);
int gb_operation_status_map(u8 status);
void greybus_data_sent(struct greybus_host_device *hd, void greybus_data_sent(struct greybus_host_device *hd,
void *header, int status); void *header, int status);
......
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