diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-10-26 11:29:56 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-11-02 08:09:59 -0400 |
commit | 23c7903eff6ee1ab184dfcc62c054de1557e5b1d (patch) | |
tree | a5122028e181e5c6009f9f8b66bfbf00f69a9290 /drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |
parent | 5f8cfaa250f08499f587da0097f6accaa5eedf15 (diff) |
gpu: nvgpu: move submit path to linux
Nvgpu submit path has a lot of dependency on Linux framework
e.g. use of copy_from_user, use of structures defined in uapi/nvgpu headers,
dma_buf_* calls for trace support etc
Hence to keep common code independent of Linux code, move submit path to
Linux directory
Move below APIs to common/linux/channel.c
trace_write_pushbuffer()
trace_write_pushbuffer_range()
gk20a_submit_prepare_syncs()
gk20a_submit_append_priv_cmdbuf()
gk20a_submit_append_gpfifo()
gk20a_submit_channel_gpfifo()
Move below APIs to common/linux/ce2.c
gk20a_ce_execute_ops()
Define gk20a_ce_execute_ops() in common/linux/ce2.c, and declare it in
gk20a/ce2_gk20a.h since it is needed in common/mm code too
Each OS needs to implement this API separately
gk20a_channel_alloc_gpfifo() use sizeof(nvgpu_gpfifo) to get size of one gpfifo
entry, but structure nvgpu_gpfifo is linux specific
Define new nvgpu_get_gpfifo_entry_size() in linux specific code and use it
in gk20a_channel_alloc_gpfifo() to get gpfifo entry size
Each OS needs to implement this API separately
Export some APIs from gk20a/ce2_gk20a.h and gk20a/channel_gk20a.h that are
needed in linux code
Jira NVGPU-259
Jira NVGPU-313
Change-Id: I360c6cb8ce4494b1e50c66af334a2a379f0d2dc4
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1586277
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 4b1cb351..cdf75a9a 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |||
@@ -24,6 +24,9 @@ | |||
24 | #ifndef CHANNEL_GK20A_H | 24 | #ifndef CHANNEL_GK20A_H |
25 | #define CHANNEL_GK20A_H | 25 | #define CHANNEL_GK20A_H |
26 | 26 | ||
27 | /* TODO: To be removed when work_struct update_fn_work is moved out of common code */ | ||
28 | #include <linux/workqueue.h> | ||
29 | |||
27 | #include <linux/stacktrace.h> | 30 | #include <linux/stacktrace.h> |
28 | #include <nvgpu/list.h> | 31 | #include <nvgpu/list.h> |
29 | 32 | ||
@@ -374,16 +377,6 @@ struct channel_gk20a *gk20a_open_new_channel_with_cb(struct gk20a *g, | |||
374 | int runlist_id, | 377 | int runlist_id, |
375 | bool is_privileged_channel); | 378 | bool is_privileged_channel); |
376 | 379 | ||
377 | int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, | ||
378 | struct nvgpu_gpfifo *gpfifo, | ||
379 | struct nvgpu_submit_gpfifo_args *args, | ||
380 | u32 num_entries, | ||
381 | u32 flags, | ||
382 | struct nvgpu_fence *fence, | ||
383 | struct gk20a_fence **fence_out, | ||
384 | bool force_need_sync_fence, | ||
385 | struct fifo_profile_gk20a *profile); | ||
386 | |||
387 | int gk20a_channel_alloc_gpfifo(struct channel_gk20a *c, | 380 | int gk20a_channel_alloc_gpfifo(struct channel_gk20a *c, |
388 | unsigned int num_entries, | 381 | unsigned int num_entries, |
389 | unsigned int num_inflight_jobs, | 382 | unsigned int num_inflight_jobs, |
@@ -408,4 +401,20 @@ int gk20a_channel_set_runlist_interleave(struct channel_gk20a *ch, | |||
408 | void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, | 401 | void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, |
409 | u32 event_id); | 402 | u32 event_id); |
410 | 403 | ||
404 | int channel_gk20a_alloc_job(struct channel_gk20a *c, | ||
405 | struct channel_gk20a_job **job_out); | ||
406 | void channel_gk20a_free_job(struct channel_gk20a *c, | ||
407 | struct channel_gk20a_job *job); | ||
408 | u32 nvgpu_get_gp_free_count(struct channel_gk20a *c); | ||
409 | u32 nvgpu_gp_free_count(struct channel_gk20a *c); | ||
410 | int gk20a_channel_add_job(struct channel_gk20a *c, | ||
411 | struct channel_gk20a_job *job, | ||
412 | bool skip_buffer_refcounting); | ||
413 | void free_priv_cmdbuf(struct channel_gk20a *c, | ||
414 | struct priv_cmd_entry *e); | ||
415 | void gk20a_channel_clean_up_jobs(struct channel_gk20a *c, | ||
416 | bool clean_all); | ||
417 | |||
418 | u32 nvgpu_get_gpfifo_entry_size(void); | ||
419 | |||
411 | #endif /* CHANNEL_GK20A_H */ | 420 | #endif /* CHANNEL_GK20A_H */ |