mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-25 02:32:08 +03:00
nvidia-oot: add support for extended IVC driver
Using this patch we are doing below activities:- 1. Use as much as possible source code possible from upstream driver. 2. If there is static function that needs to be exported to downstream driver then make a local copy of that. 3. add support for extended ivc driver since upstream driver does not have support for all required APIs. Bug 3595577 JIRA ESLC-6884 Signed-off-by: Manish Bhardwaj <mbhardwaj@nvidia.com> Change-Id: Id6c70525e378a80d9059f49f879909c88c55cb4f Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2764453 Reviewed-by: Suresh Venkatachalam <skathirampat@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
41a9763998
commit
8c66804775
120
include/soc/tegra/ivc_ext.h
Normal file
120
include/soc/tegra/ivc_ext.h
Normal file
@@ -0,0 +1,120 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __TEGRA_IVC_EXT_H
|
||||
#define __TEGRA_IVC_EXT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <soc/tegra/ivc.h>
|
||||
|
||||
/**
|
||||
* tegra_ivc_channel_notified - notifies the peer device
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* notifies the peer device
|
||||
*
|
||||
* Returns 0 if success else -EAGAIN in case of failure.
|
||||
*/
|
||||
int tegra_ivc_channel_notified(struct tegra_ivc *ivc);
|
||||
|
||||
/**
|
||||
* tegra_ivc_channel_reset - Resets the channel state
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Resets the channel state
|
||||
*/
|
||||
void tegra_ivc_channel_reset(struct tegra_ivc *ivc);
|
||||
|
||||
/**
|
||||
* tegra_ivc_empty - Checks whether channel is empty or not
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Checks whether channel is empty or not to read or write
|
||||
*
|
||||
* Returns true if channel is empty to read or write.
|
||||
*/
|
||||
bool tegra_ivc_empty(struct tegra_ivc *ivc, struct tegra_ivc_header *header);
|
||||
|
||||
/**
|
||||
* tegra_ivc_channel_sync - Syncs the IVC channel accross reboots.
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Syncs the IVC channel accross reboots.
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int tegra_ivc_channel_sync(struct tegra_ivc *ivc);
|
||||
|
||||
/**
|
||||
* tegra_ivc_frames_available - Checks number of available frames.
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Checks number of available frames.
|
||||
*
|
||||
* Returns integer value indicating number of available frames..
|
||||
*/
|
||||
uint32_t tegra_ivc_frames_available(struct tegra_ivc *ivc, struct tegra_ivc_header *header);
|
||||
|
||||
/**
|
||||
* tegra_ivc_can_read - Checks whether we can read from ivc channel
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Checks whether we can read from ivc channel or not
|
||||
*
|
||||
* Returns 1 for success and 0 for failure.
|
||||
*/
|
||||
int tegra_ivc_can_read(struct tegra_ivc *ivc);
|
||||
|
||||
/**
|
||||
* tegra_ivc_can_write - Checks whether we can write to ivc channel
|
||||
* @ivc pointer of the IVC channel
|
||||
*
|
||||
* Checks whether we can write to ivc channel or not
|
||||
*
|
||||
* Returns 1 for success and 0 for failure.
|
||||
*/
|
||||
int tegra_ivc_can_write(struct tegra_ivc *ivc);
|
||||
|
||||
/**
|
||||
* tegra_ivc_read - Reads frame form ivc channel
|
||||
* @ivc pointer of the IVC channel
|
||||
* @usr_buf user buffer to be updated with data
|
||||
* @buf kernel buffer to be updated with data
|
||||
* @max_read max data ro be read form ivc channel
|
||||
*
|
||||
* Reads frame form ivc channel
|
||||
*
|
||||
* Returns no. of bytes read from ivc channel else return error.
|
||||
*/
|
||||
int tegra_ivc_read(struct tegra_ivc *ivc, void __user *usr_buf, void *buf, size_t max_read);
|
||||
|
||||
/**
|
||||
* tegra_ivc_read_peek - Reads frame form ivc channel
|
||||
* @ivc pointer of the IVC channel
|
||||
* @usr_buf user buffer to be updated with data
|
||||
* @buf kernel buffer to be updated with data
|
||||
* @offset kernel buffer to be updated with data from some offset
|
||||
* @size max data ro be read form ivc channel
|
||||
*
|
||||
* Reads frame form ivc channel from some offset
|
||||
*
|
||||
* Returns no. of bytes read from ivc channel else return error.
|
||||
*/
|
||||
int tegra_ivc_read_peek(struct tegra_ivc *ivc, void __user *usr_buf, void *buf, size_t offset, size_t size);
|
||||
|
||||
/**
|
||||
* tegra_ivc_write - Writes frame to ivc channel
|
||||
* @ivc pointer of the IVC channel
|
||||
* @usr_buf user buffer to e written to ivc channel
|
||||
* @buf kernel buffer to be written to ivc channel
|
||||
* @size Data size to be written to ivc channel
|
||||
*
|
||||
* Writes frame to ivc channel
|
||||
*
|
||||
* Returns no. of bytes written to ivc channel else return error.
|
||||
*/
|
||||
int tegra_ivc_write(struct tegra_ivc *ivc, const void __user *usr_buf, const void *buf, size_t size);
|
||||
|
||||
#endif /* __TEGRA_IVC_EXT_H */
|
||||
Reference in New Issue
Block a user