Skip to content

Commit

Permalink
media: allegro: drop length field from message header
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
tretter authored and sigmaris committed Aug 8, 2020
1 parent fba70e6 commit d36b425
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 17 deletions.
6 changes: 0 additions & 6 deletions drivers/staging/media/allegro-dvt/allegro-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;

Expand All @@ -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;

Expand All @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
13 changes: 4 additions & 9 deletions drivers/staging/media/allegro-dvt/allegro-mail.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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++];
Expand All @@ -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);
Expand All @@ -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++];
Expand Down Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions drivers/staging/media/allegro-dvt/allegro-mail.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit d36b425

Please sign in to comment.