阅读:1016回复:0
如何获得I/O空间的首地址
我的PCI板是WIN98下的VXD驱动,根据配置空间系统分配的I/O空间正确,我用以下程序提取I/O的首地址,调试用DOUT输出显示其首地址为0,既没有获得其首址。(程序用VTOOLS生成)如下:帮我看看程序,给我体协建议,谢谢!!!
CONFIGRET OnConfigure( CONFIGFUNC cf, SUBCONFIGFUNC scf, DEVNODE devonde, DWORD refdata, ULONG flags ) { //CMCONFIG config; CMCONFIG config; LOG_CONF logconf; RES_DES hres; switch(cf) //branch on function code { case CONFIG_START: CONFIGMG_Get_Alloc_Log_Conf(&config,devonde,CM_GET_ALLOC_LOG_CONF_ALLOC); irq=config.bIRQRegisters[0];//从云台端接收数据满时产生中断的中断号 ioport1=config.wIOPortBase[1];//基址寄存器1的物理地址(I/O),读写数据时所应用的I/0映射通道,PASS_THRU区域1 ioport0=config.wIOPortBase[0];//基址寄存器0的物理地址(I/O) ioport2=config.wIOPortBase[2];//基址寄存器2的物理地址(I/O),用于PCI配置时存放数据,PASS_THRU区域2 /* if(irq!=0xff){ pMyIRQ=new MyHwint(); if(!pMyIRQ||!pMyIRQ->hook))bUsingInt=FALSE; else bUsingInt=TRUE; };*/ /* #ifdef DEBUG dout<<ioport0<<endl; dout<<ioport1<<endl; dout<<ioport2<<endl; #endif*/ return CR_SUCCESS; case CONFIG_REMOVE: case CONFIG_STOP: // if(pMyIRQ)delete pMyIRQ; irq=0xff; return CR_SUCCESS; default: return CR_DEFAULT; } } CONFIGRET Menyp1Device::OnPnpNewDevnode(DEVNODE devNode, DWORD loadType) { switch(loadType) { case DLVXD_LOAD_DEVLOADER: return CONFIGMG_Register_Device_Driver(devNode,OnConfigure,0, CM_REGISTER_DEVICE_DRIVER_DISABLEABLE| CM_REGISTER_DEVICE_DRIVER_REMOVABLE); default: return CR_DEFAULT; } return CR_DEFAULT; } 协建议,谢谢!!! |
|
最新喜欢:okincn |