From e94e17143ea61f08488e55a8b8dfa025ab5fee44 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Thu, 18 Sep 2014 15:25:42 -0400 Subject: [PATCH] greybus: move versioning from svc message header to handshake function The Greybus spec has been updated to improve the efficiency of the version major/minor information that had been previously carried in every SVC message header. The version major/minor is now provided as part of the handshake function. Update the SVC msg header and handshake function payload definitions and move the version major/minor validation into the SVC handshake handling routine. Signed-off-by: Matt Porter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/ap.c | 15 +++++++++------ drivers/staging/greybus/svc_msg.h | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/staging/greybus/ap.c b/drivers/staging/greybus/ap.c index c2c5aa654e7e..2a60de0cec89 100644 --- a/drivers/staging/greybus/ap.c +++ b/drivers/staging/greybus/ap.c @@ -65,7 +65,15 @@ static void svc_handshake(struct svc_function_handshake *handshake, { struct svc_msg *svc_msg; - /* A new SVC communication channel, let's verify it was for us */ + /* A new SVC communication channel, let's verify a supported version */ + if ((handshake->version_major != GREYBUS_VERSION_MAJOR) && + (handshake->version_minor != GREYBUS_VERSION_MINOR)) { + dev_dbg(hd->parent, "received invalid greybus version %d:%d\n", + handshake->version_major, handshake->version_minor); + return; + } + + /* Validate that the handshake came from the SVC */ if (handshake->handshake_type != SVC_HANDSHAKE_SVC_HELLO) { /* we don't know what to do with this, log it and return */ dev_dbg(hd->parent, "received invalid handshake type %d\n", @@ -162,11 +170,6 @@ static struct svc_msg *convert_ap_message(struct ap_msg *ap_msg) svc_msg = (struct svc_msg *)ap_msg->data; - /* Verify the version is something we can handle with this code */ - if ((svc_msg->header.version_major != GREYBUS_VERSION_MAJOR) && - (svc_msg->header.version_minor != GREYBUS_VERSION_MINOR)) - return NULL; - return svc_msg; } diff --git a/drivers/staging/greybus/svc_msg.h b/drivers/staging/greybus/svc_msg.h index 3f1a93499aee..e84e01cf3cce 100644 --- a/drivers/staging/greybus/svc_msg.h +++ b/drivers/staging/greybus/svc_msg.h @@ -30,8 +30,6 @@ enum svc_msg_type { struct svc_msg_header { __u8 function_id; /* enum svc_function_id */ __u8 message_type; - __u8 version_major; - __u8 version_minor; __le16 payload_length; }; @@ -42,6 +40,8 @@ enum svc_function_handshake_type { }; struct svc_function_handshake { + __u8 version_major; + __u8 version_minor; __u8 handshake_type; /* enum svc_function_handshake_type */ }; -- 2.39.5