From 129a06f541d3ff4228589b4b9f0a4681dafb0042 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Tue, 14 Jul 2015 15:43:37 +0200 Subject: [PATCH] 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: Bryan O'Donoghue Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/operation.c | 12 +++++++----- drivers/staging/greybus/operation.h | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index 63c4a5b8b0f1..a99505cc21fa 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -978,6 +978,7 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno) * @request_size: size of @request * @response: pointer to a memory buffer to copy the response to * @response_size: the size of @response. + * @timeout: operation timeout in milliseconds * * This function implements a simple synchronous Greybus operation. It sends * 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) * * If there is an error, the response buffer is left alone. */ -int gb_operation_sync(struct gb_connection *connection, int type, - void *request, int request_size, - void *response, int response_size) +int gb_operation_sync_timeout(struct gb_connection *connection, int type, + void *request, int request_size, + void *response, int response_size, + unsigned int timeout) { struct gb_operation *operation; int ret; @@ -1012,7 +1014,7 @@ int gb_operation_sync(struct gb_connection *connection, int type, if (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) { dev_err(&connection->dev, "synchronous operation failed: %d\n", ret); @@ -1026,7 +1028,7 @@ int gb_operation_sync(struct gb_connection *connection, int type, return ret; } -EXPORT_SYMBOL_GPL(gb_operation_sync); +EXPORT_SYMBOL_GPL(gb_operation_sync_timeout); int __init gb_operation_init(void) { diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h index f06dd11e0afb..685470349460 100644 --- a/drivers/staging/greybus/operation.h +++ b/drivers/staging/greybus/operation.h @@ -186,9 +186,19 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno); void greybus_message_sent(struct greybus_host_device *hd, 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 *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); void gb_operation_exit(void);