Lines Matching refs:pipe
154 static u32 goldfish_cmd_status(struct goldfish_pipe *pipe, u32 cmd) in goldfish_cmd_status() argument
158 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_cmd_status()
161 gf_write64((u64)(unsigned long)pipe, dev->base + PIPE_REG_CHANNEL, in goldfish_cmd_status()
169 static void goldfish_cmd(struct goldfish_pipe *pipe, u32 cmd) in goldfish_cmd() argument
172 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_cmd()
175 gf_write64((u64)(unsigned long)pipe, dev->base + PIPE_REG_CHANNEL, in goldfish_cmd()
243 struct goldfish_pipe *pipe, int *status) in access_with_param() argument
251 aps->channel = (unsigned long)pipe; in access_with_param()
273 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_read_write() local
274 struct goldfish_pipe_dev *dev = pipe->dev; in goldfish_pipe_read_write()
281 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_read_write()
294 if (mutex_lock_interruptible(&pipe->lock)) in goldfish_pipe_read_write()
329 address, avail, pipe, &status)) { in goldfish_pipe_read_write()
330 gf_write64((u64)(unsigned long)pipe, in goldfish_pipe_read_write()
370 set_bit(wakeBit, &pipe->flags); in goldfish_pipe_read_write()
373 goldfish_cmd(pipe, CMD_WAKE_ON_WRITE + cmd_offset); in goldfish_pipe_read_write()
376 mutex_unlock(&pipe->lock); in goldfish_pipe_read_write()
378 while (test_bit(wakeBit, &pipe->flags)) { in goldfish_pipe_read_write()
380 pipe->wake_queue, in goldfish_pipe_read_write()
381 !test_bit(wakeBit, &pipe->flags))) in goldfish_pipe_read_write()
384 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_read_write()
389 if (mutex_lock_interruptible(&pipe->lock)) in goldfish_pipe_read_write()
395 mutex_unlock(&pipe->lock); in goldfish_pipe_read_write()
416 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_poll() local
420 mutex_lock(&pipe->lock); in goldfish_pipe_poll()
422 poll_wait(filp, &pipe->wake_queue, wait); in goldfish_pipe_poll()
424 status = goldfish_cmd_status(pipe, CMD_POLL); in goldfish_pipe_poll()
426 mutex_unlock(&pipe->lock); in goldfish_pipe_poll()
437 if (test_bit(BIT_CLOSED_ON_HOST, &pipe->flags)) in goldfish_pipe_poll()
456 struct goldfish_pipe *pipe; in goldfish_pipe_interrupt() local
473 pipe = (struct goldfish_pipe *)(ptrdiff_t)channel; in goldfish_pipe_interrupt()
477 set_bit(BIT_CLOSED_ON_HOST, &pipe->flags); in goldfish_pipe_interrupt()
481 clear_bit(BIT_WAKE_ON_READ, &pipe->flags); in goldfish_pipe_interrupt()
483 clear_bit(BIT_WAKE_ON_WRITE, &pipe->flags); in goldfish_pipe_interrupt()
485 wake_up_interruptible(&pipe->wake_queue); in goldfish_pipe_interrupt()
506 struct goldfish_pipe *pipe; in goldfish_pipe_open() local
511 pipe = kzalloc(sizeof(*pipe), GFP_KERNEL); in goldfish_pipe_open()
512 if (pipe == NULL) in goldfish_pipe_open()
515 pipe->dev = dev; in goldfish_pipe_open()
516 mutex_init(&pipe->lock); in goldfish_pipe_open()
517 init_waitqueue_head(&pipe->wake_queue); in goldfish_pipe_open()
524 status = goldfish_cmd_status(pipe, CMD_OPEN); in goldfish_pipe_open()
526 kfree(pipe); in goldfish_pipe_open()
531 file->private_data = pipe; in goldfish_pipe_open()
537 struct goldfish_pipe *pipe = filp->private_data; in goldfish_pipe_release() local
540 goldfish_cmd(pipe, CMD_CLOSE); in goldfish_pipe_release()
541 kfree(pipe); in goldfish_pipe_release()