亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbehcdeventhandler.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價(jià)值
?? C
?? 第 1 頁 / 共 5 頁
字號:
    return;    }/* End of usbEhcdProcessTransferCompletion() *//***************************************************************************** usbEhcdCleanupAsynchPipes - cleans up the asynchronous pipes.** This is used to perform the cleanup functionality of the asynchronous pipes.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/LOCAL VOID usbEhcdCleanupAsynchPipes    (    pUSB_EHCD_DATA pEHCDData    )    {    /* To hold the pointer to the pipe information */    pUSB_EHCD_PIPE pHCDPipe = NULL;    /* To hold the request information */    pUSB_EHCD_REQUEST_INFO pRequestInfo = NULL;    /* To hold the temporary request information */    pUSB_EHCD_REQUEST_INFO pTempRequestInfo = NULL;    /* Pointer to the tail of Queue TD */    pUSB_EHCD_QTD pQTDTail = NULL;    /* Pointer to the head of Queue TD */    pUSB_EHCD_QTD pQTDHead = NULL;    /* Pointer to the temporary QTD */    pUSB_EHCD_QTD pTempQTD = NULL;	/* WindView Instrumentation */	USB_HCD_LOG_EVENT(		USB_EHCI_WV_EVENT_HANDLER,		"usbEhcdCleanupAsynchPipes() starts",		USB_EHCD_WV_FILTER);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdCleanupAsynchPipes - Entry\n",0,0,0,0);    /* Check the validity of the parameters */    if (NULL == pEHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdCleanupAsynchPipes - parameter not valid\n",0,0,0,0);        return;        }    /* Exclusively access the reclamation list */    OS_WAIT_FOR_EVENT(pEHCDData->ReclamationListSynchEventID, OS_WAIT_INFINITE);    /* Search the list and remove the element */    for (pHCDPipe = pEHCDData->pAsynchReclamationListHead;        NULL != pHCDPipe;        pHCDPipe = pEHCDData->pAsynchReclamationListHead)        {        /* Update the head of the reclamation list */        pEHCDData->pAsynchReclamationListHead = pHCDPipe->pNext;        /* Release the reclamationsychronisation event */        OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);        /* This loop retrieves the requests which are queued to the         * endpoint and releases the TDs. This is done by exclusively         * accessing the request list.         */        /* Exclusively access the request synchronisation list         * This is done as the request list which is maintained for the HC         * is also accessed.         */        OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                          OS_WAIT_INFINITE);        /* Remove the requests from the endpoint queue */        for (pRequestInfo = pHCDPipe->pRequestQueueHead;            NULL != pRequestInfo;            pRequestInfo = pHCDPipe->pRequestQueueHead)            {            /* Check if the request is not the head element of the HCD queue */            if (pRequestInfo != pEHCDData->pRequestQueueHead)                {                /* Search for the request element in the HCD maintained list                 * and free the request                 */                for (pTempRequestInfo = pEHCDData->pRequestQueueHead;                    (NULL != pTempRequestInfo) &&                    (pRequestInfo != pTempRequestInfo->pListRequest);                    pTempRequestInfo = pTempRequestInfo->pListRequest);                /* Assert if the request is not found */                OS_ASSERT(NULL != pTempRequestInfo);                /* Unlink the request from the HCD list */                pTempRequestInfo->pListRequest = pRequestInfo->pListRequest;                if (NULL == pTempRequestInfo->pListRequest)                    {                    pEHCDData->pRequestQueueTail   = pTempRequestInfo;                    }                }            /* This is the head of the HCD request queue */            else                {                /* Update the head element */                pEHCDData->pRequestQueueHead = pRequestInfo->pListRequest;                if (NULL == pEHCDData->pRequestQueueHead)                    {                    pEHCDData->pRequestQueueTail   = NULL;                    }                }            /* Update the head of the pipe request queue */            pHCDPipe->pRequestQueueHead = pRequestInfo->pNext;            /* Release the request synchronisation event */            OS_RELEASE_EVENT(pEHCDData->RequestSynchEventID);            /* Add all the TDs to the free QTD pool */            /* Get the tail of the TD list */            pQTDTail = (pUSB_EHCD_QTD)pRequestInfo->pTail;            /* Get the head of the TD list */            pQTDHead = (pUSB_EHCD_QTD)pRequestInfo->pHead;            /* Assert if the head or tail is invalid */            OS_ASSERT(NULL != pQTDHead);            OS_ASSERT(NULL != pQTDTail);            /* Release all the TDs associated with this Request */            for (; pQTDHead != pQTDTail; pQTDHead = pTempQTD)                {                /* Store the next pointer temporarily */                pTempQTD = pQTDHead->pNext;                /* Add the TD to the free list */                usbEhcdAddToFreeQTDList(pQTDHead);                }            /* Add the tail element to the list */            usbEhcdAddToFreeQTDList(pQTDTail);            /* Update the URB's status to cancelled */            pRequestInfo->pUrb->nStatus = USBHST_TRANSFER_CANCELLED;            /* Call the callback function if it is registered */            if (NULL != pRequestInfo->pUrb->pfCallback)                {                (pRequestInfo->pUrb->pfCallback)(pRequestInfo->pUrb);                }            /* Free the memory allocated for the request information */            OS_FREE(pRequestInfo);            /* Exclusively access the request synchronisation list */            OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                              OS_WAIT_INFINITE);            }/* End of for () */        /* Release the request synchronisation event */        OS_RELEASE_EVENT(pEHCDData->RequestSynchEventID);        /* Release the QHs */        /* Assert if the QH is invalid */        OS_ASSERT(NULL != pHCDPipe->pQH);        /* Add the QH to the free list */        usbEhcdAddToFreeQHList(pHCDPipe->pQH);        /* Release the semaphore to the waiting task */        OS_RELEASE_EVENT(pHCDPipe->DeleteSynchEventID);        /* Exclusively access the reclamation list */        OS_WAIT_FOR_EVENT(pEHCDData->ReclamationListSynchEventID,                          OS_WAIT_INFINITE);        }    /* Search the list which contains the requests which need to be removed     * and release the memory allocated for all of them.     */    for (pRequestInfo = pEHCDData->pHeadAsynchCancelList;        NULL != pRequestInfo;        pRequestInfo = pEHCDData->pHeadAsynchCancelList)        {        /* Update the head of the asynch request reclamation list */        pEHCDData->pHeadAsynchCancelList = pRequestInfo->pListRequest;        /* Release the exclusive access */        OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);        /* Get the tail of the TD list */        pQTDTail = (pUSB_EHCD_QTD)pRequestInfo->pTail;        /* Get the head of the TD list */        pQTDHead = (pUSB_EHCD_QTD)pRequestInfo->pHead;        /* Assert if the head or tail is invalid */        OS_ASSERT(NULL != pQTDHead);        OS_ASSERT(NULL != pQTDTail);        /* Release all the TDs associated with this Request */        for (; pQTDHead != pQTDTail; pQTDHead = pTempQTD)            {            /* Store the next pointer temporarily */            pTempQTD = pQTDHead->pNext;            /* Add the TD to the free list */            usbEhcdAddToFreeQTDList(pQTDHead);            }        /* Add the tail element to the list */        usbEhcdAddToFreeQTDList(pQTDTail);        /* Release the semaphore to the waiting task */        OS_RELEASE_EVENT(pRequestInfo->pHCDPipe->DeleteSynchEventID);        /* Free the memory allocated for the request information */        OS_FREE(pRequestInfo);        /* Exclusively access the reclamation list */        OS_WAIT_FOR_EVENT(pEHCDData->ReclamationListSynchEventID,                          OS_WAIT_INFINITE);        }    /* Check if some request pending in Reclamation list or cancel list,       if not disable the intr     */    if ((NULL == pEHCDData->pAsynchReclamationListHead) &&        (NULL == pEHCDData->pHeadAsynchCancelList))        {        /* Disable Async advance intr */        USB_EHCD_CLR_BIT_USBINTR_INT_ON_ASYNC_ADVANCE_DOORBELL(pEHCDData);        USB_EHCD_CLR_BIT_USBCMD_INT_ON_ASYNC_ADVANCE_DOORBELL(pEHCDData);        }    /* Release the exclusive access */    OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdCleanupAsynchPipes - Exit\n",0,0,0,0);    return;    }/* End of usbEhcdCleanupAsynchPipes() *//***************************************************************************** usbEhcdCleanupPeriodicPipes - cleans up the periodic pipes.** This is used to perform the cleanup functionality of the periodic pipes.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/LOCAL VOID usbEhcdCleanupPeriodicPipes    (    pUSB_EHCD_DATA pEHCDData    )    {    /* To hold the pointer to the pipe information */    pUSB_EHCD_PIPE pHCDPipe = NULL;    /* To hold the request information */    pUSB_EHCD_REQUEST_INFO pRequestInfo = NULL;    /* To hold the temporary request information */    pUSB_EHCD_REQUEST_INFO pTempRequestInfo = NULL;	/* WindView Instrumentation */	USB_HCD_LOG_EVENT(		USB_EHCI_WV_EVENT_HANDLER,		"usbEhcdCleanupPeriodicPipes() starts",		USB_EHCD_WV_FILTER);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdCleanupPeriodicPipes - Entry\n",0,0,0,0);    /* Check the validity of the parameters */    if (NULL == pEHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdCleanupPeriodicPipes - parameter not \                                    valid\n",0,0,0,0);        return;        }     /* Exclusively access the reclamation list */    OS_WAIT_FOR_EVENT(pEHCDData->ReclamationListSynchEventID, OS_WAIT_INFINITE);    /* Search the list and remove the element */    for (pHCDPipe = pEHCDData->pPeriodicReclamationListHead;        NULL != pHCDPipe;        pHCDPipe = pEHCDData->pPeriodicReclamationListHead)        {        /* Update the head of the reclamation list */        pEHCDData->pPeriodicReclamationListHead = pHCDPipe->pNext;        /* Release the reclamationsychronisation event */        OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);        /* This loop retrieves the requests which are queued to the         * endpoint and releases the TDs. This is done by exclusively         * accessing the request list.         */        /* Exclusively access the request synchronisation list         * This is done as the request list which is maintained for the HC         * is also accessed.         */        OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                          OS_WAIT_INFINITE);        /* Remove the requests from the endpoint queue */        for (pRequestInfo = pHCDPipe->pRequestQueueHead;            NULL != pRequestInfo;            pRequestInfo = pHCDPipe->pRequestQueueHead)            {            /* Check if the request is not the head element of the HCD queue */            if (pRequestInfo != pEHCDData->pRequestQueueHead)                {                /* Search for the request element in the HCD maintained list                 * and free the request

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品成人少妇| 国产婷婷色一区二区三区在线| 国产精品一卡二卡| 亚洲午夜电影在线| 欧美激情综合五月色丁香小说| 欧美一区二区在线看| 在线观看亚洲专区| 成人小视频免费观看| 精品无人码麻豆乱码1区2区| 午夜精品久久久久久不卡8050 | 99精品视频在线免费观看| 日韩电影免费在线| 亚洲一区成人在线| 亚洲老妇xxxxxx| 国产精品国产a| 国产精品视频观看| 中文字幕亚洲一区二区av在线 | 日韩一区有码在线| 亚洲欧美乱综合| 亚洲卡通动漫在线| 亚洲无人区一区| 麻豆视频观看网址久久| 美女脱光内衣内裤视频久久网站| 久久精品国产第一区二区三区| 日韩电影免费在线看| 久久国产人妖系列| 成人激情免费网站| 欧美日本韩国一区| 欧美变态tickling挠脚心| 久久精品网站免费观看| 亚洲成人久久影院| 青青草国产精品97视觉盛宴| 久久精品国产999大香线蕉| 极品销魂美女一区二区三区| 成人黄色国产精品网站大全在线免费观看 | 蜜臀av亚洲一区中文字幕| 国产成人综合自拍| 欧美日韩一区二区在线观看| 日韩精品一区二区三区三区免费| 国产精品久久夜| 久久成人综合网| 欧美日韩国产乱码电影| 国产精品成人免费| 国产一区中文字幕| 欧美美女激情18p| 国产精品高清亚洲| 国产乱人伦偷精品视频不卡| 日本韩国精品在线| 国产精品久久久久久妇女6080| 日本欧美一区二区在线观看| 91热门视频在线观看| 国产欧美日韩久久| 国产.精品.日韩.另类.中文.在线.播放| 欧洲一区在线观看| 亚洲欧美日韩久久精品| 国产成人在线电影| 精品久久国产老人久久综合| 午夜久久久久久久久久一区二区| 91在线精品一区二区三区| 中文字幕精品三区| 91.xcao| 亚洲午夜激情网页| 欧美日韩免费在线视频| 亚洲精品国产品国语在线app| 成人手机电影网| 26uuu欧美| 国产精品一区久久久久| 久久久精品日韩欧美| 国产一区二区三区日韩| 中文字幕免费不卡| 国产精品69久久久久水密桃| 久久久久久久久久久99999| 国产河南妇女毛片精品久久久| 久久精品夜色噜噜亚洲aⅴ| 国产精品12区| 国产精品素人一区二区| 99re这里都是精品| 午夜精品一区在线观看| 亚洲精品一区二区精华| 国产在线观看免费一区| 国产精品久久久久久久久久免费看 | 亚洲精品国产无套在线观| 精品99999| 欧美不卡视频一区| 日韩一区国产二区欧美三区| 亚洲va欧美va国产va天堂影院| 日韩视频一区二区三区在线播放 | 激情深爱一区二区| 国产精品久久久久久久久免费相片 | 97se亚洲国产综合自在线观| 亚洲欧美国产毛片在线| 欧美浪妇xxxx高跟鞋交| 五月综合激情网| 欧美精彩视频一区二区三区| 91高清视频免费看| 日本不卡的三区四区五区| 日本一区二区三区国色天香| 99国产精品国产精品毛片| 另类小说图片综合网| 午夜影视日本亚洲欧洲精品| ㊣最新国产の精品bt伙计久久| 欧美不卡一二三| 5566中文字幕一区二区电影| 成人av电影免费在线播放| 欧美a一区二区| 日韩精品91亚洲二区在线观看 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产午夜精品一区二区三区视频| 欧美高清你懂得| 91免费版在线| 色综合激情五月| 91理论电影在线观看| 91丝袜高跟美女视频| 成人激情小说乱人伦| 北条麻妃一区二区三区| 成人天堂资源www在线| 在线区一区二视频| 欧美xxxx老人做受| 国产精品不卡在线观看| 久久久久久亚洲综合| eeuss鲁片一区二区三区| 国产综合成人久久大片91| 成年人国产精品| 成人av免费在线观看| 奇米888四色在线精品| 91麻豆精品国产91久久久资源速度| 国产91丝袜在线播放九色| 精品一区二区在线免费观看| 成人综合激情网| 91精品国产一区二区三区香蕉| 久久久国际精品| 亚洲v精品v日韩v欧美v专区| 成人性生交大合| 精品日产卡一卡二卡麻豆| 一区二区三区中文字幕在线观看| 精品一区二区三区香蕉蜜桃| 欧洲av在线精品| 欧美色精品天天在线观看视频| 91福利视频网站| 91福利精品第一导航| 欧美亚洲综合网| 日韩精品一区二区三区视频| 91精品国产乱码| 欧美日韩午夜在线| 在线观看91视频| 91精品国产色综合久久ai换脸| 国产v综合v亚洲欧| 国产夫妻精品视频| 欧美日韩精品高清| 国产婷婷一区二区| 国产精品美日韩| 日本不卡中文字幕| 看电视剧不卡顿的网站| 日本视频一区二区| 久久成人av少妇免费| 成人在线视频首页| 国产成人精品免费在线| 奇米色一区二区三区四区| 最新国产の精品合集bt伙计| 亚洲1区2区3区4区| 国产美女精品在线| 国产乱人伦偷精品视频免下载| 国产性做久久久久久| 成人黄色片在线观看| 一区二区三区91| 国产视频一区在线播放| 色综合久久88色综合天天| 91社区在线播放| 国产精品天干天干在观线| 亚洲第一会所有码转帖| 成人午夜在线播放| 26uuu国产在线精品一区二区| 国产精品影视在线观看| 国产精品久久久久婷婷二区次| 色综合久久综合网欧美综合网 | 久久精品免视看| 色婷婷狠狠综合| 久久99国产精品久久99| 亚洲欧美日韩精品久久久久| 欧美性感一区二区三区| 日韩一级精品视频在线观看| 亚洲va欧美va人人爽| 91精品国产入口| 久久99精品久久久久久久久久久久| 精品卡一卡二卡三卡四在线| 国产寡妇亲子伦一区二区| 亚洲曰韩产成在线| 欧美性视频一区二区三区| 亚洲男女一区二区三区| 成人一级黄色片| 中文字幕va一区二区三区| 色一情一乱一乱一91av| 国产精品的网站| 国产高清无密码一区二区三区| 久久久影视传媒| 国产精品综合久久| 中文字幕永久在线不卡| 91精品国产美女浴室洗澡无遮挡| 国产精品一区在线观看你懂的| 国产精品国产a级|