blob: a16d8dcee00fd0732162f6f538887ee80f9d3d29 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2020 Amlogic, Inc. All rights reserved.
*/
#ifndef __VIDEO_TUNNEL_H
#define __VIDEO_TUNNEL_H
struct vt_session;
/**
* vt_session_create() - allocate a vt_session and return it
* @name: used for debugging
*/
struct vt_session *vt_session_create(const char *name);
/**
* vt_session_destroy() - free's a vt_session and it's all vt_buffers
* @session: the vt_session
*
* Free the provided session and all it's resources.
*/
void vt_session_destroy(struct vt_session *session);
/**
* vt_alloc_id() - allocate an unique videotunnel id
* @session: the vt_session
* @tunnel_id: tunnel id to return
*
* Return of a value other than 0 means an error has occurred.
*/
int vt_alloc_id(struct vt_session *session, int *tunnel_id);
/**
* vt_free_id() - free tunnel id allocated previous
* @session: the vt_session
* @tunnel_id: tunnel id to free
*
* Return of a value other than 0 means an error has occurred.
*/
int vt_free_id(struct vt_session *session, int tunnel_id);
/**
* vt_producer_connect() - producer connect to a sepecific videotunnel
* @session: the vt_session
* @tunnel_id: tunnel id on which to connect
*
* Before queue/deueue bufer, producer need connect to videotunnel.
* Return of a value other than 0 means an error has occurred.
*/
int vt_producer_connect(struct vt_session *session, int tunnel_id);
/**
* vt_prodecer_disconnect - producer disconnect to a sepecific videotunnel
* @session: the vt_session
* @tunnel_id: tunnel id on which to disconnect
*
* All the videotunnel buffer on the disconnected side will be freed.
* Return of a value other than 0 means an error has occurred.
*/
int vt_producer_disconnect(struct vt_session *session, int tunnel_id);
/**
* vt_queue_buffer - transfer ownership of the buffer to consumer
* @session: the vt_session
* @tunnel_id: tunnel id on which to queuebuffer
* @buffer_fd: buffer fd to transfer
* @fence_fd: acquire fence, not used currently
*
* Return of a value other than 0 means an error has occurred.
*/
int vt_queue_buffer(struct vt_session *session, int tunnel_id,
struct file *buffer_file,
int fence_fd, int64_t time_stamp);
/**
* vt_dequeue_buffer -requests a buffer from videotunnel to use.
* @session: the vt_session
* @tunnel_id: tunnel id on which to dequeuebuffer
* @buffer_fd: buffer fd to get from videotunnel
* @fence_fd: release fence not used currently, waited in vt driver
*
* Ownership of the buffer is transferred to the producer. The returned
* buffer is previous queued use vt_queue_buffer. If no buffer is pending,
* it returns -EAGAIN with a default 4ms timeout.
*/
int vt_dequeue_buffer(struct vt_session *session, int tunnel_id,
struct file **buffer_file, struct file **fence_file);
/**
* vt_send_cmd - send videotunnel cmd to server
* @session: the vt_session
* @tunnel_id: tunnel id on which to send cmd
* @cmd: vt cmd
* @cmd_data: dmc data
*/
int vt_send_cmd(struct vt_session *session, int tunnel_id,
enum vt_video_cmd_e cmd, int cmd_data);
#endif /* __VIDEO_TUNNEL_H */