Commit e94e1714 authored by Matt Porter's avatar Matt Porter Committed by Greg Kroah-Hartman

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: default avatarMatt Porter <mporter@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 710ecb06
...@@ -65,7 +65,15 @@ static void svc_handshake(struct svc_function_handshake *handshake, ...@@ -65,7 +65,15 @@ static void svc_handshake(struct svc_function_handshake *handshake,
{ {
struct svc_msg *svc_msg; 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) { if (handshake->handshake_type != SVC_HANDSHAKE_SVC_HELLO) {
/* we don't know what to do with this, log it and return */ /* we don't know what to do with this, log it and return */
dev_dbg(hd->parent, "received invalid handshake type %d\n", 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) ...@@ -162,11 +170,6 @@ static struct svc_msg *convert_ap_message(struct ap_msg *ap_msg)
svc_msg = (struct svc_msg *)ap_msg->data; 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; return svc_msg;
} }
......
...@@ -30,8 +30,6 @@ enum svc_msg_type { ...@@ -30,8 +30,6 @@ enum svc_msg_type {
struct svc_msg_header { struct svc_msg_header {
__u8 function_id; /* enum svc_function_id */ __u8 function_id; /* enum svc_function_id */
__u8 message_type; __u8 message_type;
__u8 version_major;
__u8 version_minor;
__le16 payload_length; __le16 payload_length;
}; };
...@@ -42,6 +40,8 @@ enum svc_function_handshake_type { ...@@ -42,6 +40,8 @@ enum svc_function_handshake_type {
}; };
struct svc_function_handshake { struct svc_function_handshake {
__u8 version_major;
__u8 version_minor;
__u8 handshake_type; /* enum svc_function_handshake_type */ __u8 handshake_type; /* enum svc_function_handshake_type */
}; };
......
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