130 lines
4.4 KiB
C
130 lines
4.4 KiB
C
|
/*
|
|||
|
* 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 client’s 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 */
|