📄 usbtcdisp1582initexit.c
字号:
/******************************************************************************** usbTcdIsp1582FncDetach - implements TCD_FNC_DETACH** The purpose of this function is to shutdown the Target Controller** RETURNS: OK or ERROR, if TCD is not able to detach.** ERRNO:* \is* \i S_usbTcdLib_BAD_PARAM* Bad parameter is passed.* \ie** \NOMANUAL*/LOCAL STATUS usbTcdIsp1582FncDetach ( pTRB_DETACH pTrb /* TRB to be executed */ ) { pTRB_HEADER pHeader = (pTRB_HEADER) pTrb; /* TRB_HEADER */ pUSB_TCD_ISP1582_TARGET pTarget = NULL; /* USB_TCD_ISP1582_TARGET */ UINT16 data16 = 0; /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDetach entered...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncDetach : Entered...\n",0,0,0,0,0,0); /* Validate parameters */ if (pHeader == NULL || pHeader->trbLength < sizeof (TRB_HEADER) || (pHeader->handle == NULL)) { /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDetach exiting: Bad Parameter received", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582FncDetach : Bad Parameters...\n", 0,0,0,0,0,0); return ossStatus (S_usbTcdLib_BAD_PARAM); } pTarget = (pUSB_TCD_ISP1582_TARGET) pHeader->handle; /* Disable the device address */ /* perform a soft reset */ data16 = isp1582Read16 (pTarget , ISP1582_MODE_REG); data16 |=ISP1582_MODE_REG_SFRESET; isp1582Write16 (pTarget, ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK); /* Give a delay of 1 micro sec */ OSS_THREAD_SLEEP (1); data16 &= ~(ISP1582_MODE_REG_SFRESET); isp1582Write16 (pTarget, ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK); /* Give a delay of 1 micro sec */ OSS_THREAD_SLEEP (1); /* Reset the GINTENA */ data16 &= ~(ISP1582_MODE_REG_SOFTCT | ISP1582_MODE_REG_GLINTENA); isp1582Write16 (pTarget, ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK); /* Un-hook the ISR */#ifndef ISP1582_POLLING usbPciIntRestore ((INT_HANDLER_PROTOTYPE)usbTcdIsp1582Isr, (pVOID)pTarget, pTarget->irq); /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDetach: ISR un-hooked successfully ...", USB_TCD_ISP582_WV_FILTER); #else OSS_THREAD_DESTROY(pTarget->threadId); /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDetach: Polling Thread destroyed successfully ...", USB_TCD_ISP582_WV_FILTER); #endif /* Release the USB_TCD_ISP1582_TARGET */ OSS_FREE (pTarget); /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDetach exiting...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncDetach : Exiting...\n",0,0,0,0,0,0); return OK; }/******************************************************************************** usbTcdIsp1582FncEnable - implements TCD_FNC_ENABLE** The purpose of this function is to enable the Target Controller** RETURNS: OK or ERROR, if not able to enable the target controller.** ERRNO:* \is* \i S_usbTcdLib_BAD_PARAM* Bad Parameter is passed.* \ie** \NOMANUAL*/LOCAL STATUS usbTcdIsp1582FncEnable ( pTRB_ENABLE_DISABLE pTrb /* TRB to be executed */ ) { pTRB_HEADER pHeader = (pTRB_HEADER) pTrb; /* TRB_HEADER */ pUSB_TCD_ISP1582_TARGET pTarget = NULL; /* USB_TCD_ISP1582_TARGET */ UINT16 data16 = 0; /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncEnable entered ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncEnable : Entered...\n",0,0,0,0,0,0); /* Validate parameters */ if (pHeader == NULL || pHeader->trbLength < sizeof (TRB_HEADER) || (pHeader->handle == NULL)) { /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncEnable exiting: Bad Parameter received", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582FncEnable : Bad Parameters...\n", 0,0,0,0,0,0); return ossStatus (S_usbTcdLib_BAD_PARAM); } pTarget = (pUSB_TCD_ISP1582_TARGET) pHeader->handle; /* Read the Mode Register */ data16 = isp1582Read16 (pTarget , ISP1582_MODE_REG); /* Set the soft connect bit */ data16 |= ISP1582_MODE_REG_SOFTCT; /* Write to the Mode Register */ isp1582Write16 (pTarget, ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK); /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncEnable exiting ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncEnable : Exiting...\n",0,0,0,0,0,0); return OK; }/********************************************************************************* usbTcdIsp1582FncDisable - implements TCD_FNC_DISABLE** The purpose of this function is to disable the Target Controller** RETURNS: OK or ERROR, if not able to disable the target controller.** ERRNO:* \is* \i S_usbTcdLib_BAD_PARAM* Bad parameter is passed.* \ie** \NOMANUAL*/LOCAL STATUS usbTcdIsp1582FncDisable ( pTRB_ENABLE_DISABLE pTrb /* TRB to be executed */ ) { pTRB_HEADER pHeader = (pTRB_HEADER) pTrb; /* TRB_HEADER */ pUSB_TCD_ISP1582_TARGET pTarget = NULL; /* USB_TCD_ISP1582_TARGET */ UINT16 data16 = 0; /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDisable entered ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncDisable : Entered...\n",0,0,0,0,0,0); /* Validate parameters */ if (pHeader == NULL || pHeader->trbLength < sizeof (TRB_HEADER) || (pHeader->handle == NULL) ) { /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDisable exiting: Bad Parameter received", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582FncDisable : Bad Parameters...\n", 0,0,0,0,0,0); return ossStatus (S_usbTcdLib_BAD_PARAM); } pTarget = (pUSB_TCD_ISP1582_TARGET) pHeader->handle; /* Read the Mode Register */ data16 = isp1582Read16 (pTarget , ISP1582_MODE_REG); /* Reset the soft connect bit */ data16 &= ~ISP1582_MODE_REG_SOFTCT; /* Write to the Mode Register */ isp1582Write16 (pTarget, ISP1582_MODE_REG , data16 & ISP1582_MODE_REG_MASK); /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582FncDisable exiting ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582FncDisable : Exiting...\n",0,0,0,0,0,0); return OK; }/******************************************************************************** usbTcdIsp1582EvalExec - single Entry Point for ISP 1582 TCD** This is the single entry point for the Philips ISP 1582* USB TCD (Target Controller Driver). The function qualifies the TRB passed* by the caller and fans out to the appropriate TCD function handler.** RETURNS: OK or ERROR if failed to execute TRB passed by caller.** ERRNO:* \is* \i S_usbTcdLib_BAD_PARAM* Bad parameter is passed.* \ie*/STATUS usbTcdIsp1582EvalExec ( pVOID pTrb /* TRB to be executed */ ) { pTRB_HEADER pHeader = (pTRB_HEADER) pTrb; /* TRB_HEADER */ pUSB_TCD_ISP1582_TARGET pTarget = NULL; /* USB_TCD_ISP1582_TARGET */ UINT32 status = OK; /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582EvalExec entered ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582EvalExec : Entered...\n",0,0,0,0,0,0); /* Validate parameters */ if (pHeader == NULL || pHeader->trbLength < sizeof (TRB_HEADER)) { /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582EvalExec exiting: Bad Paramters Received ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582EvalExec : Bad Parameters...\n", 0,0,0,0,0,0); return ossStatus (S_usbTcdLib_BAD_PARAM); } if (pHeader->function != TCD_FNC_ATTACH) { if ((pTarget = (pUSB_TCD_ISP1582_TARGET) pHeader->handle) == NULL) { /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582EvalExec exiting: Handle value is NULL...", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582EvalExec : Bad Parameters...\n", 0,0,0,0,0,0); return ossStatus (S_usbTcdLib_BAD_PARAM); } } USBISP1582_DEBUG ("usbTcdIsp1582EvalExec : Fucntion Code is %d...\n", pHeader->function,0,0,0,0,0); /* Fan-out to appropriate function processor */ switch (pHeader->function) { /* Following functions codes are not implemented by ISP 1582 */ case TCD_FNC_HANDLE_SUSPEND_INTERRUPT : case TCD_FNC_HANDLE_DISCONNECT_INTERRUPT : case TCD_FNC_DEVICE_FEATURE_CLEAR : break; /* initialization and uninitialization function codes */ case TCD_FNC_ATTACH : status = usbTcdIsp1582FncAttach((pTRB_ATTACH) pHeader); break; case TCD_FNC_DETACH: status = usbTcdIsp1582FncDetach((pTRB_DETACH) pHeader); break; case TCD_FNC_ENABLE: status = usbTcdIsp1582FncEnable((pTRB_ENABLE_DISABLE) pHeader); break; case TCD_FNC_DISABLE: status = usbTcdIsp1582FncDisable((pTRB_ENABLE_DISABLE) pHeader); break; /* device control and status function codes */ case TCD_FNC_ADDRESS_SET: status = usbTcdIsp1582FncAddressSet((pTRB_ADDRESS_SET) pHeader); break; case TCD_FNC_SIGNAL_RESUME: status = usbTcdIsp1582FncSignalResume((pTRB_SIGNAL_RESUME)pHeader); break; case TCD_FNC_CURRENT_FRAME_GET: status = usbTcdIsp1582FncCurrentFrameGet( (pTRB_CURRENT_FRAME_GET)pHeader); break; case TCD_FNC_DEVICE_FEATURE_SET: status = usbTcdIsp1582FncDeviceFeatureSet( (pTRB_DEVICE_FEATURE_SET_CLEAR)pHeader); break; /* endpoint related function codes */ case TCD_FNC_ENDPOINT_ASSIGN: status = usbTcdIsp1582FncEndpointAssign( (pTRB_ENDPOINT_ASSIGN) pHeader); break; case TCD_FNC_ENDPOINT_RELEASE: status = usbTcdIsp1582FncEndpointRelease( (pTRB_ENDPOINT_RELEASE) pHeader); break; case TCD_FNC_ENDPOINT_STATE_SET: status = usbTcdIsp1582FncEndpointStateSet( (pTRB_ENDPOINT_STATE_SET)pHeader); break; case TCD_FNC_ENDPOINT_STATUS_GET: status = usbTcdIsp1582FncEndpointStatusGet( (pTRB_ENDPOINT_STATUS_GET)pHeader); break; case TCD_FNC_IS_BUFFER_EMPTY: status = usbTcdIsp1582FncIsBufferEmpty( (pTRB_IS_BUFFER_EMPTY) pHeader); break; case TCD_FNC_COPY_DATA_FROM_EPBUF: status = usbTcdIsp1582FncCopyDataFromEpBuf( (pTRB_COPY_DATA_FROM_EPBUF) pHeader); break; case TCD_FNC_COPY_DATA_TO_EPBUF: status = usbTcdIsp1582FncCopyDataToEpBuf( (pTRB_COPY_DATA_TO_EPBUF) pHeader); break; /* interrupt related function codes */ case TCD_FNC_ENDPOINT_INTERRUPT_STATUS_GET: status = usbTcdIsp1582FncEndpointIntStatusGet( (pTRB_ENDPOINT_INTERRUPT_STATUS_GET) pHeader); break; case TCD_FNC_ENDPOINT_INTERRUPT_STATUS_CLEAR: status = usbTcdIsp1582FncEndpointIntStatusClear( (pTRB_ENDPOINT_INTERRUPT_STATUS_CLEAR) pHeader); break; case TCD_FNC_INTERRUPT_STATUS_GET: status = usbTcdIsp1582FncInterruptStatusGet( (pTRB_INTERRUPT_STATUS_GET_CLEAR) pHeader); break; case TCD_FNC_INTERRUPT_STATUS_CLEAR: status = usbTcdIsp1582FncInterruptStatusClear( (pTRB_INTERRUPT_STATUS_GET_CLEAR) pHeader); break; case TCD_FNC_HANDLE_RESUME_INTERRUPT: status = usbTcdIsp1582FncHandleResumeInterrupt( (pTRB_HANDLE_RESUME_INTERRUPT) pHeader); break; case TCD_FNC_HANDLE_RESET_INTERRUPT : status = usbTcdIsp1582FncHandleResetInterrupt( (pTRB_HANDLE_RESET_INTERRUPT) pHeader); break; default: /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582EvalExec exiting: Wrong Function Code ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_ERROR ("usbTcdIsp1582EvalExec : Bad Parameters...\n", 0,0,0,0,0,0); status = ossStatus (S_usbTcdLib_BAD_PARAM); } /* WindView Instrumentation */ USB_TCD_LOG_EVENT(USB_TCD_ISP1582_INIT_EXIT, "usbTcdIsp1582EvalExec exiting ...", USB_TCD_ISP582_WV_FILTER); USBISP1582_DEBUG ("usbTcdIsp1582EvalExec : Exiting...\n",0,0,0,0,0,0); /* Return status */ return status; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -