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 <asm/byteorder.h> 23 24#include "smsendian.h" 25#include "smscoreapi.h" 26 27void smsendian_handle_tx_message(void *buffer) 28{ 29#ifdef __BIG_ENDIAN 30 struct SmsMsgData_ST *msg = (struct SmsMsgData_ST *)buffer; 31 int i; 32 int msgWords; 33 34 switch (msg->xMsgHeader.msgType) { 35 case MSG_SMS_DATA_DOWNLOAD_REQ: 36 { 37 msg->msgData[0] = le32_to_cpu(msg->msgData[0]); 38 break; 39 } 40 41 default: 42 msgWords = (msg->xMsgHeader.msgLength - 43 sizeof(struct SmsMsgHdr_ST))/4; 44 45 for (i = 0; i < msgWords; i++) 46 msg->msgData[i] = le32_to_cpu(msg->msgData[i]); 47 48 break; 49 } 50#endif /* __BIG_ENDIAN */ 51} 52EXPORT_SYMBOL_GPL(smsendian_handle_tx_message); 53 54void smsendian_handle_rx_message(void *buffer) 55{ 56#ifdef __BIG_ENDIAN 57 struct SmsMsgData_ST *msg = (struct SmsMsgData_ST *)buffer; 58 int i; 59 int msgWords; 60 61 switch (msg->xMsgHeader.msgType) { 62 case MSG_SMS_GET_VERSION_EX_RES: 63 { 64 struct SmsVersionRes_ST *ver = 65 (struct SmsVersionRes_ST *) msg; 66 ver->ChipModel = le16_to_cpu(ver->ChipModel); 67 break; 68 } 69 70 case MSG_SMS_DVBT_BDA_DATA: 71 case MSG_SMS_DAB_CHANNEL: 72 case MSG_SMS_DATA_MSG: 73 { 74 break; 75 } 76 77 default: 78 { 79 msgWords = (msg->xMsgHeader.msgLength - 80 sizeof(struct SmsMsgHdr_ST))/4; 81 82 for (i = 0; i < msgWords; i++) 83 msg->msgData[i] = le32_to_cpu(msg->msgData[i]); 84 85 break; 86 } 87 } 88#endif /* __BIG_ENDIAN */ 89} 90EXPORT_SYMBOL_GPL(smsendian_handle_rx_message); 91 92void smsendian_handle_message_header(void *msg) 93{ 94#ifdef __BIG_ENDIAN 95 struct SmsMsgHdr_ST *phdr = (struct SmsMsgHdr_ST *)msg; 96 97 phdr->msgType = le16_to_cpu(phdr->msgType); 98 phdr->msgLength = le16_to_cpu(phdr->msgLength); 99 phdr->msgFlags = le16_to_cpu(phdr->msgFlags); 100#endif /* __BIG_ENDIAN */ 101} 102EXPORT_SYMBOL_GPL(smsendian_handle_message_header); 103