FILE
ipu7-isys-video.h
File preview with syntax highlighting.
linux-6.19.14/drivers/staging/media/ipu7/ipu7-isys-video.h
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2013 - 2025 Intel Corporation 4 */ 5 6#ifndef IPU7_ISYS_VIDEO_H 7#define IPU7_ISYS_VIDEO_H 8 9#include <linux/atomic.h> 10#include <linux/completion.h> 11#include <linux/container_of.h> 12#include <linux/list.h> 13#include <linux/mutex.h> 14 15#include <media/media-entity.h> 16#include <media/v4l2-dev.h> 17 18#include "ipu7-isys-queue.h" 19 20#define IPU_INSYS_OUTPUT_PINS 11U 21#define IPU_ISYS_MAX_PARALLEL_SOF 2U 22 23struct file; 24struct ipu7_isys; 25struct ipu7_isys_csi2; 26struct ipu7_insys_stream_cfg; 27struct ipu7_isys_subdev; 28 29struct ipu7_isys_pixelformat { 30 u32 pixelformat; 31 u32 bpp; 32 u32 bpp_packed; 33 u32 code; 34 u32 css_pixelformat; 35}; 36 37struct sequence_info { 38 unsigned int sequence; 39 u64 timestamp; 40}; 41 42struct output_pin_data { 43 void (*pin_ready)(struct ipu7_isys_stream *stream, 44 struct ipu7_insys_resp *info); 45 struct ipu7_isys_queue *aq; 46}; 47 48/* 49 * Align with firmware stream. Each stream represents a CSI virtual channel. 50 * May map to multiple video devices 51 */ 52struct ipu7_isys_stream { 53 struct mutex mutex; 54 struct media_entity *source_entity; 55 atomic_t sequence; 56 atomic_t buf_id; 57 unsigned int seq_index; 58 struct sequence_info seq[IPU_ISYS_MAX_PARALLEL_SOF]; 59 int stream_source; 60 int stream_handle; 61 unsigned int nr_output_pins; 62 struct ipu7_isys_subdev *asd; 63 64 int nr_queues; /* Number of capture queues */ 65 int nr_streaming; 66 int streaming; 67 struct list_head queues; 68 struct completion stream_open_completion; 69 struct completion stream_close_completion; 70 struct completion stream_start_completion; 71 struct completion stream_stop_completion; 72 struct ipu7_isys *isys; 73 74 struct output_pin_data output_pins[IPU_INSYS_OUTPUT_PINS]; 75 int error; 76 u8 vc; 77}; 78 79struct ipu7_isys_video { 80 struct ipu7_isys_queue aq; 81 /* Serialise access to other fields in the struct. */ 82 struct mutex mutex; 83 struct media_pad pad; 84 struct video_device vdev; 85 struct v4l2_pix_format pix_fmt; 86 struct ipu7_isys *isys; 87 struct ipu7_isys_csi2 *csi2; 88 struct ipu7_isys_stream *stream; 89 unsigned int streaming; 90 u8 vc; 91 u8 dt; 92}; 93 94#define ipu7_isys_queue_to_video(__aq) \ 95 container_of(__aq, struct ipu7_isys_video, aq) 96 97extern const struct ipu7_isys_pixelformat ipu7_isys_pfmts[]; 98 99const struct ipu7_isys_pixelformat *ipu7_isys_get_isys_format(u32 pixelformat); 100int ipu7_isys_video_prepare_stream(struct ipu7_isys_video *av, 101 struct media_entity *source_entity, 102 int nr_queues); 103int ipu7_isys_video_set_streaming(struct ipu7_isys_video *av, int state, 104 struct ipu7_isys_buffer_list *bl); 105int ipu7_isys_fw_open(struct ipu7_isys *isys); 106void ipu7_isys_fw_close(struct ipu7_isys *isys); 107int ipu7_isys_setup_video(struct ipu7_isys_video *av, 108 struct media_entity **source_entity, int *nr_queues); 109int ipu7_isys_video_init(struct ipu7_isys_video *av); 110void ipu7_isys_video_cleanup(struct ipu7_isys_video *av); 111void ipu7_isys_put_stream(struct ipu7_isys_stream *stream); 112struct ipu7_isys_stream * 113ipu7_isys_query_stream_by_handle(struct ipu7_isys *isys, 114 u8 stream_handle); 115struct ipu7_isys_stream * 116ipu7_isys_query_stream_by_source(struct ipu7_isys *isys, int source, u8 vc); 117#endif /* IPU7_ISYS_VIDEO_H */
~/
Read-only file preview.