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

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

?? 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 !=

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美卡一卡二| 3atv一区二区三区| 国产91精品一区二区麻豆亚洲| 日本不卡一二三区黄网| 午夜精品一区二区三区免费视频 | 免费在线看成人av| 亚洲高清一区二区三区| 日韩精品一二区| 日本在线不卡一区| 国模少妇一区二区三区| 国产伦精一区二区三区| 国产成人免费高清| 91在线精品一区二区三区| 一本大道av伊人久久综合| 欧美亚洲禁片免费| 欧美高清一级片在线| 欧美电影影音先锋| 欧美成人高清电影在线| 中文字幕巨乱亚洲| 夜夜精品浪潮av一区二区三区| 亚洲mv在线观看| 国产一区二区在线免费观看| 大尺度一区二区| 91极品美女在线| 日韩精品中文字幕一区二区三区 | 91麻豆精品国产91久久久| 91麻豆精品国产91| 国产精品久久久久7777按摩| 一区二区免费看| 久久国产日韩欧美精品| 成人免费视频一区二区| 色嗨嗨av一区二区三区| 日韩亚洲欧美成人一区| 中文字幕一区在线| 日本v片在线高清不卡在线观看| 国产伦精品一区二区三区免费迷| 91在线观看地址| 日韩欧美国产综合| 亚洲美女免费视频| 久久精品噜噜噜成人av农村| 97国产精品videossex| 日韩三级免费观看| 樱桃国产成人精品视频| 国产一区亚洲一区| 91精品国产综合久久福利软件 | 欧美日韩在线播放| 久久午夜国产精品| 亚洲va韩国va欧美va精品| 波多野结衣精品在线| 日韩精品一区二区三区视频在线观看 | 亚洲国产三级在线| hitomi一区二区三区精品| 欧美大片顶级少妇| 一区二区国产盗摄色噜噜| 国产盗摄女厕一区二区三区| 欧美一区二区私人影院日本| 亚洲乱码一区二区三区在线观看| 国产在线精品视频| 日韩午夜激情视频| 日韩国产一区二| 欧美亚洲综合色| 亚洲男人的天堂在线观看| 国产精品18久久久久| 欧美电视剧在线观看完整版| 婷婷夜色潮精品综合在线| 色8久久精品久久久久久蜜 | 91看片淫黄大片一级在线观看| 久久日一线二线三线suv| 奇米影视一区二区三区| 欧美人牲a欧美精品| 亚洲国产另类av| 欧美乱熟臀69xxxxxx| 亚洲v日本v欧美v久久精品| 欧美主播一区二区三区美女| 亚洲女同ⅹxx女同tv| 99久久精品久久久久久清纯| 国产精品久久久久四虎| av在线播放成人| 亚洲卡通动漫在线| 欧美性猛片aaaaaaa做受| 亚洲成人自拍偷拍| 日韩一区二区精品| 韩国一区二区视频| 国产网站一区二区三区| 国产成人99久久亚洲综合精品| 国产午夜精品一区二区三区嫩草| 国产乱色国产精品免费视频| 国产精品动漫网站| 色噜噜狠狠成人中文综合| 亚洲一区二区在线观看视频 | 日韩码欧中文字| 日本精品免费观看高清观看| 亚洲国产精品一区二区久久 | 亚洲综合图片区| 欧美精品久久99久久在免费线 | 国产精品自拍毛片| 成人免费视频在线观看| 在线观看三级视频欧美| 日本系列欧美系列| 日本一区二区三区久久久久久久久不| 成人h动漫精品一区二区| 亚洲永久精品大片| 精品免费国产一区二区三区四区| 国产**成人网毛片九色 | 一本大道久久精品懂色aⅴ| 日韩国产成人精品| 亚洲国产精品精华液ab| 色婷婷综合中文久久一本| 日本不卡高清视频| 国产精品福利一区二区| 制服丝袜亚洲网站| 成人免费黄色大片| 亚洲3atv精品一区二区三区| 国产欧美日韩三级| 欧美高清视频www夜色资源网| 国产美女视频91| 亚洲成人动漫在线免费观看| 国产亚洲成aⅴ人片在线观看| 在线观看中文字幕不卡| 久久av中文字幕片| 一区二区三区四区在线免费观看| 日韩欧美国产1| 欧美日韩一区精品| 国产91综合一区在线观看| 三级欧美在线一区| 亚洲女与黑人做爰| 欧美激情一区在线观看| 欧美www视频| 91精品国产综合久久精品性色| 97精品视频在线观看自产线路二 | 国产人成一区二区三区影院| 日韩一区二区在线看| 91在线观看地址| 顶级嫩模精品视频在线看| 久久精品72免费观看| 亚洲大片精品永久免费| 一区二区三区在线视频观看58| 国产欧美日产一区| 久久精品欧美一区二区三区不卡| 欧美一区二区三区免费视频| 欧美自拍丝袜亚洲| 在线免费观看日本一区| 972aa.com艺术欧美| 99国产精品一区| 成人午夜又粗又硬又大| 国产 日韩 欧美大片| 国产精品一区二区在线观看不卡 | 丁香啪啪综合成人亚洲小说 | 国产精品自拍毛片| 精品一区二区成人精品| 蜜臀久久99精品久久久久久9| 亚洲高清在线精品| 日韩1区2区日韩1区2区| 日日夜夜精品视频天天综合网| 亚洲一级不卡视频| 亚洲午夜久久久久久久久久久| 樱花影视一区二区| 性久久久久久久久| 青椒成人免费视频| 国产在线看一区| 国产盗摄精品一区二区三区在线| 国产精品影视在线观看| 国产成人精品亚洲日本在线桃色 | 91精品国产免费久久综合| 欧美卡1卡2卡| 欧美成人高清电影在线| 久久精品免费在线观看| 亚洲图片激情小说| 一区二区在线观看免费| 日韩高清欧美激情| 久久国产视频网| 99热99精品| 欧美日韩国产天堂| 日韩小视频在线观看专区| 久久精品亚洲精品国产欧美kt∨ | 亚洲成人资源网| 美女视频黄a大片欧美| 国产成人aaa| 欧美精品一二三| 精品国产91洋老外米糕| 国产精品三级久久久久三级| 亚洲图片欧美色图| 激情综合五月天| 97久久超碰精品国产| 日韩一区二区在线观看视频| 亚洲国产经典视频| 亚洲国产毛片aaaaa无费看| 国产精品一区二区在线播放| 在线精品国精品国产尤物884a| 欧美不卡激情三级在线观看| 中文字幕一区二区三区不卡在线| 亚洲永久精品大片| 国产成人一区在线| 在线视频综合导航| 久久精品欧美一区二区三区麻豆 | 国产一区二区三区香蕉| 91啪九色porn原创视频在线观看| 欧美丰满少妇xxxxx高潮对白 | 一本大道久久精品懂色aⅴ| 精品国产亚洲在线|