Lines Matching refs:pipe
99 static u32 goldfish_cmd_status(struct goldfish_pipe *pipe, u32 cmd) in goldfish_cmd_status() argument
103 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_cmd_status()
106 gf_write_ptr(pipe, dev->base + PIPE_V1_REG_CHANNEL, in goldfish_cmd_status()
114 static void goldfish_cmd(struct goldfish_pipe *pipe, u32 cmd) in goldfish_cmd() argument
117 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_cmd()
120 gf_write_ptr(pipe, dev->base + PIPE_V1_REG_CHANNEL, in goldfish_cmd()
186 struct goldfish_pipe *pipe, int *status) in access_with_param() argument
194 aps->channel = (unsigned long)pipe; in access_with_param()
212 struct goldfish_pipe *pipe, in transfer_pages() argument
221 if (access_with_param(dev, cmd, xaddr, size, pipe, &status)) { in transfer_pages()
222 gf_write_ptr(pipe, dev->base + PIPE_V1_REG_CHANNEL, in transfer_pages()
249 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_read_write() local
250 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_pipe_read_write()
259 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_read_write()
275 if (mutex_lock_interruptible(&pipe->lock)) in goldfish_pipe_read_write()
337 status = transfer_pages(dev, pipe, pipe_cmd, xaddr, avail); in goldfish_pipe_read_write()
387 set_bit(wake_bit, &pipe->flags); in goldfish_pipe_read_write()
390 goldfish_cmd(pipe, pipe_cmd); in goldfish_pipe_read_write()
393 mutex_unlock(&pipe->lock); in goldfish_pipe_read_write()
395 while (test_bit(wake_bit, &pipe->flags)) { in goldfish_pipe_read_write()
396 if (wait_event_interruptible(pipe->wake_queue, in goldfish_pipe_read_write()
397 !test_bit(wake_bit, &pipe->flags))) in goldfish_pipe_read_write()
400 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_read_write()
405 if (mutex_lock_interruptible(&pipe->lock)) in goldfish_pipe_read_write()
408 mutex_unlock(&pipe->lock); in goldfish_pipe_read_write()
430 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_poll() local
434 if (mutex_lock_interruptible(&pipe->lock)) in goldfish_pipe_poll()
437 poll_wait(filp, &pipe->wake_queue, wait); in goldfish_pipe_poll()
439 status = goldfish_cmd_status(pipe, PIPE_CMD_POLL); in goldfish_pipe_poll()
441 mutex_unlock(&pipe->lock); in goldfish_pipe_poll()
452 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_poll()
472 struct goldfish_pipe *pipe; in goldfish_pipe_interrupt() local
486 pipe = (struct goldfish_pipe *)(ptrdiff_t)channel; in goldfish_pipe_interrupt()
490 set_bit(BIT_CLOSED_ON_HOST, &pipe->flags); in goldfish_pipe_interrupt()
494 clear_bit(BIT_WAKE_ON_READ, &pipe->flags); in goldfish_pipe_interrupt()
496 clear_bit(BIT_WAKE_ON_WRITE, &pipe->flags); in goldfish_pipe_interrupt()
498 wake_up_interruptible(&pipe->wake_queue); in goldfish_pipe_interrupt()
528 struct goldfish_pipe *pipe; in goldfish_pipe_open() local
532 pipe = kzalloc(sizeof(*pipe), GFP_KERNEL); in goldfish_pipe_open()
533 if (!pipe) in goldfish_pipe_open()
536 pipe->dev = dev; in goldfish_pipe_open()
537 init_waitqueue_head(&pipe->wake_queue); in goldfish_pipe_open()
538 mutex_init(&pipe->lock); in goldfish_pipe_open()
545 status = goldfish_cmd_status(pipe, PIPE_CMD_OPEN); in goldfish_pipe_open()
547 kfree(pipe); in goldfish_pipe_open()
552 file->private_data = pipe; in goldfish_pipe_open()
558 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_release() local
560 pr_debug("%s: call. pipe=%p file=%p\n", __func__, pipe, filp); in goldfish_pipe_release()
562 goldfish_cmd(pipe, PIPE_CMD_CLOSE); in goldfish_pipe_release()
563 kfree(pipe); in goldfish_pipe_release()