11ccea77eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
20013ca8cSMauro Carvalho Chehab /****************************************************************
30013ca8cSMauro Carvalho Chehab 
40013ca8cSMauro Carvalho Chehab  Siano Mobile Silicon, Inc.
50013ca8cSMauro Carvalho Chehab  MDTV receiver kernel modules.
60013ca8cSMauro Carvalho Chehab  Copyright (C) 2006-2009, Uri Shkolnik
70013ca8cSMauro Carvalho Chehab 
80013ca8cSMauro Carvalho Chehab 
90013ca8cSMauro Carvalho Chehab  ****************************************************************/
100013ca8cSMauro Carvalho Chehab 
110013ca8cSMauro Carvalho Chehab #include <linux/export.h>
120013ca8cSMauro Carvalho Chehab #include <asm/byteorder.h>
130013ca8cSMauro Carvalho Chehab 
140013ca8cSMauro Carvalho Chehab #include "smsendian.h"
150013ca8cSMauro Carvalho Chehab #include "smscoreapi.h"
160013ca8cSMauro Carvalho Chehab 
smsendian_handle_tx_message(void * buffer)170013ca8cSMauro Carvalho Chehab void smsendian_handle_tx_message(void *buffer)
180013ca8cSMauro Carvalho Chehab {
190013ca8cSMauro Carvalho Chehab #ifdef __BIG_ENDIAN
20*ff7ff365SDong Chuanjian 	struct sms_msg_data *msg = buffer;
210013ca8cSMauro Carvalho Chehab 	int i;
2228a59df4SMauro Carvalho Chehab 	int msg_words;
230013ca8cSMauro Carvalho Chehab 
24dfef84fcSMauro Carvalho Chehab 	switch (msg->x_msg_header.msg_type) {
250013ca8cSMauro Carvalho Chehab 	case MSG_SMS_DATA_DOWNLOAD_REQ:
260013ca8cSMauro Carvalho Chehab 	{
27e1b7f11bSMauro Carvalho Chehab 		msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0]));
280013ca8cSMauro Carvalho Chehab 		break;
290013ca8cSMauro Carvalho Chehab 	}
300013ca8cSMauro Carvalho Chehab 
310013ca8cSMauro Carvalho Chehab 	default:
3228a59df4SMauro Carvalho Chehab 		msg_words = (msg->x_msg_header.msg_length -
33dfef84fcSMauro Carvalho Chehab 				sizeof(struct sms_msg_hdr))/4;
340013ca8cSMauro Carvalho Chehab 
3528a59df4SMauro Carvalho Chehab 		for (i = 0; i < msg_words; i++)
36e1b7f11bSMauro Carvalho Chehab 			msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
370013ca8cSMauro Carvalho Chehab 
380013ca8cSMauro Carvalho Chehab 		break;
390013ca8cSMauro Carvalho Chehab 	}
400013ca8cSMauro Carvalho Chehab #endif /* __BIG_ENDIAN */
410013ca8cSMauro Carvalho Chehab }
420013ca8cSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(smsendian_handle_tx_message);
430013ca8cSMauro Carvalho Chehab 
smsendian_handle_rx_message(void * buffer)440013ca8cSMauro Carvalho Chehab void smsendian_handle_rx_message(void *buffer)
450013ca8cSMauro Carvalho Chehab {
460013ca8cSMauro Carvalho Chehab #ifdef __BIG_ENDIAN
47dfef84fcSMauro Carvalho Chehab 	struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
480013ca8cSMauro Carvalho Chehab 	int i;
4928a59df4SMauro Carvalho Chehab 	int msg_words;
500013ca8cSMauro Carvalho Chehab 
51dfef84fcSMauro Carvalho Chehab 	switch (msg->x_msg_header.msg_type) {
520013ca8cSMauro Carvalho Chehab 	case MSG_SMS_GET_VERSION_EX_RES:
530013ca8cSMauro Carvalho Chehab 	{
54dfef84fcSMauro Carvalho Chehab 		struct sms_version_res *ver =
55dfef84fcSMauro Carvalho Chehab 			(struct sms_version_res *) msg;
56e1b7f11bSMauro Carvalho Chehab 		ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model);
570013ca8cSMauro Carvalho Chehab 		break;
580013ca8cSMauro Carvalho Chehab 	}
590013ca8cSMauro Carvalho Chehab 
600013ca8cSMauro Carvalho Chehab 	case MSG_SMS_DVBT_BDA_DATA:
610013ca8cSMauro Carvalho Chehab 	case MSG_SMS_DAB_CHANNEL:
620013ca8cSMauro Carvalho Chehab 	case MSG_SMS_DATA_MSG:
630013ca8cSMauro Carvalho Chehab 	{
640013ca8cSMauro Carvalho Chehab 		break;
650013ca8cSMauro Carvalho Chehab 	}
660013ca8cSMauro Carvalho Chehab 
670013ca8cSMauro Carvalho Chehab 	default:
680013ca8cSMauro Carvalho Chehab 	{
6928a59df4SMauro Carvalho Chehab 		msg_words = (msg->x_msg_header.msg_length -
70dfef84fcSMauro Carvalho Chehab 				sizeof(struct sms_msg_hdr))/4;
710013ca8cSMauro Carvalho Chehab 
7228a59df4SMauro Carvalho Chehab 		for (i = 0; i < msg_words; i++)
73e1b7f11bSMauro Carvalho Chehab 			msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
740013ca8cSMauro Carvalho Chehab 
750013ca8cSMauro Carvalho Chehab 		break;
760013ca8cSMauro Carvalho Chehab 	}
770013ca8cSMauro Carvalho Chehab 	}
780013ca8cSMauro Carvalho Chehab #endif /* __BIG_ENDIAN */
790013ca8cSMauro Carvalho Chehab }
800013ca8cSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(smsendian_handle_rx_message);
810013ca8cSMauro Carvalho Chehab 
smsendian_handle_message_header(void * msg)820013ca8cSMauro Carvalho Chehab void smsendian_handle_message_header(void *msg)
830013ca8cSMauro Carvalho Chehab {
840013ca8cSMauro Carvalho Chehab #ifdef __BIG_ENDIAN
85dfef84fcSMauro Carvalho Chehab 	struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg;
860013ca8cSMauro Carvalho Chehab 
87e1b7f11bSMauro Carvalho Chehab 	phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type);
88e1b7f11bSMauro Carvalho Chehab 	phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length);
89e1b7f11bSMauro Carvalho Chehab 	phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags);
900013ca8cSMauro Carvalho Chehab #endif /* __BIG_ENDIAN */
910013ca8cSMauro Carvalho Chehab }
920013ca8cSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(smsendian_handle_message_header);
93