61 lines · c
1/* SPDX-License-Identifier: MIT */2 3#ifndef __NOUVEAU_EXEC_H__4#define __NOUVEAU_EXEC_H__5 6#include "nouveau_drv.h"7#include "nouveau_sched.h"8 9struct nouveau_exec_job_args {10 struct drm_file *file_priv;11 struct nouveau_sched *sched;12 struct nouveau_channel *chan;13 14 struct {15 struct drm_nouveau_sync *s;16 u32 count;17 } in_sync;18 19 struct {20 struct drm_nouveau_sync *s;21 u32 count;22 } out_sync;23 24 struct {25 struct drm_nouveau_exec_push *s;26 u32 count;27 } push;28};29 30struct nouveau_exec_job {31 struct nouveau_job base;32 struct nouveau_fence *fence;33 struct nouveau_channel *chan;34 35 struct {36 struct drm_nouveau_exec_push *s;37 u32 count;38 } push;39};40 41#define to_nouveau_exec_job(job) \42 container_of((job), struct nouveau_exec_job, base)43 44int nouveau_exec_job_init(struct nouveau_exec_job **job,45 struct nouveau_exec_job_args *args);46 47int nouveau_exec_ioctl_exec(struct drm_device *dev, void *data,48 struct drm_file *file_priv);49 50static inline unsigned int51nouveau_exec_push_max_from_ib_max(int ib_max)52{53 /* Limit the number of IBs per job to half the size of the ring in order54 * to avoid the ring running dry between submissions and preserve one55 * more slot for the job's HW fence.56 */57 return ib_max > 1 ? ib_max / 2 - 1 : 0;58}59 60#endif61