greybus: define gb_operation_status_map()
Define a common function that maps an operation status value to a
Linux negative errno.
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index 3011020..cfc341e 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -288,6 +288,35 @@
}
/*
+ * Map an enum gb_operation_status value (which is represted in a
+ * message as a single back a single byte) to an appropriate Linux
+ * negative errno.
+ */
+int gb_operation_status_map(u8 status)
+{
+ switch (status) {
+ case GB_OP_SUCCESS:
+ return 0;
+ case GB_OP_INVALID:
+ return -EINVAL;
+ case GB_OP_NO_MEMORY:
+ return -ENOMEM;
+ case GB_OP_INTERRUPTED:
+ return -EINTR;
+ case GB_OP_RETRY:
+ return -EAGAIN;
+ case GB_OP_PROTOCOL_BAD:
+ return -EPROTONOSUPPORT;
+ case GB_OP_OVERFLOW:
+ return -E2BIG;
+ case GB_OP_TIMEOUT:
+ return -ETIMEDOUT;
+ default:
+ return -EIO;
+ }
+}
+
+/*
* Create a Greybus operation to be sent over the given connection.
* The request buffer will big enough for a payload of the given
* size. Outgoing requests must specify the size of the response
diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h
index 80ee158..6547291 100644
--- a/drivers/staging/greybus/operation.h
+++ b/drivers/staging/greybus/operation.h
@@ -101,6 +101,8 @@
void gb_operation_cancel(struct gb_operation *operation);
int gb_operation_wait(struct gb_operation *operation);
+int gb_operation_status_map(u8 status);
+
int gb_operation_init(void);
void gb_operation_exit(void);