smi_info_util.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <asm/io.h>
  2. #include <linux/ioctl.h>
  3. #include <linux/fs.h>
  4. #include <linux/uaccess.h>
  5. #include "smi_info_util.h"
  6. #include "smi_common.h"
  7. int smi_set_mm_info_ioctl_wrapper(struct file *pFile, unsigned int cmd, unsigned long param)
  8. {
  9. int ret = 0;
  10. MTK_SMI_BWC_INFO_SET cfg;
  11. ret = copy_from_user(&cfg, (void *)param, sizeof(MTK_SMI_BWC_INFO_SET));
  12. if (ret) {
  13. SMIMSG(" MTK_IOC_SMI_BWC_INFO_SET, copy_to_user failed: %d\n", ret);
  14. return -EFAULT;
  15. }
  16. /* Set the address to the value assigned by user space program */
  17. smi_bwc_mm_info_set(cfg.property, cfg.value1, cfg.value2);
  18. /* SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_SET request... finish"); */
  19. return ret;
  20. }
  21. int smi_get_mm_info_ioctl_wrapper(struct file *pFile, unsigned int cmd, unsigned long param)
  22. {
  23. int ret = 0;
  24. ret = copy_to_user((void *)param, (void *)&g_smi_bwc_mm_info, sizeof(MTK_SMI_BWC_MM_INFO));
  25. if (ret) {
  26. SMIMSG(" MTK_IOC_SMI_BWC_INFO_GET, copy_to_user failed: %d\n", ret);
  27. return -EFAULT;
  28. }
  29. /* SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_GET request... finish"); */
  30. return ret;
  31. }
  32. void smi_bwc_mm_info_set(int property_id, long val1, long val2)
  33. {
  34. switch (property_id) {
  35. case SMI_BWC_INFO_CON_PROFILE:
  36. g_smi_bwc_mm_info.concurrent_profile = (int)val1;
  37. break;
  38. case SMI_BWC_INFO_SENSOR_SIZE:
  39. g_smi_bwc_mm_info.sensor_size[0] = val1;
  40. g_smi_bwc_mm_info.sensor_size[1] = val2;
  41. break;
  42. case SMI_BWC_INFO_VIDEO_RECORD_SIZE:
  43. g_smi_bwc_mm_info.video_record_size[0] = val1;
  44. g_smi_bwc_mm_info.video_record_size[1] = val2;
  45. break;
  46. case SMI_BWC_INFO_DISP_SIZE:
  47. g_smi_bwc_mm_info.display_size[0] = val1;
  48. g_smi_bwc_mm_info.display_size[1] = val2;
  49. break;
  50. case SMI_BWC_INFO_TV_OUT_SIZE:
  51. g_smi_bwc_mm_info.tv_out_size[0] = val1;
  52. g_smi_bwc_mm_info.tv_out_size[1] = val2;
  53. break;
  54. case SMI_BWC_INFO_FPS:
  55. g_smi_bwc_mm_info.fps = (int)val1;
  56. break;
  57. case SMI_BWC_INFO_VIDEO_ENCODE_CODEC:
  58. g_smi_bwc_mm_info.video_encode_codec = (int)val1;
  59. #if defined(SMI_J)
  60. /* AVC @ 60 needs HPM */
  61. /*
  62. if (g_smi_bwc_mm_info.video_encode_codec == 2) {
  63. int is_smvr = 0;
  64. spin_lock(&g_SMIInfo.SMI_lock);
  65. is_smvr = g_SMIInfo.pu4ConcurrencyTable[SMI_BWC_SCEN_VR_SLOW] ? 1 : 0;
  66. spin_unlock(&g_SMIInfo.SMI_lock);
  67. if (is_smvr)
  68. mmdvfs_notify_scenario_enter(SMI_BWC_SCEN_VR_SLOW);
  69. }
  70. */
  71. #endif
  72. break;
  73. case SMI_BWC_INFO_VIDEO_DECODE_CODEC:
  74. g_smi_bwc_mm_info.video_decode_codec = (int)val1;
  75. break;
  76. }
  77. }