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: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
Alex Elder 2014-12-02 08:30:38 -06:00 committed by Greg Kroah-Hartman
parent d4a1ff674d
commit 0c90fff4e3
2 changed files with 35 additions and 3 deletions

View File

@ -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
* 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) {
case GB_OP_SUCCESS:
@ -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.
* 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)
pr_err("request result already set\n");
return -EIO; /* Shouldn't happen */
}
(void)gb_operation_errno_map; /* avoid a build warning */
gb_operation_destroy(operation);
return 0;

View File

@ -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);
int gb_operation_status_map(u8 status);
void greybus_data_sent(struct greybus_host_device *hd,
void *header, int status);