linux/drivers/media/common/siano/smsendian.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/****************************************************************
   3
   4 Siano Mobile Silicon, Inc.
   5 MDTV receiver kernel modules.
   6 Copyright (C) 2006-2009, Uri Shkolnik
   7
   8
   9 ****************************************************************/
  10
  11#include <linux/export.h>
  12#include <asm/byteorder.h>
  13
  14#include "smsendian.h"
  15#include "smscoreapi.h"
  16
  17void smsendian_handle_tx_message(void *buffer)
  18{
  19#ifdef __BIG_ENDIAN
  20        struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
  21        int i;
  22        int msg_words;
  23
  24        switch (msg->x_msg_header.msg_type) {
  25        case MSG_SMS_DATA_DOWNLOAD_REQ:
  26        {
  27                msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0]));
  28                break;
  29        }
  30
  31        default:
  32                msg_words = (msg->x_msg_header.msg_length -
  33                                sizeof(struct sms_msg_hdr))/4;
  34
  35                for (i = 0; i < msg_words; i++)
  36                        msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
  37
  38                break;
  39        }
  40#endif /* __BIG_ENDIAN */
  41}
  42EXPORT_SYMBOL_GPL(smsendian_handle_tx_message);
  43
  44void smsendian_handle_rx_message(void *buffer)
  45{
  46#ifdef __BIG_ENDIAN
  47        struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
  48        int i;
  49        int msg_words;
  50
  51        switch (msg->x_msg_header.msg_type) {
  52        case MSG_SMS_GET_VERSION_EX_RES:
  53        {
  54                struct sms_version_res *ver =
  55                        (struct sms_version_res *) msg;
  56                ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model);
  57                break;
  58        }
  59
  60        case MSG_SMS_DVBT_BDA_DATA:
  61        case MSG_SMS_DAB_CHANNEL:
  62        case MSG_SMS_DATA_MSG:
  63        {
  64                break;
  65        }
  66
  67        default:
  68        {
  69                msg_words = (msg->x_msg_header.msg_length -
  70                                sizeof(struct sms_msg_hdr))/4;
  71
  72                for (i = 0; i < msg_words; i++)
  73                        msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
  74
  75                break;
  76        }
  77        }
  78#endif /* __BIG_ENDIAN */
  79}
  80EXPORT_SYMBOL_GPL(smsendian_handle_rx_message);
  81
  82void smsendian_handle_message_header(void *msg)
  83{
  84#ifdef __BIG_ENDIAN
  85        struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg;
  86
  87        phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type);
  88        phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length);
  89        phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags);
  90#endif /* __BIG_ENDIAN */
  91}
  92EXPORT_SYMBOL_GPL(smsendian_handle_message_header);
  93