Lines Matching refs:port
49 static int32_t UsbSerialStartTx(struct UsbSerial *port) in UsbSerialStartTx() argument
51 if (port == NULL) { in UsbSerialStartTx()
54 struct DListHead *pool = &port->writePool; in UsbSerialStartTx()
56 if (port->acm == NULL) { in UsbSerialStartTx()
59 while (!port->writeBusy && !DListIsEmpty(pool)) { in UsbSerialStartTx()
62 if (port->writeStarted >= QUEUE_SIZE) { in UsbSerialStartTx()
69 len = DataFifoRead(&port->writeFifo, req->buf, port->acm->dataInPipe.maxPacketSize); in UsbSerialStartTx()
75 port->writeBusy = true; in UsbSerialStartTx()
77 port->writeBusy = false; in UsbSerialStartTx()
83 port->writeStarted++; in UsbSerialStartTx()
85 if (port->acm == NULL) { in UsbSerialStartTx()
92 static uint32_t UsbSerialStartRx(struct UsbSerial *port) in UsbSerialStartRx() argument
94 struct DListHead *pool = &port->readPool; in UsbSerialStartRx()
95 struct UsbAcmPipe *out = &port->acm->dataOutPipe; in UsbSerialStartRx()
100 if (port->readStarted >= QUEUE_SIZE) { in UsbSerialStartRx()
113 port->readStarted++; in UsbSerialStartRx()
115 if (port->acm == NULL) { in UsbSerialStartRx()
119 return port->readStarted; in UsbSerialStartRx()
122 static void UsbSerialRxPush(struct UsbSerial *port) in UsbSerialRxPush() argument
124 struct DListHead *queue = &port->readQueue; in UsbSerialRxPush()
146 if (DataFifoIsFull(&port->readFifo)) { in UsbSerialRxPush()
147 DataFifoSkip(&port->readFifo, size); in UsbSerialRxPush()
149 uint32_t count = DataFifoWrite(&port->readFifo, data, size); in UsbSerialRxPush()
156 DListInsertTail(&req->list, &port->readPool); in UsbSerialRxPush()
157 port->readStarted--; in UsbSerialRxPush()
160 if (!disconnect && port->acm) { in UsbSerialRxPush()
161 UsbSerialStartRx(port); in UsbSerialRxPush()
187 struct UsbSerial *port = (struct UsbSerial *)req->context; in UsbSerialReadComplete() local
195 OsalMutexLock(&port->lock); in UsbSerialReadComplete()
196 DListInsertTail(&req->list, &port->readQueue); in UsbSerialReadComplete()
197 UsbSerialRxPush(port); in UsbSerialReadComplete()
198 OsalMutexUnlock(&port->lock); in UsbSerialReadComplete()
234 static int32_t StartThreadReadSpeed(struct UsbSerial *port) in StartThreadReadSpeed() argument
248 ret = OsalThreadCreate(&g_threadRead, (OsalThreadEntry)SpeedReadThread, port); in StartThreadReadSpeed()
262 static int32_t UsbSerialGetTempReadSpeed(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialGetTempReadSpeed() argument
264 (void)port; in UsbSerialGetTempReadSpeed()
272 static int32_t UsbSerialGetTempReadSpeedInt(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialGetTempReadSpeedInt() argument
274 (void)port; in UsbSerialGetTempReadSpeedInt()
283 static int32_t UsbSerialReadSpeedDone(struct UsbSerial *port) in UsbSerialReadSpeedDone() argument
285 (void)port; in UsbSerialReadSpeedDone()
292 static int32_t UsbSerialReadSpeedStart(struct UsbSerial *port) in UsbSerialReadSpeedStart() argument
296 return StartThreadReadSpeed(port); in UsbSerialReadSpeedStart()
301 struct UsbSerial *port = (struct UsbSerial *)req->context; in UsbSerialWriteComplete() local
303 OsalMutexLock(&port->lock); in UsbSerialWriteComplete()
304 DListInsertTail(&req->list, &port->writePool); in UsbSerialWriteComplete()
305 port->writeStarted--; in UsbSerialWriteComplete()
309 UsbSerialStartTx(port); in UsbSerialWriteComplete()
318 OsalMutexUnlock(&port->lock); in UsbSerialWriteComplete()
321 static int32_t UsbSerialAllocReadRequests(struct UsbSerial *port, int32_t num) in UsbSerialAllocReadRequests() argument
323 struct UsbAcmDevice *acm = port->acm; in UsbSerialAllocReadRequests()
324 struct DListHead *head = &port->readPool; in UsbSerialAllocReadRequests()
335 req->context = port; in UsbSerialAllocReadRequests()
337 port->readAllocated++; in UsbSerialAllocReadRequests()
342 static int32_t UsbSerialAllocWriteRequests(struct UsbSerial *port, int32_t num) in UsbSerialAllocWriteRequests() argument
344 struct UsbAcmDevice *acm = port->acm; in UsbSerialAllocWriteRequests()
345 struct DListHead *head = &port->writePool; in UsbSerialAllocWriteRequests()
356 req->context = port; in UsbSerialAllocWriteRequests()
358 port->writeAllocated++; in UsbSerialAllocWriteRequests()
370 static int32_t UsbSerialStartIo(struct UsbSerial *port) in UsbSerialStartIo() argument
372 struct DListHead *head = &port->readPool; in UsbSerialStartIo()
377 if (port->readAllocated == 0) { in UsbSerialStartIo()
378 ret = UsbSerialAllocReadRequests(port, QUEUE_SIZE); in UsbSerialStartIo()
384 if (port->writeAllocated == 0) { in UsbSerialStartIo()
385 ret = UsbSerialAllocWriteRequests(port, QUEUE_SIZE); in UsbSerialStartIo()
387 UsbSerialFreeRequests(head, &port->readAllocated); in UsbSerialStartIo()
393 started = UsbSerialStartRx(port); in UsbSerialStartIo()
395 UsbSerialStartTx(port); in UsbSerialStartIo()
397 UsbSerialFreeRequests(head, &port->readAllocated); in UsbSerialStartIo()
398 UsbSerialFreeRequests(&port->writePool, &port->writeAllocated); in UsbSerialStartIo()
406 static void UsbSerialStopIo(struct UsbSerial *port) in UsbSerialStopIo() argument
408 if (port == NULL) { in UsbSerialStopIo()
412 UsbSerialFreeRequests(&port->readPool, &port->readAllocated); in UsbSerialStopIo()
413 UsbSerialFreeRequests(&port->writePool, &port->writeAllocated); in UsbSerialStopIo()
414 UsbSerialFreeFifo(&port->writeFifo); in UsbSerialStopIo()
415 UsbSerialFreeFifo(&port->readFifo); in UsbSerialStopIo()
431 static int32_t UsbSerialOpen(struct UsbSerial *port) in UsbSerialOpen() argument
435 if (port == NULL) { in UsbSerialOpen()
439 OsalMutexLock(&port->lock); in UsbSerialOpen()
440 ret = UsbSerialAllocFifo(&port->writeFifo, WRITE_BUF_SIZE); in UsbSerialOpen()
445 ret = UsbSerialAllocFifo(&port->readFifo, READ_BUF_SIZE); in UsbSerialOpen()
452 if (port->acm) { in UsbSerialOpen()
453 if (!port->suspended) { in UsbSerialOpen()
454 struct UsbAcmDevice *acm = port->acm; in UsbSerialOpen()
456 ret = UsbSerialStartIo(port); in UsbSerialOpen()
465 port->startDelayed = true; in UsbSerialOpen()
470 OsalMutexUnlock(&port->lock); in UsbSerialOpen()
474 static int32_t UsbSerialClose(struct UsbSerial *port) in UsbSerialClose() argument
478 if (port == NULL) { in UsbSerialClose()
482 OsalMutexLock(&port->lock); in UsbSerialClose()
485 acm = port->acm; in UsbSerialClose()
486 if (acm && !port->suspended) { in UsbSerialClose()
491 DataFifoReset(&port->writeFifo); in UsbSerialClose()
492 DataFifoReset(&port->readFifo); in UsbSerialClose()
493 UsbSerialStopIo(port); in UsbSerialClose()
494 port->startDelayed = false; in UsbSerialClose()
496 OsalMutexUnlock(&port->lock); in UsbSerialClose()
546 struct UsbSerial *port = (struct UsbSerial *)arg; in SpeedThread() local
550 … port->acm->dataIface.handle, port->acm->dataInPipe.id, port->acm->dataInPipe.maxPacketSize); in SpeedThread()
555 g_req[i]->context = port; in SpeedThread()
556 g_req[i]->length = port->acm->dataInPipe.maxPacketSize; in SpeedThread()
558 …memset_s(g_req[i]->buf, port->acm->dataInPipe.maxPacketSize, 'a', port->acm->dataInPipe.maxPacketS… in SpeedThread()
586 static int32_t StartThreadSpeed(struct UsbSerial *port) in StartThreadSpeed() argument
598 ret = OsalThreadCreate(&g_thread, (OsalThreadEntry)SpeedThread, port); in StartThreadSpeed()
612 static int32_t UsbSerialGetTempSpeed(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialGetTempSpeed() argument
614 (void)port; in UsbSerialGetTempSpeed()
622 static int32_t UsbSerialGetTempSpeedInt(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialGetTempSpeedInt() argument
624 (void)port; in UsbSerialGetTempSpeedInt()
633 static int32_t UsbSerialSpeedDone(struct UsbSerial *port) in UsbSerialSpeedDone() argument
635 (void)port; in UsbSerialSpeedDone()
641 static int32_t UsbSerialSpeed(struct UsbSerial *port) in UsbSerialSpeed() argument
643 StartThreadSpeed(port); in UsbSerialSpeed()
647 static int32_t UsbSerialRead(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialRead() argument
653 OsalMutexLock(&port->lock); in UsbSerialRead()
654 if (DataFifoIsEmpty(&port->readFifo)) { in UsbSerialRead()
655 OsalMutexUnlock(&port->lock); in UsbSerialRead()
658 fifoLen = DataFifoLen(&port->readFifo); in UsbSerialRead()
662 OsalMutexUnlock(&port->lock); in UsbSerialRead()
666 len = DataFifoRead(&port->readFifo, buf + i, 1); in UsbSerialRead()
685 if (port->acm) { in UsbSerialRead()
686 UsbSerialStartRx(port); in UsbSerialRead()
689 OsalMutexUnlock(&port->lock); in UsbSerialRead()
693 static int32_t UsbSerialWrite(struct UsbSerial *port, struct HdfSBuf *data) in UsbSerialWrite() argument
698 OsalMutexLock(&port->lock); in UsbSerialWrite()
703 OsalMutexUnlock(&port->lock); in UsbSerialWrite()
709 OsalMutexUnlock(&port->lock); in UsbSerialWrite()
716 OsalMutexUnlock(&port->lock); in UsbSerialWrite()
721 size = (int32_t)DataFifoWrite(&port->writeFifo, (uint8_t *)buf, strlen(buf)); in UsbSerialWrite()
723 if (port->acm) { in UsbSerialWrite()
724 UsbSerialStartTx(port); in UsbSerialWrite()
726 OsalMutexUnlock(&port->lock); in UsbSerialWrite()
731 static int32_t UsbSerialGetBaudrate(struct UsbSerial *port, struct HdfSBuf *reply) in UsbSerialGetBaudrate() argument
733 uint32_t baudRate = LE32_TO_CPU(port->lineCoding.dwDTERate); in UsbSerialGetBaudrate()
741 static int32_t UsbSerialSetBaudrate(struct UsbSerial *port, struct HdfSBuf *data) in UsbSerialSetBaudrate() argument
750 port->lineCoding.dwDTERate = CPU_TO_LE32(*baudRate); in UsbSerialSetBaudrate()
751 if (port->acm) { in UsbSerialSetBaudrate()
752 port->acm->lineCoding.dwDTERate = CPU_TO_LE32(*baudRate); in UsbSerialSetBaudrate()
851 …struct UsbAcmDevice *acm, int32_t cmd, struct UsbSerial *port, struct HdfSBuf *data, struct HdfSBu… in AcmSerialCmd() argument
855 return UsbSerialOpen(port); in AcmSerialCmd()
857 return UsbSerialClose(port); in AcmSerialCmd()
859 return UsbSerialRead(port, reply); in AcmSerialCmd()
861 return UsbSerialWrite(port, data); in AcmSerialCmd()
863 return UsbSerialGetBaudrate(port, reply); in AcmSerialCmd()
865 return UsbSerialSetBaudrate(port, data); in AcmSerialCmd()
873 return UsbSerialSpeed(port); in AcmSerialCmd()
875 return UsbSerialGetTempSpeed(port, reply); in AcmSerialCmd()
877 return UsbSerialSpeedDone(port); in AcmSerialCmd()
879 return UsbSerialGetTempSpeedInt(port, reply); in AcmSerialCmd()
881 return UsbSerialReadSpeedStart(port); in AcmSerialCmd()
883 return UsbSerialGetTempReadSpeed(port, reply); in AcmSerialCmd()
885 return UsbSerialReadSpeedDone(port); in AcmSerialCmd()
887 return UsbSerialGetTempReadSpeedInt(port, reply); in AcmSerialCmd()
918 struct UsbSerial *port = acm->port; in AcmDeviceDispatch() local
919 if (port == NULL) { in AcmDeviceDispatch()
924 int32_t ret = AcmSerialCmd(acm, cmd, port, data, reply); in AcmDeviceDispatch()
1067 struct UsbSerial *port = acm->port; in AcmEnable() local
1068 port->acm = acm; in AcmEnable()
1069 acm->lineCoding = port->lineCoding; in AcmEnable()
1075 struct UsbSerial *port = acm->port; in AcmDisable() local
1077 if (port == NULL) { in AcmDisable()
1082 OsalMutexLock(&port->lock); in AcmDisable()
1083 port->lineCoding = acm->lineCoding; in AcmDisable()
1084 OsalMutexUnlock(&port->lock); in AcmDisable()
1128 acm->lineCoding = acm->port->lineCoding; in AcmSetup()
1155 struct UsbSerial *port = acm->port; in AcmSuspend() local
1157 if (port == NULL) { in AcmSuspend()
1162 OsalMutexLock(&port->lock); in AcmSuspend()
1163 port->suspended = true; in AcmSuspend()
1164 OsalMutexUnlock(&port->lock); in AcmSuspend()
1170 struct UsbSerial *port = acm->port; in AcmResume() local
1171 if (port == NULL) { in AcmResume()
1176 OsalMutexLock(&port->lock); in AcmResume()
1177 port->suspended = false; in AcmResume()
1178 if (!port->startDelayed) { in AcmResume()
1179 OsalMutexUnlock(&port->lock); in AcmResume()
1182 ret = UsbSerialStartIo(port); in AcmResume()
1189 port->startDelayed = false; in AcmResume()
1190 OsalMutexUnlock(&port->lock); in AcmResume()
1467 struct UsbSerial *port = NULL; in UsbSerialAlloc() local
1469 port = (struct UsbSerial *)OsalMemCalloc(sizeof(*port)); in UsbSerialAlloc()
1470 if (port == NULL) { in UsbSerialAlloc()
1475 if (OsalMutexInit(&port->lock) != HDF_SUCCESS) { in UsbSerialAlloc()
1477 OsalMemFree(port); in UsbSerialAlloc()
1481 DListHeadInit(&port->readPool); in UsbSerialAlloc()
1482 DListHeadInit(&port->readQueue); in UsbSerialAlloc()
1483 DListHeadInit(&port->writePool); in UsbSerialAlloc()
1485 port->lineCoding.dwDTERate = CPU_TO_LE32(PORT_RATE); in UsbSerialAlloc()
1486 port->lineCoding.bCharFormat = USB_CDC_1_STOP_BITS; in UsbSerialAlloc()
1487 port->lineCoding.bParityType = USB_CDC_NO_PARITY; in UsbSerialAlloc()
1488 port->lineCoding.bDataBits = DATA_BIT; in UsbSerialAlloc()
1490 acm->port = port; in UsbSerialAlloc()
1496 struct UsbSerial *port = acm->port; in UsbSerialFree() local
1498 if (port == NULL) { in UsbSerialFree()
1502 OsalMemFree(port); in UsbSerialFree()
1503 acm->port = NULL; in UsbSerialFree()