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

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

?? 2440_ohci.c

?? SMDK2440 s3c2440 WINCE 5.00 bsp 編譯通過
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  
    system.c
    
Abstract:  
    Device dependant part of the USB Universal Host Controller Driver (OHCD).

Notes: 
--*/
#include <windows.h>
#include <ceddk.h>
#include <ddkreg.h>
#include <hcdddsi.h>

#define REG_PHYSICAL_PAGE_SIZE TEXT("PhysicalPageSize")
// Amount of memory to use for HCD buffer
static const DWORD gcTotalAvailablePhysicalMemory = 65536; // 64K
static const DWORD gcHighPriorityPhysicalMemory = 0x4000; // 16K


typedef struct _SOhcdPdd
{
    LPVOID lpvMemoryObject;
    LPVOID lpvOhcdMddObject;
    PVOID pvVirtualAddress;                        // DMA buffers as seen by the CPU
    DWORD dwPhysicalMemSize;
    PHYSICAL_ADDRESS LogicalAddress;        // DMA buffers as seen by the DMA controller and bus interfaces
    DMA_ADAPTER_OBJECT AdapterObject;
    TCHAR szDriverRegKey[MAX_PATH];
    PUCHAR ioPortBase;
    DWORD dwSysIntr;
    CRITICAL_SECTION csPdd;                     // serializes access to the PDD object
    HANDLE IsrHandle;
    HANDLE hParentBusHandle;
} SOhcdPdd;

#define UnusedParameter(x)  x = x

/* HcdPdd_DllMain
 * 
 *  DLL Entry point.
 *
 * Return Value:
 */
extern BOOL HcdPdd_DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
    UnusedParameter(hinstDLL);
    UnusedParameter(dwReason);
    UnusedParameter(lpvReserved);

    return TRUE;
}

static BOOL
GetRegistryPhysicalMemSize(
    LPCWSTR RegKeyPath,         // IN - driver registry key path
    DWORD * lpdwPhyscialMemSize)       // OUT - base address
{
    HKEY hKey;
    DWORD dwData;
    DWORD dwSize;
    DWORD dwType;
    BOOL  fRet=FALSE;
    DWORD dwRet;
    // Open key
    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKeyPath,0,0,&hKey);
    if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR,(TEXT("!UHCD:GetRegistryConfig RegOpenKeyEx(%s) failed %d\r\n"),
                             RegKeyPath, dwRet));
        return FALSE;
    }

    // Read base address, range from registry and determine IOSpace
    dwSize = sizeof(dwData);
    dwRet = RegQueryValueEx(hKey, REG_PHYSICAL_PAGE_SIZE, 0, &dwType, (PUCHAR)&dwData, &dwSize);
    if (dwRet == ERROR_SUCCESS) {
        if (lpdwPhyscialMemSize)
            *lpdwPhyscialMemSize = dwData;
        fRet=TRUE;
    }
    RegCloseKey(hKey);
    return fRet;
}


/* ConfigureOHCICard
 * 
 */
BOOL
ConfigureOHCICard(
    SOhcdPdd * pPddObject, // IN - contains PDD reference pointer.
    PUCHAR *pioPortBase,   // IN - contains physical address of register base
                           // OUT- contains virtual address of register base
    DWORD dwAddrLen,
    DWORD dwIOSpace,
    INTERFACE_TYPE IfcType,
    DWORD dwBusNumber
    )
{
    ULONG               inIoSpace = dwIOSpace;
    ULONG               portBase;
    PHYSICAL_ADDRESS    ioPhysicalBase = {0, 0};
    
    portBase = (ULONG)*pioPortBase;
    ioPhysicalBase.LowPart = portBase;

    if (!BusTransBusAddrToVirtual(pPddObject->hParentBusHandle, IfcType, dwBusNumber, ioPhysicalBase, dwAddrLen, &inIoSpace, (PPVOID)pioPortBase)) {
        DEBUGMSG(ZONE_ERROR, (L"OHCD: Failed TransBusAddrToVirtual\r\n"));
        return FALSE;
    }

    DEBUGMSG(ZONE_INIT, 
             (TEXT("OHCD: ioPhysicalBase 0x%X, IoSpace 0x%X\r\n"),
              ioPhysicalBase.LowPart, inIoSpace));
    DEBUGMSG(ZONE_INIT, 
             (TEXT("OHCD: ioPortBase 0x%X, portBase 0x%X\r\n"),
              *pioPortBase, portBase));

    return TRUE;
}


/* InitializeOHCI
 *
 *  Configure and initialize OHCI card
 *
 * Return Value:
 *  Return TRUE if card could be located and configured, otherwise FALSE
 */
static BOOL 
InitializeOHCI(
    SOhcdPdd * pPddObject,    // IN - Pointer to PDD structure
    LPCWSTR szDriverRegKey)   // IN - Pointer to active registry key string
{
    PUCHAR ioPortBase = NULL;
    DWORD dwAddrLen;
    DWORD dwIOSpace;
    BOOL InstallIsr = FALSE;
    BOOL fResult = FALSE;
    LPVOID pobMem = NULL;
    LPVOID pobOhcd = NULL;
    DWORD PhysAddr;
    DWORD dwHPPhysicalMemSize;
    HKEY hKey=NULL;

    DDKWINDOWINFO dwi;
    DDKISRINFO dii;

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,szDriverRegKey,0,0,&hKey)!= ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR,(TEXT("InitializeOHCI:GetRegistryConfig RegOpenKeyEx(%s) failed\r\n"),
                             szDriverRegKey));
        return FALSE;
    }
    dwi.cbSize=sizeof(dwi);
    dii.cbSize=sizeof(dii);
    if ( DDKReg_GetWindowInfo(hKey, &dwi ) !=ERROR_SUCCESS || DDKReg_GetIsrInfo (hKey, &dii ) != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR,(TEXT("InitializeOHCI:DDKReg_GetWindowInfo or  DDKReg_GetWindowInfo failed\r\n")));
        goto InitializeOHCI_Error;
    }
    if (dwi.dwNumMemWindows!=0) {
        PhysAddr = dwi.memWindows[0].dwBase;
        dwAddrLen= dwi.memWindows[0].dwLen;
        dwIOSpace = 0;
    }
    else if (dwi.dwNumIoWindows!=0) {
        PhysAddr= dwi.ioWindows[0].dwBase;
        dwAddrLen = dwi.ioWindows[0].dwLen;
        dwIOSpace = 1;
    }
    else
        goto InitializeOHCI_Error;
        
    DEBUGMSG(ZONE_INIT,(TEXT("OHCD: Read config from registry: Base Address: 0x%X, Length: 0x%X, I/O Port: %s, SysIntr: 0x%X, Interface Type: %u, Bus Number: %u\r\n"),
                    PhysAddr, dwAddrLen, dwIOSpace ? L"YES" : L"NO", dii.dwSysintr, dwi.dwInterfaceType, dwi.dwBusNumber));
    
    ioPortBase = (PBYTE) PhysAddr;
    
    if (!(fResult = ConfigureOHCICard(pPddObject, &ioPortBase, dwAddrLen, dwIOSpace,dwi.dwInterfaceType, dwi.dwBusNumber))) {
        goto InitializeOHCI_Error;
    }    
    if (dii.szIsrDll[0] != 0 && dii.szIsrHandler[0]!=0 && dii.dwIrq<0xff && dii.dwIrq>0 ) {
        // Install ISR handler
        pPddObject->IsrHandle = LoadIntChainHandler(dii.szIsrDll, dii.szIsrHandler, (BYTE)dii.dwIrq);

        if (!pPddObject->IsrHandle) {
            DEBUGMSG(ZONE_ERROR, (L"OHCD: Couldn't install ISR handler\r\n"));
        } else {
            GIISR_INFO Info;
            PHYSICAL_ADDRESS PortAddress = {PhysAddr, 0};
            
            DEBUGMSG(ZONE_INIT, (L"OHCD: Installed ISR handler, Dll = '%s', Handler = '%s', Irq = %d\r\n",
                dii.szIsrDll, dii.szIsrHandler, dii.dwIrq));
            
            if (!BusTransBusAddrToStatic(pPddObject->hParentBusHandle,dwi.dwInterfaceType, dwi.dwBusNumber, PortAddress, dwAddrLen, &dwIOSpace, &(PVOID)PhysAddr)) {
                DEBUGMSG(ZONE_ERROR, (L"OHCD: Failed TransBusAddrToStatic\r\n"));
                goto InitializeOHCI_Error;
            }
        
            // Set up ISR handler
            Info.SysIntr = dii.dwSysintr;
            Info.CheckPort = TRUE;
            Info.PortIsIO = (dwIOSpace) ? TRUE : FALSE;
            Info.UseMaskReg = TRUE;
            Info.PortAddr = PhysAddr + 0x0C;
            Info.PortSize = sizeof(DWORD);
            Info.MaskAddr = PhysAddr + 0x10;
            
            if (!KernelLibIoControl(pPddObject->IsrHandle, IOCTL_GIISR_INFO, &Info, sizeof(Info), NULL, 0, NULL)) {
                DEBUGMSG(ZONE_ERROR, (L"OHCD: KernelLibIoControl call failed.\r\n"));
            }
        }
    }
    // The PDD can supply a buffer of contiguous physical memory here, or can let the 
    // MDD try to allocate the memory from system RAM.  We will use the HalAllocateCommonBuffer()
    // API to allocate the memory and bus controller physical addresses and pass this information
    // into the MDD.
    if (GetRegistryPhysicalMemSize(szDriverRegKey,&pPddObject->dwPhysicalMemSize)) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
4438x亚洲最大成人网| 精品美女在线播放| 91在线观看下载| 国产精品18久久久久久久久| 日产欧产美韩系列久久99| 亚洲一区中文在线| 亚洲一区二区三区视频在线| 亚洲伊人色欲综合网| 亚洲国产精品精华液网站| 亚洲激情在线激情| 亚洲午夜在线电影| 亚洲成人自拍偷拍| 日韩国产在线一| 免费不卡在线视频| 极品少妇xxxx偷拍精品少妇| 国产精品一区二区久久不卡| 国产精品一区二区久激情瑜伽| 国产成人免费视频| 成人av资源在线观看| 色94色欧美sute亚洲线路一ni | 99久久99久久精品免费看蜜桃| 国产成人精品免费在线| 不卡欧美aaaaa| 色综合久久久久综合体| 欧美日韩欧美一区二区| 欧美一区二区三区小说| 欧美变态tickling挠脚心| 久久久久久久久久久电影| 国产日产欧美精品一区二区三区| 中文字幕第一区| 一区二区三区蜜桃| 婷婷综合五月天| 韩国三级在线一区| 成人黄色一级视频| 欧美在线一区二区| 91精品国产综合久久久久久久久久 | 91精品国产综合久久香蕉麻豆| 91麻豆精品国产91久久久使用方法 | 丁香婷婷综合激情五月色| 91小视频免费观看| 欧美视频一区二区在线观看| 日韩亚洲欧美在线| 国产精品欧美一区二区三区| 一区二区三区中文字幕电影| 日韩av中文字幕一区二区| 国产成人午夜高潮毛片| 91福利社在线观看| 日韩美一区二区三区| 亚洲欧洲无码一区二区三区| 午夜激情久久久| 高清不卡一区二区在线| 欧美性一区二区| 久久日韩粉嫩一区二区三区| 一区二区三区四区激情| 狠狠色综合播放一区二区| 91小宝寻花一区二区三区| 欧美一级黄色片| 国产精品久久久久久久久搜平片| 亚洲国产欧美日韩另类综合| 国产老肥熟一区二区三区| 色视频成人在线观看免| 久久你懂得1024| 亚洲第一狼人社区| 国产精华液一区二区三区| 欧美日韩在线精品一区二区三区激情 | 欧美一区二区三区性视频| 国产精品国产精品国产专区不蜜 | 青青草国产成人av片免费| 国产mv日韩mv欧美| 欧美精品xxxxbbbb| 日韩理论在线观看| 国产高清不卡一区| 欧美一区二区视频在线观看| 成人免费小视频| 精油按摩中文字幕久久| 在线国产电影不卡| 欧美经典一区二区| 久久精品国产亚洲aⅴ| 在线观看一区二区精品视频| 中文子幕无线码一区tr| 久久精品国产**网站演员| 欧美中文字幕一区| 中文字幕一区二区三区在线播放| 久久se这里有精品| 欧美日韩一区二区在线观看| 国产精品日产欧美久久久久| 国产在线看一区| 欧美一区二区三区免费视频 | 99久久婷婷国产综合精品电影| 日韩精品一区国产麻豆| 亚洲午夜一二三区视频| 色综合天天综合网天天狠天天 | 中文字幕欧美日本乱码一线二线 | 欧美三级三级三级| 亚洲男人电影天堂| 99在线精品一区二区三区| 久久久国产精华| 国产一区二区三区四| 日韩欧美美女一区二区三区| 日韩不卡一二三区| 欧美精品v国产精品v日韩精品| 亚洲影院免费观看| 91激情在线视频| 亚洲欧美视频在线观看视频| 99国产欧美久久久精品| 国产精品毛片大码女人| 成人高清视频在线| 中文字幕亚洲精品在线观看| 国产91丝袜在线播放0| 久久久欧美精品sm网站| 国产在线一区二区| 国产欧美日韩综合精品一区二区| 国产精品一区二区果冻传媒| 久久久久久久综合色一本| 国产一区二区三区日韩| 久久人人爽人人爽| 国产一区高清在线| 国产欧美综合色| 国产**成人网毛片九色 | 亚洲免费伊人电影| 色88888久久久久久影院野外| 亚洲精品久久嫩草网站秘色| 日本精品视频一区二区| 亚洲国产aⅴ成人精品无吗| 欧美精品乱码久久久久久按摩| 午夜精品123| 精品欧美乱码久久久久久| 国产乱子伦一区二区三区国色天香| 久久一日本道色综合| 国产91精品精华液一区二区三区| 国产精品国产成人国产三级| 99精品视频一区| 亚洲一区二区三区精品在线| 91精品国产美女浴室洗澡无遮挡| 免费观看久久久4p| 国产欧美一区二区精品仙草咪| 99re这里只有精品首页| 亚洲一区二区三区不卡国产欧美| 日韩一区二区三区在线| 国产呦萝稀缺另类资源| 亚洲欧洲日韩一区二区三区| 欧洲一区二区三区在线| 美日韩一区二区| 国产欧美一区二区精品秋霞影院 | 日韩一区二区三| 成人爱爱电影网址| 亚洲一区二区在线免费观看视频| 欧美精品自拍偷拍动漫精品| 黑人巨大精品欧美黑白配亚洲| 国产精品日产欧美久久久久| 欧美日免费三级在线| 激情综合色综合久久综合| 国产精品第四页| 欧美日韩一区二区三区免费看| 精品一区二区在线免费观看| 亚洲男人的天堂网| 日韩女优毛片在线| 91老师片黄在线观看| 日本不卡高清视频| 国产精品白丝在线| 制服丝袜亚洲精品中文字幕| 国产成人精品亚洲日本在线桃色| 亚洲综合区在线| 精品88久久久久88久久久| 99久久er热在这里只有精品66| 欧美a级一区二区| 成人免费一区二区三区在线观看| 欧美一区二区三区日韩视频| 99久久夜色精品国产网站| 久久99精品国产麻豆婷婷| 亚洲人被黑人高潮完整版| www国产成人| 欧美午夜不卡视频| 风间由美一区二区av101| 天天操天天色综合| 国产精品国产自产拍高清av王其| 日韩视频在线你懂得| 在线视频欧美区| 高清不卡一二三区| 久久激五月天综合精品| 亚洲综合图片区| 国产精品不卡在线观看| 亚洲精品在线免费播放| 欧美日韩国产天堂| 99精品国产热久久91蜜凸| 国产盗摄一区二区三区| 毛片av一区二区三区| 亚洲国产人成综合网站| 一区免费观看视频| 久久久久亚洲综合| 日韩一区二区在线看| 欧洲精品一区二区| 97久久精品人人澡人人爽| 国产精品影视在线观看| 免费不卡在线观看| 亚洲成精国产精品女| 亚洲女厕所小便bbb| 中文字幕一区二区三区四区不卡| 国产日韩v精品一区二区| 精品国产乱码久久久久久浪潮|