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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbehcdeventhandler.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價值
?? C
?? 第 1 頁 / 共 5 頁
字號:
                 */                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);            /* If the pipe is an interrupt pipe, add all             * the TDs to the free QTD pool             */            if (USBHST_INTERRUPT_TRANSFER == pHCDPipe->uEndpointType)                {                /* 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;                /* 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);                }            /* This endpoint is an isochronous endpoint */            else                {                /* Check if the endpoint is for a full speed device. It would                 * contain split isochronous TDs                 */                if (USBHST_FULL_SPEED == pHCDPipe->uSpeed)                    {                    /* Pointer to the tail of SITD */                    pUSB_EHCD_SITD pSITDTail = NULL;                    /* Pointer to the head of SITD */                    pUSB_EHCD_SITD pSITDHead = NULL;                    /* Pointer to the temporary SITD */                    pUSB_EHCD_SITD pTempSITD = NULL;                    /* Get the tail of the TD list */                    pSITDTail = (pUSB_EHCD_SITD)pRequestInfo->pTail;                    /* Get the head of the TD list */                    pSITDHead = (pUSB_EHCD_SITD)pRequestInfo->pHead;                    /* Assert if the head or tail is invalid */                    OS_ASSERT(NULL != pSITDHead);                    OS_ASSERT(NULL != pSITDTail);                    /* Release all the TDs associated with this Request */                    for (; pSITDHead != pSITDTail; pSITDHead = pTempSITD)                        {                        /* Store the next pointer temporarily */                        pTempSITD = pSITDHead->pVerticalNext;                        /* Add the TD to the free list */                        usbEhcdAddToFreeSITDList(pSITDHead);                        }                    /* Add the tail element to the list */                    usbEhcdAddToFreeSITDList(pSITDTail);                    }                /* Check if the endpoint is for a high speed device. It would                 * contain isochronous TDs                 */                else if (USBHST_HIGH_SPEED == pHCDPipe->uSpeed)                    {                    /* Pointer to the tail of ITD */                    pUSB_EHCD_ITD pITDTail = NULL;                    /* Pointer to the head of ITD */                    pUSB_EHCD_ITD pITDHead = NULL;                    /* Pointer to the temporary ITD */                    pUSB_EHCD_ITD pTempITD = NULL;                    /* Get the tail of the TD list */                    pITDTail = (pUSB_EHCD_ITD)pRequestInfo->pTail;                    /* Get the head of the TD list */                    pITDHead = (pUSB_EHCD_ITD)pRequestInfo->pHead;                    /* Assert if the head or tail is invalid */                    OS_ASSERT(NULL != pITDHead);                    OS_ASSERT(NULL != pITDTail);                    /* Release all the TDs associated with this Request */                    for (; pITDHead != pITDTail; pITDHead = pTempITD)                        {                        /* Store the next pointer temporarily */                        pTempITD = pITDHead->pVerticalNext;                        /* Add the TD to the free list */                        usbEhcdAddToFreeITDList(pITDHead);                        }                    /* Add the tail element to the list */                    usbEhcdAddToFreeITDList(pITDTail);                    }                /* Invalid speed */                else                    {                    OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdCleanupPeriodicPipes - \                                        Invalid isochronous speed\n",0,0,0,0);                    OS_ASSERT(FALSE);                    }                }            /* 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);        /* If it is a non-isochronous endpoint, release the QHs */        if (USBHST_INTERRUPT_TRANSFER == pHCDPipe->uEndpointType)            {            /* Assert if the QH is invalid */            OS_ASSERT(NULL != pHCDPipe->pQH);            /* Add the QH to the free list */            usbEhcdAddToFreeQHList(pHCDPipe->pQH);            }        /* Release the event 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->pHeadPeriodicCancelList;        NULL != pRequestInfo;        pRequestInfo = pEHCDData->pHeadPeriodicCancelList)        {        /* Update the head of the asynch request reclamation list */        pEHCDData->pHeadPeriodicCancelList = pRequestInfo->pListRequest;        /* Release the exclusive access */        OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);        /* Assert if the pipe pointer is invalid */        OS_ASSERT(NULL != pRequestInfo->pHCDPipe);        /* The following condition will check if the request is for an         * interrupt endpoint and will remove the request elements.         */        if (USBHST_INTERRUPT_TRANSFER == pRequestInfo->pHCDPipe->uEndpointType)            {            /* 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;            /* 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);            /* The status is updated to cancel in usbEhcdCancelURB() function. So             * it is not updated to Cancelled here.             */            }        else if (USBHST_ISOCHRONOUS_TRANSFER ==                 pRequestInfo->pHCDPipe->uEndpointType)            {            /* To be done for isochronous */            }        else            {            OS_ASSERT(FALSE);            }        /* 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->pPeriodicReclamationListHead) &&        (NULL == pEHCDData->pHeadPeriodicCancelList))        {        USB_EHCD_CLR_BIT_USBINTR_INT_ON_FRAME_LIST_ROLLOVER(pEHCDData);        }    /* Release the exclusive access */    OS_RELEASE_EVENT(pEHCDData->ReclamationListSynchEventID);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdCleanupPeriodicPipes - Exit\n",0,0,0,0);    return;    }/* End of usbEhcdCleanupPeriodicPipes() *//***************************************************************************** usbEhcdHostSystemErrorHandler - handles the host system error interrupt** This is used to handle the host system error interrupt.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/LOCAL VOID usbEhcdHostSystemErrorHandler    (    pUSB_EHCD_DATA pEHCDData    )    {	/* WindView Instrumentation */	USB_HCD_LOG_EVENT(		USB_EHCI_WV_EVENT_HANDLER,		"usbEhcdHostSystemErrorHandler() starts",		USB_EHCD_WV_FILTER);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdHostSystemErrorHandler - Entry\n",0,0,0,0);    /* Check the validity of the parameters */    if (NULL == pEHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdHostSystemErrorHandler - parameter not\                         valid\n",0,0,0,0);        return;        }    /* Stop the Host controller from processing the schedule */    USB_EHCD_CLR_BIT(pEHCDData,                     USBCMD,                     RS);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdHostSystemErrorHandler - Exit\n",0,0,0,0);    return;    }/* End of usbEhcdHostSystemErrorHandler() *//***************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕亚洲成人| 成人福利视频在线| 欧美美女直播网站| 亚洲国产va精品久久久不卡综合| 国产精品18久久久久久vr| 欧美日韩高清影院| 日韩精品电影在线| 欧美精品在线一区二区三区| 天天综合天天综合色| 3d动漫精品啪啪1区2区免费 | 国产情人综合久久777777| 91国产成人在线| 国产福利一区二区三区视频| 欧美日韩一区三区| 日韩女优av电影在线观看| 欧美大白屁股肥臀xxxxxx| 久久久蜜臀国产一区二区| 久久99热99| 日韩一级二级三级| 国产一区二区影院| 国产欧美一区二区精品忘忧草| 狠狠色丁香久久婷婷综合丁香| 欧美成人三级在线| 成人黄色777网| 午夜精品久久久久久久蜜桃app| 欧美网站一区二区| 激情六月婷婷久久| ...xxx性欧美| 精品国产乱码91久久久久久网站| av中文字幕不卡| 美洲天堂一区二卡三卡四卡视频 | 91精品国产综合久久蜜臀| 韩国av一区二区三区四区| 亚洲一区视频在线| 国产欧美一区二区精品婷婷 | 中文字幕精品三区| 制服丝袜av成人在线看| 成人国产亚洲欧美成人综合网| 亚洲愉拍自拍另类高清精品| 久久九九久久九九| 色播五月激情综合网| 激情丁香综合五月| 蜜桃一区二区三区四区| 日韩精品成人一区二区三区| 亚洲欧美在线视频观看| 国产精品免费网站在线观看| 欧美不卡一区二区三区| 欧美一二三区在线观看| 精品视频在线免费看| 欧美日韩一区高清| 欧美日韩一区不卡| 欧美丰满少妇xxxxx高潮对白| 欧美亚洲免费在线一区| 91视频观看免费| 色综合久久九月婷婷色综合| av不卡免费在线观看| eeuss国产一区二区三区| 99麻豆久久久国产精品免费| 色噜噜狠狠一区二区三区果冻| 91在线一区二区| 欧美日韩五月天| 日韩一区二区三区观看| 久久久久国产精品麻豆| 日本一区二区三区视频视频| 国产精品视频一二| 亚洲第一久久影院| 久久精品国产第一区二区三区| 国产在线不卡一卡二卡三卡四卡| 国产福利一区在线观看| 91精彩视频在线观看| 精品sm捆绑视频| 亚洲国产精品国自产拍av| 亚洲黄色免费电影| 久久99精品国产麻豆不卡| 不卡大黄网站免费看| 欧美日韩国产bt| 国产精品久久久久三级| 午夜精品一区在线观看| 丁香婷婷综合五月| 欧美一区二区三区小说| 中文乱码免费一区二区| 亚洲bt欧美bt精品777| 国产丶欧美丶日本不卡视频| 欧美精品亚洲二区| 亚洲欧美自拍偷拍色图| 国内欧美视频一区二区| 欧美日韩一区三区四区| **欧美大码日韩| 亚洲综合无码一区二区| 日韩一区二区视频在线观看| 韩国v欧美v日本v亚洲v| 久久久亚洲欧洲日产国码αv| 日韩欧美国产午夜精品| 国产麻豆视频一区二区| 国产精品国产a级| 欧美人牲a欧美精品| 国内精品久久久久影院色| 亚洲欧洲精品天堂一级| 欧美酷刑日本凌虐凌虐| 国产美女av一区二区三区| 亚洲欧美日韩中文播放| 欧美美女bb生活片| 精品一区二区在线免费观看| 欧美国产精品一区二区| 色琪琪一区二区三区亚洲区| 亚洲一区二区精品久久av| 欧美高清视频不卡网| 久久99国产精品久久99果冻传媒| 欧美成人猛片aaaaaaa| 国产91综合一区在线观看| 国产视频在线观看一区二区三区| 国产精品一二三区| 亚洲一区在线视频| 中文乱码免费一区二区| 欧美日韩在线播放| 东方aⅴ免费观看久久av| 亚洲午夜久久久久久久久电影院| 欧美色老头old∨ideo| 国产精品亚洲第一区在线暖暖韩国 | 一本一道综合狠狠老| 久久精品国产第一区二区三区| 国产精品成人免费 | 欧美成人aa大片| 91欧美一区二区| 国产成人午夜视频| 天天综合网 天天综合色| 最近日韩中文字幕| 国产人成亚洲第一网站在线播放| 欧美乱妇20p| 在线综合视频播放| 色婷婷亚洲婷婷| 99麻豆久久久国产精品免费| 国产一区二区看久久| 奇米色777欧美一区二区| 日韩av电影免费观看高清完整版| 综合久久久久综合| 国产精品三级在线观看| 久久嫩草精品久久久精品| 久久久国际精品| 日韩欧美国产电影| 日韩三级免费观看| 久久久夜色精品亚洲| 亚洲欧洲成人自拍| 五月婷婷综合激情| 国产毛片精品一区| 欧美精品久久久久久久久老牛影院| 欧美电影影音先锋| 国产精品护士白丝一区av| 日本不卡视频在线观看| 91免费观看视频| 精品久久久久香蕉网| 欧美精品一区二区三区在线| 久久久久久久av麻豆果冻| 中文字幕制服丝袜一区二区三区 | 不卡av电影在线播放| www.亚洲在线| 欧美日韩精品欧美日韩精品一综合| 日韩欧美国产一区二区在线播放 | 中文字幕精品在线不卡| 欧美电影免费观看高清完整版在线| 一本到不卡精品视频在线观看 | 欧美极品另类videosde| 欧美国产日本视频| 亚洲第一福利一区| 91在线无精精品入口| 国产日韩一级二级三级| 日本91福利区| 欧美视频一区二区在线观看| 日本一区二区视频在线观看| 加勒比av一区二区| 精品国产一区二区精华| 麻豆精品一区二区av白丝在线| 欧美探花视频资源| 久久男人中文字幕资源站| 国产精品乱人伦一区二区| 精品剧情在线观看| 久久综合久久鬼色中文字| 337p亚洲精品色噜噜狠狠| 欧美精选午夜久久久乱码6080| 欧美视频自拍偷拍| 宅男在线国产精品| 久久综合国产精品| 亚洲人123区| 国产一区二区视频在线| 国产精品久久久久久亚洲毛片| 色偷偷久久人人79超碰人人澡| 中文字幕欧美激情一区| 91免费在线播放| 国内成人自拍视频| 亚洲一区二区三区在线看| 日韩精品自拍偷拍| 在线观看免费视频综合| 国产精品一区二区久激情瑜伽| 午夜精品一区二区三区免费视频| 久久久久高清精品| 日韩一级黄色大片| 欧美色大人视频| 91亚洲精品乱码久久久久久蜜桃| 久久不见久久见免费视频1| 亚洲第一福利一区|