Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 = buffer;
21 int i;
22 int msg_words;
23 u32 *msg_data = &msg->msg_data;
24
25 switch (msg->x_msg_header.msg_type) {
26 case MSG_SMS_DATA_DOWNLOAD_REQ:
27 {
28 msg->msg_data = le32_to_cpu((__force __le32)(msg->msg_data));
29 break;
30 }
31
32 default:
33 msg_words = (msg->x_msg_header.msg_length -
34 sizeof(struct sms_msg_hdr))/4;
35
36 for (i = 0; i < msg_words; i++)
37 msg_data[i] = le32_to_cpu((__force __le32)msg_data[i]);
38
39 break;
40 }
41#endif /* __BIG_ENDIAN */
42}
43EXPORT_SYMBOL_GPL(smsendian_handle_tx_message);
44
45void smsendian_handle_rx_message(void *buffer)
46{
47#ifdef __BIG_ENDIAN
48 struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
49 int i;
50 int msg_words;
51
52 switch (msg->x_msg_header.msg_type) {
53 case MSG_SMS_GET_VERSION_EX_RES:
54 {
55 struct sms_version_res *ver =
56 (struct sms_version_res *) msg;
57 ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model);
58 break;
59 }
60
61 case MSG_SMS_DVBT_BDA_DATA:
62 case MSG_SMS_DAB_CHANNEL:
63 case MSG_SMS_DATA_MSG:
64 {
65 break;
66 }
67
68 default:
69 {
70 u32 *msg_data = &msg->msg_data;
71 msg_words = (msg->x_msg_header.msg_length -
72 sizeof(struct sms_msg_hdr))/4;
73
74 for (i = 0; i < msg_words; i++)
75 msg_data[i] = le32_to_cpu((__force __le32)msg_data[i]);
76
77 break;
78 }
79 }
80#endif /* __BIG_ENDIAN */
81}
82EXPORT_SYMBOL_GPL(smsendian_handle_rx_message);
83
84void smsendian_handle_message_header(void *msg)
85{
86#ifdef __BIG_ENDIAN
87 struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg;
88
89 phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type);
90 phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length);
91 phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags);
92#endif /* __BIG_ENDIAN */
93}
94EXPORT_SYMBOL_GPL(smsendian_handle_message_header);