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

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

?? usbehcdeventhandler.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價值
?? C
?? 第 1 頁 / 共 5 頁
字號:
                    }                /* Store the address of the head in the local */                pQTDHead = (pUSB_EHCD_QTD)(pTempRequestInfo->pHead);                /* Release all the TDs associated with this Request */                for (; pQTDHead != (pUSB_EHCD_QTD)pTempRequestInfo->pTail;					   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((pUSB_EHCD_QTD)(pTempRequestInfo->pTail));                if ((NULL != pTempRequestInfo->pUrb->pTransferBuffer) &&                    (USBHST_SUCCESS == pTempRequestInfo->pUrb->nStatus))                {                    /* Invalidate the cache */		    		CACHE_USER_INVALIDATE(pTempRequestInfo->pUrb->pTransferBuffer,					  pTempRequestInfo->pUrb->uTransferLength);                }                /* Call the callback function if it is registered */                if (NULL != pTempRequestInfo->pUrb->pfCallback)                    {                    /* if the status is Time Out change to STALL for USBD to understand                        the error                    */                    (pTempRequestInfo->pUrb->pfCallback)                    (pTempRequestInfo->pUrb);                    }                /* Free the memory allocated for the request information */                OS_FREE(pTempRequestInfo);                /* Acquire the event */                OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                                  OS_WAIT_INFINITE);                }            else                {                /* Update the previous request information */                pPreRequestInfo = pRequestInfo;                /* Update the request information pointer */                pRequestInfo = pRequestInfo->pListRequest;                OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdProcessTransferCompletion - \                                        No request to be serviced\n",0,0,0,0);                }            }        else            {            /* To be done for isochronous transfers */            if (USBHST_HIGH_SPEED == pRequestInfo->pHCDPipe->uSpeed)                {                /* Pointer to the tail of Queue TD */                pUSB_EHCD_ITD pITDTail = NULL;                /* Pointer to the head of Queue TD */                pUSB_EHCD_ITD pITDHead = NULL;                /* Pointer to the temporary QH */                pUSB_EHCD_ITD pTempITD = NULL;                /* Micro frame mask value */                UINT8 uMicroFrameMask = 0;                /* Microframe Index */                UINT8 uMicroFrameIndex=0;                /* Status bit */                UINT8 uTailStatusBit = 0;                /* 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);                /* Assert if the URB is invalid */                OS_ASSERT(NULL != pRequestInfo->pUrb);                /* Get the micro frame mask valeu */                uMicroFrameMask = pRequestInfo->pHCDPipe->uUFrameMaskValue;                /* Invalidate the cache */                CACHE_DMA_INVALIDATE(pITDTail, sizeof(USB_EHCD_ITD));                /* Check the status bit for the last uFrames                 * to verify the transfer complletion                 */                for (uMicroFrameIndex=0;                    USB_EHCD_MAX_MICROFRAME_NUMBER > uMicroFrameIndex;                    uMicroFrameIndex++)                    {                    if ((uMicroFrameMask << uMicroFrameIndex) & 0x80)                        {                        /* Get the status bit of Tail ITD */                        uTailStatusBit =                                USB_EHCD_GET_BITFIELD(ITD,                                                      pITDTail->                                                      uTransactionStatusControlList[uMicroFrameIndex],                                                      TRANSACTION_STATUS) &                                                      USB_EHCD_ITD_STATUS_ACTIVE;                        break;                        }                    }/* End of for () */                if (0 == uTailStatusBit)                    {                    /* Update the number of bytes transferred and status*/                    usbEhcdUpdateITDData(pITDHead, pITDTail,                                         (pUSBHST_ISO_PACKET_DESC)                                         (pRequestInfo->pUrb->pTransferSpecificData),                                         uMicroFrameMask);                    /* Remove the request from the HCD list - Start */                    /* If this is the head element */                    if (pRequestInfo == pEHCDData->pRequestQueueHead)                        {                        /* Update the head of the request list */                        pEHCDData->pRequestQueueHead = pRequestInfo->pListRequest;                        /* Update the tail to NULL if the head is NULL */                        if (NULL == pEHCDData->pRequestQueueHead)                            {                            pEHCDData->pRequestQueueTail = NULL;                            }                        }                    else                        {                        /* Update the next element in the request list */                        pPreRequestInfo->pListRequest = pRequestInfo->pListRequest;                        /* If List Request for PreRequest is NULL, the update                         Tail to prev request                         */                        if (NULL == pPreRequestInfo->pListRequest)                            {                            pEHCDData->pRequestQueueTail = pPreRequestInfo;                            }                        }                    /* Remove the request from the Endpoint list*/                    USB_EHCD_DELETE_FROM_ENDPOINT_LIST(pRequestInfo);                    /* Remove all the ITDs from request list. */                    while (pITDHead != pITDTail)                        {                        pTempITD = pITDHead;                        usbEhcdUnLinkITD(pEHCDData, pITDHead);                        pITDHead = pITDHead->pVerticalNext;                        usbEhcdAddToFreeITDList(pTempITD);                        }                    /* Check if this is the last ITD in the pipe *                     * reset the last frame index */                    if (pRequestInfo->pHCDPipe->uLastIndex ==                        pITDTail->uFrameListIndex +1)                        {                        pRequestInfo->pHCDPipe->uLastIndex = 0;                        }                    /* Unlink the last ITD from the frame list */                    usbEhcdUnLinkITD(pEHCDData, pITDHead);                    /* Remove the last ITD from list */                    usbEhcdAddToFreeITDList(pITDTail);                    /* Release the event */                    OS_RELEASE_EVENT(pEHCDData->RequestSynchEventID);                    /* Update the temp pointer which is used for freeing */                    pTempRequestInfo = pRequestInfo;                    /* Update the request pointer */                    pRequestInfo = pRequestInfo->pListRequest;                    /* Call the callback function if it is registered */                    if (NULL != pTempRequestInfo->pUrb->pfCallback)                        {                        (pTempRequestInfo->pUrb->pfCallback)(pTempRequestInfo->pUrb);                        }                    /* Free the memory allocated for the request information */                    OS_FREE(pTempRequestInfo);                    /* Acquire the event */                    OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                                  OS_WAIT_INFINITE);                    }                else                /* If the request is not completed, goto the next element                * in the HCD request list. */                    {                    pPreRequestInfo = pRequestInfo;                    pRequestInfo = pRequestInfo->pListRequest;                    continue;                    }                /* Whole of the request is not completed */                }            else                {                /* Pointer to the tail of SITD */                pUSB_EHCD_SITD pSITDTail = NULL;                /* Pointer to the head of Queue TD */                pUSB_EHCD_SITD pSITDHead = NULL;                /* Pointer to the temporary QH */                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);                /* Assert if the URB is invalid */                OS_ASSERT(NULL != pRequestInfo->pUrb);                /* Invalidate the cache */                CACHE_DMA_INVALIDATE(pSITDTail, sizeof(USB_EHCD_SITD));                /* Check the status bit for the last Frame                 * to verify the transfer complletion                  */				if (0 == (USB_EHCD_GET_BITFIELD(SITD,                                                pSITDTail->uTransferState,                                                TRANSFER_STATE_STATUS) &                          USB_EHCD_SITD_STATUS_ACTIVE))                    {                    /* Update the number of bytes transferred and status*/                    usbEhcdUpdateSITDData(pSITDHead, pSITDTail,                                          (pUSBHST_ISO_PACKET_DESC)                                          (pRequestInfo->pUrb->pTransferSpecificData));                    /* Update URB Status as Successs */                    pRequestInfo->pUrb->nStatus = USBHST_SUCCESS;                    /* Remove the request from the HCD list - Start */                    /* If this is the head element */                    if (pRequestInfo == pEHCDData->pRequestQueueHead)                        {                        /* Update the head of the request list */                        pEHCDData->pRequestQueueHead = pRequestInfo->pListRequest;                        /* Update the tail to NULL if the head is NULL */                        if (NULL == pEHCDData->pRequestQueueHead)                            {                            pEHCDData->pRequestQueueTail = NULL;                            }                        }                    else                        {                        /* Update the next element in the request list */                        pPreRequestInfo->pListRequest = pRequestInfo->pListRequest;                        /* If List Request for PreRequest is NULL, the update                         Tail to prev request                         */                        if (NULL == pPreRequestInfo->pListRequest)                            {                            pEHCDData->pRequestQueueTail = pPreRequestInfo;                            }                        }                    /* Remove the request from the Endpoint list*/                    USB_EHCD_DELETE_FROM_ENDPOINT_LIST(pRequestInfo);                    /* Remove all the SITDs from request list. */                    while (pSITDHead != pSITDTail)                        {                        pTempSITD = pSITDHead;                        usbEhcdUnLinkSITD(pEHCDData, pSITDHead);                        pSITDHead = pSITDHead->pVerticalNext;                        usbEhcdAddToFreeSITDList(pTempSITD);                        }                    /* Check if this is the last SITD in the pipe *                     * reset the last frame index */                    if (pRequestInfo->pHCDPipe->uLastIndex ==                        pSITDTail->uFrameListIndex +1)                        {                        pRequestInfo->pHCDPipe->uLastIndex = 0;                        }                    /* Unlink the last SITD from frame list */                    usbEhcdUnLinkSITD(pEHCDData, pSITDTail);                    /* Remove the last ITD from list */                    usbEhcdAddToFreeSITDList(pSITDTail);                    /* Release the event */                    OS_RELEASE_EVENT(pEHCDData->RequestSynchEventID);                    /* Update the temp pointer which is used for freeing */                    pTempRequestInfo = pRequestInfo;                    /* Update the request pointer */                    pRequestInfo = pRequestInfo->pListRequest;                    /* Call the callback function if it is registered */                    if (NULL != pTempRequestInfo->pUrb->pfCallback)                        {                        (pTempRequestInfo->pUrb->pfCallback)(pTempRequestInfo->pUrb);                        }                    /* Free the memory allocated for the request information */                    OS_FREE(pTempRequestInfo);                    /* Acquire the event */                    OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,                                  OS_WAIT_INFINITE);                    }                else                /* If the request is not completed, goto the next element                * in the HCD request list. */                    {                    pPreRequestInfo = pRequestInfo;                    pRequestInfo = pRequestInfo->pListRequest;                    continue;                    }                } /* End of else for full speed */            } /* End of else for isochronous */        }/* End of for (pRequestInfo = pEHCDData->pRequestQueueHead...*/    /* Release the exclusive access of the request list */    OS_RELEASE_EVENT(pEHCDData->RequestSynchEventID);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdProcessTransferCompletion - Exit\n",0,0,0,0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
eeuss国产一区二区三区| 6080国产精品一区二区| 欧亚洲嫩模精品一区三区| 欧美大片拔萝卜| 亚洲美女淫视频| 经典三级一区二区| 欧美视频在线播放| 国产精品久久久久三级| 久久99深爱久久99精品| 欧美日韩在线精品一区二区三区激情| 亚洲精品在线免费观看视频| 亚洲午夜免费电影| 91亚洲精华国产精华精华液| 久久青草欧美一区二区三区| 六月丁香综合在线视频| 欧美日韩亚洲国产综合| 亚洲图片激情小说| 白白色 亚洲乱淫| 国产日韩欧美不卡在线| 免费在线一区观看| 欧美视频在线观看一区二区| 亚洲欧美欧美一区二区三区| 成人午夜av在线| 国产亚洲欧美日韩俺去了| 久久99日本精品| 日韩三级在线观看| 免费精品视频在线| 日韩视频永久免费| 裸体歌舞表演一区二区| 精品国产乱码久久久久久图片 | 中文字幕在线观看不卡| 国产成人免费网站| 日本一区二区三区电影| 国产+成+人+亚洲欧洲自线| 国产日本亚洲高清| www.成人在线| 一区二区三区中文在线| 欧美色电影在线| 午夜电影一区二区| 欧美一区二区三区四区视频| 久久99精品久久久久久动态图| 日韩亚洲电影在线| 韩国精品主播一区二区在线观看| 久久综合色播五月| 国产成人精品一区二| 中文字幕中文字幕一区二区| 99久久精品国产观看| 成人欧美一区二区三区在线播放| 色综合久久久网| 亚洲成人tv网| 精品国产乱码久久久久久闺蜜| 国产在线一区二区综合免费视频| 久久午夜羞羞影院免费观看| 成人福利视频在线看| 亚洲精品国产一区二区三区四区在线| 色哟哟亚洲精品| 青青青伊人色综合久久| 国产亚洲精品久| 日本精品一区二区三区高清| 蜜臀精品一区二区三区在线观看| 欧美一卡二卡三卡四卡| 成人一级视频在线观看| 亚洲综合成人在线视频| 久久亚洲一级片| 欧美性受极品xxxx喷水| 国产精品亚洲视频| 亚洲图片欧美色图| 久久久久久电影| 欧美日韩中字一区| 国产精品456露脸| 亚洲靠逼com| 精品国产91乱码一区二区三区| 99久久国产综合色|国产精品| 亚洲成人av一区| 国产亚洲欧美日韩日本| 欧美日本一区二区| gogo大胆日本视频一区| 老司机免费视频一区二区三区| 国产精品乱人伦中文| 欧美电影在哪看比较好| 99精品国产99久久久久久白柏| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品美女久久久久久久久| 欧美一二三区精品| 在线欧美小视频| 懂色av一区二区三区免费观看| 丝袜美腿亚洲一区| 亚洲品质自拍视频网站| 国产亚洲va综合人人澡精品| 欧美一区二区三区视频在线 | 麻豆91精品91久久久的内涵| 亚洲欧美一区二区不卡| 久久只精品国产| 欧美大片一区二区| 欧美手机在线视频| 日本韩国精品在线| av在线不卡观看免费观看| 国产一区二区在线视频| 日本不卡123| 午夜久久久影院| 亚洲一区中文日韩| 夜色激情一区二区| 自拍偷自拍亚洲精品播放| 国产欧美精品一区二区三区四区 | 69精品人人人人| 欧美日韩成人综合| 在线中文字幕一区| 在线国产电影不卡| 在线精品视频免费播放| 91网站最新地址| 91在线云播放| 在线看不卡av| 日本精品裸体写真集在线观看| 91无套直看片红桃| 欧美自拍丝袜亚洲| 欧美日韩三级在线| 欧美精品三级在线观看| 欧美日韩极品在线观看一区| 欧美日韩国产综合一区二区三区| 欧美日韩在线一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品一区一区| 国产成人免费9x9x人网站视频| 国产成人av电影| 风间由美性色一区二区三区| 成人中文字幕在线| 成人av在线播放网站| 91首页免费视频| 欧美日韩亚州综合| 日韩三级在线免费观看| 久久久99久久| 亚洲精品美腿丝袜| 青娱乐精品视频| 国产福利91精品一区二区三区| 国产91在线观看丝袜| 色哟哟一区二区| 日韩一卡二卡三卡| 欧美国产精品专区| 一区二区三区美女视频| 久久精品国产77777蜜臀| 国产成人欧美日韩在线电影| 色偷偷一区二区三区| 制服丝袜亚洲网站| 国产区在线观看成人精品| 亚洲欧洲综合另类| 麻豆91在线播放| 97成人超碰视| 国产农村妇女毛片精品久久麻豆| 亚洲视频一二三| 麻豆91精品视频| 成人av片在线观看| 欧美浪妇xxxx高跟鞋交| 国产亚洲视频系列| 亚洲精品一二三| 韩国女主播一区| 欧美日韩激情在线| 中文字幕在线免费不卡| 老色鬼精品视频在线观看播放| 99精品国产99久久久久久白柏| 日韩欧美国产精品一区| 亚洲色图丝袜美腿| 国产九九视频一区二区三区| 欧美视频一区二区三区| 国产亚洲综合在线| 裸体健美xxxx欧美裸体表演| 日本乱人伦aⅴ精品| 国产午夜精品在线观看| 日本在线不卡视频| 色先锋资源久久综合| 国产欧美日韩麻豆91| 美美哒免费高清在线观看视频一区二区| va亚洲va日韩不卡在线观看| 欧美精品一区视频| 天天影视色香欲综合网老头| 99精品视频一区| 国产日韩欧美综合一区| 裸体在线国模精品偷拍| 欧美久久久久久蜜桃| 亚洲视频在线观看一区| 成人黄色网址在线观看| 久久影视一区二区| 蜜臀av一区二区| 日韩一区二区视频| 香蕉成人啪国产精品视频综合网| 99r国产精品| 国产精品麻豆欧美日韩ww| 国产真实乱对白精彩久久| 日韩欧美久久一区| 日本不卡视频在线观看| 欧美日韩综合在线| 亚洲成av人影院| 欧洲亚洲国产日韩| 亚洲成av人片在线观看| 欧美性生活久久| 亚洲综合视频在线| 在线观看日韩电影| 亚洲高清视频的网址| 欧美日韩一区二区在线观看| 亚洲成人动漫一区| 91精品国产色综合久久不卡电影|