On Thu Aug 27 15:33:13 2026 +0300, Antti Laakso wrote:
> Add struct for ipu6 firmware ops. This is a preparation to
> add support for ipu7 firmware communication.
>
> Signed-off-by: Antti Laakso <[email protected]>
> Signed-off-by: Sakari Ailus <[email protected]>
Patch committed.
Thanks,
Sakari Ailus
drivers/media/pci/intel/ipu6/ipu6-bus.h | 3 ++
drivers/media/pci/intel/ipu6/ipu6-fw-isys.c | 71 ++++++++++++++++----------
drivers/media/pci/intel/ipu6/ipu6-fw-isys.h | 38 ++------------
drivers/media/pci/intel/ipu6/ipu6-isys-queue.c | 24 +++++----
drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 35 ++++++++-----
drivers/media/pci/intel/ipu6/ipu6-isys.c | 1 +
drivers/media/pci/intel/ipu6/ipu6-isys.h | 32 ++++++++++++
7 files changed, 116 insertions(+), 88 deletions(-)
---
diff --git a/drivers/media/pci/intel/ipu6/ipu6-bus.h
b/drivers/media/pci/intel/ipu6/ipu6-bus.h
index a08c5468d536..62aa2b090699 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-bus.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-bus.h
@@ -37,6 +37,7 @@ struct ipu6_auxdrv_data {
irqreturn_t (*isr)(struct ipu6_bus_device *adev);
irqreturn_t (*isr_threaded)(struct ipu6_bus_device *adev);
bool wake_isr_thread;
+ const struct ipu6_fw_isys_ops *fw_ops;
};
#define to_ipu6_bus_device(_dev) \
@@ -45,6 +46,8 @@ struct ipu6_auxdrv_data {
container_of(_auxdev, struct ipu6_bus_device, auxdev)
#define ipu6_bus_get_drvdata(adev) dev_get_drvdata(&(adev)->auxdev.dev)
+extern const struct ipu6_fw_isys_ops ipu6_fw_isys_ops;
+
struct ipu6_bus_device *
ipu6_bus_initialize_device(struct pci_dev *pdev, struct device *parent,
void *pdata, const struct ipu6_buttress_ctrl *ctrl,
diff --git a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
index 9256ea3b68c1..4ee5137f310e 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
@@ -126,7 +126,7 @@ static int ipu6_fw_isys_complex_cmd(struct ipu6_isys *isys,
return 0;
}
-int ipu6_fw_isys_close(struct ipu6_isys *isys)
+static int ipu6_fw_isys_close(struct ipu6_isys *isys)
{
struct device *dev = &isys->adev->auxdev.dev;
int retry = IPU6_ISYS_CLOSE_RETRY;
@@ -165,7 +165,7 @@ int ipu6_fw_isys_close(struct ipu6_isys *isys)
return ret;
}
-void ipu6_fw_isys_cleanup(struct ipu6_isys *isys)
+static void ipu6_fw_isys_cleanup(struct ipu6_isys *isys)
{
int ret;
@@ -316,7 +316,7 @@ static int ipu6_isys_fwcom_cfg_init(struct ipu6_isys *isys,
return 0;
}
-int ipu6_fw_isys_init(struct ipu6_isys *isys, unsigned int num_streams)
+static int ipu6_fw_isys_init(struct ipu6_isys *isys, unsigned int num_streams)
{
struct device *dev = &isys->adev->auxdev.dev;
int retry = IPU6_ISYS_OPEN_RETRY;
@@ -358,18 +358,19 @@ int ipu6_fw_isys_init(struct ipu6_isys *isys, unsigned
int num_streams)
return ret;
}
-struct ipu6_fw_isys_resp_info_abi *
+static struct ipu6_fw_isys_resp_info_abi *
ipu6_fw_isys_get_resp(struct ipu6_isys *isys)
{
return ipu6_recv_get_token(isys->fwctx, IPU6_BASE_MSG_RECV_QUEUES);
}
-void ipu6_fw_isys_put_resp(struct ipu6_isys *isys)
+static void ipu6_fw_isys_put_resp(struct ipu6_isys *isys)
{
ipu6_recv_put_token(isys->fwctx, IPU6_BASE_MSG_RECV_QUEUES);
}
-void ipu6_fw_isys_dump_stream_cfg(struct device *dev, struct isys_fw_msgs *msg)
+static void ipu6_fw_isys_dump_stream_cfg(struct device *dev,
+ struct isys_fw_msgs *msg)
{
struct ipu6_fw_isys_stream_cfg_data_abi *cfg = &msg->ipu6.stream;
unsigned int i;
@@ -446,9 +447,9 @@ void ipu6_fw_isys_dump_stream_cfg(struct device *dev,
struct isys_fw_msgs *msg)
dev_dbg(dev, "-----------------------------------------------------\n");
}
-void
-ipu6_fw_isys_dump_frame_buff_set(struct device *dev, struct isys_fw_msgs *msg,
- unsigned int outputs)
+static void
+ipu6_fw_isys_dump_frame_buf_set(struct device *dev, struct isys_fw_msgs *msg,
+ unsigned int outputs)
{
struct ipu6_fw_isys_frame_buff_set_abi *buf;
unsigned int i;
@@ -820,8 +821,8 @@ static int ipu6_isys_fw_pin_cfg(struct ipu6_isys_video *av,
return 0;
}
-int ipu6_fw_isys_prepare_stream_cfg(struct ipu6_isys_video *av,
- struct isys_fw_msgs *msg)
+static int ipu6_fw_isys_prepare_stream_cfg(struct ipu6_isys_video *av,
+ struct isys_fw_msgs *msg)
{
struct ipu6_fw_isys_stream_cfg_data_abi *stream_cfg;
struct device *dev = &av->isys->adev->auxdev.dev;
@@ -850,9 +851,9 @@ int ipu6_fw_isys_prepare_stream_cfg(struct ipu6_isys_video
*av,
return 0;
}
-int ipu6_fw_isys_stream_open(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg)
+static int ipu6_fw_isys_stream_open(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg)
{
return ipu6_fw_isys_complex_cmd(isys, stream_handle,
&msg->ipu6.stream, msg->dma_addr,
@@ -860,23 +861,23 @@ int ipu6_fw_isys_stream_open(struct ipu6_isys *isys,
IPU6_FW_ISYS_SEND_TYPE_STREAM_OPEN);
}
-int ipu6_fw_isys_stream_close(struct ipu6_isys *isys,
- const unsigned int stream_handle)
+static int ipu6_fw_isys_stream_close(struct ipu6_isys *isys,
+ const unsigned int stream_handle)
{
return ipu6_fw_isys_complex_cmd(isys, stream_handle, NULL, 0, 0,
IPU6_FW_ISYS_SEND_TYPE_STREAM_CLOSE);
}
-int ipu6_fw_isys_stream_flush(struct ipu6_isys *isys,
- const unsigned int stream_handle)
+static int ipu6_fw_isys_stream_flush(struct ipu6_isys *isys,
+ const unsigned int stream_handle)
{
return ipu6_fw_isys_complex_cmd(isys, stream_handle, NULL, 0, 0,
IPU6_FW_ISYS_SEND_TYPE_STREAM_FLUSH);
}
-int ipu6_fw_isys_stream_start(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg, bool capture)
+static int ipu6_fw_isys_stream_start(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg, bool capture)
{
u16 cmd_type;
@@ -890,9 +891,9 @@ int ipu6_fw_isys_stream_start(struct ipu6_isys *isys,
sizeof(msg->ipu6.stream), cmd_type);
}
-int ipu6_fw_isys_stream_capture(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg)
+static int ipu6_fw_isys_stream_capture(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg)
{
return ipu6_fw_isys_complex_cmd(isys, stream_handle,
&msg->ipu6.stream, msg->dma_addr,
@@ -918,10 +919,9 @@ ipu6_isys_buf_to_fw_frame_buf_pin(struct vb2_buffer *vb,
* buffer list is not modified.
*/
#define IPU6_ISYS_FRAME_NUM_THRESHOLD (30)
-void
-ipu6_fw_isys_prepare_buf_set(struct isys_fw_msgs *msg,
- struct ipu6_isys_stream *stream,
- struct ipu6_isys_buffer_list *bl)
+static void ipu6_fw_isys_prepare_buf_set(struct isys_fw_msgs *msg,
+ struct ipu6_isys_stream *stream,
+ struct ipu6_isys_buffer_list *bl)
{
struct ipu6_fw_isys_frame_buff_set_abi *set = &msg->ipu6.frame;
struct ipu6_isys_buffer *ib;
@@ -952,3 +952,18 @@ ipu6_fw_isys_prepare_buf_set(struct isys_fw_msgs *msg,
ipu6_isys_buf_to_fw_frame_buf_pin(vb, set);
}
}
+
+const struct ipu6_fw_isys_ops ipu6_fw_isys_ops = {
+ .init = ipu6_fw_isys_init,
+ .close = ipu6_fw_isys_close,
+ .cleanup = ipu6_fw_isys_cleanup,
+ .prepare_stream_cfg = ipu6_fw_isys_prepare_stream_cfg,
+ .prepare_buf_set = ipu6_fw_isys_prepare_buf_set,
+ .stream_open = ipu6_fw_isys_stream_open,
+ .stream_start = ipu6_fw_isys_stream_start,
+ .stream_capture = ipu6_fw_isys_stream_capture,
+ .stream_flush = ipu6_fw_isys_stream_flush,
+ .stream_close = ipu6_fw_isys_stream_close,
+ .dump_stream_cfg = ipu6_fw_isys_dump_stream_cfg,
+ .dump_frame_buf_set = ipu6_fw_isys_dump_frame_buf_set,
+};
diff --git a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.h
b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.h
index b589ae7fbd4e..2a679d995961 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.h
@@ -559,42 +559,10 @@ struct ipu6_fw_proxy_send_queue_token {
u32 value;
};
-int ipu6_fw_isys_init(struct ipu6_isys *isys, unsigned int num_streams);
-int ipu6_fw_isys_close(struct ipu6_isys *isys);
-int ipu6_fw_isys_send_proxy_token(struct ipu6_isys *isys,
- unsigned int req_id,
- unsigned int index,
- unsigned int offset, u32 value);
-void ipu6_fw_isys_cleanup(struct ipu6_isys *isys);
-struct ipu6_fw_isys_resp_info_abi *
-ipu6_fw_isys_get_resp(struct ipu6_isys *isys);
-void ipu6_fw_isys_put_resp(struct ipu6_isys *isys);
+int ipu6_fw_isys_send_proxy_token(struct ipu6_isys *isys, unsigned int req_id,
+ unsigned int index, unsigned int offset,
+ u32 value);
int ipu6_isys_isr_one(struct ipu6_bus_device *adev);
irqreturn_t ipu6_isys_isr(struct ipu6_bus_device *adev);
-int ipu6_fw_isys_stream_open(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg);
-int ipu6_fw_isys_stream_close(struct ipu6_isys *isys,
- const unsigned int stream_handle);
-int ipu6_fw_isys_stream_flush(struct ipu6_isys *isys,
- const unsigned int stream_handle);
-int ipu6_fw_isys_stream_start(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg, bool capture);
-int ipu6_fw_isys_stream_capture(struct ipu6_isys *isys,
- const unsigned int stream_handle,
- struct isys_fw_msgs *msg);
-int ipu6_fw_isys_prepare_stream_cfg(struct ipu6_isys_video *av,
- struct isys_fw_msgs *msg);
-void
-ipu6_fw_isys_prepare_buf_set(struct isys_fw_msgs *msg,
- struct ipu6_isys_stream *stream,
- struct ipu6_isys_buffer_list *bl);
-void
-ipu6_fw_isys_dump_stream_cfg(struct device *dev, struct isys_fw_msgs *set);
-void
-ipu6_fw_isys_dump_frame_buff_set(struct device *dev, struct isys_fw_msgs *set,
- unsigned int outputs);
-
#endif
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c
b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c
index 9f6f283600c8..4cb1741445c6 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c
@@ -237,8 +237,10 @@ static int buffer_list_get(struct ipu6_isys_stream *stream,
static int ipu6_isys_stream_start(struct ipu6_isys_video *av,
struct ipu6_isys_buffer_list *bl)
{
+ struct ipu6_bus_device *adev = av->isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
struct ipu6_isys_stream *stream = av->stream;
- struct device *dev = &stream->isys->adev->auxdev.dev;
+ struct device *dev = &adev->auxdev.dev;
struct ipu6_isys_buffer_list __bl;
int ret;
@@ -262,14 +264,13 @@ static int ipu6_isys_stream_start(struct ipu6_isys_video
*av,
if (!msg)
return -ENOMEM;
- ipu6_fw_isys_prepare_buf_set(msg, stream, bl);
- ipu6_fw_isys_dump_frame_buff_set(dev, msg,
- stream->nr_output_pins);
+ fw_ops->prepare_buf_set(msg, stream, bl);
+ fw_ops->dump_frame_buf_set(dev, msg, stream->nr_output_pins);
ipu6_isys_buffer_list_queue(bl, IPU6_ISYS_BUFFER_LIST_FL_ACTIVE,
0);
- ret = ipu6_fw_isys_stream_capture(stream->isys,
- stream->stream_handle, msg);
+ ret = fw_ops->stream_capture(stream->isys,
+ stream->stream_handle, msg);
} while (!WARN_ON(ret));
return 0;
@@ -288,11 +289,13 @@ static void buf_queue(struct vb2_buffer *vb)
{
struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue);
struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq);
+ struct ipu6_bus_device *adev = av->isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
struct vb2_v4l2_buffer *vvb = to_vb2_v4l2_buffer(vb);
struct ipu6_isys_video_buffer *ivb =
vb2_buffer_to_ipu6_isys_video_buffer(vvb);
struct ipu6_isys_buffer *ib = &ivb->ib;
- struct device *dev = &av->isys->adev->auxdev.dev;
+ struct device *dev = &adev->auxdev.dev;
struct ipu6_isys_stream *stream = av->stream;
struct ipu6_isys_buffer_list bl;
struct isys_fw_msgs *msg;
@@ -339,8 +342,8 @@ static void buf_queue(struct vb2_buffer *vb)
goto out;
}
- ipu6_fw_isys_prepare_buf_set(msg, stream, &bl);
- ipu6_fw_isys_dump_frame_buff_set(dev, msg, stream->nr_output_pins);
+ fw_ops->prepare_buf_set(msg, stream, &bl);
+ fw_ops->dump_frame_buf_set(dev, msg, stream->nr_output_pins);
/*
* We must queue the buffers in the buffer list to the
@@ -350,8 +353,7 @@ static void buf_queue(struct vb2_buffer *vb)
*/
ipu6_isys_buffer_list_queue(&bl, IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, 0);
- ret = ipu6_fw_isys_stream_capture(stream->isys, stream->stream_handle,
- msg);
+ ret = fw_ops->stream_capture(stream->isys, stream->stream_handle, msg);
if (ret < 0)
dev_err(dev, "send stream capture failed\n");
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
index a6e50263f8da..803450b0156e 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
@@ -453,8 +453,10 @@ static void put_stream_opened(struct ipu6_isys_video *av)
static int start_stream_firmware(struct ipu6_isys_video *av,
struct ipu6_isys_buffer_list *bl)
{
+ struct ipu6_bus_device *adev = av->isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
struct ipu6_isys_stream *stream = av->stream;
- struct device *dev = &av->isys->adev->auxdev.dev;
+ struct device *dev = &adev->auxdev.dev;
struct isys_fw_msgs *msg = NULL;
int ret, retout, tout;
bool capture = bl ? true : false;
@@ -463,7 +465,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
if (!msg)
return -ENOMEM;
- ret = ipu6_fw_isys_prepare_stream_cfg(av, msg);
+ ret = fw_ops->prepare_stream_cfg(av, msg);
if (ret < 0) {
ipu6_put_fw_msg_buf(av->isys, msg);
return ret;
@@ -471,7 +473,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
reinit_completion(&stream->stream_open_completion);
- ret = ipu6_fw_isys_stream_open(av->isys, stream->stream_handle, msg);
+ ret = fw_ops->stream_open(av->isys, stream->stream_handle, msg);
if (ret < 0) {
dev_err(dev, "can't open stream (%d)\n", ret);
ipu6_put_fw_msg_buf(av->isys, msg);
@@ -504,15 +506,15 @@ static int start_stream_firmware(struct ipu6_isys_video
*av,
goto out_put_stream_opened;
}
- ipu6_fw_isys_prepare_buf_set(msg, stream, bl);
+ fw_ops->prepare_buf_set(msg, stream, bl);
ipu6_isys_buffer_list_queue(bl,
IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, 0);
}
reinit_completion(&stream->stream_start_completion);
- ret = ipu6_fw_isys_stream_start(av->isys, stream->stream_handle, msg,
- capture);
+ ret = fw_ops->stream_start(av->isys, stream->stream_handle, msg,
+ capture);
if (ret < 0) {
dev_err(dev, "can't start streaming (%d)\n", ret);
@@ -538,7 +540,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
out_stream_close:
reinit_completion(&stream->stream_close_completion);
- retout = ipu6_fw_isys_stream_close(av->isys, stream->stream_handle);
+ retout = fw_ops->stream_close(av->isys, stream->stream_handle);
if (retout < 0) {
dev_dbg(dev, "can't close stream (%d)\n", retout);
goto out_put_stream_opened;
@@ -561,13 +563,15 @@ out_put_stream_opened:
static void stop_streaming_firmware(struct ipu6_isys_video *av)
{
- struct device *dev = &av->isys->adev->auxdev.dev;
+ struct ipu6_bus_device *adev = av->isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
+ struct device *dev = &adev->auxdev.dev;
struct ipu6_isys_stream *stream = av->stream;
int ret, tout;
reinit_completion(&stream->stream_stop_completion);
- ret = ipu6_fw_isys_stream_flush(av->isys, stream->stream_handle);
+ ret = fw_ops->stream_flush(av->isys, stream->stream_handle);
if (ret < 0) {
dev_err(dev, "can't stop stream (%d)\n", ret);
return;
@@ -585,13 +589,15 @@ static void stop_streaming_firmware(struct
ipu6_isys_video *av)
static void close_streaming_firmware(struct ipu6_isys_video *av)
{
+ struct ipu6_bus_device *adev = av->isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
struct ipu6_isys_stream *stream = av->stream;
- struct device *dev = &av->isys->adev->auxdev.dev;
+ struct device *dev = &adev->auxdev.dev;
int ret, tout;
reinit_completion(&stream->stream_close_completion);
- ret = ipu6_fw_isys_stream_close(av->isys, stream->stream_handle);
+ ret = fw_ops->stream_close(av->isys, stream->stream_handle);
if (ret < 0) {
dev_err(dev, "can't close stream (%d)\n", ret);
return;
@@ -990,6 +996,7 @@ static const struct v4l2_file_operations isys_fops = {
int ipu6_isys_fw_open(struct ipu6_isys *isys)
{
struct ipu6_bus_device *adev = isys->adev;
+ const struct ipu6_fw_isys_ops *fw_ops = adev->auxdrv_data->fw_ops;
const struct ipu6_isys_internal_pdata *ipdata = isys->pdata->ipdata;
int ret;
@@ -1018,10 +1025,10 @@ int ipu6_isys_fw_open(struct ipu6_isys *isys)
* restarting isys we can safely delete old context.
*/
dev_warn(&adev->auxdev.dev, "clearing old context\n");
- ipu6_fw_isys_cleanup(isys);
+ fw_ops->cleanup(isys);
}
- ret = ipu6_fw_isys_init(isys, ipdata->num_parallel_streams);
+ ret = fw_ops->init(isys, ipdata->num_parallel_streams);
if (ret < 0)
goto out;
@@ -1044,7 +1051,7 @@ void ipu6_isys_fw_close(struct ipu6_isys *isys)
isys->ref_count--;
if (!isys->ref_count) {
- ipu6_fw_isys_close(isys);
+ isys->adev->auxdrv_data->fw_ops->close(isys);
if (isys->fwctx) {
isys->need_reset = true;
dev_warn(&isys->adev->auxdev.dev,
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c
b/drivers/media/pci/intel/ipu6/ipu6-isys.c
index bb3c0d6bc6c9..159e769931b7 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c
@@ -1068,6 +1068,7 @@ static const struct ipu6_auxdrv_data
ipu6_isys_auxdrv_data = {
.isr = ipu6_isys_isr,
.isr_threaded = NULL,
.wake_isr_thread = false,
+ .fw_ops = &ipu6_fw_isys_ops,
};
static const struct auxiliary_device_id ipu6_isys_id_table[] = {
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h
b/drivers/media/pci/intel/ipu6/ipu6-isys.h
index f39566513a87..fa9bc2730d64 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h
@@ -174,6 +174,38 @@ struct isys_fw_msgs {
dma_addr_t dma_addr;
};
+struct ipu6_fw_isys_ops {
+ int (*init)(struct ipu6_isys *isys, unsigned int num_streams);
+ int (*close)(struct ipu6_isys *isys);
+ int (*send_cmd)(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ void *cpu_mapped_buf,
+ dma_addr_t dma_mapped_buf,
+ size_t size, u16 send_type);
+ void (*cleanup)(struct ipu6_isys *isys);
+ int (*prepare_stream_cfg)(struct ipu6_isys_video *av,
+ struct isys_fw_msgs *msg);
+ void (*prepare_buf_set)(struct isys_fw_msgs *msg,
+ struct ipu6_isys_stream *stream,
+ struct ipu6_isys_buffer_list *bl);
+ int (*stream_open)(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg);
+ int (*stream_start)(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg, bool capture);
+ int (*stream_capture)(struct ipu6_isys *isys,
+ const unsigned int stream_handle,
+ struct isys_fw_msgs *msg);
+ int (*stream_flush)(struct ipu6_isys *isys,
+ const unsigned int stream_handle);
+ int (*stream_close)(struct ipu6_isys *isys,
+ const unsigned int stream_handle);
+ void (*dump_stream_cfg)(struct device *dev, struct isys_fw_msgs *msg);
+ void (*dump_frame_buf_set)(struct device *dev, struct isys_fw_msgs *msg,
+ unsigned int outputs);
+};
+
struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu6_isys_stream *stream);
void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, struct isys_fw_msgs *msg);
void ipu6_cleanup_fw_msg_bufs(struct ipu6_isys *isys);
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]