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

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

?? usbehcdeventhandler.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價值
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* usbEhcdEventHandler.c - USB EHCI HCD interrupt handler *//* Copyright 2003 Wind River Systems, Inc. *//*Modification history--------------------01e,28Jul03, gpd Updated changes identified during integration testing.01d,23Jul03, gpd Incorporated changes after testing on MIPS01c,03jul03, gpd Included the changes for separate reclamation lists for                        asynchronous and periodic lists.                 Updated the usbEhcdProcessTransferCompletion() function to                        handle a transfer less than the request transfer size.                 Support for ClearTTBuffer request.01b,26jun03,psp changing the code to WRS standards.01a,25apr03,ram written.*//*DESCRIPTIONThis contains interrupt routines which handle the EHCI interrupts.INCLUDE FILES: usb2/usbOsal.h usb2/usbHst.h usb2/usbEhcdDataStructures.h               usb2/usbEhcdUtil.h usb2/BusAbstractionLayer.h usb2/usbEhcdEventHandler.h               usb2/usbEhcdHal.h usb2/usbEhcdRhEmulation.h*//*INTERNAL ******************************************************************************* * Filename         : usbEhcdEventHandler.c * * Copyright        : * * THE COPYRIGHT IN THE CONTENTS OF THIS SOFTWARE VEST WITH WIPRO * LIMITED A COMPANY INCORPORATED UNDER THE LAWS OF INDIA AND HAVING * ITS REGISTERED OFFICE AT DODDAKANNELLI SARJAPUR ROAD  BANGALORE * 560 035. DISTRIBUTION OR COPYING OF THIS SOFTWARE BY * ANY INDIVIDUAL OR ENTITY OTHER THAN THE ADDRESSEE IS STRICTLY * PROHIBITED AND MAY INCUR LEGAL LIABILITY. IF YOU ARE NOT THE * ADDRESSEE PLEASE NOTIFY US IMMEDIATELY BY PHONE OR BY RETURN EMAIL. * THE ADDRESSEE IS ADVISED TO MAINTAIN THE PROPRIETARY INTERESTS OF * THIS COPYRIGHT AS PER APPLICABLE LAWS. * * * Description      :  USB EHCI HCD interrupt handler * * ******************************************************************************//* includes */#include "usb2/usbOsal.h"#include "usb2/usbHst.h"#include "usb2/usbEhcdDataStructures.h"#include "usb2/usbEhcdUtil.h"#include "usb2/BusAbstractionLayer.h"#include "usb2/usbEhcdEventHandler.h"#include "usb2/usbEhcdHal.h"#include "usb2/usbEhcdRhEmulation.h"#include "usb2/usbHcdInstr.h"/* globals */extern USBHST_USBD_TO_HCD_FUNCTION_LIST g_USBDRequestFunctions;extern UINT32   g_EHCDHandle;/* locals */LOCAL VOID usbEhcdPortChangeHandler    (    pUSB_EHCD_DATA pEHCDData    );LOCAL VOID usbEhcdProcessTransferCompletion    (    pUSB_EHCD_DATA pEHCDData    );LOCAL VOID usbEhcdCleanupAsynchPipes    (    pUSB_EHCD_DATA pEHCDData    );LOCAL VOID usbEhcdCleanupPeriodicPipes    (    pUSB_EHCD_DATA pEHCDData    );/***************************************************************************** usbEhcdISR - interrupt service routine for the EHCI Driver.** This routine is the ISR for the EHCI Driver.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/VOID usbEhcdISR    (    pUSB_EHCD_DATA pHCDData    )    {    UINT32 uInterruptStatus = 0;    /* to store the fields in interrupt enable register */    UINT32 uInterruptMask = 0;#ifndef USB_EHCD_ENABLE_POLLING    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdISR - Entry\n",0,0,0,0);#endif    /* Check the validity of the parameter */    if (NULL == pHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdISR - Parameter is not valid\n",0,0,0,0);        return;        }#ifndef USB_EHCD_ENABLE_POLLING    /* Disable the EHCI Interrupts */    /* Get the contents uf usb interrupt Enable register */    uInterruptMask = USB_EHCD_READ_REG(pHCDData,                                       USB_EHCD_USBINTR);    /* Disable the interrupts by setting  all bits to zero in    Interrupt Enable register */   USB_EHCD_WRITE_REG(pHCDData,                      USB_EHCD_USBINTR,                      0);#endif    /* If any change is detected, signal the event     * so that the thread can handle the interrupt     */    if (0 != (USB_EHCD_READ_REG(pHCDData,                    USB_EHCD_USBSTS) & USB_EHCD_USBSTS_INTERRUPT_MASK))       {       /* Update the interrupt status value */       uInterruptStatus = USB_EHCD_READ_REG(pHCDData,                                                  USB_EHCD_USBSTS) &                                                  USB_EHCD_USBSTS_INTERRUPT_MASK;       /* Clear the interrupt status */       USB_EHCD_WRITE_REG(pHCDData,                          USB_EHCD_USBSTS,                          uInterruptStatus);        /* Mask all not enabled interrupts */        uInterruptStatus &= (uInterruptMask & USB_EHCD_USBSTS_INTERRUPT_MASK);        /* Proceed if occured intr is enabled */        if (uInterruptStatus)            {                        /* Copy interrupt status to HCD Data strucrture */            pHCDData->uInterruptStatus |= uInterruptStatus;            /* Send the message to the high priority thread */            OS_RELEASE_EVENT(pHCDData->InterruptEvent);            }        }#ifndef USB_EHCD_ENABLE_POLLING    /* Enable the EHCI interrupts */    /* Enable the interrupts by writing to us Interrupt \   Enable register*/   USB_EHCD_WRITE_REG(pHCDData,                      USB_EHCD_USBINTR,                      uInterruptMask);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdISR - Exit\n",0,0,0,0);#endif    return;    }/* End of function usbEhcdISR() *//***************************************************************************** usbEhcdPortChangeHandler - handles the port change interrupt.** This routine handles a port change.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/LOCAL VOID usbEhcdPortChangeHandler    (    pUSB_EHCD_DATA pEHCDData    )    {    /* To hold the index into the ports */    UINT32 uIndex = 0;    /* To hold the status change of the hub */    UINT32 uStatusChange = 0;    /* To hold the Port Status Change information */    UINT32 uPortSCInfo = 0;	/* WindView Instrumentation */	USB_HCD_LOG_EVENT(		USB_EHCI_WV_EVENT_HANDLER,		"usbEhcdPortChangeHandler() starts",		USB_EHCD_WV_FILTER);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdPortChangeHandler - Entry\n",0,0,0,0);    /* Check the validity of the parameter */    if (NULL == pEHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdPortChangeHandler - Parameter not valid\n",0,0,0,0);        return;        }    /* Assert of the request synchronization event is not valid */    OS_ASSERT(NULL != pEHCDData->RequestSynchEventID);    /*     * This loop checks whether there is any change     * in any of the downstream ports     */    for (uIndex = 0; uIndex < pEHCDData->RHData.uNumDownstreamPorts; uIndex++)        {        /* Copy the data in the Root Hub's buffer */        OS_MEMCPY(&uPortSCInfo,                  (pEHCDData->RHData.pPortStatus +                   (USB_EHCD_RH_PORT_STATUS_SIZE *uIndex)),                  USB_EHCD_RH_PORT_STATUS_SIZE);        /* Read the PORTSC contents */        uPortSCInfo |= USB_EHCD_READ_REG(pEHCDData,                                         USB_EHCD_PORTSC(uIndex));        /* Check if there is any change */        if (0 != (uPortSCInfo &                  (USB_EHCD_PORTSC_OVER_CURRENT_CHANGE_MASK |                   USB_EHCD_PORTSC_CONNECT_STATUS_CHANGE_MASK |                   USB_EHCD_PORTSC_PORT_ENABLE_DISABLE_CHANGE_MASK)))            {            /* Update the status change data */            uStatusChange |= (USB_EHCD_RH_MASK_VALUE << uIndex);            }        }/* End of for () */    /* If there is a resume detected on the port, which is driven from the     * device, update the status change bit     */    if ((0 != (uPortSCInfo & USB_EHCD_PORTSC_FORCE_PORT_RESUME_MASK)) &&        (0 == (uPortSCInfo & USB_EHCD_RH_PORT_SUSPEND_CHANGE)))        {        /* Update the status change data */        uStatusChange |= (USB_EHCD_RH_MASK_VALUE << uIndex);        /* Update the suspend status change bit in         * the port status value stored in the Root hub's data structure.         */        uPortSCInfo |= USB_EHCD_RH_PORT_SUSPEND_CHANGE;        }    /* If there is no change return */    if ((0 == uStatusChange) ||        (NULL == pEHCDData->RHData.pHubInterruptData))        {        OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdPortChangeHandler - No change in the hub status \n",0,0,0,0);        return;        }    /*     * Call the function to copy the interrupt status to the     * request buffer if a request is pending or to the Root hub interrupt     * transfer data buffer if a request is not pending     */    /* Nothing can be done when the return value is false */    usbEhcdCopyRHInterruptData(pEHCDData,                               uStatusChange);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdPortChangeHandler - Exit\n",0,0,0,0);    return;    }/* End of usbEhcdPortChangeHandler() *//***************************************************************************** usbEhcdProcessTransferCompletion - handles the data transfer interrupt.** This function is used to handle the a data transfer completion* interrupt.** RETURNS: N/A.** ERRNO:*   None.** \NOMANUAL*/LOCAL VOID usbEhcdProcessTransferCompletion    (    pUSB_EHCD_DATA pEHCDData    )    {    /* To hold the pointer to the request information */    pUSB_EHCD_REQUEST_INFO pRequestInfo = NULL;    /* To hold the pointer to the previous request information */    pUSB_EHCD_REQUEST_INFO pPreRequestInfo = NULL;    /* To hold the temporary pointer to the request information */    pUSB_EHCD_REQUEST_INFO pTempRequestInfo = NULL;    /* Pointer to the HCDPipe */    pUSB_EHCD_PIPE pHCDPipe = NULL;	UINT16 uWvalue =0;    UINT8 uHalted = 0;	/* WindView Instrumentation */	USB_HCD_LOG_EVENT(		USB_EHCI_WV_EVENT_HANDLER,		"usbEhcdProcessTransferCompletion() starts",		USB_EHCD_WV_FILTER);    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdProcessTransferCompletion - Entry\n",0,0,0,0);    /* Check the validity of the parameter */    if (NULL == pEHCDData)        {        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdProcessTransferCompletion - Parameter is not valid\n",0,0,0,0);        return;        }    /* Exclusively access the request list */    OS_WAIT_FOR_EVENT(pEHCDData->RequestSynchEventID,OS_WAIT_INFINITE);    /*     * This loop searches the list of requests     * and identifies the requests which are completed     */    for (pRequestInfo = pEHCDData->pRequestQueueHead;        (NULL != pRequestInfo);)        {        /* Assert if the pipe pointer is not valid */        OS_ASSERT(NULL != pRequestInfo->pHCDPipe);        /* Assert if the URB pointer is not valid */        OS_ASSERT(NULL != pRequestInfo->pUrb);        /* Check if it is a non-isochronous request */        if (USBHST_ISOCHRONOUS_TRANSFER !=

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕成人av| 久久综合一区二区| 日韩免费电影网站| 自拍偷拍亚洲激情| 蜜桃91丨九色丨蝌蚪91桃色| 丰满白嫩尤物一区二区| 欧美福利视频导航| 成人欧美一区二区三区小说 | 欧美中文字幕久久| 久久午夜老司机| 亚洲国产成人av网| 亚洲一区在线观看免费| 精品一区二区三区日韩| 欧美无砖砖区免费| 亚洲同性gay激情无套| 老司机午夜精品99久久| 色婷婷综合在线| 国产色综合一区| 免费精品99久久国产综合精品| 色婷婷综合中文久久一本| 国产午夜精品在线观看| 精品一区二区在线播放| 欧美一级视频精品观看| 亚洲一级二级在线| 色94色欧美sute亚洲线路一ni| 国产免费久久精品| 国产成人精品免费在线| 日韩亚洲欧美成人一区| 婷婷综合五月天| 欧美三级电影精品| 亚洲综合精品自拍| 91丨porny丨户外露出| 国产精品精品国产色婷婷| 国产又黄又大久久| 久久久久国产精品厨房| 极品瑜伽女神91| 国产亚洲欧美一级| 成人动漫中文字幕| 欧美国产乱子伦| 99久久精品国产一区| 亚洲日本一区二区| 欧美色爱综合网| 日韩va亚洲va欧美va久久| 91精品国产全国免费观看| 青青草国产精品亚洲专区无| 日韩欧美在线一区二区三区| 捆绑调教美女网站视频一区| 精品国产1区二区| 成人精品免费视频| 亚洲裸体在线观看| 欧美性淫爽ww久久久久无| 亚洲h动漫在线| 日韩欧美国产午夜精品| 国产精品一卡二| 一区二区在线看| 日韩精品影音先锋| 成人av手机在线观看| 亚洲一区二区三区中文字幕| 欧美三片在线视频观看| 理论电影国产精品| 最近日韩中文字幕| 制服视频三区第一页精品| 国产麻豆91精品| 亚洲精品视频一区二区| 欧美一区二区三区爱爱| 福利电影一区二区| 亚洲卡通动漫在线| 日韩亚洲欧美一区| 色悠悠久久综合| 精品影院一区二区久久久| 国产精品久久久久久久久免费丝袜 | 成人丝袜视频网| 亚洲成年人网站在线观看| 欧美xxxxx牲另类人与| 99久久精品国产麻豆演员表| 一区二区三区加勒比av| 久久综合久久鬼色| 欧美三级资源在线| 国产成a人亚洲| 天天操天天干天天综合网| 日本一区二区成人| 欧美高清视频www夜色资源网| 国产美女精品人人做人人爽| 亚洲综合一区在线| 久久精品日韩一区二区三区| 色中色一区二区| 国产精品伊人色| 欧美电视剧免费全集观看| 成人h动漫精品一区二区| 丝袜诱惑亚洲看片| 亚洲欧美影音先锋| 国产三级一区二区| 欧美一激情一区二区三区| 91视频www| 国产剧情在线观看一区二区| 亚洲一区在线观看免费观看电影高清| 久久无码av三级| 欧美精选一区二区| 色婷婷国产精品综合在线观看| 国产乱码一区二区三区| 极品少妇xxxx精品少妇偷拍| 日本欧美一区二区三区乱码| 午夜精品久久久久久久 | 亚洲天堂a在线| 久久精品男人天堂av| 日韩欧美电影一二三| 51精品国自产在线| 国产精品激情偷乱一区二区∴| 欧美视频一区二区| 91在线码无精品| 丁香桃色午夜亚洲一区二区三区| 免费在线看一区| 美女尤物国产一区| 卡一卡二国产精品| 毛片基地黄久久久久久天堂| 麻豆精品国产传媒mv男同| 日本中文一区二区三区| 日本欧美一区二区在线观看| 蜜臀国产一区二区三区在线播放 | 国产中文字幕精品| 国产在线播放一区| 丁香天五香天堂综合| av成人免费在线| 91色视频在线| 欧美视频在线观看一区二区| 欧美丝袜丝交足nylons| 欧美日韩国产综合草草| 日韩一区二区三区高清免费看看| 69av一区二区三区| 精品伦理精品一区| 久久久久高清精品| 中文字幕在线一区免费| 亚洲综合无码一区二区| 午夜精彩视频在线观看不卡| 日韩精品欧美成人高清一区二区| 久久99久国产精品黄毛片色诱| 国产一区二区三区四| 成人性视频免费网站| 色94色欧美sute亚洲线路一ni| 欧美少妇一区二区| 欧美成人a∨高清免费观看| 精品电影一区二区三区| 日韩美女视频一区| 婷婷久久综合九色综合绿巨人| 久久99深爱久久99精品| 成人免费视频一区| 欧美日韩中文一区| 国产欧美日韩另类视频免费观看| 亚洲欧美一区二区三区国产精品| 亚洲国产一二三| 国产精品亚洲专一区二区三区 | 亚洲乱码一区二区三区在线观看| 婷婷久久综合九色综合伊人色| 另类欧美日韩国产在线| 成人黄页在线观看| 51精品国自产在线| 中文字幕制服丝袜成人av| 日韩影视精彩在线| av成人老司机| 4438亚洲最大| 亚洲美女一区二区三区| 国精产品一区一区三区mba桃花 | 亚洲丝袜另类动漫二区| 天天综合色天天综合色h| 成人福利电影精品一区二区在线观看| 欧美日韩国产高清一区| 亚洲欧洲三级电影| 精品一区二区三区不卡 | 香蕉久久一区二区不卡无毒影院 | 在线观看亚洲a| 久久精品一区二区三区av| 午夜精品福利久久久| 菠萝蜜视频在线观看一区| 日韩欧美的一区二区| 亚洲精品福利视频网站| 国产精品99久| 欧美电视剧免费全集观看| 亚洲国产视频在线| 色屁屁一区二区| 国产精品国产自产拍在线| 国产原创一区二区| 日韩欧美另类在线| 日韩精品欧美成人高清一区二区| 91日韩在线专区| 中文文精品字幕一区二区| 麻豆精品久久精品色综合| 91精品蜜臀在线一区尤物| 亚洲国产美国国产综合一区二区| av电影在线观看完整版一区二区| 亚洲精品在线一区二区| 精品一区二区三区av| 日韩一区二区三区免费看| 亚洲不卡一区二区三区| 欧美三区在线观看| 亚洲图片自拍偷拍| 欧美日韩在线播| 亚洲aⅴ怡春院| 欧美精品一二三| 奇米综合一区二区三区精品视频| 欧美高清视频在线高清观看mv色露露十八 |