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