mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
Extend the existing NVGPU_GPU_IOCTL_OPEN_CHANNEL interface to allow opening channels for other than the primary (i.e., the graphics) runlists. This is required to push work to dGPU engines that have their own runlists, such as the asynchronous copy engines and the multimedia engines. Minor change - Added active_engines_list allocation and assignment for fifo_vgpu back end. JIRA DNVGPU-25 Change-Id: I3ed377e2c9a2b4dd72e8256463510a62c64e7a8f Signed-off-by: Lakshmanan M <lm@nvidia.com> Reviewed-on: http://git-master/r/1161541 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
71 lines
1.9 KiB
C
71 lines
1.9 KiB
C
/*
|
|
* Copyright (c) 2014-2016, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef __TSG_GK20A_H_
|
|
#define __TSG_GK20A_H_
|
|
|
|
#define NVGPU_INVALID_TSG_ID (-1)
|
|
|
|
bool gk20a_is_channel_marked_as_tsg(struct channel_gk20a *ch);
|
|
|
|
|
|
int gk20a_tsg_dev_release(struct inode *inode, struct file *filp);
|
|
int gk20a_tsg_dev_open(struct inode *inode, struct file *filp);
|
|
int gk20a_tsg_open(struct gk20a *g, struct file *filp);
|
|
long gk20a_tsg_dev_ioctl(struct file *filp,
|
|
unsigned int cmd, unsigned long arg);
|
|
|
|
int gk20a_init_tsg_support(struct gk20a *g, u32 tsgid);
|
|
void gk20a_init_tsg_ops(struct gpu_ops *gops);
|
|
|
|
struct tsg_gk20a {
|
|
struct gk20a *g;
|
|
|
|
bool in_use;
|
|
int tsgid;
|
|
|
|
struct kref refcount;
|
|
|
|
struct list_head ch_list;
|
|
int num_active_channels;
|
|
struct mutex ch_list_lock;
|
|
|
|
int timeslice_us;
|
|
int timeslice_timeout;
|
|
int timeslice_scale;
|
|
|
|
struct gr_ctx_desc *tsg_gr_ctx;
|
|
|
|
struct vm_gk20a *vm;
|
|
|
|
u32 interleave_level;
|
|
|
|
struct list_head event_id_list;
|
|
struct mutex event_id_list_lock;
|
|
|
|
u32 runlist_id;
|
|
};
|
|
|
|
int gk20a_enable_tsg(struct tsg_gk20a *tsg);
|
|
int gk20a_disable_tsg(struct tsg_gk20a *tsg);
|
|
int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg,
|
|
struct channel_gk20a *ch);
|
|
int gk20a_tsg_unbind_channel(struct channel_gk20a *ch);
|
|
|
|
void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg,
|
|
int event_id);
|
|
|
|
#endif /* __TSG_GK20A_H_ */
|