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

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

?? phcd.cpp

?? ISP1161 USB Driver under WinCE for StrongARM processor implementation
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        {
			DWORD dwInterval = READ_REGISTER_ULONG(HcFmInterval(m_regBase));
            dwInterval &= gcHcFmIntervalFImask;
            if(dwInterval != gcHcFmIntervalNominal)
                m_regBase = 0;
        }
		
        if(m_regBase)
        {
			DWORD dwThreshold = READ_REGISTER_ULONG(HcLSThreshold(m_regBase));
#if 0 // the CMD HC uses a non-standard threshold; hosts using their chip cannot make this check.
            if((dwThreshold & gcHcLSThresholdLSTmask) != gcHcLSThresholdNominal)
                m_regBase = 0;
#endif
        }
		
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        m_regBase = 0;
    }
}


CPhcd::~CPhcd()
{
    DWORD   dwWaitReturn;
    UINT    dev, endpt;
    SDevice *pDev;
    SEndpoint *pEndpt;

    m_bClosing = TRUE;

    // Most of this destructor is never used!  We can remove
    // the parts that are never called...

    // Wake up the interrupt thread and give it time to die.
    if(m_hUsbInterrupt)
        SetEvent(m_hUsbInterrupt);

    // set the psudo interrupt to free it too
    if(m_hUsbPsudoInterrupt)
        SetEvent(m_hUsbPsudoInterrupt);

    if (m_hIsrThread)
    {
        dwWaitReturn = WaitForSingleObject(m_hIsrThread, 1000);
        if (dwWaitReturn != WAIT_OBJECT_0)
        {
            TerminateThread(m_hIsrThread, DWORD(-1));
        }
        CloseHandle(m_hIsrThread);
        m_hIsrThread = NULL;
    }


#ifdef USE_CRITICAL_THREAD
    if (m_hCriticalThread)
    {
        dwWaitReturn = WaitForSingleObject(m_hCriticalThread, 1000);
        if (dwWaitReturn != WAIT_OBJECT_0)
        {
            TerminateThread(m_hCriticalThread, DWORD(-1));
        }
        CloseHandle(m_hCriticalThread);
        m_hCriticalThread = NULL;
    }

    if(m_hReleaseCriticalThread)
    {
        CloseHandle(m_hReleaseCriticalThread);
        m_hReleaseCriticalThread = NULL;
    }

    if(m_hCriticalThreadDone)
    {
        CloseHandle(m_hCriticalThreadDone);
        m_hCriticalThreadDone = NULL;
    }
#endif // USE_CRITICAL_THREAD

    // we have to close our interrupt before closing the event!
    InterruptDisable(m_sysIntr);

    if(m_hUsbInterrupt)
    {
        CloseHandle(m_hUsbInterrupt);
        m_hUsbInterrupt = NULL;
    }

    if(m_hUsbPsudoInterrupt)
    {
        CloseHandle(m_hUsbPsudoInterrupt);
        m_hUsbPsudoInterrupt = NULL;
    }

	
    if(m_hClientDriverComplete)
    {
        CloseHandle(m_hClientDriverComplete);
        m_hClientDriverComplete = NULL;
    }

    if(m_regBase)
    {
        // let's stop ALL TD processing
        DisableControlList(m_regBase);
        DisableBulkList(m_regBase);
        DisableIntrAndIsochLists(m_regBase);
    }

    // wait long enough for all transfers to stop (10 ms - because the frame
    // length can change... I assume nobody makes it this long though)
    Sleep(10);

    if(m_hUSBDInstance)
    {
        LPUSBD_HCD_DETACH_PROC lpHcdDetachProc;
        lpHcdDetachProc = (LPUSBD_HCD_DETACH_PROC)
                GetProcAddress(m_hUSBDInstance, gcszHcdDetach);
        if(lpHcdDetachProc)
            (*lpHcdDetachProc)(m_pvHcdContext);

        FreeLibrary(m_hUSBDInstance);
    }

    for(dev = 0 ; dev < m_curMaxNumDevices ; dev++)
    {
        pDev = m_ppDevices[dev];
        if (pDev != NULL)
        {
            if(pDev->pHubPorts)
                delete [] pDev->pHubPorts;

//            if(pDev->pnHubPortPowerDraw)
//                delete [] pDev->pnHubPortPowerDraw;

            if (pDev->ppEndpts != NULL)
            {
                for (endpt = 0; endpt < pDev->maxEndpts; endpt++)
                {
                    pEndpt = pDev->ppEndpts[endpt];
                    if (pEndpt != NULL)
                    {
                        STransfer *pTransferHead;
                        pTransferHead = pEndpt->pTransferHead;
                        while (pTransferHead != NULL)
                        {
                            pEndpt->pTransferHead = pTransferHead->pNext;
                            if(pTransferHead->aCopyLengths)
                                delete [] pTransferHead->aCopyLengths;

                            delete pTransferHead;
                            pTransferHead = pEndpt->pTransferHead;
                        }

                        DeleteCriticalSection(&pEndpt->csSTransferListLock);
#ifdef USE_CRITICAL_THREAD
                        DeleteCriticalSection(&pEndpt->csCriticalThreadCancel);
#endif
                        delete pEndpt;
                    }
                }
                delete [] pDev->ppEndpts;
            }
            if (pDev->pfEndptAbortTransfers)
            {
                delete [] pDev->pfEndptAbortTransfers;
            }

            if(pDev->ohciDevice.lpConfigs)
            {
                LPPHCI_CONFIGURATION lpConfig = pDev->ohciDevice.lpConfigs;

                for(UINT iConfig = 0  ; iConfig <
                        pDev->ohciDevice.Descriptor.bNumConfigurations ;
                        ++iConfig, ++lpConfig)
                {
                    if(lpConfig->lpInterfaces)
                    {
                        LPPHCI_INTERFACE lpInterface = lpConfig->lpInterfaces;

                        for(UINT iInterface = 0 ; iInterface <
                                lpConfig->Descriptor.bNumInterfaces ;
                                ++iInterface, ++lpInterface)
                        {
                            if(lpInterface->lpEndpoints)
                            {
                                LPPHCI_ENDPOINT lpEndpoint =
                                        lpInterface->lpEndpoints;

                                for(UINT iEndpoint = 0 ; iEndpoint <
                                        lpInterface->Descriptor.bNumEndpoints ;
                                        ++iEndpoint, ++lpEndpoint)
                                {
                                    if(lpEndpoint->lpbExtended)
                                        delete lpEndpoint->lpbExtended;
                                }

                                delete [] lpInterface->lpEndpoints;
                            }

                            if(lpInterface->lpbExtended)
                                delete [] lpInterface->lpbExtended;
                        }

                        delete [] lpConfig->lpInterfaces;
                    }
                    if(lpConfig->lpbExtended)
                        delete [] lpConfig->lpbExtended;
                }

                delete [] pDev->ohciDevice.lpConfigs;
            }

            DeleteCriticalSection(&pDev->csAccessingEndpointArray);
            DeleteCriticalSection(&pDev->csAttachementDetachement);

            delete pDev;
        }
    }
    if(m_ppDevices)
        delete [] m_ppDevices;

    if (m_PortPowerAllocated) 
        delete [] m_PortPowerAllocated;

    STdInfo * pFreeSTdInfoHead;
    pFreeSTdInfoHead = m_pFreeSTdInfoHead;
    while (pFreeSTdInfoHead != NULL)
    {
        m_pFreeSTdInfoHead = pFreeSTdInfoHead->pNext;
        delete pFreeSTdInfoHead;
        pFreeSTdInfoHead = m_pFreeSTdInfoHead;
    }

    STdInfo * pTdRemovalList;
    pTdRemovalList = m_pTdProcessList;
    while (pTdRemovalList != NULL)
    {
        m_pTdProcessList = pTdRemovalList->pNext;
        delete pTdRemovalList;
        pTdRemovalList = m_pTdProcessList;
    }

    SEdInfo * pFreeSEdInfoHead;
    pFreeSEdInfoHead = m_pFreeSEdInfoHead;
    while (pFreeSEdInfoHead != NULL)
    {
        m_pFreeSEdInfoHead = pFreeSEdInfoHead->pNext;
        delete pFreeSEdInfoHead;
        pFreeSEdInfoHead = m_pFreeSEdInfoHead;
    }

    SEdInfo * pEdRemovalList;
    pEdRemovalList = m_pEdRemovalList;
    while (pEdRemovalList != NULL)
    {
        m_pEdRemovalList = pEdRemovalList->pNext;
        delete pEdRemovalList;
        pEdRemovalList = m_pEdRemovalList;
    }

    SPhysAddr * pFreePhysAddrHead;
    pFreePhysAddrHead = m_pFreePhysAddrHead;
    while (pFreePhysAddrHead != NULL)
    {
        m_pFreePhysAddrHead = pFreePhysAddrHead->pNext;
        delete pFreePhysAddrHead;
        pFreePhysAddrHead = m_pFreePhysAddrHead;
    }

    STransfer * pFreeTransferHead;
    pFreeTransferHead = m_pFreeTransferHead;
    while (pFreeTransferHead != NULL)
    {
        m_pFreeTransferHead = pFreeTransferHead->pNext;
        delete pFreeTransferHead;
        pFreeTransferHead = m_pFreeTransferHead;
    }

    SThreadParams * pFreeThreadParamsHead;
    pFreeThreadParamsHead = m_pFreeThreadParamsHead;
    while (pFreeThreadParamsHead != NULL)
    {
        m_pFreeThreadParamsHead = pFreeThreadParamsHead->pNext;
        delete pFreeThreadParamsHead;
        pFreeThreadParamsHead = m_pFreeThreadParamsHead;
    }

    DeleteCriticalSection(&m_csSTdInfoListLock);
    DeleteCriticalSection(&m_csThreadParamListLock);
    DeleteCriticalSection(&m_csAddr0Lock);
    DeleteCriticalSection(&m_csDeviceListLock);
    DeleteCriticalSection(&m_csOtherListsLock);
    DeleteCriticalSection(&m_csFrameAdjustment);
    DeleteCriticalSection(&m_csPortPower);
    DeleteCriticalSection(&m_csEdInfoListsLock);
    DeleteCriticalSection(&m_csTdListsLock);
    DeleteCriticalSection(&m_csScheduleLock);

#ifdef USE_CRITICAL_THREAD
    DeleteCriticalSection(&m_csClientInstallCriticalThread);
    DeleteCriticalSection(&m_csCriticalTds);
#endif
}


BOOL CPhcd::Initialize(void)
{
    BOOL    bOk;
    EError  errorCode;

    RETAILMSG(ISPDBG,(TEXT("+PHCD::Initialize\r\n")));

	if(!m_regBase)
	{
		return FALSE;
	}
	
	m_hUSBDInstance = LoadDriver(gcszUSBDFileName);

    if(m_hUSBDInstance)
    {
		m_pAttachProc = (LPUSBD_ATTACH_PROC)
                GetProcAddress(m_hUSBDInstance, gcszHcdDeviceAttach);

        m_pDetachProc = (LPUSBD_DETACH_PROC)
                GetProcAddress(m_hUSBDInstance, gcszHcdDeviceDettach);
	
        if(!m_pAttachProc || !m_pDetachProc)
            return FALSE;
		
        LPUSBD_HCD_ATTACH_PROC lpHcdAttachProc;
        lpHcdAttachProc = (LPUSBD_HCD_ATTACH_PROC)
                GetProcAddress(m_hUSBDInstance, gcszHcdAttach);
	
		if(lpHcdAttachProc)
            (*lpHcdAttachProc)((LPVOID)this, m_pHcdFuncs,  &m_pvHcdContext);
        else
            return FALSE;
    }
    else
	
		return FALSE;
    
	m_numRootHubPorts = READ_REGISTER_ULONG(HcRhDescriptorA(m_regBase))
        & gcRhDescriptorANDPmask;
	
    m_PortPowerAllocated = new DWORD [gcFirstRootPortNum + m_numRootHubPorts];
    // each port has 100 mA to start with for a new device to draw
    for(UINT iPower = gcFirstRootPortNum ; 
            iPower < m_numRootHubPorts + gcFirstRootPortNum ; 
            iPower++)
        m_PortPowerAllocated[iPower] = 100;

    m_PowerOnToPowerGoodTime = ((READ_REGISTER_ULONG(HcRhDescriptorA(m_regBase))
        & gcRhDescriptorAPOTPGTmask) >> 24) * 2;
    
	DEBUGMSG(ZONE_INIT,(TEXT("PHCI:PowerOn2PowerGood: %u\r\n"), m_PowerOnToPowerGoodTime));

    // We've got three threads, one for the interrupt DPC, another used
    // exclusively for bus enumeration (handling connects and disconnects),
    // and another for critical processing
#ifdef USE_CRITICAL_THREAD
    m_hReleaseCriticalThread = CreateEvent(NULL, FALSE, FALSE, NULL);
    if (m_hReleaseCriticalThread == NULL)
    {
        DEBUGMSG(ZONE_ERROR,
        (TEXT("PHCD: Error on CreateEvent\r\n")));
//        return(STATUS_UNSUCCESSFUL);
        return FALSE;
    }

    m_hCriticalThreadDone = CreateEvent(NULL, FALSE, FALSE, NULL);
    if(m_hCriticalThreadDone == NULL)
    {
        DEBUGMSG(ZONE_ERROR,
        (TEXT("PHCD: Error on CreateEvent\r\n")));
//        return(STATUS_UNSUCCESSFUL);
        return FALSE;
    }
#endif

    m_hUsbPsudoInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
    if (m_hUsbPsudoInterrupt == NULL)
    {
        DEBUGMSG(ZONE_ERROR,
        (TEXT("PHCD: Error on CreateEvent\r\n")));
//        return(STATUS_UNSUCCESSFUL);
        return FALSE;
    }

    m_hUsbInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
    if (m_hUsbInterrupt == NULL)
    {
        DEBUGMSG(ZONE_ERROR,
        (TEXT("PHCD: Error on CreateEvent for interrupt\r\n")));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性大战久久久久久久蜜臀| 蜜臀av一区二区| 91一区二区三区在线观看| 国产精品超碰97尤物18| 92国产精品观看| 亚洲一区免费视频| 欧美一区二区三区视频免费播放| 日本sm残虐另类| 久久天天做天天爱综合色| 国产高清精品久久久久| 亚洲欧美日韩小说| 69堂成人精品免费视频| 韩国毛片一区二区三区| 成人免费在线观看入口| 欧美性一二三区| 精品一区二区三区在线播放| 中文字幕精品一区二区三区精品| 色婷婷久久99综合精品jk白丝| 亚洲自拍偷拍欧美| 精品国产一区二区三区av性色| 国产成人亚洲精品狼色在线| 一区二区三区精品在线观看| 精品国产三级电影在线观看| 成人夜色视频网站在线观看| 亚洲成人自拍偷拍| 国产日韩精品一区二区浪潮av| 色天使色偷偷av一区二区| 秋霞国产午夜精品免费视频| 国产精品视频在线看| 欧美美女喷水视频| 波多野洁衣一区| 日韩精品久久久久久| 中文字幕高清不卡| 日韩一区二区三区电影在线观看 | 国产iv一区二区三区| 国产精品盗摄一区二区三区| 欧美精品色一区二区三区| 国产成人h网站| 高清beeg欧美| 蜜臀99久久精品久久久久久软件| 中文字幕一区在线观看视频| 欧美电影免费观看高清完整版| caoporm超碰国产精品| 久久综合综合久久综合| 一区二区三区四区高清精品免费观看| 精品国产乱码久久久久久闺蜜| 欧美三级中文字| 99re这里只有精品首页| 国产一区二区三区久久悠悠色av| 五月婷婷久久综合| 18成人在线视频| 国产欧美日本一区视频| 欧美成人午夜电影| 欧美一区二区三区视频在线观看| 97久久精品人人爽人人爽蜜臀| 国产福利一区二区三区视频| 蜜桃视频在线观看一区| 香蕉av福利精品导航| 亚洲免费在线看| 中文字幕视频一区二区三区久| 久久嫩草精品久久久精品一| 91麻豆精品久久久久蜜臀| 欧美日韩精品免费| 色8久久人人97超碰香蕉987| 99视频一区二区| 成人午夜精品在线| 成人激情午夜影院| 国产.欧美.日韩| 国产成人av影院| 国产成人aaaa| 成人国产精品视频| 99免费精品在线观看| av亚洲精华国产精华精| 成人av网站在线观看| 99久久精品免费观看| 91在线视频播放| 国产欧美日韩中文久久| 91精品国产一区二区三区| 日本道免费精品一区二区三区| 国产成a人亚洲| 成人免费看视频| av一区二区久久| 蜜臀av国产精品久久久久| 日本中文字幕一区二区视频| 国产精品久久久久影院色老大| 国产精品嫩草影院av蜜臀| 亚洲成人在线免费| 成人在线一区二区三区| 欧美日韩久久一区二区| 欧美激情在线一区二区| 日韩激情一区二区| 91丝袜美女网| 久久中文字幕电影| 亚洲第一av色| 97精品国产97久久久久久久久久久久 | 99riav久久精品riav| 日韩欧美国产一区二区三区| 亚洲免费电影在线| 国产麻豆精品95视频| 欧美日韩国产美女| 亚洲日本中文字幕区| 国产精品一区二区你懂的| 在线成人av影院| 一区二区日韩av| 成人精品gif动图一区| 欧美大片日本大片免费观看| 亚洲成a人片综合在线| 91在线一区二区| 中文欧美字幕免费| 国产一区二区视频在线| 欧美mv日韩mv| 日本视频免费一区| 欧美精品久久一区| 95精品视频在线| 国产欧美综合色| 免费在线看成人av| 欧美高清精品3d| 亚洲va欧美va人人爽午夜| 日本丰满少妇一区二区三区| 国产精品第五页| aaa亚洲精品一二三区| 国产日产欧美精品一区二区三区| 美脚の诱脚舐め脚责91 | 成人久久视频在线观看| 久久久久久影视| 国产在线一区二区| 精品少妇一区二区三区日产乱码 | 国产午夜亚洲精品不卡| 国产精品系列在线播放| 久久天堂av综合合色蜜桃网| 精品一区二区三区免费播放| 欧美成人一级视频| 狠狠久久亚洲欧美| 久久亚洲私人国产精品va媚药| 久久国产精品第一页| 精品国产精品一区二区夜夜嗨| 麻豆久久久久久久| 欧美大片顶级少妇| 国产精选一区二区三区 | 日韩精品国产欧美| 精品久久一区二区三区| 精品在线免费观看| 国产亚洲自拍一区| 成人v精品蜜桃久久一区| 亚洲视频1区2区| 欧美视频一区二区三区四区 | 天涯成人国产亚洲精品一区av| 欧美精品第一页| 久久国产三级精品| 国产婷婷色一区二区三区在线| 成人国产精品免费观看动漫| 亚洲天堂中文字幕| 欧美日韩中文字幕精品| 日本三级亚洲精品| 久久精品夜色噜噜亚洲aⅴ| 粉嫩av一区二区三区在线播放| 亚洲天堂免费看| 9191精品国产综合久久久久久| 日本va欧美va精品发布| 国产无一区二区| 一本久久a久久精品亚洲| 五月综合激情网| 国产女同互慰高潮91漫画| 99视频有精品| 日本少妇一区二区| 中文字幕精品三区| 欧美日韩精品电影| 国产999精品久久久久久绿帽| ●精品国产综合乱码久久久久| 欧美日韩一区久久| 国产精品亚洲一区二区三区在线 | 91片黄在线观看| 精品一区二区在线观看| 亚洲美女视频在线| 精品久久人人做人人爰| 91啪亚洲精品| 国产一区在线观看视频| 综合久久国产九一剧情麻豆| 欧美一卡二卡三卡四卡| 99精品欧美一区二区三区小说 | 亚洲精品久久久久久国产精华液| 日韩亚洲欧美一区二区三区| 久久综合色天天久久综合图片| 丁香六月久久综合狠狠色| 亚洲444eee在线观看| 国产精品三级电影| 欧美一区二区三区免费观看视频| 成人一级片网址| 麻豆91在线播放| 一区二区激情小说| 欧美国产乱子伦 | 日韩一区二区三区在线视频| www.在线欧美| 麻豆精品视频在线观看| 亚洲色图在线播放| 久久久不卡网国产精品二区| 欧美嫩在线观看| 色天天综合色天天久久| 国产白丝精品91爽爽久久| 老司机精品视频导航|