dyxing2000
驱动小牛
驱动小牛
  • 注册日期2003-04-19
  • 最后登录2012-04-25
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望50点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
阅读:2458回复:4

如何获取映射在PCI空间的IO基地址? 请进!

楼主#
更多 发布于:2004-05-26 17:27
请教!
   我想通过读写0XCF8和0XCFC两个寄存器,写个函数来获取LOCAL端
映射在PCI端的IO基地址,以便随时调用。其实就是读PCI9052配置信息中的PCIBAR3,我写了个函数,但在调用时,有时是正确的,有时是错误的(读出是0Xcccccccc),请各位帮我一下,不甚感激。
参考驱动方法
DP_InpD,DP_OutpD是2000下对IO口读写函数

  DWORD getiobase();

DWORD getiobase()
{
DWORD io_CF8;   // port 0xcf8
    DWORD io_CFC;   // port 0xcfc
DWORD IOBASE;
    io_CF8=0x80000000;   //because the first bit is enable/disable
    for(;;)              //so must be 1,so from 0x800000000
    {    
DP_OutpD(0xcf8,io_CF8);
        io_CFC=DP_InpD(0xcfc);

        if (io_CFC==0x905010b5)  //if =0xffffffff,then is a invalid
        {                        //bus number and device number
DP_OutpD(0xcf8,io_CF8+4*7);   //read DWORD
            IOBASE=DP_InpD(0xcfc);
// printf(\"Base Address Register=%lx\\n\",DP_InpD(0xcfc));
}
        io_CF8+=0x800;    

        if (io_CF8>=0x80FFFF00)    
break;
    }
return IOBASE;
}
dyxing2000
驱动小牛
驱动小牛
  • 注册日期2003-04-19
  • 最后登录2012-04-25
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望50点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-27 08:40
怎么没有人顶啊?
我会多给分的!
shjdriver
驱动牛犊
驱动牛犊
  • 注册日期2003-04-01
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望30点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-24 13:31
论坛有关于你的文章
AthlonxpX86
驱动小牛
驱动小牛
  • 注册日期2002-11-10
  • 最后登录2013-07-17
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望43点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-26 14:18
我想会不会是
E808 FF
E809 98
E80A FF
注意寄存器位数,一次读出两字节一般都会读出地址上连续的两个8位寄存器
AthlonxpX86(桃源村)
AthlonxpX86
驱动小牛
驱动小牛
  • 注册日期2002-11-10
  • 最后登录2013-07-17
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望43点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-26 14:21
抱歉上面回复错了
我觉得可能是你的DP_InpD有问题,我有个同样的软件帮忙测试一下,看看有没有类似的问题
http://www.driverdevelop.com/forum/html_71673.html?1088230271
AthlonxpX86(桃源村)
游客

返回顶部