File Index
Files and directories
Sign in
FILE

ipu6-isys-queue.h

File preview with syntax highlighting.

linux-6.19.14/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h C
 1/* SPDX-License-Identifier: GPL-2.0-only */
 2/* Copyright (C) 2013--2024 Intel Corporation */
 3
 4#ifndef IPU6_ISYS_QUEUE_H
 5#define IPU6_ISYS_QUEUE_H
 6
 7#include <linux/container_of.h>
 8#include <linux/atomic.h>
 9#include <linux/device.h>
10#include <linux/list.h>
11#include <linux/spinlock_types.h>
12
13#include <media/videobuf2-v4l2.h>
14
15#include "ipu6-fw-isys.h"
16#include "ipu6-isys-video.h"
17
18struct ipu6_isys_stream;
19
20struct ipu6_isys_queue {
21	struct vb2_queue vbq;
22	struct list_head node;
23	spinlock_t lock; /* Protects active and incoming lists */
24	struct list_head active;
25	struct list_head incoming;
26	unsigned int fw_output;
27};
28
29struct ipu6_isys_buffer {
30	struct list_head head;
31	atomic_t str2mmio_flag;
32};
33
34struct ipu6_isys_video_buffer {
35	struct vb2_v4l2_buffer vb_v4l2;
36	struct ipu6_isys_buffer ib;
37	dma_addr_t dma_addr;
38};
39
40#define IPU6_ISYS_BUFFER_LIST_FL_INCOMING	BIT(0)
41#define IPU6_ISYS_BUFFER_LIST_FL_ACTIVE	BIT(1)
42#define IPU6_ISYS_BUFFER_LIST_FL_SET_STATE	BIT(2)
43
44struct ipu6_isys_buffer_list {
45	struct list_head head;
46	unsigned int nbufs;
47};
48
49#define vb2_queue_to_isys_queue(__vb2) \
50	container_of(__vb2, struct ipu6_isys_queue, vbq)
51
52#define ipu6_isys_to_isys_video_buffer(__ib) \
53	container_of(__ib, struct ipu6_isys_video_buffer, ib)
54
55#define vb2_buffer_to_ipu6_isys_video_buffer(__vvb) \
56	container_of(__vvb, struct ipu6_isys_video_buffer, vb_v4l2)
57
58#define ipu6_isys_buffer_to_vb2_buffer(__ib) \
59	(&ipu6_isys_to_isys_video_buffer(__ib)->vb_v4l2.vb2_buf)
60
61void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl,
62				 unsigned long op_flags,
63				 enum vb2_buffer_state state);
64void
65ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set,
66			      struct ipu6_isys_stream *stream,
67			      struct ipu6_isys_buffer_list *bl);
68void ipu6_isys_queue_buf_ready(struct ipu6_isys_stream *stream,
69			       struct ipu6_fw_isys_resp_info_abi *info);
70int ipu6_isys_queue_init(struct ipu6_isys_queue *aq);
71#endif /* IPU6_ISYS_QUEUE_H */
~/ Read-only file preview.