2009-04-20 20:00:52 +04:00
/****************************************************************
Siano Mobile Silicon , Inc .
MDTV receiver kernel modules .
Copyright ( C ) 2006 - 2009 , Uri Shkolnik
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2011-08-01 23:26:38 +04:00
# include <linux/export.h>
2009-04-20 20:00:52 +04:00
# include <asm/byteorder.h>
# include "smsendian.h"
# include "smscoreapi.h"
void smsendian_handle_tx_message ( void * buffer )
{
# ifdef __BIG_ENDIAN
2013-03-21 15:49:43 +04:00
struct sms_msg_data * msg = ( struct sms_msg_data * ) buffer ;
2009-04-20 20:00:52 +04:00
int i ;
2013-03-21 16:27:37 +04:00
int msg_words ;
2009-04-20 20:00:52 +04:00
2013-03-21 15:49:43 +04:00
switch ( msg - > x_msg_header . msg_type ) {
2009-04-20 20:00:52 +04:00
case MSG_SMS_DATA_DOWNLOAD_REQ :
{
2013-03-21 16:27:37 +04:00
msg - > msg_data [ 0 ] = le32_to_cpu ( msg - > msg_data [ 0 ] ) ;
2009-04-20 20:00:52 +04:00
break ;
}
default :
2013-03-21 16:27:37 +04:00
msg_words = ( msg - > x_msg_header . msg_length -
2013-03-21 15:49:43 +04:00
sizeof ( struct sms_msg_hdr ) ) / 4 ;
2009-04-20 20:00:52 +04:00
2013-03-21 16:27:37 +04:00
for ( i = 0 ; i < msg_words ; i + + )
msg - > msg_data [ i ] = le32_to_cpu ( msg - > msg_data [ i ] ) ;
2009-04-20 20:00:52 +04:00
break ;
}
# endif /* __BIG_ENDIAN */
}
2009-05-14 16:35:26 +04:00
EXPORT_SYMBOL_GPL ( smsendian_handle_tx_message ) ;
2009-04-20 20:00:52 +04:00
void smsendian_handle_rx_message ( void * buffer )
{
# ifdef __BIG_ENDIAN
2013-03-21 15:49:43 +04:00
struct sms_msg_data * msg = ( struct sms_msg_data * ) buffer ;
2009-04-20 20:00:52 +04:00
int i ;
2013-03-21 16:27:37 +04:00
int msg_words ;
2009-04-20 20:00:52 +04:00
2013-03-21 15:49:43 +04:00
switch ( msg - > x_msg_header . msg_type ) {
2009-04-20 20:00:52 +04:00
case MSG_SMS_GET_VERSION_EX_RES :
{
2013-03-21 15:49:43 +04:00
struct sms_version_res * ver =
( struct sms_version_res * ) msg ;
ver - > chip_model = le16_to_cpu ( ver - > chip_model ) ;
2009-04-20 20:00:52 +04:00
break ;
}
case MSG_SMS_DVBT_BDA_DATA :
case MSG_SMS_DAB_CHANNEL :
case MSG_SMS_DATA_MSG :
{
break ;
}
default :
{
2013-03-21 16:27:37 +04:00
msg_words = ( msg - > x_msg_header . msg_length -
2013-03-21 15:49:43 +04:00
sizeof ( struct sms_msg_hdr ) ) / 4 ;
2009-04-20 20:00:52 +04:00
2013-03-21 16:27:37 +04:00
for ( i = 0 ; i < msg_words ; i + + )
msg - > msg_data [ i ] = le32_to_cpu ( msg - > msg_data [ i ] ) ;
2009-04-20 20:00:52 +04:00
break ;
}
}
# endif /* __BIG_ENDIAN */
}
2009-05-14 16:35:26 +04:00
EXPORT_SYMBOL_GPL ( smsendian_handle_rx_message ) ;
2009-04-20 20:00:52 +04:00
void smsendian_handle_message_header ( void * msg )
{
# ifdef __BIG_ENDIAN
2013-03-21 15:49:43 +04:00
struct sms_msg_hdr * phdr = ( struct sms_msg_hdr * ) msg ;
2009-04-20 20:00:52 +04:00
2013-03-21 15:49:43 +04:00
phdr - > msg_type = le16_to_cpu ( phdr - > msg_type ) ;
phdr - > msg_length = le16_to_cpu ( phdr - > msg_length ) ;
phdr - > msg_flags = le16_to_cpu ( phdr - > msg_flags ) ;
2009-04-20 20:00:52 +04:00
# endif /* __BIG_ENDIAN */
}
2009-05-14 16:35:26 +04:00
EXPORT_SYMBOL_GPL ( smsendian_handle_message_header ) ;