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

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

?? pci_sample.c

?? PCI硬件的驅動程序范例
?? C
?? 第 1 頁 / 共 3 頁
字號:
    //
    // Stop the watchdog timer
    //
    IoStopTimer(devObj);
     
    //
    // Delete the device object
    //
    IoDeleteDevice(devObj);
}

#if DBG

///////////////////////////////////////////////////////////////////////////////
//
//  OsrPrintConfig
//
//      This routine is called to print out the PCI configuration information for
//    our device.   
//
//  INPUTS:
//
//      configInfo - Address of the PCI_COMMON_CONFIG information for our device.
//
//  OUTPUTS:
//
//      None.
//
//  RETURNS:
//
//      None.
//
//  IRQL:
//
//    This routine is called at IRQL_PASSIVE_LEVEL.
//
//  NOTES:
//
//    We only use this for debugging purposes.
//
///////////////////////////////////////////////////////////////////////////////
static VOID
OsrPrintConfig(PPCI_COMMON_CONFIG  configInfo)
{
    ULONG index;

    DbgPrint("Displaying PCI Configuration Information\n");
    DbgPrint("\tRevisionID is 0x%x\n", (int)configInfo->RevisionID);
    DbgPrint("\tProgIf is 0x%x\n", (int) configInfo->ProgIf);
    DbgPrint("\tSubClass is 0x%x\n", (int) configInfo->SubClass);
    DbgPrint("\tBaseClass is 0x%x\n", (int) configInfo->BaseClass);
    DbgPrint("\tCacheLineSize is 0x%x\n", (int) configInfo->CacheLineSize);
    DbgPrint("\tLatencyTimer is 0x%x\n", (int) configInfo->LatencyTimer);
    DbgPrint("\tHeaderType is 0x%x\n", (int) configInfo->HeaderType);
    DbgPrint("\tBIST is 0x%x\n", (int) configInfo->HeaderType);

    for (index = 0; index < PCI_TYPE0_ADDRESSES; index++)  {

        DbgPrint("\tBaseAddresses[%d] is 0x%x\n",index, configInfo->u.type0.BaseAddresses[index]);

    }

    DbgPrint("\tROMBaseAddress is 0x%x\n", configInfo->u.type0.ROMBaseAddress);
    DbgPrint("\tInterruptLine is 0x%x\n", configInfo->u.type0.InterruptLine);
    DbgPrint("\tInterruptPin is 0x%x\n", configInfo->u.type0.InterruptPin);
    DbgPrint("****************************\n");

}    


//
// Some static string tables we use as part of debugging
//
static PSTR CmResourceTypeStrings[] = 
{
    "CmResourceTypeNull",
    "CmResourceTypePort",
    "CmResourceTypeInterrupt",
    "CmResourceTypeMemory",
    "CmResourceTypeDma",
    "CmResourceTypeDeviceSpecific",
    "CmResourceTypeMaximum"
};

static PSTR CmShareDispositionStrings[] = 
{
    "CmResourceShareUndetermined",
    "CmResourceShareDeviceExclusive",
    "CmResourceShareDriverExclusive",
    "CmResourceShareShared"
};

///////////////////////////////////////////////////////////////////////////////
//
//  OsrPrintResourceList
//
//      This routine is called to print out the Resource descriptor list containing
//    the resources allocated for our device by NT.
//
//  INPUTS:
//
//      Resources - Address of the CM_RESOURCE_LIST information for our device.
//
//  OUTPUTS:
//
//      None.
//
//  RETURNS:
//
//      None.
//
//  IRQL:
//
//    This routine is called at IRQL_PASSIVE_LEVEL.
//
//  NOTES:
//
//    We only use this for debugging purposes.
//
///////////////////////////////////////////////////////////////////////////////
static VOID
OsrPrintResourceList(PCM_RESOURCE_LIST Resources)
{
    ULONG index, index2;
        
    DbgPrint("%d. resource descriptor list(s) returned\n", Resources->Count);

    for (index = 0; index < Resources->Count; index++)  {
        
        DbgPrint("\t[%d] Interface Type 0x%x\n",
                index, Resources->List[index].InterfaceType);
        DbgPrint("\t[%d] BusNumber 0x%x\n",
                index, Resources->List[index].BusNumber);
        DbgPrint("\t[%d] Version 0x%x\n",
                index, Resources->List[index].PartialResourceList.Version);
        DbgPrint("\t[%d] Revision 0x%x\n",
                index, Resources->List[index].PartialResourceList.Revision);
        
        DbgPrint("\t[%d] Partial Resource Descriptors %d.\n",
                index, Resources->List[index].PartialResourceList.Count);
        for (index2 = 0;
            index2 < Resources->List[index].PartialResourceList.Count;
            index2++)  {

            PCM_PARTIAL_RESOURCE_DESCRIPTOR prd; // Too much to type!
            
            prd = &Resources->List[index].PartialResourceList.PartialDescriptors[index2];

            DbgPrint("\t\t[%d] Type 0x%x (%s)\n",
                    index2, prd->Type, CmResourceTypeStrings[prd->Type]);
            DbgPrint("\t\t[%d] Share Disposition 0x%x (%s)\n",
                    index2, prd->ShareDisposition,
                    CmShareDispositionStrings[prd->ShareDisposition]);
            DbgPrint("\t\t[%d] Flags 0x%x\n", index2, prd->Flags);
            DbgPrint("\t\t[%d] Raw 0x%x %x %x\n",
                    index2, prd->u.DeviceSpecificData.DataSize,
                    prd->u.DeviceSpecificData.Reserved1,
                    prd->u.DeviceSpecificData.Reserved2);

            switch (prd->Type) {
                
                case CmResourceTypePort:
                    if (prd->Flags == CM_RESOURCE_PORT_MEMORY)
                        DbgPrint("\t\t[%d] port memory starting at 0x%x length 0x%x\n", 
                                      index2, prd->u.Port.Start.LowPart,
                                      prd->u.Port.Length);
                    if (prd->Flags == CM_RESOURCE_PORT_IO)
                       DbgPrint("\t\t[%d] port i/o starting at 0x%x length 0x%x\n", 
                                     index2, prd->u.Port.Start.LowPart,
                                     prd->u.Port.Length);
                    break;

                case CmResourceTypeInterrupt:
                    if (prd->Flags == CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE)
                        DbgPrint("\t\t[%d] level interrupt at lvl 0x%x vector 0x%x affinity 0x%x\n", 
                                     index2, prd->u.Interrupt.Level,
                                     prd->u.Interrupt.Vector,
                                     prd->u.Interrupt.Affinity);
                    if (prd->Flags == CM_RESOURCE_INTERRUPT_LATCHED)
                        DbgPrint("\t\t[%d] latched interrupt at lvl 0x%x vector 0x%x affinity 0x%x\n", 
                                     index2, prd->u.Interrupt.Level,
                                     prd->u.Interrupt.Vector,
                                     prd->u.Interrupt.Affinity);
                    break;

                case CmResourceTypeMemory:
                    if (prd->Flags == CM_RESOURCE_MEMORY_READ_WRITE)
                        DbgPrint("\t\t[%d] r/w memory starting at 0x%x length 0x%x\n",
                                 index2, prd->u.Memory.Start.LowPart,
                                 prd->u.Memory.Length);
                    if (prd->Flags & CM_RESOURCE_MEMORY_READ_ONLY)
                        DbgPrint("\t\t[%d] r/o memory starting at 0x%x length 0x%x\n",
                                 index2, prd->u.Memory.Start.LowPart,
                                 prd->u.Memory.Length);
                    if (prd->Flags & CM_RESOURCE_MEMORY_WRITE_ONLY)
                        DbgPrint("\t\t[%d] w/o memory starting at 0x%x length 0x%x\n",
                                 index2, prd->u.Memory.Start.LowPart,
                                 prd->u.Memory.Length);
                    break;

                case CmResourceTypeDma:
                    DbgPrint("\t\t[%d] DMA on channel 0x%x\n",
                        index2, prd->u.Dma.Channel);
                    break;

                case CmResourceTypeDeviceSpecific:
                    DbgPrint("\t\t[%d] Device specific data at 0x%x length 0x%x\n",
                                 index2,
                                 ((ULONG) &prd->u.DeviceSpecificData.Reserved2) + (ULONG)sizeof(ULONG),
                                 prd->u.DeviceSpecificData.DataSize);
                    break;

                default:
                    //
                    // Say what?!!  Unknown resource type.  Something is pretty wierd here.
                    //
                    DbgPrint("Unknown resource type 0x%x\n", prd->Type);
                    break;
            }
            
        }
            DbgPrint("\t[%d] ***** End dump ******\n", index);
    }

}


///////////////////////////////////////////////////////////////////////////////
//
//  OsrPrintIntcsr
//
//      This routine is called to print out a descriptive view of the bits set
//    in the IntCsr register.
//
//  INPUTS:
//
//      Intcsr - Contents of the IntCsr register.
//
//  OUTPUTS:
//
//      None.
//
//  RETURNS:
//
//      None.
//
//  IRQL:
//
//    This routine is called at IRQL >= IRQL_PASSIVE_LEVEL.
//
//  NOTES:
//
//    We only use this for debugging purposes.  It is called by the ISR as well
//    as by the read and write paths.
//
///////////////////////////////////////////////////////////////////////////////
VOID
OsrPrintIntcsr(ULONG Intcsr) 
{

    if(Intcsr & AMCC_INT_OUT_FIFO_CTRL)  {
        
        DbgPrint("\tOut FIFO Ctrl\n");
    }


    if(Intcsr & AMCC_INT_IN_FIFO_CTRL)  {
        
        DbgPrint("\tIn FIFO Ctrl\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVA_BYTE0)  {
        
        DbgPrint("\tADVA BYTE0\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVA_BYTE1)  {
        
        DbgPrint("\tADVA BYTE1\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVA_BYTE2)  {
        
        DbgPrint("\tADVA BYTE2\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVA_BYTE3)  {
        
        DbgPrint("\tADVA BYTE3\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVP_BYTE0)  {
        
        DbgPrint("\tADVP BYTE0\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVP_BYTE1)  {
       
        DbgPrint("\tADVP BYTE1\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVP_BYTE2)  {
        
        DbgPrint("\tADVP BYTE2\n");
    }

    if(Intcsr & AMCC_INT_FIFO_ADVP_BYTE3)  {
        
        DbgPrint("\tADVP BYTE3\n");
    }

    if(Intcsr & AMCC_INT_ENDIAN_16BIT)  {
        
        DbgPrint("\tENDIAN 16BIT\n");
    }

    if(Intcsr & AMCC_INT_ENDIAN_32BIT)  {
        
        DbgPrint("\tENDIAN 32BIT\n");
    }

    if(Intcsr & AMCC_INT_ENDIAN_64BIT)  {
        
        DbgPrint("\tENDIAN 64BIT\n");
    }

    if(Intcsr & AMCC_INT_INTERRUPTED)  {
        
        DbgPrint("\tINTERRUPTED\n");
    }

    if(Intcsr & AMCC_INT_RESERVED22)  {
        
        DbgPrint("\tRESERVED 22\n");
    }

    if(Intcsr & AMCC_INT_TARG_ABORT)  {
        
        DbgPrint("\tTARG_ABORT\n");
    }

    if(Intcsr & AMCC_INT_MAST_ABORT)  {
        
       DbgPrint("\tMAST_ABORT\n");
    }

    if(Intcsr & AMCC_INT_READ_COMP)  {
        
       DbgPrint("\tREAD_COMP\n");
    }

    if(Intcsr & AMCC_INT_WRITE_COMP)  {
        
       DbgPrint("\tWRITE_COMP\n");
    }

    if(Intcsr & AMCC_INT_INMBX_ACK)  {
        
       DbgPrint("\tINMBX_ACK\n");
    }

    if(Intcsr & AMCC_INT_OUTMBX_ACK)  {
        
       DbgPrint("\tOUTMBX_ACK\n");
    }

    if(Intcsr & AMCC_INT_INT_ON_READ)  {
        
       DbgPrint("\tINT_ON_READ\n");
    }

    if(Intcsr & AMCC_INT_INT_ON_WRITE)  {
        
       DbgPrint("\tINT_ON_WRITE\n");
    }

    if(Intcsr & AMCC_INT_RESERVED13)  {
        
       DbgPrint("\tRESERVED13\n");
    }

    if(Intcsr & AMCC_INT_ENABLE_OUTMBX_INT)  {
        
       DbgPrint("\tENABLE_OUTMBX_INT\n");
    }

    if(Intcsr & AMCC_INT_ENABLE_INMBX_INT)  {
        
       DbgPrint("\tENABLE_INMBX_INT\n");
    }


}    

#endif      // DBG

///////////////////////////////////////////////////////////////////////////////
//
//  OsrReturnPool
//
//      This routine is called to delete the memory assiged to the Driver for
//    configInfo, DeviceDescription and Resources.
//
//  INPUTS:
//
//      ConfigInfo - Address of the PCI_COMMON_CONFIG information to delete.
//    
//    DeviceDescription - Address of the DEVICE_DESCRIPTION information to delete.
//
//    Resources - Address of the CM_RESOURCE_LIST to delete.
//
//  OUTPUTS:
//
//      None.
//
//  RETURNS:
//
//      None.
//
//  IRQL:
//
//    This routine is called at IRQL >= IRQL_PASSIVE_LEVEL.
//
//  NOTES:
//
///////////////////////////////////////////////////////////////////////////////
static VOID OsrReturnPool(PPCI_COMMON_CONFIG  ConfigInfo, PDEVICE_DESCRIPTION
            DeviceDescription,  PCM_RESOURCE_LIST Resources)
{
    
    if(ConfigInfo)
        ExFreePool(ConfigInfo);

    if(DeviceDescription)
        ExFreePool(DeviceDescription);

    if(Resources)
        ExFreePool(Resources);
}    





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品三区| 亚洲欧美在线视频观看| 成人精品免费视频| 狠狠v欧美v日韩v亚洲ⅴ| 极品美女销魂一区二区三区免费| 亚洲欧美日韩在线| 亚洲欧美日本韩国| 又紧又大又爽精品一区二区| 一区二区三区在线观看欧美| 亚洲国产成人av| 亚洲影院理伦片| 婷婷久久综合九色综合绿巨人| 亚洲国产三级在线| 日日夜夜精品视频天天综合网| 亚洲一区二区中文在线| 天堂va蜜桃一区二区三区| 日日欢夜夜爽一区| 精品制服美女丁香| 国产精品白丝av| 成人av在线资源网站| 亚洲婷婷国产精品电影人久久| www.亚洲在线| 色综合久久久久久久久| 99久久精品国产麻豆演员表| 成人动漫中文字幕| 91久久人澡人人添人人爽欧美| 欧美日韩国产综合久久| 精品美女被调教视频大全网站| 精品嫩草影院久久| 国产精品国产三级国产普通话蜜臀| 亚洲嫩草精品久久| 激情综合色综合久久| av资源站一区| 欧美一区二区三区四区高清| 国产亚洲精品7777| 亚洲国产精品一区二区www在线| 日韩中文欧美在线| 成人国产亚洲欧美成人综合网| 欧美性大战久久久久久久蜜臀| 日韩一级黄色大片| 亚洲男同性恋视频| 国产伦理精品不卡| 欧美日韩综合在线| 国产精品嫩草99a| 三级影片在线观看欧美日韩一区二区| 九九国产精品视频| 欧美人牲a欧美精品| 国产精品国产a| 狠狠网亚洲精品| 欧美二区在线观看| 亚洲日本免费电影| 国内精品国产成人国产三级粉色 | 国产人成亚洲第一网站在线播放 | 日本中文字幕一区二区视频 | 美日韩黄色大片| 一本到一区二区三区| 久久综合久久综合九色| 亚洲国产成人av| 色综合久久99| 国产精品欧美一区喷水| 国产主播一区二区三区| 欧美一区二区在线观看| 亚洲一区二区三区四区在线 | 亚洲成av人**亚洲成av**| 韩国av一区二区三区四区| 精品国产一区二区精华| 日本韩国精品一区二区在线观看| 欧美xxxxx裸体时装秀| 视频一区视频二区在线观看| 精品一区二区在线看| 777a∨成人精品桃花网| 亚洲综合在线五月| 色先锋久久av资源部| 亚洲日本护士毛茸茸| 97久久精品人人做人人爽| 这里是久久伊人| 午夜伊人狠狠久久| 欧美性大战久久久久久久| 亚洲欧美日韩一区| 色婷婷激情久久| 亚洲综合一区二区三区| 在线看国产一区| 亚洲二区视频在线| 欧美日本一道本| 免费日本视频一区| 久久亚洲免费视频| 风间由美一区二区av101| 国产片一区二区| 99re这里只有精品首页| 久久综合99re88久久爱| 国产91在线|亚洲| 国产精品天天看| 色视频一区二区| 亚洲成人av资源| 欧美mv和日韩mv国产网站| 国产在线精品一区二区| 国产精品久久久久久一区二区三区| 99视频有精品| 亚洲1区2区3区视频| 日韩免费一区二区| 成人av在线资源网站| 亚洲精品欧美综合四区| 欧美男同性恋视频网站| 国产一区二区三区精品视频| 中文字幕一区二区三区av| 欧美在线免费观看视频| 精品一区二区免费视频| 中文字幕中文字幕在线一区 | 日韩精品一区第一页| 欧美成人国产一区二区| 成人精品电影在线观看| 午夜不卡av免费| 久久奇米777| 欧美丝袜丝nylons| 国内精品伊人久久久久av一坑| 亚洲日本一区二区| 欧美大片国产精品| 一本一本大道香蕉久在线精品| 奇米777欧美一区二区| 亚洲欧洲色图综合| 精品福利一二区| 欧美日韩亚洲另类| 成人h版在线观看| 九九精品一区二区| 亚洲国产欧美一区二区三区丁香婷 | 成人欧美一区二区三区白人 | 精品一区二区精品| 亚洲一区在线免费观看| 国产偷国产偷精品高清尤物 | 紧缚奴在线一区二区三区| 亚洲欧美激情小说另类| 久久综合色天天久久综合图片| 在线免费观看日本一区| 国产福利91精品一区二区三区| 亚洲国产成人av| 亚洲欧美日韩中文播放| 欧美国产欧美综合| www国产成人| 日韩亚洲欧美综合| 欧美日韩高清一区二区不卡 | 亚洲网友自拍偷拍| 国产精品久久网站| 国产午夜三级一区二区三| 337p亚洲精品色噜噜噜| 欧美亚洲综合在线| 在线观看日韩毛片| 91久久精品国产91性色tv| 日本三级亚洲精品| 欧美国产1区2区| 久久久影视传媒| 精品欧美久久久| 欧美优质美女网站| 国内成人精品2018免费看| 视频一区二区不卡| 成人午夜免费av| 久久精品理论片| 青青草国产成人99久久| 中文字幕在线观看不卡视频| 色狠狠色狠狠综合| 欧美一区二区三区婷婷月色| 曰韩精品一区二区| 日本不卡在线视频| 日韩精品亚洲专区| 精品国产成人在线影院 | 综合久久给合久久狠狠狠97色 | 日韩欧美亚洲另类制服综合在线| 欧美精品一区二区三区视频| 色综合久久99| 男人的天堂久久精品| 日韩电影免费在线| 亚洲h精品动漫在线观看| 亚洲第一会所有码转帖| 国产精品另类一区| 51午夜精品国产| 日韩vs国产vs欧美| 久草在线在线精品观看| 中文字幕亚洲在| 精品一区二区在线视频| 中文字幕第一页久久| 亚洲国产aⅴ天堂久久| 麻豆精品在线播放| 久久影院视频免费| 国产女主播在线一区二区| 欧美高清视频在线高清观看mv色露露十八 | 成人免费视频视频在线观看免费| 国产福利一区二区三区| 中日韩免费视频中文字幕| 亚洲天天做日日做天天谢日日欢 | 国产精品一区二区久久精品爱涩| 色综合天天综合给合国产| 日韩精品一区二区三区中文精品| 国产一区二区视频在线| 九九九久久久精品| 久久精品欧美一区二区三区不卡| 欧美男男青年gay1069videost | 狠狠久久亚洲欧美| 欧美精品一区二区久久久| 91黄色免费观看| 国产欧美精品在线观看| 国产综合色精品一区二区三区|