Lines Matching refs:rd

101 static void rd_write(struct msm_rd_state *rd, const void *buf, int sz)  in rd_write()  argument
103 struct circ_buf *fifo = &rd->fifo; in rd_write()
110 wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0 || !rd->open); in rd_write()
111 if (!rd->open) in rd_write()
118 n = min(sz, circ_space_to_end(&rd->fifo)); in rd_write()
125 wake_up_all(&rd->fifo_event); in rd_write()
129 static void rd_write_section(struct msm_rd_state *rd, in rd_write_section() argument
132 rd_write(rd, &type, 4); in rd_write_section()
133 rd_write(rd, &sz, 4); in rd_write_section()
134 rd_write(rd, buf, sz); in rd_write_section()
140 struct msm_rd_state *rd = file->private_data; in rd_read() local
141 struct circ_buf *fifo = &rd->fifo; in rd_read()
145 mutex_lock(&rd->read_lock); in rd_read()
147 ret = wait_event_interruptible(rd->fifo_event, in rd_read()
148 circ_count(&rd->fifo) > 0); in rd_read()
156 n = min_t(int, sz, circ_count_to_end(&rd->fifo)); in rd_read()
165 wake_up_all(&rd->fifo_event); in rd_read()
168 mutex_unlock(&rd->read_lock); in rd_read()
176 struct msm_rd_state *rd = inode->i_private; in rd_open() local
177 struct drm_device *dev = rd->dev; in rd_open()
186 if (rd->open || !gpu) { in rd_open()
191 file->private_data = rd; in rd_open()
192 rd->open = true; in rd_open()
200 rd_write_section(rd, RD_GPU_ID, &gpu_id, sizeof(gpu_id)); in rd_open()
209 struct msm_rd_state *rd = inode->i_private; in rd_release() local
211 rd->open = false; in rd_release()
212 wake_up_all(&rd->fifo_event); in rd_release()
227 static void rd_cleanup(struct msm_rd_state *rd) in rd_cleanup() argument
229 if (!rd) in rd_cleanup()
232 mutex_destroy(&rd->read_lock); in rd_cleanup()
233 kfree(rd); in rd_cleanup()
238 struct msm_rd_state *rd; in rd_init() local
240 rd = kzalloc(sizeof(*rd), GFP_KERNEL); in rd_init()
241 if (!rd) in rd_init()
244 rd->dev = minor->dev; in rd_init()
245 rd->fifo.buf = rd->buf; in rd_init()
247 mutex_init(&rd->read_lock); in rd_init()
249 init_waitqueue_head(&rd->fifo_event); in rd_init()
251 debugfs_create_file(name, S_IFREG | S_IRUGO, minor->debugfs_root, rd, in rd_init()
254 return rd; in rd_init()
260 struct msm_rd_state *rd; in msm_rd_debugfs_init() local
264 if (priv->rd) in msm_rd_debugfs_init()
267 rd = rd_init(minor, "rd"); in msm_rd_debugfs_init()
268 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
269 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
273 priv->rd = rd; in msm_rd_debugfs_init()
275 rd = rd_init(minor, "hangrd"); in msm_rd_debugfs_init()
276 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
277 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
281 priv->hangrd = rd; in msm_rd_debugfs_init()
292 rd_cleanup(priv->rd); in msm_rd_debugfs_cleanup()
293 priv->rd = NULL; in msm_rd_debugfs_cleanup()
299 static void snapshot_buf(struct msm_rd_state *rd, in snapshot_buf() argument
318 rd_write_section(rd, RD_GPUADDR, in snapshot_buf()
335 rd_write_section(rd, RD_BUFFER_CONTENTS, buf, size); in snapshot_buf()
344 void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit, in msm_rd_dump_submit() argument
352 if (!rd->open) in msm_rd_dump_submit()
367 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
382 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
385 snapshot_buf(rd, submit, i, 0, 0, should_dump(submit, i)); in msm_rd_dump_submit()
392 snapshot_buf(rd, submit, submit->cmd[i].idx, in msm_rd_dump_submit()
410 rd_write_section(rd, RD_CMDSTREAM_ADDR, in msm_rd_dump_submit()