Lines Matching defs:pDevSol

61     struct USBPROXYDEVSOL         *pDevSol;
100 static PVUSBURB usbProxySolarisUrbComplete(PUSBPROXYDEVSOL pDevSol);
109 * @param pDevSol The solaris USB device.
111 static PUSBPROXYURBSOL usbProxySolarisUrbAlloc(PUSBPROXYDEVSOL pDevSol)
115 RTCritSectEnter(&pDevSol->CritSect);
120 pUrbSol = pDevSol->pFreeHead;
122 pDevSol->pFreeHead = pUrbSol->pNext;
125 RTCritSectLeave(&pDevSol->CritSect);
129 RTCritSectEnter(&pDevSol->CritSect);
132 pUrbSol->pDevSol = pDevSol;
138 pUrbSol->pNext = pDevSol->pInFlightHead;
141 pDevSol->pInFlightHead = pUrbSol;
143 RTCritSectLeave(&pDevSol->CritSect);
151 * @param pDevSol The Solaris USB device.
154 static void usbProxySolarisUrbFree(PUSBPROXYDEVSOL pDevSol, PUSBPROXYURBSOL pUrbSol)
156 RTCritSectEnter(&pDevSol->CritSect);
163 else if (pDevSol->pTaxingTail == pUrbSol)
164 pDevSol->pTaxingTail = pUrbSol->pPrev;
168 else if (pDevSol->pTaxingHead == pUrbSol)
169 pDevSol->pTaxingHead = pUrbSol->pNext;
170 else if (pDevSol->pInFlightHead == pUrbSol)
171 pDevSol->pInFlightHead = pUrbSol->pNext;
179 pUrbSol->pNext = pDevSol->pFreeHead;
180 pDevSol->pFreeHead = pUrbSol;
183 pUrbSol->pDevSol = NULL;
185 RTCritSectLeave(&pDevSol->CritSect);
196 static void usbProxySolarisCloseFile(PUSBPROXYDEVSOL pDevSol)
198 RTFileClose(pDevSol->hFile);
199 pDevSol->hFile = NIL_RTFILE;
207 * @param pDevSol The Solaris device instance.
212 static int usbProxySolarisIOCtl(PUSBPROXYDEVSOL pDevSol, unsigned Function, void *pvData, size_t cbData)
214 if (RT_UNLIKELY(pDevSol->hFile == NIL_RTFILE))
227 int rc = RTFileIoCtl(pDevSol->hFile, Function, &Req, sizeof(Req), &Ret);
234 pDevSol->pProxyDev->fDetached = true;
235 usbProxySolarisCloseFile(pDevSol);
236 LogRel((USBPROXY ":Command %#x failed, USB Device '%s' disconnected!\n", Function, pDevSol->pProxyDev->pUsbIns->pszName));
256 * @param pDevSol The Solaris device instance.
259 static inline int usbProxySolarisGetActiveConfig(PUSBPROXYDEVSOL pDevSol)
263 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_GET_CONFIG, &GetConfigReq, sizeof(GetConfigReq));
266 pDevSol->pProxyDev->iActiveCfg = GetConfigReq.bConfigValue;
267 pDevSol->pProxyDev->cIgnoreSetConfigs = 0;
274 pDevSol->pProxyDev->iActiveCfg = -1;
275 pDevSol->pProxyDev->cIgnoreSetConfigs = 0;
292 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
310 rc = RTCritSectInit(&pDevSol->CritSect);
316 rc = RTPipeCreate(&pDevSol->hPipeWakeupR, &pDevSol->hPipeWakeupW, 0);
324 pDevSol->pszDevicePath = pszDevicePath;
330 rc = RTFileOpen(&hFile, pDevSol->pszDevicePath, RTFILE_O_READWRITE | RTFILE_O_OPEN | RTFILE_O_DENY_NONE);
333 pDevSol->hFile = hFile;
334 pDevSol->pProxyDev = pProxyDev;
341 rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_GET_VERSION, &GetVersionReq, sizeof(GetVersionReq));
350 usbProxySolarisGetActiveConfig(pDevSol);
363 RTFileClose(pDevSol->hFile);
364 pDevSol->hFile = NIL_RTFILE;
365 pDevSol->pProxyDev = NULL;
368 LogRel((USBPROXY ":failed to open device. rc=%Rrc pszDevicePath=%s\n", rc, pDevSol->pszDevicePath));
370 RTStrFree(pDevSol->pszDevicePath);
371 pDevSol->pszDevicePath = NULL;
375 LogRel((USBPROXY ":failed to get client info. rc=%Rrc pszDevicePath=%s\n", rc, pDevSol->pszDevicePath));
379 RTPipeClose(pDevSol->hPipeWakeupR);
380 RTPipeClose(pDevSol->hPipeWakeupW);
383 RTCritSectDelete(&pDevSol->CritSect);
408 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
413 usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_CLOSE_DEVICE, &CloseReq, sizeof(CloseReq));
416 usbProxySolarisCloseFile(pDevSol);
421 RTCritSectDelete(&pDevSol->CritSect);
424 while ((pUrbSol = pDevSol->pInFlightHead) != NULL)
426 pDevSol->pInFlightHead = pUrbSol->pNext;
430 while ((pUrbSol = pDevSol->pFreeHead) != NULL)
432 pDevSol->pFreeHead = pUrbSol->pNext;
436 RTPipeClose(pDevSol->hPipeWakeupR);
437 RTPipeClose(pDevSol->hPipeWakeupW);
439 RTStrFree(pDevSol->pszDevicePath);
440 pDevSol->pszDevicePath = NULL;
458 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
463 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_CLOSE_DEVICE, &CloseReq, sizeof(CloseReq));
467 usbProxySolarisGetActiveConfig(pDevSol);
490 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
491 AssertPtrReturn(pDevSol, VERR_INVALID_POINTER);
495 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_SET_CONFIG, &SetConfigReq, sizeof(SetConfigReq));
541 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
542 AssertPtrReturn(pDevSol, VERR_INVALID_POINTER);
547 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_SET_INTERFACE, &SetInterfaceReq, sizeof(SetInterfaceReq));
563 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
564 AssertPtrReturn(pDevSol, VERR_INVALID_POINTER);
568 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_CLEAR_EP, &ClearEpReq, sizeof(ClearEpReq));
582 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
587 PUSBPROXYURBSOL pUrbSol = usbProxySolarisUrbAlloc(pDevSol);
595 pUrbSol->pDevSol = pDevSol;
621 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_SEND_URB, &UrbReq, sizeof(UrbReq));
648 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
649 AssertPtrReturn(pDevSol, VERR_INVALID_POINTER);
651 LogFlowFunc((USBPROXY ":usbProxySolarisUrbCancel pUrb=%p pUrbSol=%p pDevSol=%p\n", pUrb, pUrbSol, pUrbSol->pDevSol));
659 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_ABORT_PIPE, &AbortPipeReq, sizeof(AbortPipeReq));
681 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
686 if (!pDevSol->pInFlightHead)
699 pfd[0].fd = RTFileToNative(pDevSol->hFile);
703 pfd[1].fd = RTPipeToNative(pDevSol->hPipeWakeupR);
712 LogRel((USBPROXY ":Reaping failed, USB Device '%s' disconnected!\n", pDevSol->pProxyDev->pUsbIns->pszName));
714 usbProxySolarisCloseFile(pDevSol);
722 RTPipeRead(pDevSol->hPipeWakeupR, &bRead, 1, &cbIgnored);
749 usbProxySolarisUrbComplete(pDevSol);
755 while (pDevSol->pTaxingHead)
757 RTCritSectEnter(&pDevSol->CritSect);
759 PUSBPROXYURBSOL pUrbSol = pDevSol->pTaxingHead;
766 usbProxySolarisUrbFree(pDevSol, pUrbSol);
769 RTCritSectLeave(&pDevSol->CritSect);
779 * @param pDevSol The Solaris device instance.
781 static PVUSBURB usbProxySolarisUrbComplete(PUSBPROXYDEVSOL pDevSol)
783 LogFlowFunc((USBPROXY ":usbProxySolarisUrbComplete pDevSol=%p\n", pDevSol));
788 int rc = usbProxySolarisIOCtl(pDevSol, VBOXUSB_IOCTL_REAP_URB, &UrbReq, sizeof(UrbReq));
823 RTCritSectEnter(&pDevSol->CritSect);
834 Assert(pDevSol->pInFlightHead == pUrbSol);
835 pDevSol->pInFlightHead = pUrbSol->pNext;
842 pUrbSol->pPrev = pDevSol->pTaxingTail;
843 if (pDevSol->pTaxingTail)
844 pDevSol->pTaxingTail->pNext = pUrbSol;
846 pDevSol->pTaxingHead = pUrbSol;
847 pDevSol->pTaxingTail = pUrbSol;
849 RTCritSectLeave(&pDevSol->CritSect);
871 PUSBPROXYDEVSOL pDevSol = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVSOL);
876 return RTPipeWrite(pDevSol->hPipeWakeupW, "", 1, &cbIgnored);