summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h29
1 files changed, 5 insertions, 24 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
index 1a6de3a8..d50ce844 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
@@ -21,18 +21,10 @@
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE. 22 * DEALINGS IN THE SOFTWARE.
23 */ 23 */
24#ifndef DBG_GPU_GK20A_H 24#ifndef DBG_GPU_H
25#define DBG_GPU_GK20A_H 25#define DBG_GPU_H
26#include <linux/poll.h>
27 26
28/* module debug driver interface */ 27#include <nvgpu/cond.h>
29int gk20a_dbg_gpu_dev_release(struct inode *inode, struct file *filp);
30int gk20a_dbg_gpu_dev_open(struct inode *inode, struct file *filp);
31long gk20a_dbg_gpu_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
32unsigned int gk20a_dbg_gpu_dev_poll(struct file *filep, poll_table *wait);
33
34/* used by profiler driver interface */
35int gk20a_prof_gpu_dev_open(struct inode *inode, struct file *filp);
36 28
37/* used by the interrupt handler to post events */ 29/* used by the interrupt handler to post events */
38void gk20a_dbg_gpu_post_events(struct channel_gk20a *fault_ch); 30void gk20a_dbg_gpu_post_events(struct channel_gk20a *fault_ch);
@@ -70,8 +62,6 @@ struct dbg_session_gk20a {
70 struct regops_whitelist *global; 62 struct regops_whitelist *global;
71 struct regops_whitelist *per_context; 63 struct regops_whitelist *per_context;
72 64
73 /* gpu module vagaries */
74 struct device *dev;
75 struct gk20a *g; 65 struct gk20a *g;
76 66
77 /* list of bound channels, if any */ 67 /* list of bound channels, if any */
@@ -99,18 +89,12 @@ dbg_session_data_from_dbg_s_entry(struct nvgpu_list_node *node)
99}; 89};
100 90
101struct dbg_session_channel_data { 91struct dbg_session_channel_data {
102 /*
103 * We have to keep a ref to the _file_, not the channel, because
104 * close(channel_fd) is synchronous and would deadlock if we had an
105 * open debug session fd holding a channel ref at that time. Holding a
106 * ref to the file makes close(channel_fd) just drop a kernel ref to
107 * the file; the channel will close when the last file ref is dropped.
108 */
109 struct file *ch_f;
110 int channel_fd; 92 int channel_fd;
111 int chid; 93 int chid;
112 struct nvgpu_list_node ch_entry; 94 struct nvgpu_list_node ch_entry;
113 struct dbg_session_data *session_data; 95 struct dbg_session_data *session_data;
96 int (*unbind_single_channel)(struct dbg_session_gk20a *dbg_s,
97 struct dbg_session_channel_data *ch_data);
114}; 98};
115 99
116static inline struct dbg_session_channel_data * 100static inline struct dbg_session_channel_data *
@@ -135,9 +119,6 @@ dbg_profiler_object_data_from_prof_obj_entry(struct nvgpu_list_node *node)
135 ((uintptr_t)node - offsetof(struct dbg_profiler_object_data, prof_obj_entry)); 119 ((uintptr_t)node - offsetof(struct dbg_profiler_object_data, prof_obj_entry));
136}; 120};
137 121
138int dbg_unbind_single_channel_gk20a(struct dbg_session_gk20a *dbg_s,
139 struct dbg_session_channel_data *ch_data);
140
141bool gk20a_dbg_gpu_broadcast_stop_trigger(struct channel_gk20a *ch); 122bool gk20a_dbg_gpu_broadcast_stop_trigger(struct channel_gk20a *ch);
142int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch); 123int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch);
143 124