Lines Matching refs:dev
104 struct PipeDev *dev;
145 struct PipeDev *dev = NULL;
149 LOS_DL_LIST_FOR_EACH_ENTRY(dev, &g_devList, struct PipeDev, list) {
150 if (!strncmp(dev->devName, path, PIPE_DEV_NAME_MAX)) {
152 return dev;
160 STATIC size_t PipeRingbufferRead(struct PipeDev *dev, VOID *buf, size_t len)
164 if (dev->readIndex < dev->writeIndex) {
165 nbytes = dev->writeIndex - dev->readIndex;
166 } else if (dev->readIndex > dev->writeIndex) {
167 nbytes = dev->bufferSize - dev->readIndex;
169 if (dev->roll == FALSE) {
172 nbytes = dev->bufferSize - dev->readIndex;
176 (VOID)memcpy_s(buf, len, dev->ringBuffer + dev->readIndex, nbytes);
177 dev->readIndex += nbytes;
178 if (dev->readIndex >= dev->bufferSize) {
179 dev->readIndex = 0;
180 dev->roll = FALSE;
186 STATIC size_t PipeRingbufferWrite(struct PipeDev *dev, const VOID *buf, size_t len)
190 if (dev->readIndex < dev->writeIndex) {
191 nbytes = dev->bufferSize - dev->writeIndex;
192 } else if (dev->readIndex > dev->writeIndex) {
193 nbytes = dev->readIndex - dev->writeIndex;
195 if (dev->roll == TRUE) {
198 nbytes = dev->bufferSize - dev->writeIndex;
203 (VOID)memcpy_s(dev->ringBuffer + dev->writeIndex, dev->bufferSize
204 - dev->writeIndex, buf, nbytes);
205 dev->writeIndex += nbytes;
206 if (dev->writeIndex >= dev->bufferSize) {
207 dev->roll = TRUE;
208 dev->writeIndex = 0;
223 struct PipeDev *dev = LOS_MemAlloc(OS_SYS_MEM_ADDR, sizeof(struct PipeDev));
224 if (dev == NULL) {
228 (VOID)memset_s(dev, sizeof(struct PipeDev), 0, sizeof(struct PipeDev));
229 (VOID)snprintf_s(dev->devName, PIPE_DEV_NAME_MAX, PIPE_DEV_NAME_MAX - 1, "%s%d", PIPE_DEV_PATH, num);
230 (VOID)memcpy_s(devName, len, dev->devName, strlen(dev->devName));
232 devTemp = PipeDevFind(dev->devName);
238 ret = LOS_MuxCreate(&dev->mutex);
244 ret = LOS_SemCreate(0, &dev->readSem);
246 (VOID)LOS_MuxDelete(dev->mutex);
251 ret = LOS_SemCreate(0, &dev->writeSem);
253 (VOID)LOS_MuxDelete(dev->mutex);
254 (VOID)LOS_SemDelete(dev->readSem);
259 dev->num = num;
260 PollWaitQueueInit(&dev->wq);
263 LOS_ListAdd(&g_devList, &dev->list);
268 if (dev != NULL) {
269 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dev);
275 STATIC INT32 PipeDevUnregister(struct PipeDev *dev)
287 if (tmpDev == dev) {
288 LOS_ListDelete(&dev->list);
299 PipeDevNumFree(dev->num);
300 (VOID)LOS_MuxDelete(dev->mutex);
301 (VOID)LOS_SemDelete(dev->readSem);
302 (VOID)LOS_SemDelete(dev->writeSem);
303 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dev->ringBuffer);
304 dev->ringBuffer = NULL;
305 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dev);
335 STATIC VOID PipePollNotify(struct PipeDev *dev, PollEvent event)
337 struct PollWaitQueue *waitQueue = &dev->wq;
348 struct PipeDev *dev = NULL;
361 dev = PipeDevFind(path);
362 if (dev == NULL) {
374 g_devFd[fd].dev = dev;
379 PIPE_DEV_LOCK(dev->mutex);
381 dev->readerCnt++;
383 dev->writerCnt++;
385 dev->ref++;
387 if (dev->ringBuffer == NULL) {
388 dev->ringBuffer = LOS_MemAlloc(OS_SYS_MEM_ADDR, PIPE_DEV_BUF_SIZE);
389 if (dev->ringBuffer == NULL) {
390 PIPE_DEV_UNLOCK(dev->mutex);
395 dev->bufferSize = PIPE_DEV_BUF_SIZE;
397 PIPE_DEV_UNLOCK(dev->mutex);
419 return (devFd != NULL) ? devFd->dev : NULL;
424 struct PipeDev *dev = NULL;
428 dev = PipeFd2Dev(fd);
429 if (dev == NULL) {
435 g_devFd[fd].dev = NULL;
440 PIPE_DEV_LOCK(dev->mutex);
442 dev->readerCnt--;
444 dev->writerCnt--;
447 if (dev->readerCnt == 0) {
448 PIPE_RW_POST(dev->writeSem);
449 PipePollNotify(dev, POLLOUT);
452 if (dev->writerCnt == 0) {
453 PIPE_RW_POST(dev->readSem);
454 PipePollNotify(dev, POLLIN);
457 if (--dev->ref == 0) {
458 PIPE_DEV_UNLOCK(dev->mutex);
459 (VOID)PipeDevUnregister(dev);
461 PIPE_DEV_UNLOCK(dev->mutex);
487 struct PipeDev *dev = NULL;
490 dev = PipeFd2Dev(fd);
493 return dev;
498 struct PipeDev *dev = NULL;
508 dev = PipeDevGet(fd);
509 if (dev == NULL) {
514 PIPE_DEV_LOCK(dev->mutex);
515 if ((dev->readIndex == dev->writeIndex) &&
516 (dev->roll == FALSE)) {
517 PIPE_DEV_UNLOCK(dev->mutex);
519 ret = LOS_SemPend(dev->readSem, LOS_WAIT_FOREVER);
524 PIPE_DEV_LOCK(dev->mutex);
528 tmpLen = PipeRingbufferRead(dev, (CHAR *)buf + nread, len - nread);
530 PIPE_RW_WAIT(dev->readSem);
532 if (!PipeWriterIsWaiting(dev->writeSem)) {
533 PipePollNotify(dev, POLLOUT);
534 PIPE_DEV_UNLOCK(dev->mutex);
537 PipePollNotify(dev, POLLOUT);
539 PIPE_DEV_UNLOCK(dev->mutex);
540 ret = LOS_SemPend(dev->readSem, LOS_WAIT_FOREVER);
545 PIPE_DEV_LOCK(dev->mutex);
549 PIPE_RW_POST(dev->writeSem);
550 PIPE_DEV_UNLOCK(dev->mutex);
551 PipePollNotify(dev, POLLOUT);
560 struct PipeDev *dev = NULL;
570 dev = PipeDevGet(fd);
571 if (dev == NULL) {
576 PIPE_DEV_LOCK(dev->mutex);
578 tmpLen = PipeRingbufferWrite(dev, (char *)buf + nwrite, len - nwrite);
580 PIPE_RW_POST(dev->readSem);
581 PipePollNotify(dev, POLLIN);
582 PIPE_RW_WAIT(dev->writeSem);
584 PIPE_DEV_UNLOCK(dev->mutex);
585 ret = LOS_SemPend(dev->writeSem, LOS_WAIT_FOREVER);
590 PIPE_DEV_LOCK(dev->mutex);
594 PIPE_RW_POST(dev->readSem);
595 PipePollNotify(dev, POLLIN);
596 PIPE_DEV_UNLOCK(dev->mutex);
605 struct PipeDev *dev = NULL;
625 dev = devFd->dev;
628 PIPE_DEV_LOCK(dev->mutex);
629 if (dev->readIndex == dev->writeIndex) {
630 if (dev->roll == TRUE) {
631 nbytes = dev->bufferSize;
635 } else if (dev->writeIndex > dev->readIndex) {
636 nbytes = dev->writeIndex - dev->readIndex;
638 nbytes = dev->bufferSize - dev->readIndex + dev->writeIndex;
641 if (((openFlag & O_WRONLY) != 0) && (nbytes < (dev->bufferSize - 1))) {
651 PollWait(&dev->wq, table);
653 PIPE_DEV_UNLOCK(dev->mutex);
669 struct PipeDev *dev = PipeDevFind(devName);
672 (VOID)PipeDevUnregister(dev);
678 (VOID)PipeDevUnregister(dev);