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

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

?? usbehcdutil.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價(jià)值
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
             CACHE_DMA_FLUSH(((char*)pQTD+pUSB_EHCD_QTD_NEXT_QTD_POINTER_OFFSET), sizeof(UINT32));            /* Invalidate the cache */              CACHE_DMA_INVALIDATE((char*)pQTD+pUSB_EHCD_QTD_NEXT_QTD_POINTER_OFFSET, sizeof(UINT32));            /* Update the next element as the current qTD element */            pQTD = pQTD->pNext;            /*             * There are no other elements in the queue             * after the newly created element.             */            pQTD->pNext = NULL;            }            /* End of if(uBytesTransfered < uTransferLength) */        }        /* End of while (uBytesTransfered < uTransferLength) */    /* Update the tail pointer */    *ppDataTail = pQTD;    /* Return TRUE from the function */    return TRUE;    }    /* End of function usbEhcdCreateQTDs() *//***************************************************************************** usbEhcdUpdateNonIsochBytesTransferred - updates the number of bytes.** This function is used to update the number of bytes* transferred in a non-isochronous transfer.** <pHead> - Pointer to the head of the list of QTDS.* <pTail> - Pointer to the tail of the list of QTDS.* <puTransferBufferLen> - Pointer to hold the number of bytes which are *                        transferred.* RETURNS: None.** ERRNO:*   None.** \NOMANUAL*/VOID usbEhcdUpdateNonIsochBytesTransferred    (    pUSB_EHCD_QTD pHead,   /* Pointer to the head QTD */    pUSB_EHCD_QTD pTail,   /* Pointer to the tail QTD */    UINT32 *puTransferBufferLen /* Pointer to the length of the transfer */    )    {    /* Flag indicating that it is a control transfer request */    BOOLEAN bIsControl = FALSE;    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateNonIsochBytesTransferred - Entry",0,0,0,0);    /* Check the validity of the parameters */    if(NULL == pHead ||       NULL == pTail ||       NULL == puTransferBufferLen)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdUpdateNonIsochBytesTransferred - parameters \                             are not valid\n",0,0,0,0);        return;        }        /* Invalidate the cache */        CACHE_DMA_INVALIDATE(pHead, sizeof(USB_EHCD_QTD));        /* If it is a SETUP PID, jump to next TD */       if(USB_EHCD_SETUP_PID == USB_EHCD_GET_BITFIELD(QTD,                                                      pHead->uTransferInfo,                                                      TOKEN_PID_CODE))        {		pHead = pHead->pNext;        bIsControl = TRUE;        }    /* Update the number of bytes transferred to be 0 initially */    *puTransferBufferLen = 0;    /*     * This loop traverses the queue of requests     * and updates the number of bytes transferred     */    do        {        /* Invalidate the cache */        CACHE_DMA_INVALIDATE(pHead, sizeof(USB_EHCD_QTD));        /* Check if the TD has been processed */        if(0 == (USB_EHCD_GET_BITFIELD(QTD,                                       pHead->uTransferInfo,                                       TOKEN_STATUS) &                                       USB_EHCD_QTD_STATUS_ACTIVE))            {            /* Check if it is a control transfer & we have reached tail */            if((TRUE == bIsControl) && (pHead == pTail))                {                break;                }            /* Update the number of bytes transfered */            *puTransferBufferLen +=              (pHead->uBytesToTransfer -              USB_EHCD_GET_BITFIELD(QTD,                                    pHead->uTransferInfo,                                    TOKEN_TOTAL_BYTES_TO_TRANSFER));            }            /* End of if(0 == (pHead->dword2.status & */        else            {            break;            }            /* End of else */        /* If all TDs have been processed, break */        if(pHead == pTail)            {            break;            }        /* Move on to next TD */		pHead = pHead->pNext;        }while(1);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateNonIsochBytesTransferred - Exit",0,0,0,0);    return;    }    /* End of usb20_fill_noniso_bytes_transfered() *//***************************************************************************** usbEhcdUpdateNonIsochStatus - updates the status of a non-isochronous transfer.** This function is used to update the status of a non-isochronous transfer.** RETURNS: None.** ERRNO:*   None.** \NOMANUAL*/VOID usbEhcdUpdateNonIsochStatus    (    UINT8 uStatus,   /* Status field in QTD */    pUSBHST_URB pUrb, /* Pointer to the URB */    UINT8   *pHalted    )    {    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateNonIsochStatus - Entry",0,0,0,0);    *pHalted = 0;    /* Check the validity of the parameter */    if (NULL == pUrb)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdUpdateNonIsochStatus - \                             parameter not valid\n",0,0,0,0);        return;        }    /* set halted to 1 if HCD is halted */     if (0 != (uStatus & USB_EHCD_QTD_STATUS_HALTED))        {        *pHalted = 1;        /* Default halted error is STALL. This will be overwritten, if the           error is not STALL        */        pUrb->nStatus = USBHST_STALL_ERROR;        }    /* Update the URB status based on the status parameter  */    /* Data buffer error- can be underrun or overrun. Should be checked */    if (0 != (uStatus & USB_EHCD_QTD_STATUS_DATA_BUFFER_ERROR))        {        pUrb->nStatus = USBHST_BUFFER_UNDERRUN_ERROR;        }    /*     * babble error - this is set along with halt- so this condition     * should always fail. Mentioned here for completion     */    else if (0 != (uStatus & USB_EHCD_QTD_STATUS_BABBLE_DETECTED))        {        pUrb->nStatus = USBHST_STALL_ERROR;        }    /*     * Transaction error.     * Can be Timeout, CRC or bad PID     */    else if (0 != (uStatus & USB_EHCD_QTD_STATUS_XACTERR))        {        pUrb->nStatus = USBHST_TIMEOUT;        }    /* This is set only for a full/ low speed periodic transfer */    else if (0 != (uStatus & USB_EHCD_QTD_STATUS_MISSED_UFRAME))        {        pUrb->nStatus = USBHST_FAILURE;        }    /* If the above errors are not detected or HCD is not halted,       then status is SUCCESS     */    else if (1 != *pHalted)        {        pUrb->nStatus = USBHST_SUCCESS;        }    CACHE_USER_FLUSH(&pUrb->nStatus, sizeof(USBHST_STATUS));    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateNonIsochStatus - Exit",0,0,0,0);    return;    }    /* End of usbEhcdUpdateNonIsochStatus() */    /***************************************************************************** usbEhcdUpdateITDData - updates the number of bytes transferred.** This function is used to update the number of bytes* transferred and status in a isochronous transfer.** <pHead> - Pointer to the head of the list of ITDS.* <pTail> - Pointer to the tail of the list of ITDS.* <pPacketDes> - Pointer to the Packet descriptor*                        transferred.* <uMicroFrameMask> -* RETURNS: None.** ERRNO:*   None.** \NOMANUAL*/VOID usbEhcdUpdateITDData    (    pUSB_EHCD_ITD pHead,   /* Pointer to the head QTD */    pUSB_EHCD_ITD pTail,   /* Pointer to the tail QTD */    pUSBHST_ISO_PACKET_DESC pPacketDes, /* Pointer to the Packet descriptor */    UINT8 uMicroFrameMask    )    {    UINT32 uCount = 0;    UINT8 uStatus;    UINT8 uMicroFrameIndex;    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateITDData - Entry",0,0,0,0);    /* Check the validity of the parameters */    if(NULL == pHead ||       NULL == pTail ||       NULL == pPacketDes)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdUpdateITDData - parameters \                             are not valid\n",0,0,0,0);        return;        }    /*     * This loop traverses the queue of requests     * and updates the number of bytes transferred and status     */    do    {        /* Invalidate the cache */            CACHE_DMA_INVALIDATE(pHead, sizeof(USB_EHCD_ITD));        for (uMicroFrameIndex=0;           USB_EHCD_MAX_MICROFRAME_NUMBER > uMicroFrameIndex;           uMicroFrameIndex++)           {            if((uMicroFrameMask >> uMicroFrameIndex) & 0x01)            {            	/* Update the length of each microframe */				pPacketDes[uCount].uLength =                        USB_EHCD_GET_BITFIELD(ITD,                        pHead->uTransactionStatusControlList[uMicroFrameIndex],                        TRANSACTION_LENGTH);                /* Update the Status of each microframe */                pPacketDes[uCount].nStatus =                USB_EHCD_GET_BITFIELD(ITD,                        pHead->uTransactionStatusControlList[uMicroFrameIndex],                        TRANSACTION_STATUS);                /* get the status and update for per packet  */                uStatus = USB_EHCD_GET_BITFIELD(ITD,                        pHead->uTransactionStatusControlList[uMicroFrameIndex],                        TRANSACTION_STATUS);                if ((0 != (uStatus & USB_EHCD_ITD_STATUS_BABBLE_DETECTED))||                    (0 != (uStatus & USB_EHCD_ITD_STATUS_XACTERR)))                    {                    pPacketDes[uCount].nStatus = USBHST_FAILURE;                    }                else if (0 != (uStatus & USB_EHCD_ITD_STATUS_BUFFER_ERROR))                     {                     pPacketDes[uCount].nStatus = USBHST_BUFFER_UNDERRUN_ERROR;                     }                else /* Success */                     {                     pPacketDes[uCount].nStatus = USBHST_SUCCESS;                     }                uCount++;                } /* End of if statement .... */            } /* End of for loop */        /* Move on to next TD */        pHead = pHead->pVerticalNext;        }while(pHead == pTail);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateITDData - Exit",0,0,0,0);    return;    }    /* End of Function usbEhcdUpdateITDData *//***************************************************************************** usbEhcdUpdateSITDData - updates the number of bytes transferred.** This function is used to update the number of bytes* transferred and status in a isochronous transfer.** <pHead> - Pointer to the head of the list of SITDS.* <pTail> - Pointer to the tail of the list of SITDS.* <pPacketDes> - Pointer to the Packet descriptor*                        transferred.* RETURNS: None.** ERRNO:*   None.** \NOMANUAL*/VOID usbEhcdUpdateSITDData    (    pUSB_EHCD_SITD pHead,   /* Pointer to the head QTD */    pUSB_EHCD_SITD pTail,   /* Pointer to the tail QTD */    pUSBHST_ISO_PACKET_DESC pPacketDes /* Pointer to the Packet descriptor */    )    {    UINT32 uCount = 0;    UINT8 uStatus;        OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateITDData - Entry",0,0,0,0);    /* Check the validity of the parameters */    if(NULL == pHead ||       NULL == pTail ||       NULL == pPacketDes)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdUpdateITDData - parameters \                             are not valid\n",0,0,0,0);        return;        }    /*     * This loop traverses the queue of requests     * and updates the number of bytes transferred and status     */    do    {        /* Invalidate the cache */            CACHE_DMA_INVALIDATE(pHead, sizeof(USB_EHCD_SITD));    	/* Update the length of each microframe */        /*pPacketDes[uCount].uLength =        pHead->dword3.total_bytes_to_transfer; */        pPacketDes[uCount].uLength =                USB_EHCD_GET_BITFIELD(SITD,                        pHead->uTransferState,                        TRANSFER_STATE_TOTAL_BYTES_TO_TRANSFER);        /* get the status and update for per packet  */        uStatus = USB_EHCD_GET_BITFIELD(SITD,                        pHead->uTransferState,                        TRANSFER_STATE_TOTAL_BYTES_TO_TRANSFER);        if (0 != (uStatus & USB_EHCD_SITD_STATUS_ERROR))            {            pPacketDes[uCount].nStatus = USBHST_FAILURE;            }        else if (0 != (uStatus & USB_EHCD_SITD_STATUS_BUFFER_ERROR))            {                pPacketDes[uCount].nStatus = USBHST_BUFFER_UNDERRUN_ERROR;            }        else if (0 != (uStatus & USB_EHCD_SITD_STATUS_BABBLE_DETECTED))            {                pPacketDes[uCount].nStatus = USBHST_FAILURE;            }        else if (0 != (uStatus & USB_EHCD_SITD_STATUS_XACTERR))            {                pPacketDes[uCount].nStatus = USBHST_FAILURE;            }        else if (0 != (uStatus & USB_EHCD_SITD_STATUS_MISSED_FRAME))            {                pPacketDes[uCount].nStatus = USBHST_FAILURE;            }        else /* Success */            {                pPacketDes[uCount].nStatus = USBHST_SUCCESS;            }                uCount++;        /* Move on to next TD */        pHead = pHead->pVerticalNext;        }while(pHead == pTail);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdUpdateSITDData - Exit",0,0,0,0);    return;    }    /* End of Function usbEhcdUpdateSITDData *//***************************************************************************** usbEhcdCalculateBusTime - calculates the bus time

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99久久99精品免视看婷婷 | 制服丝袜一区二区三区| 国产综合色在线| 一区二区三区免费| 久久午夜免费电影| 91精品在线麻豆| 波波电影院一区二区三区| 日本美女一区二区| 亚洲女人****多毛耸耸8| ww久久中文字幕| 欧美久久久久久久久中文字幕| 成人夜色视频网站在线观看| 美女www一区二区| 亚洲成人一区在线| 久久成人久久爱| 亚洲一区二区三区视频在线| 亚洲欧美中日韩| 久久精品视频免费观看| 日韩一区二区三区视频在线观看| 色94色欧美sute亚洲线路二| 国产成人精品一区二| 国产尤物一区二区在线 | 成人av网在线| 国产福利精品导航| 激情久久五月天| 日韩电影一二三区| 午夜久久久久久| 亚洲国产成人精品视频| 亚洲精品欧美在线| 一区二区三区精品在线观看| 日韩理论片一区二区| 欧美极品aⅴ影院| 久久精品亚洲国产奇米99| 2020国产精品自拍| 久久女同性恋中文字幕| 精品成人一区二区| 日韩三级电影网址| 欧美不卡一二三| 26uuu亚洲综合色欧美| 久久久影视传媒| 久久久久久一级片| 欧美国产日韩在线观看| 国产精品伦一区二区三级视频| 国产精品福利av| 亚洲婷婷综合久久一本伊一区| 国产精品你懂的| 亚洲激情自拍视频| 一个色综合av| 日韩高清在线观看| 久久99精品久久久久久动态图| 老司机午夜精品| 极品少妇一区二区三区精品视频| 国产一区二区三区四| 国产aⅴ综合色| av电影在线观看不卡 | 2023国产精品自拍| 国产欧美精品国产国产专区| 国产色爱av资源综合区| 综合欧美一区二区三区| 亚洲成人综合视频| 国内精品久久久久影院薰衣草| 国产大片一区二区| 色综合久久精品| 欧美日韩的一区二区| 日韩视频在线你懂得| 国产色婷婷亚洲99精品小说| 亚洲精品美腿丝袜| 日本中文字幕一区二区有限公司| 精品一区二区免费| a级高清视频欧美日韩| 欧美日韩精品是欧美日韩精品| 欧美电影免费观看高清完整版 | 在线成人午夜影院| 久久久www成人免费毛片麻豆 | 午夜成人在线视频| 国产乱人伦偷精品视频免下载| va亚洲va日韩不卡在线观看| 欧美日韩免费电影| 久久精品在这里| 一区二区欧美精品| 国产一区在线观看视频| 欧美吞精做爰啪啪高潮| 亚洲精品一区二区三区福利 | 久久综合九色综合欧美98 | 丝袜美腿亚洲综合| 国产成人免费视频精品含羞草妖精| 91丝袜美女网| 精品成人佐山爱一区二区| 亚洲精品伦理在线| 国产精品一二三四| 欧美久久婷婷综合色| 国产精品第四页| 麻豆成人免费电影| 一本久久a久久免费精品不卡| 精品久久久三级丝袜| 亚洲福利视频一区| 972aa.com艺术欧美| 精品av综合导航| 亚洲123区在线观看| 成人永久aaa| 26uuu久久天堂性欧美| 亚洲成a天堂v人片| 色一情一乱一乱一91av| 久久久综合九色合综国产精品| 丝袜a∨在线一区二区三区不卡| 成人精品国产一区二区4080 | 午夜日韩在线观看| av成人动漫在线观看| 国产欧美日韩三级| 久久成人免费日本黄色| 91.麻豆视频| 亚洲成人在线观看视频| 91久久人澡人人添人人爽欧美| 中文无字幕一区二区三区| 美女看a上一区| 欧美一区日本一区韩国一区| 一区二区三区小说| 97se亚洲国产综合在线| 国产精品毛片久久久久久| 国产一区二区成人久久免费影院| 日韩精品资源二区在线| 日韩精品免费专区| 欧美精品1区2区3区| 午夜欧美2019年伦理| 欧美中文字幕一二三区视频| 亚洲色图欧美激情| 一本久道中文字幕精品亚洲嫩| 成人免费在线视频观看| 成人在线视频首页| 国产精品国模大尺度视频| 成人的网站免费观看| 国产精品人妖ts系列视频| 成人白浆超碰人人人人| 国产精品福利av| 91免费视频网址| 亚洲男女一区二区三区| 色综合久久88色综合天天6| 一二三四社区欧美黄| 欧美日韩精品一区二区三区四区| 亚洲地区一二三色| 欧美精品黑人性xxxx| 日韩av网站免费在线| 日韩三级精品电影久久久| 国产真实乱对白精彩久久| 国产日产欧美一区二区三区| 国产不卡视频在线观看| 国产精品女人毛片| 日本高清不卡视频| 日本欧美大码aⅴ在线播放| 欧美mv日韩mv| 成人av电影在线观看| 亚洲免费看黄网站| 欧美二区三区91| 韩国女主播一区二区三区| 久久久久久综合| 一本大道久久a久久精二百 | 日本中文字幕一区| 精品美女在线播放| 懂色一区二区三区免费观看| 成人免费在线视频| 69久久夜色精品国产69蝌蚪网| 精品一区二区三区免费| 成人免费小视频| 欧美三级视频在线| 久久99国产精品麻豆| 国产精品久久久久一区二区三区 | 一区二区三区丝袜| 欧美一区二区播放| 国产.欧美.日韩| 亚洲午夜私人影院| 久久亚洲精华国产精华液| 色一情一乱一乱一91av| 久久精品国产99国产精品| 国产精品的网站| 日韩免费高清av| 91丨porny丨在线| 欧美a一区二区| 亚洲天堂精品在线观看| 91精品蜜臀在线一区尤物| 国产91丝袜在线18| 亚洲超碰97人人做人人爱| 欧美国产成人精品| 在线成人高清不卡| 色综合色综合色综合| 久久99国产精品久久99果冻传媒| 亚洲日本va午夜在线影院| 精品国产免费人成电影在线观看四季| 成人av小说网| 久久精工是国产品牌吗| 夜夜嗨av一区二区三区中文字幕| 亚洲精品一区二区在线观看| 91久久香蕉国产日韩欧美9色| 国产伦精品一区二区三区免费| 一二三区精品视频| 久久网站热最新地址| 欧美日韩精品欧美日韩精品一 | 日韩精品视频网站| 亚洲色图清纯唯美| 久久精品一区二区三区不卡牛牛 | 91老师片黄在线观看|