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 22 #include <linux/export.h> 23 #include <asm/byteorder.h> 24 25 #include "smsendian.h" 26 #include "smscoreapi.h" 27 smsendian_handle_tx_message(void * buffer)28void smsendian_handle_tx_message(void *buffer) 29 { 30 #ifdef __BIG_ENDIAN 31 struct sms_msg_data *msg = (struct sms_msg_data *)buffer; 32 int i; 33 int msg_words; 34 35 switch (msg->x_msg_header.msg_type) { 36 case MSG_SMS_DATA_DOWNLOAD_REQ: 37 { 38 msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0])); 39 break; 40 } 41 42 default: 43 msg_words = (msg->x_msg_header.msg_length - 44 sizeof(struct sms_msg_hdr))/4; 45 46 for (i = 0; i < msg_words; i++) 47 msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]); 48 49 break; 50 } 51 #endif /* __BIG_ENDIAN */ 52 } 53 EXPORT_SYMBOL_GPL(smsendian_handle_tx_message); 54 smsendian_handle_rx_message(void * buffer)55void smsendian_handle_rx_message(void *buffer) 56 { 57 #ifdef __BIG_ENDIAN 58 struct sms_msg_data *msg = (struct sms_msg_data *)buffer; 59 int i; 60 int msg_words; 61 62 switch (msg->x_msg_header.msg_type) { 63 case MSG_SMS_GET_VERSION_EX_RES: 64 { 65 struct sms_version_res *ver = 66 (struct sms_version_res *) msg; 67 ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model); 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 { 80 msg_words = (msg->x_msg_header.msg_length - 81 sizeof(struct sms_msg_hdr))/4; 82 83 for (i = 0; i < msg_words; i++) 84 msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]); 85 86 break; 87 } 88 } 89 #endif /* __BIG_ENDIAN */ 90 } 91 EXPORT_SYMBOL_GPL(smsendian_handle_rx_message); 92 smsendian_handle_message_header(void * msg)93void smsendian_handle_message_header(void *msg) 94 { 95 #ifdef __BIG_ENDIAN 96 struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg; 97 98 phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type); 99 phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length); 100 phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags); 101 #endif /* __BIG_ENDIAN */ 102 } 103 EXPORT_SYMBOL_GPL(smsendian_handle_message_header); 104