Commit | Line | Data |
---|---|---|
cb17f904 US |
1 | /**************************************************************** |
2 | ||
3 | Siano Mobile Silicon, Inc. | |
4 | MDTV receiver kernel modules. | |
5 | Copyright (C) 2006-2009, Uri Shkolnik | |
6 | ||
7 | This program is free software: you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation, either version 2 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | This program is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | ||
20 | ****************************************************************/ | |
21 | ||
35a24636 | 22 | #include <linux/export.h> |
cb17f904 US |
23 | #include <asm/byteorder.h> |
24 | ||
25 | #include "smsendian.h" | |
26 | #include "smscoreapi.h" | |
27 | ||
28 | void smsendian_handle_tx_message(void *buffer) | |
29 | { | |
30 | #ifdef __BIG_ENDIAN | |
dfef84fc | 31 | struct sms_msg_data *msg = (struct sms_msg_data *)buffer; |
cb17f904 US |
32 | int i; |
33 | int msgWords; | |
34 | ||
dfef84fc | 35 | switch (msg->x_msg_header.msg_type) { |
cb17f904 US |
36 | case MSG_SMS_DATA_DOWNLOAD_REQ: |
37 | { | |
38 | msg->msgData[0] = le32_to_cpu(msg->msgData[0]); | |
39 | break; | |
40 | } | |
41 | ||
42 | default: | |
dfef84fc MCC |
43 | msgWords = (msg->x_msg_header.msg_length - |
44 | sizeof(struct sms_msg_hdr))/4; | |
cb17f904 US |
45 | |
46 | for (i = 0; i < msgWords; i++) | |
47 | msg->msgData[i] = le32_to_cpu(msg->msgData[i]); | |
48 | ||
49 | break; | |
50 | } | |
51 | #endif /* __BIG_ENDIAN */ | |
52 | } | |
2c5582e5 | 53 | EXPORT_SYMBOL_GPL(smsendian_handle_tx_message); |
cb17f904 US |
54 | |
55 | void smsendian_handle_rx_message(void *buffer) | |
56 | { | |
57 | #ifdef __BIG_ENDIAN | |
dfef84fc | 58 | struct sms_msg_data *msg = (struct sms_msg_data *)buffer; |
cb17f904 US |
59 | int i; |
60 | int msgWords; | |
61 | ||
dfef84fc | 62 | switch (msg->x_msg_header.msg_type) { |
cb17f904 US |
63 | case MSG_SMS_GET_VERSION_EX_RES: |
64 | { | |
dfef84fc MCC |
65 | struct sms_version_res *ver = |
66 | (struct sms_version_res *) msg; | |
67 | ver->chip_model = le16_to_cpu(ver->chip_model); | |
cb17f904 US |
68 | break; |
69 | } | |
70 | ||
71 | case MSG_SMS_DVBT_BDA_DATA: | |
72 | case MSG_SMS_DAB_CHANNEL: | |
73 | case MSG_SMS_DATA_MSG: | |
74 | { | |
75 | break; | |
76 | } | |
77 | ||
78 | default: | |
79 | { | |
dfef84fc MCC |
80 | msgWords = (msg->x_msg_header.msg_length - |
81 | sizeof(struct sms_msg_hdr))/4; | |
cb17f904 US |
82 | |
83 | for (i = 0; i < msgWords; i++) | |
84 | msg->msgData[i] = le32_to_cpu(msg->msgData[i]); | |
85 | ||
86 | break; | |
87 | } | |
88 | } | |
89 | #endif /* __BIG_ENDIAN */ | |
90 | } | |
2c5582e5 | 91 | EXPORT_SYMBOL_GPL(smsendian_handle_rx_message); |
cb17f904 US |
92 | |
93 | void smsendian_handle_message_header(void *msg) | |
94 | { | |
95 | #ifdef __BIG_ENDIAN | |
dfef84fc | 96 | struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg; |
cb17f904 | 97 | |
dfef84fc MCC |
98 | phdr->msg_type = le16_to_cpu(phdr->msg_type); |
99 | phdr->msg_length = le16_to_cpu(phdr->msg_length); | |
100 | phdr->msg_flags = le16_to_cpu(phdr->msg_flags); | |
cb17f904 US |
101 | #endif /* __BIG_ENDIAN */ |
102 | } | |
2c5582e5 | 103 | EXPORT_SYMBOL_GPL(smsendian_handle_message_header); |