tegrakernel/kernel/nvidia/include/linux/tegra-capture-ivc.h

130 lines
4.4 KiB
C
Raw Permalink Normal View History

2022-02-16 09:13:02 -06:00
/*
* Tegra capture IVC driver.
*
* Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved.
*
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto. Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA CORPORATION is strictly prohibited.
*/
#ifndef INCLUDE_CAPTURE_IVC_H
#define INCLUDE_CAPTURE_IVC_H
#include <linux/types.h>
/*
* Submit the control message binary blob to capture-IVC driver,
* which is to be transfered over control IVC channel to RTCPU.
*
* @param[in] control_desc: binary blob containing control message descriptor,
* is opaque to capture-IVC driver.
* @param[in] len: size of control_desc.
*/
int tegra_capture_ivc_control_submit(const void *control_desc, size_t len);
/*
* Submit the capture message binary blob to capture-IVC driver,
* which is to be transfered over capture IVC channel to RTCPU.
*
* @param[in] capture_desc: binary blob containing capture message descriptor,
* is opaque to KMDs.
* @param[in] len: size of capture_desc.
*/
int tegra_capture_ivc_capture_submit(const void *capture_desc, size_t len);
/*
* Callback function to be registered by client to receive the rtcpu
* notifications through control or capture IVC channel.
*
* @param[in] resp_desc: binary blob containing the response message received
* from rtcpu through control or capture IVC channel, its opaque to KMDs.
* @param[in] priv_context: Client's private context, opaque to
* capture-IVC driver.
*/
typedef void (*tegra_capture_ivc_cb_func)(const void *resp_desc,
const void *priv_context);
/*
* Register callback function to receive response messages from rtcpu through
* control IVC channel.
*
* @param[in] control_resp_cb: callback function to be registered for
* control IVC channel.
* @param[in] priv_context: client's private context, opaque to
* capture-IVC driver.
* @param[out] trans_id: temporary id assigned by capture-IVC driver, for the
* clients whose unique chan_id is not yet allocated by RTCPU, to match their
* responses with the requests.
*
*/
int tegra_capture_ivc_register_control_cb(
tegra_capture_ivc_cb_func control_resp_cb,
uint32_t *trans_id, const void *priv_context);
/*
* Notify clients channel ID to capture-IVC driver.
*
* Once client gets the newly allocated channel ID from RTCPU, it has to
* notify it to capture-IVC driver also, so that it can replace the temporary
* ID trans_id with the new channel ID chan_id in its internal context.
* IVC driver uses this unique channel ID for mapping upcoming responses
* with the client requests.
*
* @param[in] chan_id: new channel id allocated by RTCPU for the client,
* capture-IVC driver uses to refer the client for its future control responses.
* @param[in] trans_id: temporary id assigned by capture-IVC driver,
* for the client.
*/
int tegra_capture_ivc_notify_chan_id(uint32_t chan_id, uint32_t trans_id);
/*
* Register callback function to receive status-indication messages from
* rtcpu through capture IVC channel.
*
* @param[in] capture_status_ind_cb: callback function to be registered for
* capture ivc channel.
* @param[in] chan_id: client's channel id, capture-IVC driver uses it refer
* the client for its capture responses.
* @param[in] priv_context: client's private context, opaque to
* capture-IVC driver.
*/
int tegra_capture_ivc_register_capture_cb(
tegra_capture_ivc_cb_func capture_status_ind_cb,
uint32_t chan_id, const void *priv_context);
/*
* Un-register callback function to stop receiving messages over control ivc
* channel.
*
* @param[in] id: client's channel id or transaction id, for which the callback
* needs to be unregistered.
*/
int tegra_capture_ivc_unregister_control_cb(uint32_t id);
/*
* Un-register callback function to stop receiving messages over capture ivc
* channel.
*
* @param[in] chan_id: client's channel id, for which the callback needs to be
* unregistered.
*/
int tegra_capture_ivc_unregister_capture_cb(uint32_t chan_id);
/*
* Read number of pending capture control ivc messages
*
*/
int tegra_capture_ivc_capture_control_can_read(void);
/*
* Read number of pending capture status ivc messages
*
*/
int tegra_capture_ivc_capture_status_can_read(void);
#endif /* INCLUDE_CAPTURE_IVC_H */