vidc_init.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. */
  13. #ifndef VIDC_INIT_H
  14. #define VIDC_INIT_H
  15. #include <linux/msm_ion.h>
  16. #include <media/msm/vidc_type.h>
  17. #include <media/msm/vcd_property.h>
  18. #define VIDC_MAX_NUM_CLIENTS 4
  19. #define MAX_VIDEO_NUM_OF_BUFF 100
  20. #define MAX_META_BUFFERS 32
  21. #define MAX_MV_BUFFERS 32
  22. enum buffer_dir {
  23. BUFFER_TYPE_INPUT,
  24. BUFFER_TYPE_OUTPUT
  25. };
  26. struct buf_addr_table {
  27. unsigned long user_vaddr;
  28. unsigned long kernel_vaddr;
  29. unsigned long phy_addr;
  30. unsigned long buff_ion_flag;
  31. struct ion_handle *buff_ion_handle;
  32. int pmem_fd;
  33. struct file *file;
  34. unsigned long dev_addr;
  35. void *client_data;
  36. };
  37. struct meta_buffer_addr_table {
  38. u8 *kernel_vir_addr;
  39. u8 *kernel_vir_addr_iommu;
  40. };
  41. struct video_client_ctx {
  42. void *vcd_handle;
  43. u32 num_of_input_buffers;
  44. u32 num_of_output_buffers;
  45. struct buf_addr_table input_buf_addr_table[MAX_VIDEO_NUM_OF_BUFF];
  46. struct buf_addr_table output_buf_addr_table[MAX_VIDEO_NUM_OF_BUFF];
  47. struct list_head msg_queue;
  48. struct mutex msg_queue_lock;
  49. struct mutex enrty_queue_lock;
  50. wait_queue_head_t msg_wait;
  51. struct completion event;
  52. struct vcd_property_h264_mv_buffer vcd_h264_mv_buffer;
  53. struct vcd_property_meta_buffer vcd_meta_buffer;
  54. struct vcd_property_enc_recon_buffer recon_buffer[4];
  55. u32 event_status;
  56. u32 seq_header_set;
  57. u32 stop_msg;
  58. u32 stop_called;
  59. u32 stop_sync_cb;
  60. size_t meta_buf_size;
  61. struct ion_client *user_ion_client;
  62. struct ion_handle *seq_hdr_ion_handle;
  63. struct ion_handle *h264_mv_ion_handle;
  64. struct ion_handle *recon_buffer_ion_handle[4];
  65. struct ion_handle *meta_buffer_ion_handle;
  66. struct ion_handle *meta_buffer_iommu_ion_handle;
  67. u32 dmx_disable;
  68. struct meta_buffer_addr_table meta_addr_table[MAX_META_BUFFERS];
  69. };
  70. void __iomem *vidc_get_ioaddr(void);
  71. int vidc_load_firmware(void);
  72. void vidc_release_firmware(void);
  73. u32 vidc_get_fd_info(struct video_client_ctx *client_ctx,
  74. enum buffer_dir buffer, int pmem_fd,
  75. unsigned long kvaddr, int index,
  76. struct ion_handle **buff_handle);
  77. u32 vidc_lookup_addr_table(struct video_client_ctx *client_ctx,
  78. enum buffer_dir buffer, u32 search_with_user_vaddr,
  79. unsigned long *user_vaddr, unsigned long *kernel_vaddr,
  80. unsigned long *phy_addr, int *pmem_fd, struct file **file,
  81. s32 *buffer_index);
  82. u32 vidc_insert_addr_table(struct video_client_ctx *client_ctx,
  83. enum buffer_dir buffer, unsigned long user_vaddr,
  84. unsigned long *kernel_vaddr, int pmem_fd,
  85. unsigned long buffer_addr_offset,
  86. unsigned int max_num_buffers, unsigned long length);
  87. u32 vidc_insert_addr_table_kernel(struct video_client_ctx *client_ctx,
  88. enum buffer_dir buffer, unsigned long user_vaddr,
  89. unsigned long kernel_vaddr, unsigned long phys_addr,
  90. unsigned int max_num_buffers,
  91. unsigned long length);
  92. u32 vidc_delete_addr_table(struct video_client_ctx *client_ctx,
  93. enum buffer_dir buffer, unsigned long user_vaddr,
  94. unsigned long *kernel_vaddr);
  95. void vidc_cleanup_addr_table(struct video_client_ctx *client_ctx,
  96. enum buffer_dir buffer);
  97. u32 vidc_timer_create(void (*timer_handler)(void *),
  98. void *user_data, void **timer_handle);
  99. void vidc_timer_release(void *timer_handle);
  100. void vidc_timer_start(void *timer_handle, u32 time_out);
  101. void vidc_timer_stop(void *timer_handle);
  102. #endif