93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
/****************************************************************
 | 
						|
 | 
						|
 Siano Mobile Silicon, Inc.
 | 
						|
 MDTV receiver kernel modules.
 | 
						|
 Copyright (C) 2006-2009, Uri Shkolnik
 | 
						|
 | 
						|
 | 
						|
 ****************************************************************/
 | 
						|
 | 
						|
#include <linux/export.h>
 | 
						|
#include <asm/byteorder.h>
 | 
						|
 | 
						|
#include "smsendian.h"
 | 
						|
#include "smscoreapi.h"
 | 
						|
 | 
						|
void smsendian_handle_tx_message(void *buffer)
 | 
						|
{
 | 
						|
#ifdef __BIG_ENDIAN
 | 
						|
	struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
 | 
						|
	int i;
 | 
						|
	int msg_words;
 | 
						|
 | 
						|
	switch (msg->x_msg_header.msg_type) {
 | 
						|
	case MSG_SMS_DATA_DOWNLOAD_REQ:
 | 
						|
	{
 | 
						|
		msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0]));
 | 
						|
		break;
 | 
						|
	}
 | 
						|
 | 
						|
	default:
 | 
						|
		msg_words = (msg->x_msg_header.msg_length -
 | 
						|
				sizeof(struct sms_msg_hdr))/4;
 | 
						|
 | 
						|
		for (i = 0; i < msg_words; i++)
 | 
						|
			msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
 | 
						|
 | 
						|
		break;
 | 
						|
	}
 | 
						|
#endif /* __BIG_ENDIAN */
 | 
						|
}
 | 
						|
EXPORT_SYMBOL_GPL(smsendian_handle_tx_message);
 | 
						|
 | 
						|
void smsendian_handle_rx_message(void *buffer)
 | 
						|
{
 | 
						|
#ifdef __BIG_ENDIAN
 | 
						|
	struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
 | 
						|
	int i;
 | 
						|
	int msg_words;
 | 
						|
 | 
						|
	switch (msg->x_msg_header.msg_type) {
 | 
						|
	case MSG_SMS_GET_VERSION_EX_RES:
 | 
						|
	{
 | 
						|
		struct sms_version_res *ver =
 | 
						|
			(struct sms_version_res *) msg;
 | 
						|
		ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model);
 | 
						|
		break;
 | 
						|
	}
 | 
						|
 | 
						|
	case MSG_SMS_DVBT_BDA_DATA:
 | 
						|
	case MSG_SMS_DAB_CHANNEL:
 | 
						|
	case MSG_SMS_DATA_MSG:
 | 
						|
	{
 | 
						|
		break;
 | 
						|
	}
 | 
						|
 | 
						|
	default:
 | 
						|
	{
 | 
						|
		msg_words = (msg->x_msg_header.msg_length -
 | 
						|
				sizeof(struct sms_msg_hdr))/4;
 | 
						|
 | 
						|
		for (i = 0; i < msg_words; i++)
 | 
						|
			msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
 | 
						|
 | 
						|
		break;
 | 
						|
	}
 | 
						|
	}
 | 
						|
#endif /* __BIG_ENDIAN */
 | 
						|
}
 | 
						|
EXPORT_SYMBOL_GPL(smsendian_handle_rx_message);
 | 
						|
 | 
						|
void smsendian_handle_message_header(void *msg)
 | 
						|
{
 | 
						|
#ifdef __BIG_ENDIAN
 | 
						|
	struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg;
 | 
						|
 | 
						|
	phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type);
 | 
						|
	phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length);
 | 
						|
	phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags);
 | 
						|
#endif /* __BIG_ENDIAN */
 | 
						|
}
 | 
						|
EXPORT_SYMBOL_GPL(smsendian_handle_message_header);
 |