brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1638回复:5

pci硬件状态检测(分)

楼主#
更多 发布于:2002-06-07 14:52
在驱动中如何判断pci硬件是否正常?要读哪个寄存器?
我是这样做的(用ds):测试程序发出ioctl:TS_IOCTL_HW_CHECK
驱动中:
  NTSTATUS status = STATUS_SUCCESS;
  t << \"Entering TsDevice::TS_IOCTL_HW_CHECK_Handler, \" << I << EOL;
   I.Information() = 0;
   if((I.IoctlBuffer())==NULL){
      t<<\"wrong parameters of TS_IOCTL_HW_CHECK\\n\";
      status=STATUS_INVALID_PARAMETER;
      return status;
   }
   m_cfg.WriteBaseAddress(0,0XFFFFFFFF);
      //m_cfg是KPciConfiguration的实例。
   ULONG baseadd=(m_cfg.ReadBaseAddress(0));
   if(!(baseadd&0x00000001)){
strcpy(PCHAR(I.IoctlBuffer()),\"ERROR!\");
t<<\"the configration isn\'t valid\";
I.Information()=strlen(\"ERROR!\");
    }//卡是io空间映射的。
    else{
       baseadd&= 0xFFFFFFFC;
       ULONG name = READ_PORT_ULONG(PULONG(baseadd+MCSR));
       //mcsr是s5933的状态寄存器偏移值。
       *(PULONG(I.IoctlBuffer()))=name;
       I.Information()=sizeof(ULONG);
    }
  return status;

资料上说,5933的mcsr寄存器的加电检测值应该是000000C6,可我得到的总是FFFFFFFF,谁能告诉我是为什么?我的配置空间基址算法有没有错误?
我的基本功很差,大家不要笑。

[编辑 -  6/7/02 by  brucezh]

最新喜欢:

mapoflmapofl
打一枪……换个地方……再打一枪……
brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-07 15:48
最重要的是我对配置空间的理解对不对。
打一枪……换个地方……再打一枪……
brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-10 08:30
怎么没有人指点一下?难道大家都认为不值一笑吗?
我要问的就是,配置空间基址取出来后可以直接用来加上偏移值计算各寄存器的地址吗,要不要进行一些处理?
打一枪……换个地方……再打一枪……
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-06-10 18:03
用户被禁言,该主题自动屏蔽!
brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-11 08:18
安装是正常的。在设备管理器中显示没什么错误。
只是我得不到正确的io地址。
打一枪……换个地方……再打一枪……
brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-11 09:46
问题解决了。
基址寄存器中存储的是系统再分配的地址,直接读出就对了。我向其中写入全1再读取就只能读出卡上硬件要求实现的空间范围,也就是说,这个值只能用来计算地址空间大小,跟地址没什么关系。

还是给大家加分,请以后多多指点。
打一枪……换个地方……再打一枪……
游客

返回顶部