Lines Matching refs:dev

96 static void pipecommon_pollnotify(struct pipe_dev_s *dev,
104 notify_poll_with_key(&dev->wq, eventset);
117 struct pipe_dev_s *dev = NULL;
127 dev = (struct pipe_dev_s *)malloc(sizeof(struct pipe_dev_s));
128 if (dev)
132 (void)memset_s(dev, sizeof(struct pipe_dev_s), 0, sizeof(struct pipe_dev_s));
133 ret = strcpy_s(dev->name, sizeof(dev->name), name);
136 free(dev);
139 sem_init(&dev->d_bfsem, 0, 1);
140 sem_init(&dev->d_rdsem, 0, 0);
141 sem_init(&dev->d_wrsem, 0, 0);
142 LOS_ListInit(&dev->wq.poll_queue);
147 dev->d_bufsize = bufsize;
150 return dev;
157 void pipecommon_freedev(struct pipe_dev_s *dev)
159 sem_destroy(&dev->d_bfsem);
160 sem_destroy(&dev->d_rdsem);
161 sem_destroy(&dev->d_wrsem);
162 free(dev);
172 struct pipe_dev_s *dev = (struct pipe_dev_s *)((struct drv_data *)vnode->data)->priv;
176 if (dev == NULL)
185 ret = sem_wait(&dev->d_bfsem);
197 if (vnode->useCount == 1 && dev->d_buffer == NULL)
199 dev->d_buffer = (uint8_t *)malloc(dev->d_bufsize);
200 if (!dev->d_buffer)
202 (void)sem_post(&dev->d_bfsem);
212 dev->d_nwriters++;
218 if (dev->d_nwriters == 1)
220 while (sem_getvalue(&dev->d_rdsem, &sval) == 0 && sval == 0)
222 sem_post(&dev->d_rdsem);
231 dev->d_nreaders++;
239 (void)sem_post(&dev->d_bfsem);
242 dev->d_nwriters < 1 && /* No writers on the pipe */
243 dev->d_wrndx == dev->d_rdndx) /* Buffer is empty */
254 ret = sem_wait(&dev->d_rdsem);
281 struct pipe_dev_s *dev = (struct pipe_dev_s *)((struct drv_data *)vnode->data)->priv;
284 if (dev == NULL || filep->f_vnode->useCount <= 1)
294 pipecommon_semtake(&dev->d_bfsem);
314 if (--dev->d_nwriters <= 0)
316 while (sem_getvalue(&dev->d_rdsem, &sval) == 0 && sval == 0)
318 sem_post(&dev->d_rdsem);
323 pipecommon_pollnotify(dev, POLLHUP);
333 if (--dev->d_nreaders <= 0)
335 if (PIPE_IS_POLICY_0(dev->d_flags))
339 pipecommon_pollnotify(dev, POLLERR);
351 else if (PIPE_IS_POLICY_0(dev->d_flags) || dev->d_wrndx == dev->d_rdndx)
355 free(dev->d_buffer);
356 dev->d_buffer = NULL;
360 dev->d_wrndx = 0;
361 dev->d_rdndx = 0;
362 dev->d_nwriters = 0;
363 dev->d_nreaders = 0;
368 sem_post(&dev->d_bfsem);
379 struct pipe_dev_s *dev = (struct pipe_dev_s *)((struct drv_data *)vnode->data)->priv;
385 if (dev == NULL)
402 ret = sem_wait(&dev->d_bfsem);
410 while (dev->d_wrndx == dev->d_rdndx)
416 sem_post(&dev->d_bfsem);
422 if (dev->d_nwriters <= 0)
424 sem_post(&dev->d_bfsem);
430 sem_post(&dev->d_bfsem);
431 ret = sem_wait(&dev->d_rdsem);
433 if (ret < 0 || (ret = sem_wait(&dev->d_bfsem)) < 0)
444 while ((size_t)nread < len && dev->d_wrndx != dev->d_rdndx)
446 ret = LOS_ArchCopyToUser(buffer, dev->d_buffer + dev->d_rdndx, sizeof(char));
449 sem_post(&dev->d_bfsem);
453 if (++dev->d_rdndx >= dev->d_bufsize)
455 dev->d_rdndx = 0;
470 while (sem_getvalue(&dev->d_wrsem, &sval) == 0 && sval == 0)
472 sem_post(&dev->d_wrsem);
480 pipecommon_pollnotify(dev, POLLOUT);
481 sem_post(&dev->d_bfsem);
487 if (dev->d_nwriters <= 0)
489 sem_post(&dev->d_wrsem);
490 pipecommon_pollnotify(dev, POLLOUT);
491 sem_post(&dev->d_bfsem);
496 pipecommon_pollnotify(dev, POLLOUT);
498 while (sem_getvalue(&dev->d_rdsem, &sval) == 0 && sval != 0)
500 sem_wait(&dev->d_rdsem);
503 sem_post(&dev->d_bfsem);
505 ret = sem_wait(&dev->d_rdsem);
511 ret = sem_wait(&dev->d_bfsem);
520 while (sem_getvalue(&dev->d_wrsem, &sval) == 0 && sval == 0)
522 sem_post(&dev->d_wrsem);
527 pipecommon_pollnotify(dev, POLLOUT);
528 sem_post(&dev->d_bfsem);
540 struct pipe_dev_s *dev = (struct pipe_dev_s *)((struct drv_data *)vnode->data)->priv;
548 if (dev == NULL)
571 if (dev->d_nreaders <= 0)
591 ret = sem_wait(&dev->d_bfsem);
604 nxtwrndx = dev->d_wrndx + 1;
605 if (nxtwrndx >= dev->d_bufsize)
612 if (nxtwrndx != dev->d_rdndx)
617 ret = LOS_ArchCopyFromUser(dev->d_buffer + dev->d_wrndx, buffer, sizeof(char));
620 sem_post(&dev->d_bfsem);
624 dev->d_wrndx = nxtwrndx;
632 while (sem_getvalue(&dev->d_rdsem, &sval) == 0 && sval == 0)
634 sem_post(&dev->d_rdsem);
639 pipecommon_pollnotify(dev, POLLIN);
643 sem_post(&dev->d_bfsem);
655 while (sem_getvalue(&dev->d_rdsem, &sval) == 0 && sval == 0)
657 sem_post(&dev->d_rdsem);
662 pipecommon_pollnotify(dev, POLLIN);
676 sem_post(&dev->d_bfsem);
682 while (sem_getvalue(&dev->d_wrsem, &sval) == 0 && sval != 0)
684 pipecommon_semtake(&dev->d_wrsem);
686 sem_post(&dev->d_bfsem);
688 pipecommon_semtake(&dev->d_wrsem);
689 pipecommon_semtake(&dev->d_bfsem);
701 struct pipe_dev_s *dev = (struct pipe_dev_s *)((struct drv_data *)vnode->data)->priv;
706 if (dev == NULL || table == NULL)
713 pipecommon_semtake(&dev->d_bfsem);
719 if (dev->d_wrndx >= dev->d_rdndx)
721 nbytes = dev->d_wrndx - dev->d_rdndx;
725 nbytes = dev->d_bufsize + dev->d_wrndx - dev->d_rdndx;
733 if (((filep->f_oflags & O_WRONLY) != 0) && (nbytes < (dev->d_bufsize - 1)))
747 if (nbytes == 0 && dev->d_nwriters <= 0)
755 PIPE_IS_POLICY_0(dev->d_flags) &&
756 dev->d_nreaders <= 0)
764 poll_wait(NULL, &dev->wq, table);
766 sem_post(&dev->d_bfsem);
787 struct pipe_dev_s *dev = NULL;
794 dev = ((struct drv_data *)vnode->data)->priv;
795 if (dev == NULL)
800 if (dev->d_buffer)
802 free(dev->d_buffer);
806 unregister_driver(dev->name);
807 pipecommon_freedev(dev);