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

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

?? pcicfg.c

?? WINCE5.0操作系統(tǒng)下的PCI總線驅(qū)動(dòng)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
//
// 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.
//

//
// Routines to configure and initialize the PCIbus
//
#include <windows.h>
#include <ceddk.h>
#include <devload.h>
#include <PCIbus.h>
#include "PCIcfg.h"
#include "PCIproto.h"
#include "PCIdbg.h"

#pragma warning (disable: 4002)

//
// Resource lists for Memory and I/O
//
PPCI_RSRC g_MemHead, g_IoHead,g_PrefetchMemHead;
DWORD       g_dwBusNumberBase,g_dwBusNumberLength;

//   
// Function prototypes
//
static BOOL
PCICfgBus(
    PPCI_DEV_INFO pBusInfo,
    ULONG Bus,
    PULONG pSubordinateBus,
    PULONG pMemSize,
    PULONG pIoSize,
    PULONG pPrefetchMemSize
    );

static BOOL
PCICfgDevice(
    PPCI_DEV_INFO pBusInfo,
    ULONG Bus,
    ULONG Device,
    ULONG Function,
    PPCI_COMMON_CONFIG pCfg,
    PULONG pMemSize,
    PULONG pIoSize,
    PULONG pPrefetchMemSize
    );

static BOOL
PCICfgBridge(
    PPCI_DEV_INFO pBusInfo,
    ULONG Bus,
    ULONG Device,
    ULONG Function,
    PPCI_COMMON_CONFIG pCfg,
    PULONG pSubordinateBus,
    PULONG pMemSize,
    PULONG pIoSize,
    PULONG pPrefetchMemSize
    );

static BOOL
PCICfgCardBusBridge(
    PPCI_DEV_INFO pBusInfo,
    ULONG Bus,
    ULONG Device,
    ULONG Function,
    PPCI_COMMON_CONFIG pCfg,
    PULONG pSubordinateBus,
    PULONG pMemSize,
    PULONG pIoSize
    );

static BOOL
PCICfgCheckBARs(
    PPCI_DEV_INFO pInfo,
    PULONG pMemSize,
    PULONG pIoSize,
    PULONG pPrefetchMemSize
    );

static BOOL
PCICfgAllocateIoSpace(
    DWORD Bus,
    DWORD Base,
    DWORD Size
    );

static BOOL
PCICfgAllocateMemSpace(
    DWORD Bus,
    DWORD Base,
    DWORD Size
    );

static BOOL
PCICfgAllocatePrefetchMemSpace(
    DWORD Bus,
    DWORD Base,
    DWORD Size
    );

static BOOL
PCICfgFindMatch(
    PPCI_DEV_INFO pInfo
    );

static BOOL
RequestIrq(
    PDEVICE_LOCATION pDevLoc,
    PDWORD pIrq
    );
//    
// Inline functions
//

//
// Read a DWORD from a device's configuration space
//
__inline static DWORD
PCIConfig_Read(
    ULONG BusNumber,
    ULONG Device,
    ULONG Function,
    ULONG Offset
    )
{
    ULONG RetVal = FALSE;
    PCI_SLOT_NUMBER SlotNumber;

    SlotNumber.u.AsULONG = 0;
    SlotNumber.u.bits.DeviceNumber = Device;
    SlotNumber.u.bits.FunctionNumber = Function;
    
    HalGetBusDataByOffset(PCIConfiguration, BusNumber, SlotNumber.u.AsULONG, &RetVal, Offset, sizeof(RetVal));

    return RetVal;
}


//
// Write a DWORD to a device's configuration space
//
__inline static void
PCIConfig_Write(
    ULONG BusNumber,
    ULONG Device,
    ULONG Function,
    ULONG Offset,
    ULONG Value
    )
{
    PCI_SLOT_NUMBER SlotNumber;

    SlotNumber.u.AsULONG = 0;
    SlotNumber.u.bits.DeviceNumber = Device;
    SlotNumber.u.bits.FunctionNumber = Function;

    HalSetBusDataByOffset(PCIConfiguration, BusNumber, SlotNumber.u.AsULONG, &Value, Offset, sizeof(Value));
}


//
// Top-level PCIbus initialization and configuration routine
//
BOOL
PCICfg(
    PPCI_DEV_INFO_EX pBusInfoEx
    )
{
    ULONG SubordinateBus = 0;
    ULONG MemSize = 0;
    ULONG IoSize = 0;
    ULONG PrefetchMem = 0;
    BOOL Status = TRUE;
    PPCI_DEV_INFO pBusInfo = &(pBusInfoEx->pciDevice);
        
    DEBUGMSG(ZONE_FUNCTION, (L"PCIBUS!PCICfg+(%s, BusNumberBase 0x%X, BusNumberLength 0x%X MemBase 0x%X, MemLen 0x%X, IoBase 0x%X, IoLen 0x%X)\r\n",
        pBusInfo->RegPath, pBusInfoEx->dwBusNumberBase, pBusInfoEx->dwBusNumberLength, pBusInfo->MemBase.Reg[0], pBusInfo->MemLen.Reg[0], pBusInfo->IoBase.Reg[0], pBusInfo->IoLen.Reg[0]));

    if (pBusInfoEx->PrefetchMemBase.Num!=0 && pBusInfoEx->PrefetchMemLen.Num!=0 ) {
        DEBUGMSG(ZONE_FUNCTION, (L"PCIBUS!PCICfg(%s, PrefetchMemBase 0x%X, PrefetchMemLen 0x%X)\r\n",
            pBusInfo->RegPath, pBusInfoEx->PrefetchMemBase.Reg[0], pBusInfoEx->PrefetchMemLen.Reg[0]));
    }
    else {
        DEBUGMSG(ZONE_FUNCTION, (L"PCIBUS!PCICfg : No Prefetchable Memory Support\r\n"));
    }
    g_MemHead = g_PrefetchMemHead = g_IoHead = NULL; 
    g_dwBusNumberBase = pBusInfoEx->dwBusNumberBase;
    g_dwBusNumberLength = pBusInfoEx->dwBusNumberLength;
    SubordinateBus = pBusInfoEx->dwBusNumberBase;
    
    // Initialize resource lists
    if (!(g_MemHead = PCIRsrc_New(0, 0, 0, 0, pBusInfo->MemBase.Reg[0], pBusInfo->MemLen.Reg[0], TRUE, 0, TRUE, NULL))) {
        DEBUGMSG(ZONE_ERROR, (L"PCIBUS!PCICfg: Failed local alloc of g_MemHead)\r\n"));
        return FALSE;
    }
    
    if (!(g_IoHead = PCIRsrc_New(0, 0, 0, 0, pBusInfo->IoBase.Reg[0], pBusInfo->IoLen.Reg[0], TRUE, 0, TRUE, NULL))) {
        DEBUGMSG(ZONE_ERROR, (L"PCIBUS!PCICfg: Failed local alloc of g_IoHead)\r\n"));
        PCIRsrc_DelList(g_MemHead);
        return FALSE;
    }
    if ( pBusInfoEx->PrefetchMemBase.Num!=0 && pBusInfoEx->PrefetchMemLen.Num!=0 && 
            !(g_PrefetchMemHead = PCIRsrc_New(0, 0, 0, 0, pBusInfoEx->PrefetchMemBase.Reg[0], pBusInfoEx->PrefetchMemLen.Reg[0], TRUE, 0, TRUE, NULL))) {
        DEBUGMSG(ZONE_WARNING, (L"PCIBUS!PCICfg: No Prefetchable Memory Support!)\r\n"));
    }
    if (!PCICfgBus(pBusInfo, 0, &SubordinateBus, &MemSize, &IoSize,g_PrefetchMemHead!=NULL?&PrefetchMem:NULL)) {
        DEBUGMSG(ZONE_ERROR, (L"PCIBUS!PCICfg: Failed PCICfgBus( ) call. At least one device does not configure properly\r\n"));
    }

#ifdef DEBUG
    DEBUGMSG(ZONE_RSRC, (L"Mem List:\r\n"));
    if (ZONE_RSRC) PCIRsrc_PrintList(g_MemHead);
    DEBUGMSG(ZONE_RSRC, (L"I/O List:\r\n"));
    if (ZONE_RSRC) PCIRsrc_PrintList(g_IoHead);
    DEBUGMSG(ZONE_RSRC, (L"Prefetch Mem List:\r\n"));
    if (ZONE_RSRC && g_PrefetchMemHead) PCIRsrc_PrintList(g_PrefetchMemHead);
#endif
    
    if (MemSize > pBusInfo->MemLen.Reg[0]) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Not enough memory space allocated for PCI Bus, PCIbus driver terminating.\r\n"));
        RETAILMSG(1, (L"PCIBUS!PCICfg: Host Bridge window size: 0x%X, requested: 0x%X\r\n", pBusInfo->MemLen.Reg[0], MemSize));
        RETAILMSG(1, (L"PCIBUS!PCICfg: List of requested memory resources:\r\n"));
        PCIRsrc_PrintList(g_MemHead);
        Status = FALSE;
        goto PCICfg_Exit;
    }
     
    if (IoSize > pBusInfo->IoLen.Reg[0]) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Not enough I/O space allocated for PCI Bus, PCIbus driver terminating.\r\n"));
        RETAILMSG(1, (L"PCIBUS!PCICfg: Host Bridge window size: 0x%X, requested: 0x%X\r\n", pBusInfo->IoLen.Reg[0], IoSize));
        RETAILMSG(1, (L"PCIBUS!PCICfg: List of requested I/O resources:\r\n"));
        PCIRsrc_PrintList(g_IoHead);
        Status = FALSE;
        goto PCICfg_Exit;
    }

    if (g_PrefetchMemHead && PrefetchMem > pBusInfoEx->PrefetchMemLen.Reg[0]) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Not enough Prefetch space allocated for PCI Bus, PCIbus driver terminating.\r\n"));
        RETAILMSG(1, (L"PCIBUS!PCICfg: Host Bridge window size: 0x%X, requested: 0x%X\r\n", pBusInfoEx->PrefetchMemLen.Reg[0], PrefetchMem));
        RETAILMSG(1, (L"PCIBUS!PCICfg: List of requested prefetch memory resources:\r\n"));
        PCIRsrc_PrintList(g_PrefetchMemHead);
        Status = FALSE;
        goto PCICfg_Exit;
    }
        
    if (!PCICfgAllocateMemSpace(0, pBusInfo->MemBase.Reg[0], pBusInfo->MemLen.Reg[0])) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Failure allocating PCI memory space, PCIbus driver terminating.\r\n"));
        Status = FALSE;
        goto PCICfg_Exit;
    }
    
    if (!PCICfgAllocateIoSpace(0, pBusInfo->IoBase.Reg[0], pBusInfo->IoLen.Reg[0])) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Failure allocating PCI I/O space, PCIbus driver terminating.\r\n"));
        Status = FALSE;
        goto PCICfg_Exit;
    }

    if (g_PrefetchMemHead && !PCICfgAllocatePrefetchMemSpace(0, pBusInfoEx->PrefetchMemBase.Reg[0], pBusInfoEx->PrefetchMemLen.Reg[0])) {
        RETAILMSG(1, (L"PCIBUS!PCICfg: Failure allocating Prefetchable Memory space, PCIbus driver terminating.\r\n"));
        Status = FALSE;
        goto PCICfg_Exit;
    }

PCICfg_Exit:
    UnloadConfigEntrys();           // Unload any configuration DLLs that were loaded
    PCIRsrc_DelList(g_MemHead);
    PCIRsrc_DelList(g_IoHead);
    if (g_PrefetchMemHead)
        PCIRsrc_DelList(g_PrefetchMemHead);
    g_MemHead = g_IoHead = g_PrefetchMemHead = NULL;
        
    DEBUGMSG(ZONE_FUNCTION, (L"PCIBUS!PCICfg-\r\n"));
    
    return Status;
}


//
// Initialize and configure PCIbus
//
static BOOL
PCICfgBus(
    PPCI_DEV_INFO pBusInfo,
    ULONG Bus,
    PULONG pSubordinateBus,
    PULONG pMemSize,
    PULONG pIoSize ,
    PULONG pPrefetchMemSize
    )
{
    DWORD Device;
    DWORD Function;
    DWORD Length;

    PCI_SLOT_NUMBER SlotNumber;
    PCI_COMMON_CONFIG Cfg;

    BOOL RetVal = TRUE;

    DEBUGMSG(ZONE_FUNCTION, (L"PCIBUS!PCICfgBus+(Bus %d)\r\n", Bus));
    if (Bus<g_dwBusNumberBase || Bus>=g_dwBusNumberBase + g_dwBusNumberLength) {
        DEBUGMSG(ZONE_ERROR, (L"PCIBUS!PCICfgBus: Invalid BusNumber 0x%X, BusNumberBase 0x%X, BusNumberLength 0x%X\r\n",
            Bus, g_dwBusNumberBase, g_dwBusNumberLength));
        return FALSE;
    }

    SlotNumber.u.AsULONG = 0;
    
    // Loop through all device numbers
    for (Device = 0; Device < PCI_MAX_DEVICES; Device++) {
        SlotNumber.u.bits.DeviceNumber = Device;
        
        // Loop through all functions  
        for (Function = 0; Function < PCI_MAX_FUNCTION; Function++) {
            Cfg.VendorID = PCI_INVALID_VENDORID;
            Cfg.DeviceID = PCI_INVALID_DEVICEID;
            Cfg.HeaderType = PCI_DEVICE_TYPE;
            
            SlotNumber.u.bits.FunctionNumber = Function;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲麻豆国产自偷在线| 亚洲综合一区二区| 在线视频观看一区| 麻豆freexxxx性91精品| 亚洲欧美在线高清| 日韩精品一区二区三区四区视频| 成人午夜av电影| 免费的国产精品| 一区二区三区四区在线免费观看 | 91网站黄www| 久久99国产精品久久99| 亚洲福利一二三区| 亚洲免费视频成人| 国产日韩欧美一区二区三区综合 | 51午夜精品国产| 成人黄色电影在线| 国产精品影音先锋| 日本在线播放一区二区三区| 亚洲猫色日本管| 中文字幕日本乱码精品影院| 亚洲精品在线观看视频| 欧美精三区欧美精三区| 色综合天天性综合| 丁香啪啪综合成人亚洲小说| 国产在线一区二区| 麻豆精品久久久| 日日夜夜精品视频天天综合网| 亚洲免费三区一区二区| 欧美国产日韩亚洲一区| 精品久久久久久久久久久久久久久久久| 日本高清不卡aⅴ免费网站| 风间由美一区二区av101 | 91福利资源站| 色综合天天综合给合国产| 成人视屏免费看| 国产1区2区3区精品美女| 国产一区二区不卡在线| 国产精品影视网| 国产一区二区三区视频在线播放| 久久99精品国产.久久久久久| 日韩在线一区二区三区| 午夜av电影一区| 日韩精品亚洲一区| 美国毛片一区二区| 久久爱另类一区二区小说| 另类小说一区二区三区| 免费在线欧美视频| 久久成人免费电影| 国产盗摄精品一区二区三区在线| 国产大片一区二区| 成人国产精品免费网站| 91在线porny国产在线看| 99精品欧美一区二区三区综合在线| av色综合久久天堂av综合| 91亚洲国产成人精品一区二区三| 日本乱人伦一区| 欧美精品一二三| 精品国产自在久精品国产| 国产亚洲精品久| 国产精品盗摄一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 一区二区三区美女视频| 午夜精品久久久| 久久成人久久爱| 成人一区在线观看| 欧美三级韩国三级日本一级| 91精品国产综合久久精品| 欧美videossexotv100| 国产拍欧美日韩视频二区| 亚洲免费在线视频| 蜜臀久久99精品久久久画质超高清| 激情五月激情综合网| 成人永久看片免费视频天堂| 91黄色在线观看| 日韩欧美国产一区二区在线播放| 国产欧美精品一区| 亚洲一区二区在线播放相泽| 日韩av在线播放中文字幕| 成人网在线播放| 欧美男女性生活在线直播观看| 精品少妇一区二区三区免费观看| 国产精品久久久久一区二区三区| 亚洲成人av福利| 国产乱子伦视频一区二区三区| 色香蕉成人二区免费| 国产精品国产三级国产三级人妇 | 国产精品毛片a∨一区二区三区| 亚洲视频资源在线| 美脚の诱脚舐め脚责91| 91同城在线观看| 精品免费一区二区三区| 亚洲欧美乱综合| 国产美女精品在线| 欧美日韩不卡视频| 国产精品夫妻自拍| 狠狠色丁香婷婷综合| 欧美丝袜第三区| 国产农村妇女毛片精品久久麻豆| 亚洲午夜免费福利视频| 国产激情视频一区二区三区欧美| 欧美日韩aaaaaa| 综合分类小说区另类春色亚洲小说欧美| 日本成人超碰在线观看| 成a人片亚洲日本久久| 欧美成人艳星乳罩| 亚洲在线视频免费观看| 成人精品视频一区二区三区尤物| 日韩三级av在线播放| 一区二区三区高清在线| 成人av动漫在线| 久久久天堂av| 日本va欧美va精品发布| 欧美午夜寂寞影院| 亚洲欧美影音先锋| 国产.精品.日韩.另类.中文.在线.播放| 欧美一区二区三区免费观看视频| 亚洲综合久久av| 97久久精品人人做人人爽| 国产三级一区二区三区| 激情综合色综合久久| 欧美一二三区在线观看| 午夜精品久久久久久久久| 欧美综合在线视频| 亚洲婷婷综合久久一本伊一区| 国产伦精品一区二区三区在线观看| 欧美一区二区视频在线观看2022 | 久久综合久久综合亚洲| 日本视频免费一区| 欧美日韩夫妻久久| 日韩中文字幕不卡| 5566中文字幕一区二区电影| 亚洲高清在线视频| 欧美日韩中文字幕精品| 亚洲一区二区在线播放相泽| 日本韩国一区二区三区视频| 综合色中文字幕| 色婷婷精品大在线视频 | 蜜臀91精品一区二区三区| 欧美放荡的少妇| 日韩av一级片| 日韩精品专区在线| 国产乱人伦精品一区二区在线观看| 久久综合久久久久88| 高清久久久久久| 国产精品理伦片| 91高清在线观看| 日韩综合小视频| 日韩精品专区在线| 国产精品亚洲一区二区三区在线| 久久久.com| av一区二区三区四区| 亚洲精品视频免费观看| 精品视频全国免费看| 水蜜桃久久夜色精品一区的特点| 日韩毛片精品高清免费| 91免费看`日韩一区二区| 一区二区在线免费观看| 欧美日韩一区二区在线观看视频| 日韩精品成人一区二区在线| 日韩精品一区二区三区四区视频| 国模无码大尺度一区二区三区| 国产日韩三级在线| 日本精品一区二区三区四区的功能| 亚洲成人激情av| 精品国产乱码久久久久久夜甘婷婷 | 欧美日韩第一区日日骚| 日韩av二区在线播放| 国产欧美一区二区精品久导航| 91污在线观看| 日本不卡视频在线| 欧美激情中文字幕| 欧美视频一区二区在线观看| 蜜桃精品视频在线| 国产精品―色哟哟| 欧美另类高清zo欧美| 国产一区不卡视频| 亚洲一区二区三区四区五区黄 | 欧美成人性福生活免费看| 国产91露脸合集magnet| 亚洲福利一区二区| 久久久国产精华| 欧美三级午夜理伦三级中视频| 老司机精品视频导航| 亚洲女同一区二区| 精品久久免费看| 欧美色涩在线第一页| 九色porny丨国产精品| 亚洲人成在线观看一区二区| 欧美videos大乳护士334| 色综合久久中文综合久久牛| 美日韩一区二区| 一区二区成人在线观看| 久久久精品2019中文字幕之3| 91成人免费在线| 国产成人精品网址| 久久国产福利国产秒拍| 亚洲电影一级片| 国产精品美女视频| 日韩精品一区国产麻豆| 欧美日韩精品一区视频|