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 <bryan.odonoghue@linaro.org> Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
4f2c08aba7
commit
129a06f541
@ -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)
|
|||||||
*
|
*
|
||||||
* 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,
|
|||||||
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,
|
|||||||
|
|
||||||
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);
|
|||||||
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 *request, int request_size,
|
||||||
void *response, int response_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)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user