File Index
Files and directories
Sign in
FILE

ipu6-isys-video.h

File preview with syntax highlighting.

linux-6.19.14/drivers/media/pci/intel/ipu6/ipu6-isys-video.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/* Copyright (C) 2013--2024 Intel Corporation */
  3
  4#ifndef IPU6_ISYS_VIDEO_H
  5#define IPU6_ISYS_VIDEO_H
  6
  7#include <linux/atomic.h>
  8#include <linux/completion.h>
  9#include <linux/container_of.h>
 10#include <linux/list.h>
 11#include <linux/mutex.h>
 12
 13#include <media/media-entity.h>
 14#include <media/v4l2-dev.h>
 15
 16#include "ipu6-isys-queue.h"
 17
 18#define IPU6_ISYS_OUTPUT_PINS 11
 19#define IPU6_ISYS_MAX_PARALLEL_SOF 2
 20
 21struct file;
 22struct ipu6_isys;
 23struct ipu6_isys_csi2;
 24struct ipu6_isys_subdev;
 25
 26struct ipu6_isys_pixelformat {
 27	u32 pixelformat;
 28	u32 bpp;
 29	u32 bpp_packed;
 30	u32 code;
 31	u32 css_pixelformat;
 32	bool is_meta;
 33};
 34
 35struct sequence_info {
 36	unsigned int sequence;
 37	u64 timestamp;
 38};
 39
 40/*
 41 * Align with firmware stream. Each stream represents a CSI virtual channel.
 42 * May map to multiple video devices
 43 */
 44struct ipu6_isys_stream {
 45	struct mutex mutex;
 46	struct media_entity *source_entity;
 47	atomic_t sequence;
 48	unsigned int seq_index;
 49	struct sequence_info seq[IPU6_ISYS_MAX_PARALLEL_SOF];
 50	int stream_source;
 51	int stream_handle;
 52	unsigned int nr_output_pins;
 53	struct ipu6_isys_subdev *asd;
 54
 55	int nr_queues;	/* Number of capture queues */
 56	int nr_streaming;
 57	int streaming;	/* Has streaming been really started? */
 58	struct list_head queues;
 59	struct completion stream_open_completion;
 60	struct completion stream_close_completion;
 61	struct completion stream_start_completion;
 62	struct completion stream_stop_completion;
 63	struct ipu6_isys *isys;
 64
 65	struct ipu6_isys_queue *output_pins_queue[IPU6_ISYS_OUTPUT_PINS];
 66	int error;
 67	u8 vc;
 68};
 69
 70struct video_stream_watermark {
 71	u32 width;
 72	u32 height;
 73	u32 hblank;
 74	u32 frame_rate;
 75	u64 pixel_rate;
 76	u64 stream_data_rate;
 77	u16 sram_gran_shift;
 78	u16 sram_gran_size;
 79	struct list_head stream_node;
 80};
 81
 82struct ipu6_isys_video {
 83	struct ipu6_isys_queue aq;
 84	/* Serialise access to other fields in the struct. */
 85	struct mutex mutex;
 86	struct media_pad pad;
 87	struct video_device vdev;
 88	struct v4l2_pix_format pix_fmt;
 89	struct v4l2_meta_format meta_fmt;
 90	struct ipu6_isys *isys;
 91	struct ipu6_isys_csi2 *csi2;
 92	struct ipu6_isys_stream *stream;
 93	unsigned int streaming;
 94	struct video_stream_watermark watermark;
 95	u32 source_stream;
 96	u8 vc;
 97	u8 dt;
 98};
 99
100#define ipu6_isys_queue_to_video(__aq) \
101	container_of(__aq, struct ipu6_isys_video, aq)
102
103extern const struct ipu6_isys_pixelformat ipu6_isys_pfmts[];
104extern const struct ipu6_isys_pixelformat ipu6_isys_pfmts_packed[];
105
106const struct ipu6_isys_pixelformat *
107ipu6_isys_get_isys_format(u32 pixelformat, u32 code);
108int ipu6_isys_video_prepare_stream(struct ipu6_isys_video *av,
109				   struct media_entity *source_entity,
110				   int nr_queues);
111int ipu6_isys_video_set_streaming(struct ipu6_isys_video *av, int state,
112				  struct ipu6_isys_buffer_list *bl);
113int ipu6_isys_fw_open(struct ipu6_isys *isys);
114void ipu6_isys_fw_close(struct ipu6_isys *isys);
115int ipu6_isys_setup_video(struct ipu6_isys_video *av,
116			  struct media_entity **source_entity, int *nr_queues);
117int ipu6_isys_video_init(struct ipu6_isys_video *av);
118void ipu6_isys_video_cleanup(struct ipu6_isys_video *av);
119void ipu6_isys_put_stream(struct ipu6_isys_stream *stream);
120struct ipu6_isys_stream *
121ipu6_isys_query_stream_by_handle(struct ipu6_isys *isys, u8 stream_handle);
122struct ipu6_isys_stream *
123ipu6_isys_query_stream_by_source(struct ipu6_isys *isys, int source, u8 vc);
124
125void ipu6_isys_configure_stream_watermark(struct ipu6_isys_video *av,
126					  bool state);
127void ipu6_isys_update_stream_watermark(struct ipu6_isys_video *av, bool state);
128
129u32 ipu6_isys_get_format(struct ipu6_isys_video *av);
130u32 ipu6_isys_get_data_size(struct ipu6_isys_video *av);
131u32 ipu6_isys_get_bytes_per_line(struct ipu6_isys_video *av);
132u32 ipu6_isys_get_frame_width(struct ipu6_isys_video *av);
133u32 ipu6_isys_get_frame_height(struct ipu6_isys_video *av);
134
135#endif /* IPU6_ISYS_VIDEO_H */
~/ Read-only file preview.