Commit 18079ece authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

greybus: operation: add helper for creating core operations

Add a new core operation flag and a helper that core can use to create
core operations.

This will be used to implement the ping operations that core sends as
part of connection tear down.

Note that a new trace point is also added.
Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 77bbbcf6
...@@ -130,6 +130,11 @@ DECLARE_EVENT_CLASS(gb_operation, ...@@ -130,6 +130,11 @@ DECLARE_EVENT_CLASS(gb_operation,
*/ */
DEFINE_OPERATION_EVENT(gb_operation_create); DEFINE_OPERATION_EVENT(gb_operation_create);
/*
* Occurs after a new core operation has been created.
*/
DEFINE_OPERATION_EVENT(gb_operation_create_core);
/* /*
* Occurs after a new operation has been created for an incoming * Occurs after a new operation has been created for an incoming
* request has been successfully created and initialized. * request has been successfully created and initialized.
......
...@@ -571,6 +571,26 @@ gb_operation_create_flags(struct gb_connection *connection, ...@@ -571,6 +571,26 @@ gb_operation_create_flags(struct gb_connection *connection,
} }
EXPORT_SYMBOL_GPL(gb_operation_create_flags); EXPORT_SYMBOL_GPL(gb_operation_create_flags);
struct gb_operation *
gb_operation_create_core(struct gb_connection *connection,
u8 type, size_t request_size,
size_t response_size, unsigned long flags,
gfp_t gfp)
{
struct gb_operation *operation;
flags |= GB_OPERATION_FLAG_CORE;
operation = gb_operation_create_common(connection, type,
request_size, response_size,
flags, gfp);
if (operation)
trace_gb_operation_create_core(operation);
return operation;
}
/* Do not export this function. */
size_t gb_operation_get_payload_size_max(struct gb_connection *connection) size_t gb_operation_get_payload_size_max(struct gb_connection *connection)
{ {
struct gb_host_device *hd = connection->hd; struct gb_host_device *hd = connection->hd;
......
...@@ -60,6 +60,7 @@ struct gb_message { ...@@ -60,6 +60,7 @@ struct gb_message {
#define GB_OPERATION_FLAG_INCOMING BIT(0) #define GB_OPERATION_FLAG_INCOMING BIT(0)
#define GB_OPERATION_FLAG_UNIDIRECTIONAL BIT(1) #define GB_OPERATION_FLAG_UNIDIRECTIONAL BIT(1)
#define GB_OPERATION_FLAG_SHORT_RESPONSE BIT(2) #define GB_OPERATION_FLAG_SHORT_RESPONSE BIT(2)
#define GB_OPERATION_FLAG_CORE BIT(3)
#define GB_OPERATION_FLAG_USER_MASK (GB_OPERATION_FLAG_SHORT_RESPONSE | \ #define GB_OPERATION_FLAG_USER_MASK (GB_OPERATION_FLAG_SHORT_RESPONSE | \
GB_OPERATION_FLAG_UNIDIRECTIONAL) GB_OPERATION_FLAG_UNIDIRECTIONAL)
...@@ -123,6 +124,11 @@ gb_operation_short_response_allowed(struct gb_operation *operation) ...@@ -123,6 +124,11 @@ gb_operation_short_response_allowed(struct gb_operation *operation)
return operation->flags & GB_OPERATION_FLAG_SHORT_RESPONSE; return operation->flags & GB_OPERATION_FLAG_SHORT_RESPONSE;
} }
static inline bool gb_operation_is_core(struct gb_operation *operation)
{
return operation->flags & GB_OPERATION_FLAG_CORE;
}
void gb_connection_recv(struct gb_connection *connection, void gb_connection_recv(struct gb_connection *connection,
void *data, size_t size); void *data, size_t size);
...@@ -144,6 +150,12 @@ gb_operation_create(struct gb_connection *connection, ...@@ -144,6 +150,12 @@ gb_operation_create(struct gb_connection *connection,
response_size, 0, gfp); response_size, 0, gfp);
} }
struct gb_operation *
gb_operation_create_core(struct gb_connection *connection,
u8 type, size_t request_size,
size_t response_size, unsigned long flags,
gfp_t gfp);
void gb_operation_get(struct gb_operation *operation); void gb_operation_get(struct gb_operation *operation);
void gb_operation_put(struct gb_operation *operation); void gb_operation_put(struct gb_operation *operation);
......
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