Commit 129a06f5 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

greybus: operation: add gb_operation_sync_timeout helper

Add gb_operation_sync_timeout convenience function, which allows drivers
to configure the operation timeout.
Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 4f2c08ab
...@@ -978,6 +978,7 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno) ...@@ -978,6 +978,7 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno)
* @request_size: size of @request * @request_size: size of @request
* @response: pointer to a memory buffer to copy the response to * @response: pointer to a memory buffer to copy the response to
* @response_size: the size of @response. * @response_size: the size of @response.
* @timeout: operation timeout in milliseconds
* *
* This function implements a simple synchronous Greybus operation. It sends * This function implements a simple synchronous Greybus operation. It sends
* the provided operation request and waits (sleeps) until the corresponding * the provided operation request and waits (sleeps) until the corresponding
...@@ -992,9 +993,10 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno) ...@@ -992,9 +993,10 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno)
* *
* If there is an error, the response buffer is left alone. * If there is an error, the response buffer is left alone.
*/ */
int gb_operation_sync(struct gb_connection *connection, int type, int gb_operation_sync_timeout(struct gb_connection *connection, int type,
void *request, int request_size, void *request, int request_size,
void *response, int response_size) void *response, int response_size,
unsigned int timeout)
{ {
struct gb_operation *operation; struct gb_operation *operation;
int ret; int ret;
...@@ -1012,7 +1014,7 @@ int gb_operation_sync(struct gb_connection *connection, int type, ...@@ -1012,7 +1014,7 @@ int gb_operation_sync(struct gb_connection *connection, int type,
if (request_size) if (request_size)
memcpy(operation->request->payload, request, request_size); memcpy(operation->request->payload, request, request_size);
ret = gb_operation_request_send_sync(operation); ret = gb_operation_request_send_sync_timeout(operation, timeout);
if (ret) { if (ret) {
dev_err(&connection->dev, "synchronous operation failed: %d\n", dev_err(&connection->dev, "synchronous operation failed: %d\n",
ret); ret);
...@@ -1026,7 +1028,7 @@ int gb_operation_sync(struct gb_connection *connection, int type, ...@@ -1026,7 +1028,7 @@ int gb_operation_sync(struct gb_connection *connection, int type,
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(gb_operation_sync); EXPORT_SYMBOL_GPL(gb_operation_sync_timeout);
int __init gb_operation_init(void) int __init gb_operation_init(void)
{ {
......
...@@ -186,9 +186,19 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno); ...@@ -186,9 +186,19 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno);
void greybus_message_sent(struct greybus_host_device *hd, void greybus_message_sent(struct greybus_host_device *hd,
struct gb_message *message, int status); struct gb_message *message, int status);
int gb_operation_sync(struct gb_connection *connection, int type, int gb_operation_sync_timeout(struct gb_connection *connection, int type,
void *request, int request_size,
void *response, int response_size,
unsigned int timeout);
static inline int gb_operation_sync(struct gb_connection *connection, int type,
void *request, int request_size, void *request, int request_size,
void *response, int response_size); void *response, int response_size)
{
return gb_operation_sync_timeout(connection, type,
request, request_size, response, response_size,
GB_OPERATION_TIMEOUT_DEFAULT);
}
int gb_operation_init(void); int gb_operation_init(void);
void gb_operation_exit(void); void gb_operation_exit(void);
......
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