Merge tag 'drm/tegra/for-4.6-rc1' of http://anongit.freedesktop.org/git/tegra/linux...
[cascardo/linux.git] / drivers / media / platform / vsp1 / vsp1_video.h
index a929aa8..64abd39 100644 (file)
 
 #include <linux/list.h>
 #include <linux/spinlock.h>
-#include <linux/wait.h>
 
-#include <media/media-entity.h>
 #include <media/videobuf2-v4l2.h>
 
-struct vsp1_video;
+#include "vsp1_pipe.h"
+#include "vsp1_rwpf.h"
 
-/*
- * struct vsp1_format_info - VSP1 video format description
- * @mbus: media bus format code
- * @fourcc: V4L2 pixel format FCC identifier
- * @planes: number of planes
- * @bpp: bits per pixel
- * @hwfmt: VSP1 hardware format
- * @swap_yc: the Y and C components are swapped (Y comes before C)
- * @swap_uv: the U and V components are swapped (V comes before U)
- * @hsub: horizontal subsampling factor
- * @vsub: vertical subsampling factor
- * @alpha: has an alpha channel
- */
-struct vsp1_format_info {
-       u32 fourcc;
-       unsigned int mbus;
-       unsigned int hwfmt;
-       unsigned int swap;
-       unsigned int planes;
-       unsigned int bpp[3];
-       bool swap_yc;
-       bool swap_uv;
-       unsigned int hsub;
-       unsigned int vsub;
-       bool alpha;
-};
-
-enum vsp1_pipeline_state {
-       VSP1_PIPELINE_STOPPED,
-       VSP1_PIPELINE_RUNNING,
-       VSP1_PIPELINE_STOPPING,
-};
-
-/*
- * struct vsp1_pipeline - A VSP1 hardware pipeline
- * @media: the media pipeline
- * @irqlock: protects the pipeline state
- * @lock: protects the pipeline use count and stream count
- */
-struct vsp1_pipeline {
-       struct media_pipeline pipe;
-
-       spinlock_t irqlock;
-       enum vsp1_pipeline_state state;
-       wait_queue_head_t wq;
-
-       struct mutex lock;
-       unsigned int use_count;
-       unsigned int stream_count;
-       unsigned int buffers_ready;
-
-       unsigned int num_video;
-       unsigned int num_inputs;
-       struct vsp1_rwpf *inputs[VSP1_MAX_RPF];
-       struct vsp1_rwpf *output;
-       struct vsp1_entity *bru;
-       struct vsp1_entity *lif;
-       struct vsp1_entity *uds;
-       struct vsp1_entity *uds_input;
-
-       struct list_head entities;
-};
-
-static inline struct vsp1_pipeline *to_vsp1_pipeline(struct media_entity *e)
-{
-       if (likely(e->pipe))
-               return container_of(e->pipe, struct vsp1_pipeline, pipe);
-       else
-               return NULL;
-}
-
-struct vsp1_video_buffer {
+struct vsp1_vb2_buffer {
        struct vb2_v4l2_buffer buf;
        struct list_head queue;
-
-       dma_addr_t addr[3];
-       unsigned int length[3];
+       struct vsp1_rwpf_memory mem;
 };
 
-static inline struct vsp1_video_buffer *
-to_vsp1_video_buffer(struct vb2_v4l2_buffer *vbuf)
+static inline struct vsp1_vb2_buffer *
+to_vsp1_vb2_buffer(struct vb2_v4l2_buffer *vbuf)
 {
-       return container_of(vbuf, struct vsp1_video_buffer, buf);
+       return container_of(vbuf, struct vsp1_vb2_buffer, buf);
 }
 
-struct vsp1_video_operations {
-       void (*queue)(struct vsp1_video *video, struct vsp1_video_buffer *buf);
-};
-
 struct vsp1_video {
+       struct list_head list;
        struct vsp1_device *vsp1;
-       struct vsp1_entity *rwpf;
-
-       const struct vsp1_video_operations *ops;
+       struct vsp1_rwpf *rwpf;
 
        struct video_device video;
        enum v4l2_buf_type type;
        struct media_pad pad;
 
        struct mutex lock;
-       struct v4l2_pix_format_mplane format;
-       const struct vsp1_format_info *fmtinfo;
 
        struct vsp1_pipeline pipe;
        unsigned int pipe_index;
@@ -140,16 +59,8 @@ static inline struct vsp1_video *to_vsp1_video(struct video_device *vdev)
        return container_of(vdev, struct vsp1_video, video);
 }
 
-int vsp1_video_init(struct vsp1_video *video, struct vsp1_entity *rwpf);
+struct vsp1_video *vsp1_video_create(struct vsp1_device *vsp1,
+                                    struct vsp1_rwpf *rwpf);
 void vsp1_video_cleanup(struct vsp1_video *video);
 
-void vsp1_pipeline_frame_end(struct vsp1_pipeline *pipe);
-
-void vsp1_pipeline_propagate_alpha(struct vsp1_pipeline *pipe,
-                                  struct vsp1_entity *input,
-                                  unsigned int alpha);
-
-void vsp1_pipelines_suspend(struct vsp1_device *vsp1);
-void vsp1_pipelines_resume(struct vsp1_device *vsp1);
-
 #endif /* __VSP1_VIDEO_H__ */