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

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

?? findpci.c

?? dma驅動開發程序
?? C
字號:
/*++

Copyright (c) 1997-1998  Microsoft Corporation

Module Name:

    findpci.c

Abstract:

    This file contains generic routines to locate a PCI device.

Author:

    Steve Dziok (SteveDz)

Environment:

    Kernel mode

Revision History:


--*/

#include "pcidma.h"


NTSTATUS
FindPciDevice(
    IN USHORT   VendorId,
    IN USHORT   DeviceId,
    OUT PPCI_DEVICE_LIST PciDeviceList
    )

/*++

Routine Description:

    Find all the PCI devices for the VendorId and DeviceId specified by the
    caller.  The located devices are in the returned PCI_DEVICE_LIST.

    If the caller specifies VendorId == PC_INVALID_VENDORID, then return all
    valid PCI devices on the system.

Arguments:

    VendorId - The manufacturer of the device.  Assigned by the PCI SIG.  If
               this value is PC_INVALID_VENDORID (0xFFFF), then all valid PCI
               devices on the machine will be located.

    DeviceId - The particular device created by the manufacturer.  Assigned by
               the manufacturer.

    PciDeviceList - A list of all the PCI devices that match the VendorId and
                    DeviceId.  The list simply indicates the bus number and slot
                    number for each location.  A count field in the list indicates
                    how many devices were found.

Return Value:

    NTSTATUS

--*/
{
    ULONG                   busNumber = 0;
    ULONG                   count = 0;

    ULONG                   deviceNumber;
    ULONG                   functionNumber;

    NTSTATUS                status = STATUS_DEVICE_DOES_NOT_EXIST;

    PCI_SLOT_NUMBER         slotNumber;
    PCI_COMMON_CONFIG       pciData;
    PPCI_DEVICE_LOCATION    pciDeviceLocation;

    DebugPrint((3, "FindPciDevice \n"));

    //
    //
    // typedef struct _PCI_SLOT_NUMBER {
    //     union {
    //         struct {
    //             ULONG   DeviceNumber:5;
    //             ULONG   FunctionNumber:3;
    //             ULONG   Reserved:24;
    //         } bits;
    //         ULONG   AsULONG;
    //     } u;
    // } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
    //

    slotNumber.u.AsULONG = 0;

    PciDeviceList->Count = 0;
    pciDeviceLocation = &PciDeviceList->List[0];

    //
    // Scan each bus.
    //

    for ( busNumber = 0;
            busNumber < MAX_PCI_BUSES;
            busNumber++ ) {

        //
        // Scan each device.
        //

        for ( deviceNumber = 0;
                deviceNumber < PCI_MAX_DEVICES;
                deviceNumber++ ) {

            slotNumber.u.bits.DeviceNumber = deviceNumber;

            //
            // Scan each function.
            //

            for ( functionNumber = 0;
                    functionNumber < PCI_MAX_FUNCTION;
                    functionNumber++ ) {

                slotNumber.u.bits.FunctionNumber = functionNumber;

                //
                // Check what's in the current slot.
                //

                if (!HalGetBusData(PCIConfiguration,
                                   busNumber,
                                   slotNumber.u.AsULONG,
                                   &pciData,
                                   sizeof(ULONG)
                                   ) ) {

                    //
                    // The specified PCI bus does not exist.  We are done
                    // with this bus.  Set the device number to the maximum
                    // and break out of the function loop.  This will scan
                    // the next system bus.  There is no guarantee that the
                    // system buses are sequentially ordered.
                    //

                    deviceNumber = PCI_MAX_DEVICES;

                    break;

                }

                if (pciData.VendorID == PCI_INVALID_VENDORID ) {

                    //
                    // Although the current function may show an invalid
                    // device, we really have to keep checking for functions
                    // on the current device.  This is required because the
                    // PCI specification is unclear whether function numbers
                    // in a PCI device must be numerically sequential.  For
                    // example, a particular PCI device could respond to
                    // functions 1, 3, and 4.
                    //

                    //
                    // Check next function.
                    //

                    continue;

                }

                DebugPrint((3,
                            "PCI device found: bus = 0x%x  slot = 0x%x\n",
                            busNumber,
                            slotNumber
                            ));

                //
                // Check if we need to return all devices or only those specified
                // by the caller.
                //

                if ( ( VendorId != PCI_INVALID_VENDORID ) &&
                        ( pciData.VendorID != VendorId || pciData.DeviceID != DeviceId )) {

                    DebugPrint((3,
                               "VendorId (0x%0x) or DeviceId (0x%0x) not as requested. \n",
                                pciData.VendorID,
                                pciData.DeviceID
                                ));

                    //
                    // Check next function.
                    //

                    continue;

                }

                DebugPrint((3, "VendorId and DeviceId match! \n"));

                //
                // At this point, we've found a valid PCI device.
                //

                //
                // Save the found information.
                //

                pciDeviceLocation->BusNumber = busNumber;
                pciDeviceLocation->SlotNumber = slotNumber;

                //
                // Increment the PCI device found count.
                //
                //
                // Point to the next location to store data.
                //

                pciDeviceLocation = &PciDeviceList->List[++count];

                //
                // Indicate at least one device found.
                //

                status = STATUS_SUCCESS;


            }   // functionNumber

        }   // deviceNumber

    }   // busNumber


    DebugPrint((1, "%d matching PCI devices found. \n", count));

    //
    // Update the number of devices in the found list.
    //

    PciDeviceList->Count = count;

    return status;

}   // FindPciDevice


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线日韩欧美| 在线观看91精品国产麻豆| 国产日产欧美一区二区视频| 亚洲成人av中文| 日韩你懂的电影在线观看| 精品一区二区av| 综合在线观看色| 精品无人码麻豆乱码1区2区| 欧美成人猛片aaaaaaa| 国产91丝袜在线播放| 一区二区三区在线视频观看| 91精品国产欧美日韩| 国产精品羞羞答答xxdd| 樱桃国产成人精品视频| 精品国产91乱码一区二区三区 | 捆绑调教美女网站视频一区| 国产精品天干天干在观线| 欧美精品tushy高清| 成人av动漫在线| 久久99久久99精品免视看婷婷| 最新日韩av在线| 久久久久久麻豆| 欧美一级理论片| 欧美三级电影在线观看| 国产一区二区不卡老阿姨| 亚洲国产视频a| 亚洲黄色在线视频| 日本一二三不卡| 久久久久99精品一区| 精品国产污污免费网站入口 | 日本韩国欧美一区二区三区| 国产成人在线观看免费网站| 国内外成人在线视频| 国产在线播放一区二区三区| 精品影视av免费| 国产主播一区二区| 国产精品一卡二卡| 成人爽a毛片一区二区免费| 欧美日韩一级片在线观看| 中文字幕精品一区二区三区精品| 亚洲午夜精品网| 欧美主播一区二区三区| 欧美国产在线观看| 国内精品写真在线观看| 欧美欧美欧美欧美首页| 一区二区三区欧美| 色婷婷久久久综合中文字幕| 欧美国产日韩亚洲一区| 国产成人8x视频一区二区| 国产亚洲欧美在线| 久久精品视频网| 日韩欧美国产精品一区| 国产欧美精品区一区二区三区 | 亚洲成av人片一区二区梦乃| 日本不卡中文字幕| 在线一区二区视频| 国产精品欧美精品| 国产一区欧美一区| 欧美一区二区网站| 亚洲一区二区精品视频| 成人污视频在线观看| 久久精品无码一区二区三区| 日韩福利视频导航| 日韩视频不卡中文| 日韩精品每日更新| 欧美在线free| 偷拍与自拍一区| 欧美xxx久久| 另类小说图片综合网| 色综合天天视频在线观看| 欧美日韩国产高清一区二区 | 亚洲国产精品久久久久婷婷884| 亚洲黄色小说网站| 日韩黄色片在线观看| 91农村精品一区二区在线| 欧美精品一区在线观看| 国产一区999| 国产精品久久久久毛片软件| 成人午夜视频免费看| 中文字幕制服丝袜成人av | 国产精品亚洲视频| 中文幕一区二区三区久久蜜桃| 国产成人精品亚洲777人妖 | 日韩欧美国产精品| 国产九色sp调教91| 一区二区三国产精华液| 欧美一区二区三区人| 国产ts人妖一区二区| 成人免费在线观看入口| 欧美日韩一卡二卡三卡 | 26uuu久久综合| 成人高清免费观看| 日日嗨av一区二区三区四区| 日韩欧美国产午夜精品| 99re这里只有精品首页| 午夜国产精品影院在线观看| 国产午夜精品在线观看| 在线观看国产精品网站| 国产精选一区二区三区| 亚洲国产精品欧美一二99| 欧美国产激情一区二区三区蜜月| 在线看日本不卡| 成人av影视在线观看| 久久精品国产久精国产爱| 亚洲国产成人porn| 亚洲激情自拍偷拍| 国产精品免费免费| 国产亚洲综合性久久久影院| 欧美精品精品一区| 欧美日韩亚洲综合| 欧美性一区二区| 欧美三级视频在线| 91免费在线视频观看| 一本一道久久a久久精品| 成人性视频网站| 99久久久久久| 91一区二区在线| 91麻豆精品在线观看| 91免费版在线| 一本色道久久综合精品竹菊| 色综合天天综合网天天看片| aaa国产一区| 欧美在线观看视频一区二区| 91精品1区2区| 成人手机在线视频| 97精品超碰一区二区三区| 91免费观看国产| 欧美一区二区三区免费大片| 日韩午夜在线播放| 日本一区二区三区国色天香| 日韩美女视频一区| 亚洲国产另类av| 国产成a人亚洲精| 色噜噜狠狠色综合中国| 欧美一级在线观看| 中文字幕在线播放不卡一区| 亚洲精品老司机| 国产一区二区0| 777精品伊人久久久久大香线蕉| 久久久综合精品| 性做久久久久久久久| 成人午夜视频在线| 精品人伦一区二区色婷婷| 亚洲色图一区二区| 岛国av在线一区| 精品国产sm最大网站| 手机精品视频在线观看| 99精品热视频| 亚洲欧洲精品一区二区三区| 麻豆成人免费电影| 91.com视频| 日欧美一区二区| 色偷偷久久一区二区三区| 久久久久亚洲蜜桃| 国产高清在线精品| 久久天堂av综合合色蜜桃网| 蜜臀99久久精品久久久久久软件| 色综合天天综合色综合av| 一区二区三区在线视频观看58 | 成人美女视频在线观看18| 精品国产伦理网| 国产乱人伦精品一区二区在线观看| 欧美一级理论性理论a| 免费三级欧美电影| 欧美精品一区二区三区四区 | 亚洲最色的网站| 欧美另类z0zxhd电影| 美女精品自拍一二三四| 欧美一级久久久久久久大片| 国产精品综合在线视频| 国产精品不卡在线| 日韩一区二区精品葵司在线| 国产精品资源网| 亚洲综合色在线| 欧美大片免费久久精品三p| 国产白丝精品91爽爽久久| 亚洲乱码国产乱码精品精小说| 欧美日韩日日骚| 国产美女精品在线| 亚洲成av人片一区二区| 久久精品亚洲麻豆av一区二区| 欧美在线观看禁18| 日韩免费看的电影| 欧美日韩不卡视频| 欧美一级在线观看| 久久久美女艺术照精彩视频福利播放 | 日韩码欧中文字| 欧美国产欧美综合| 亚洲手机成人高清视频| 亚洲美女免费视频| 亚洲一区影音先锋| 亚洲一区二区在线免费看| 亚洲午夜在线电影| 奇米影视一区二区三区| 九色综合狠狠综合久久| 99久久久免费精品国产一区二区| 99国产精品国产精品毛片| 欧美精品aⅴ在线视频| 久久理论电影网| 亚洲mv大片欧洲mv大片精品|