Lines Matching refs:rd
109 static void rd_write(struct msm_rd_state *rd, const void *buf, int sz) in rd_write() argument
111 struct circ_buf *fifo = &rd->fifo; in rd_write()
118 wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0); in rd_write()
124 n = min(sz, circ_space_to_end(&rd->fifo)); in rd_write()
131 wake_up_all(&rd->fifo_event); in rd_write()
135 static void rd_write_section(struct msm_rd_state *rd, in rd_write_section() argument
138 rd_write(rd, &type, 4); in rd_write_section()
139 rd_write(rd, &sz, 4); in rd_write_section()
140 rd_write(rd, buf, sz); in rd_write_section()
146 struct msm_rd_state *rd = file->private_data; in rd_read() local
147 struct circ_buf *fifo = &rd->fifo; in rd_read()
151 mutex_lock(&rd->read_lock); in rd_read()
153 ret = wait_event_interruptible(rd->fifo_event, in rd_read()
154 circ_count(&rd->fifo) > 0); in rd_read()
162 n = min_t(int, sz, circ_count_to_end(&rd->fifo)); in rd_read()
171 wake_up_all(&rd->fifo_event); in rd_read()
174 mutex_unlock(&rd->read_lock); in rd_read()
182 struct msm_rd_state *rd = inode->i_private; in rd_open() local
183 struct drm_device *dev = rd->dev; in rd_open()
192 if (rd->open || !gpu) { in rd_open()
197 file->private_data = rd; in rd_open()
198 rd->open = true; in rd_open()
206 rd_write_section(rd, RD_GPU_ID, &gpu_id, sizeof(gpu_id)); in rd_open()
215 struct msm_rd_state *rd = inode->i_private; in rd_release() local
216 rd->open = false; 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
245 rd = kzalloc(sizeof(*rd), GFP_KERNEL); in rd_init()
246 if (!rd) in rd_init()
249 rd->dev = minor->dev; in rd_init()
250 rd->fifo.buf = rd->buf; in rd_init()
252 mutex_init(&rd->read_lock); in rd_init()
254 init_waitqueue_head(&rd->fifo_event); in rd_init()
257 minor->debugfs_root, rd, &rd_debugfs_fops); in rd_init()
265 return rd; in rd_init()
268 rd_cleanup(rd); in rd_init()
275 struct msm_rd_state *rd; in msm_rd_debugfs_init() local
279 if (priv->rd) in msm_rd_debugfs_init()
282 rd = rd_init(minor, "rd"); in msm_rd_debugfs_init()
283 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
284 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
288 priv->rd = rd; in msm_rd_debugfs_init()
290 rd = rd_init(minor, "hangrd"); in msm_rd_debugfs_init()
291 if (IS_ERR(rd)) { in msm_rd_debugfs_init()
292 ret = PTR_ERR(rd); in msm_rd_debugfs_init()
296 priv->hangrd = rd; in msm_rd_debugfs_init()
307 rd_cleanup(priv->rd); in msm_rd_debugfs_cleanup()
308 priv->rd = NULL; in msm_rd_debugfs_cleanup()
314 static void snapshot_buf(struct msm_rd_state *rd, in snapshot_buf() argument
332 rd_write_section(rd, RD_GPUADDR, in snapshot_buf()
343 rd_write_section(rd, RD_BUFFER_CONTENTS, buf, size); in snapshot_buf()
349 void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit, in msm_rd_dump_submit() argument
357 if (!rd->open) in msm_rd_dump_submit()
372 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
387 rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); in msm_rd_dump_submit()
390 snapshot_buf(rd, submit, i, 0, 0); in msm_rd_dump_submit()
398 snapshot_buf(rd, submit, submit->cmd[i].idx, in msm_rd_dump_submit()
411 rd_write_section(rd, RD_CMDSTREAM_ADDR, in msm_rd_dump_submit()