Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 109fbdfd authored by Jeffrey Carlyle's avatar Jeffrey Carlyle Committed by Greg Kroah-Hartman
Browse files

greybus: svc: implement connection_quiescing call



Implement Greybus remote call to connection_quiescing operation. This
operation disables flow contorl for the connection and resets associated
attributes.

Testing done: tested along with required NuttX firmware changes, booted
EVT2, inserted module, removed module, inserted module. Verified module
was functioning as expected.

Signed-off-by: default avatarJeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 423042f4
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -904,6 +904,7 @@ struct gb_spi_transfer_response {
#define GB_SVC_TYPE_TIMESYNC_WAKE_PINS_ACQUIRE	0x18
#define GB_SVC_TYPE_TIMESYNC_WAKE_PINS_RELEASE	0x19
#define GB_SVC_TYPE_TIMESYNC_PING		0x1a
#define GB_SVC_TYPE_CONN_QUIESCING		0x1e
#define GB_SVC_TYPE_MODULE_INSERTED		0x1f
#define GB_SVC_TYPE_MODULE_REMOVED		0x20
#define GB_SVC_TYPE_INTF_VSYS_ENABLE		0x21
@@ -1215,6 +1216,17 @@ struct gb_svc_intf_mailbox_event_request {
} __packed;
/* intf_mailbox_event response has no payload */

struct gb_svc_conn_quiescing_request {
	__u8	intf1_id;
	__le16	cport1_id;
	__u8	intf2_id;
	__le16	cport2_id;
} __packed;

struct gb_svc_conn_quiescing_response {
	__u8	status;
} __packed;


/* RAW */

+22 −1
Original line number Diff line number Diff line
@@ -441,10 +441,31 @@ EXPORT_SYMBOL_GPL(gb_svc_connection_create);
void gb_svc_connection_quiescing(struct gb_svc *svc, u8 intf1_id, u16 cport1_id,
					u8 intf2_id, u16 cport2_id)
{
	/* FIXME: implement */
	struct gb_svc_conn_quiescing_request request;
	struct gb_svc_conn_quiescing_response response;
	int ret;

	dev_dbg(&svc->dev, "%s - (%u:%u %u:%u)\n", __func__,
				intf1_id, cport1_id, intf2_id, cport2_id);

	request.intf1_id = intf1_id;
	request.cport1_id = cpu_to_le16(cport1_id);
	request.intf2_id = intf2_id;
	request.cport2_id = cpu_to_le16(cport2_id);

	ret = gb_operation_sync(svc->connection, GB_SVC_TYPE_CONN_QUIESCING,
				 &request, sizeof(request),
				 &response, sizeof(response));
	if (ret < 0)
		return;
	if (response.status != GB_SVC_OP_SUCCESS) {
		dev_err(&svc->dev, "quiescing connection failed (%u:%u %u:%u): %u\n",
				intf1_id, cport1_id, intf2_id, cport2_id,
				response.status);
		return;
	}

	return;
}
EXPORT_SYMBOL_GPL(gb_svc_connection_quiescing);