Lines Matching refs:pipe
62 rt_pipe_t *pipe; in pipe_fops_open() local
64 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_open()
65 if (!pipe) in pipe_fops_open()
70 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in pipe_fops_open()
74 pipe->reader += 1; in pipe_fops_open()
79 pipe->writer += 1; in pipe_fops_open()
83 pipe->fifo = rt_ringbuffer_create(pipe->bufsz); in pipe_fops_open()
84 if (pipe->fifo == RT_NULL) in pipe_fops_open()
91 if ((fd->flags & O_ACCMODE) == O_RDONLY && !pipe->writer) in pipe_fops_open()
94 rc = rt_condvar_timedwait(&pipe->waitfor_parter, &pipe->lock, in pipe_fops_open()
98 pipe->reader--; in pipe_fops_open()
103 rt_condvar_broadcast(&pipe->waitfor_parter); in pipe_fops_open()
107 rt_mutex_release(&pipe->lock); in pipe_fops_open()
124 rt_pipe_t *pipe; in pipe_fops_close() local
126 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_close()
127 if (!pipe) in pipe_fops_close()
132 device = &pipe->parent; in pipe_fops_close()
133 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in pipe_fops_close()
137 pipe->reader -= 1; in pipe_fops_close()
142 pipe->writer -= 1; in pipe_fops_close()
143 while (!rt_list_isempty(&pipe->reader_queue.waiting_list)) in pipe_fops_close()
145 rt_wqueue_wakeup(&pipe->reader_queue, (void*)POLLIN); in pipe_fops_close()
151 if (pipe->fifo != RT_NULL) in pipe_fops_close()
153 rt_ringbuffer_destroy(pipe->fifo); in pipe_fops_close()
155 pipe->fifo = RT_NULL; in pipe_fops_close()
158 rt_mutex_release(&pipe->lock); in pipe_fops_close()
160 if (fd->vnode->ref_count == 1 && pipe->is_named == RT_FALSE) in pipe_fops_close()
188 rt_pipe_t *pipe; in pipe_fops_ioctl() local
191 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_ioctl()
196 *((int*)args) = rt_ringbuffer_data_len(pipe->fifo); in pipe_fops_ioctl()
199 *((int*)args) = rt_ringbuffer_space_len(pipe->fifo); in pipe_fops_ioctl()
229 rt_pipe_t *pipe; in pipe_fops_read() local
231 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_read()
234 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in pipe_fops_read()
238 len = rt_ringbuffer_get(pipe->fifo, buf, count); in pipe_fops_read()
240 if (len > 0 || pipe->writer == 0) in pipe_fops_read()
252 rt_mutex_release(&pipe->lock); in pipe_fops_read()
253 rt_wqueue_wakeup(&pipe->writer_queue, (void*)POLLOUT); in pipe_fops_read()
254 if (rt_wqueue_wait_interruptible(&pipe->reader_queue, 0, -1) == -RT_EINTR) in pipe_fops_read()
256 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in pipe_fops_read()
261 rt_wqueue_wakeup(&pipe->writer_queue, (void*)POLLOUT); in pipe_fops_read()
264 rt_mutex_release(&pipe->lock); in pipe_fops_read()
288 rt_pipe_t *pipe; in pipe_fops_write() local
293 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_write()
301 rt_mutex_take(&pipe->lock, -1); in pipe_fops_write()
305 len = rt_ringbuffer_put(pipe->fifo, pbuf, count - ret); in pipe_fops_write()
327 rt_mutex_release(&pipe->lock); in pipe_fops_write()
328 rt_wqueue_wakeup(&pipe->reader_queue, (void*)POLLIN); in pipe_fops_write()
330 if (rt_wqueue_wait_interruptible(&pipe->writer_queue, 0, -1) == -RT_EINTR) in pipe_fops_write()
332 rt_mutex_take(&pipe->lock, -1); in pipe_fops_write()
334 rt_mutex_release(&pipe->lock); in pipe_fops_write()
338 rt_wqueue_wakeup(&pipe->reader_queue, (void*)POLLIN); in pipe_fops_write()
360 rt_pipe_t *pipe; in pipe_fops_poll() local
362 pipe = (rt_pipe_t *)fd->vnode->data; in pipe_fops_poll()
364 rt_poll_add(&pipe->reader_queue, req); in pipe_fops_poll()
365 rt_poll_add(&pipe->writer_queue, req); in pipe_fops_poll()
382 if (rt_ringbuffer_data_len(pipe->fifo) != 0) in pipe_fops_poll()
386 else if (pipe->writer == 0) in pipe_fops_poll()
394 if (rt_ringbuffer_space_len(pipe->fifo) != 0) in pipe_fops_poll()
428 rt_pipe_t *pipe = (rt_pipe_t *)device; in rt_pipe_open() local
437 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in rt_pipe_open()
439 if (pipe->fifo == RT_NULL) in rt_pipe_open()
441 pipe->fifo = rt_ringbuffer_create(pipe->bufsz); in rt_pipe_open()
442 if (pipe->fifo == RT_NULL) in rt_pipe_open()
448 rt_mutex_release(&pipe->lock); in rt_pipe_open()
465 rt_pipe_t *pipe = (rt_pipe_t *)device; in rt_pipe_close() local
471 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in rt_pipe_close()
473 rt_ringbuffer_destroy(pipe->fifo); in rt_pipe_close()
474 pipe->fifo = RT_NULL; in rt_pipe_close()
476 rt_mutex_release(&pipe->lock); in rt_pipe_close()
499 rt_pipe_t *pipe = (rt_pipe_t *)device; in rt_pipe_read() local
512 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in rt_pipe_read()
516 int len = rt_ringbuffer_get(pipe->fifo, &pbuf[read_bytes], count - read_bytes); in rt_pipe_read()
524 rt_mutex_release(&pipe->lock); in rt_pipe_read()
547 rt_pipe_t *pipe = (rt_pipe_t *)device; in rt_pipe_write() local
560 rt_mutex_take(&pipe->lock, RT_WAITING_FOREVER); in rt_pipe_write()
564 int len = rt_ringbuffer_put(pipe->fifo, &pbuf[write_bytes], count - write_bytes); in rt_pipe_write()
572 rt_mutex_release(&pipe->lock); in rt_pipe_write()
619 rt_pipe_t *pipe; in rt_pipe_create() local
630 pipe = (rt_pipe_t *)rt_malloc(sizeof(rt_pipe_t)); in rt_pipe_create()
631 if (pipe == RT_NULL) return RT_NULL; in rt_pipe_create()
633 rt_memset(pipe, 0, sizeof(rt_pipe_t)); in rt_pipe_create()
634 pipe->is_named = RT_TRUE; /* initialize as a named pipe */ in rt_pipe_create()
636 pipe->pipeno = -1; in rt_pipe_create()
638 rt_mutex_init(&pipe->lock, name, RT_IPC_FLAG_FIFO); in rt_pipe_create()
639 rt_wqueue_init(&pipe->reader_queue); in rt_pipe_create()
640 rt_wqueue_init(&pipe->writer_queue); in rt_pipe_create()
641 rt_condvar_init(&pipe->waitfor_parter, "piwfp"); in rt_pipe_create()
643 pipe->writer = 0; in rt_pipe_create()
644 pipe->reader = 0; in rt_pipe_create()
646 pipe->bufsz = bufsz; in rt_pipe_create()
648 dev = &pipe->parent; in rt_pipe_create()
664 rt_device_register(&pipe->parent, name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE); in rt_pipe_create()
670 return pipe; in rt_pipe_create()
694 rt_pipe_t *pipe; in rt_pipe_delete() local
696 pipe = (rt_pipe_t *)device; in rt_pipe_delete()
698 rt_condvar_detach(&pipe->waitfor_parter); in rt_pipe_delete()
699 rt_mutex_detach(&pipe->lock); in rt_pipe_delete()
701 resource_id_put(&id_mgr, pipe->pipeno); in rt_pipe_delete()
706 if (pipe->fifo) in rt_pipe_delete()
708 rt_ringbuffer_destroy(pipe->fifo); in rt_pipe_delete()
709 pipe->fifo = RT_NULL; in rt_pipe_delete()
711 rt_free(pipe); in rt_pipe_delete()
737 int pipe(int fildes[2]) in pipe() function
739 rt_pipe_t *pipe; in pipe() local
751 pipe = rt_pipe_create(dname, RT_USING_POSIX_PIPE_SIZE); in pipe()
752 if (pipe == RT_NULL) in pipe()
758 pipe->is_named = RT_FALSE; /* unamed pipe */ in pipe()
759 pipe->pipeno = pipeno; in pipe()
793 rt_pipe_t *pipe; in mkfifo() local
795 pipe = rt_pipe_create(path, RT_USING_POSIX_PIPE_SIZE); in mkfifo()
796 if (pipe == RT_NULL) in mkfifo()