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()
195 rd->fifo.head = rd->fifo.tail = 0; in rd_open()
203 rd_write_section(rd, RD_GPU_ID, &gpu_id, sizeof(gpu_id)); in rd_open()
212 struct msm_rd_state *rd = inode->i_private; in rd_release() local
214 rd->open = false; in rd_release()
215 wake_up_all(&rd->fifo_event); in rd_release()
230 static void rd_cleanup(struct msm_rd_state *rd) in rd_cleanup() argument
232 if (!rd) in rd_cleanup()
235 mutex_destroy(&rd->read_lock); in rd_cleanup()
236 kfree(rd); in rd_cleanup()
241 struct msm_rd_state *rd; in rd_init() local
243 rd = kzalloc(sizeof(*rd), GFP_KERNEL); in rd_init()
244 if (!rd) in rd_init()
247 rd->dev = minor->dev; in rd_init()
248 rd->fifo.buf = rd->buf; in rd_init()
250 mutex_init(&rd->read_lock); in rd_init()
252 init_waitqueue_head(&rd->fifo_event); in rd_init()
254 debugfs_create_file(name, S_IFREG | S_IRUGO, minor->debugfs_root, rd, in rd_init()
257 return rd; in rd_init()
263 struct msm_rd_state *rd; in msm_rd_debugfs_init() local
267 if (priv->rd) in msm_rd_debugfs_init()
270 rd = rd_init(minor, "rd"); in msm_rd_debugfs_init()
271 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
272 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
276 priv->rd = rd; in msm_rd_debugfs_init()
278 rd = rd_init(minor, "hangrd"); in msm_rd_debugfs_init()
279 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
280 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
284 priv->hangrd = rd; in msm_rd_debugfs_init()
295 rd_cleanup(priv->rd); in msm_rd_debugfs_cleanup()
296 priv->rd = NULL; in msm_rd_debugfs_cleanup()
302 static void snapshot_buf(struct msm_rd_state *rd, in snapshot_buf() argument
321 rd_write_section(rd, RD_GPUADDR, in snapshot_buf()
337 rd_write_section(rd, RD_BUFFER_CONTENTS, buf, size); in snapshot_buf()
343 void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit, in msm_rd_dump_submit() argument
351 if (!rd->open) in msm_rd_dump_submit()
366 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
381 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
384 snapshot_buf(rd, submit, i, 0, 0, should_dump(submit, i)); in msm_rd_dump_submit()
391 snapshot_buf(rd, submit, submit->cmd[i].idx, in msm_rd_dump_submit()
409 rd_write_section(rd, RD_CMDSTREAM_ADDR, in msm_rd_dump_submit()