smsendian.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /****************************************************************
  3. Siano Mobile Silicon, Inc.
  4. MDTV receiver kernel modules.
  5. Copyright (C) 2006-2009, Uri Shkolnik
  6. ****************************************************************/
  7. #include <linux/export.h>
  8. #include <asm/byteorder.h>
  9. #include "smsendian.h"
  10. #include "smscoreapi.h"
  11. void smsendian_handle_tx_message(void *buffer)
  12. {
  13. #ifdef __BIG_ENDIAN
  14. struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
  15. int i;
  16. int msg_words;
  17. switch (msg->x_msg_header.msg_type) {
  18. case MSG_SMS_DATA_DOWNLOAD_REQ:
  19. {
  20. msg->msg_data[0] = le32_to_cpu((__force __le32)(msg->msg_data[0]));
  21. break;
  22. }
  23. default:
  24. msg_words = (msg->x_msg_header.msg_length -
  25. sizeof(struct sms_msg_hdr))/4;
  26. for (i = 0; i < msg_words; i++)
  27. msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
  28. break;
  29. }
  30. #endif /* __BIG_ENDIAN */
  31. }
  32. EXPORT_SYMBOL_GPL(smsendian_handle_tx_message);
  33. void smsendian_handle_rx_message(void *buffer)
  34. {
  35. #ifdef __BIG_ENDIAN
  36. struct sms_msg_data *msg = (struct sms_msg_data *)buffer;
  37. int i;
  38. int msg_words;
  39. switch (msg->x_msg_header.msg_type) {
  40. case MSG_SMS_GET_VERSION_EX_RES:
  41. {
  42. struct sms_version_res *ver =
  43. (struct sms_version_res *) msg;
  44. ver->chip_model = le16_to_cpu((__force __le16)ver->chip_model);
  45. break;
  46. }
  47. case MSG_SMS_DVBT_BDA_DATA:
  48. case MSG_SMS_DAB_CHANNEL:
  49. case MSG_SMS_DATA_MSG:
  50. {
  51. break;
  52. }
  53. default:
  54. {
  55. msg_words = (msg->x_msg_header.msg_length -
  56. sizeof(struct sms_msg_hdr))/4;
  57. for (i = 0; i < msg_words; i++)
  58. msg->msg_data[i] = le32_to_cpu((__force __le32)msg->msg_data[i]);
  59. break;
  60. }
  61. }
  62. #endif /* __BIG_ENDIAN */
  63. }
  64. EXPORT_SYMBOL_GPL(smsendian_handle_rx_message);
  65. void smsendian_handle_message_header(void *msg)
  66. {
  67. #ifdef __BIG_ENDIAN
  68. struct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg;
  69. phdr->msg_type = le16_to_cpu((__force __le16)phdr->msg_type);
  70. phdr->msg_length = le16_to_cpu((__force __le16)phdr->msg_length);
  71. phdr->msg_flags = le16_to_cpu((__force __le16)phdr->msg_flags);
  72. #endif /* __BIG_ENDIAN */
  73. }
  74. EXPORT_SYMBOL_GPL(smsendian_handle_message_header);