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 <mporter@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
Matt Porter 2014-09-18 15:25:42 -04:00 committed by Greg Kroah-Hartman
parent 710ecb0605
commit e94e17143e
2 changed files with 11 additions and 8 deletions

View file

@ -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;
}

View file

@ -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 */
};