]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: allegro: drop length field from message header
authorMichael Tretter <m.tretter@pengutronix.de>
Mon, 13 Jul 2020 14:42:27 +0000 (16:42 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sun, 19 Jul 2020 12:00:31 +0000 (14:00 +0200)
The length of the message will be determined when the message is
encoded.  Writing the size of the struct into the message in the driver
won't be the actual length of the message that is send to the firmware.
Therefore, drop the length field from the message.

Since the header is the same for all response messages, it does not make
sense to read the header in each decoding function, but we can simply
decode it once before dispatching to the respective functions.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/allegro-dvt/allegro-core.c
drivers/staging/media/allegro-dvt/allegro-mail.c
drivers/staging/media/allegro-dvt/allegro-mail.h

index 07deb5ba13dcf582d36c054319df4b1496a4fe67..85d2c45be9d249ccfbfef5af1dd02795087d2a95 100644 (file)
@@ -776,7 +776,6 @@ static void allegro_mcu_send_init(struct allegro_dev *dev,
        memset(&msg, 0, sizeof(msg));
 
        msg.header.type = MCU_MSG_TYPE_INIT;
-       msg.header.length = sizeof(msg) - sizeof(msg.header);
 
        msg.suballoc_dma = to_mcu_addr(dev, suballoc_dma);
        msg.suballoc_size = to_mcu_size(dev, suballoc_size);
@@ -995,7 +994,6 @@ static int allegro_mcu_send_create_channel(struct allegro_dev *dev,
        memset(&msg, 0, sizeof(msg));
 
        msg.header.type = MCU_MSG_TYPE_CREATE_CHANNEL;
-       msg.header.length = sizeof(msg) - sizeof(msg.header);
 
        msg.user_id = channel->user_id;
 
@@ -1016,7 +1014,6 @@ static int allegro_mcu_send_destroy_channel(struct allegro_dev *dev,
        memset(&msg, 0, sizeof(msg));
 
        msg.header.type = MCU_MSG_TYPE_DESTROY_CHANNEL;
-       msg.header.length = sizeof(msg) - sizeof(msg.header);
 
        msg.channel_id = channel->mcu_channel_id;
 
@@ -1036,7 +1033,6 @@ static int allegro_mcu_send_put_stream_buffer(struct allegro_dev *dev,
        memset(&msg, 0, sizeof(msg));
 
        msg.header.type = MCU_MSG_TYPE_PUT_STREAM_BUFFER;
-       msg.header.length = sizeof(msg) - sizeof(msg.header);
 
        msg.channel_id = channel->mcu_channel_id;
        msg.dma_addr = to_codec_addr(dev, paddr);
@@ -1061,7 +1057,6 @@ static int allegro_mcu_send_encode_frame(struct allegro_dev *dev,
        memset(&msg, 0, sizeof(msg));
 
        msg.header.type = MCU_MSG_TYPE_ENCODE_FRAME;
-       msg.header.length = sizeof(msg) - sizeof(msg.header);
 
        msg.channel_id = channel->mcu_channel_id;
        msg.encoding_options = AL_OPT_FORCE_LOAD;
@@ -1125,7 +1120,6 @@ static int allegro_mcu_push_buffer_internal(struct allegro_channel *channel,
        if (!msg)
                return -ENOMEM;
 
-       msg->header.length = size - sizeof(msg->header);
        msg->header.type = type;
        msg->channel_id = channel->mcu_channel_id;
        msg->num_buffers = num_buffers;
index bb15de080431744950ca7bd11b08aca4575f5d66..da83aa85c87356c55593a2953ce9bcd3ffb04bcd 100644 (file)
@@ -257,8 +257,6 @@ allegro_dec_init(struct mcu_msg_init_response *msg, u32 *src)
 {
        unsigned int i = 0;
 
-       msg->header.type = FIELD_GET(GENMASK(31, 16), src[i]);
-       msg->header.length = FIELD_GET(GENMASK(15, 0), src[i++]);
        msg->reserved0 = src[i++];
 
        return i * sizeof(*src);
@@ -270,8 +268,6 @@ allegro_dec_create_channel(struct mcu_msg_create_channel_response *msg,
 {
        unsigned int i = 0;
 
-       msg->header.type = FIELD_GET(GENMASK(31, 16), src[i]);
-       msg->header.length = FIELD_GET(GENMASK(15, 0), src[i++]);
        msg->channel_id = src[i++];
        msg->user_id = src[i++];
        msg->options = src[i++];
@@ -294,8 +290,6 @@ allegro_dec_destroy_channel(struct mcu_msg_destroy_channel_response *msg,
 {
        unsigned int i = 0;
 
-       msg->header.type = FIELD_GET(GENMASK(31, 16), src[i]);
-       msg->header.length = FIELD_GET(GENMASK(15, 0), src[i++]);
        msg->channel_id = src[i++];
 
        return i * sizeof(*src);
@@ -307,8 +301,6 @@ allegro_dec_encode_frame(struct mcu_msg_encode_frame_response *msg, u32 *src)
        unsigned int i = 0;
        unsigned int j;
 
-       msg->header.type = FIELD_GET(GENMASK(31, 16), src[i]);
-       msg->header.length = FIELD_GET(GENMASK(15, 0), src[i++]);
        msg->channel_id = src[i++];
 
        msg->stream_id = src[i++];
@@ -418,7 +410,10 @@ int allegro_decode_mail(void *msg, u32 *src)
        if (!src || !msg)
                return -EINVAL;
 
-       header = (struct mcu_msg_header *)src;
+       header = msg;
+       header->type = FIELD_GET(GENMASK(31, 16), src[0]);
+
+       src++;
        switch (header->type) {
        case MCU_MSG_TYPE_INIT:
                allegro_dec_init(msg, src);
index a4d829f6f99d0d85b2c05f5019638908c5c3ffd5..397622973c19374e9c380bb4df263c8da6818426 100644 (file)
@@ -23,8 +23,7 @@ enum mcu_msg_type {
 const char *msg_type_name(enum mcu_msg_type type);
 
 struct mcu_msg_header {
-       u16 length;             /* length of the body in bytes */
-       u16 type;
+       enum mcu_msg_type type;
 };
 
 struct mcu_msg_init_request {