h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1954回复:10

Pci卡进入PowerDeviceD3电源状态后端口不再可用,麻烦

楼主#
更多 发布于:2002-12-27 11:30
pci驱动我实现了电源管理模块,可是进入PowerDeviceD3后pci卡的端口就不再可用,值全变成0xff,这时如果有中断产生,在isr里就无法清除中断状态端口,结果导致中断不断产生。
我想在isr里降低IRQL再调用PoSetPowerState,也失败了。现在的问题:

1、pci卡进入PowerDeviceD3状态后所有端口一定会不能再访问吗?不是的话,有什么解决的方法?
2、请教在isr里改变电源状态的方法(想在dpc里调用也失败了,因为无法清除中断端口,cpu根本没有时间执行dpc)

最新喜欢:

okincnokincn
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
wfeiisch
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-31 15:57
我也遇到了同样的问题,一旦电源进入D3状态,设备就不可访问!!

我试着在处理IO请求之前判断电源状态,监测到D3时,再次让设备进入D0状态,可是还是不能访问设备!!

如果你能解决此问题的话,不妨也告诉我一声,谢谢!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-31 17:35
我想可能是硬件的问题,现在只有去掉节省电源函数了,没办法
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
wfeiisch
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-01 15:34
你会不会出现死机的情况。我每次启动机器之后,都要重新安装一下驱动,否则就会大约在十分钟左右死机!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-02 08:30
可能是节能函数的问题,十分钟是你设置的进入睡眠状态的时限,进入睡眠就死机,干脆去掉它。

我猜的,你试一试,我没有死机的情况
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
wfeiisch
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-02 19:45
我今天仔细看了你的问题。
1,设备进入了d3状态,设备是不能被访问的!
2,你的设备进入到d3状态时,是什么原因造成的。如果是你认为
设定的话,那你可以把它设回d0,如果是系统进入休眠状态导致设备
进入d3的话,那要看设备是否支持唤醒功能,如果支持的话应该能通过某种方式唤醒系统!

我是我的一点理解不知道是否对你有点启发!!

我遇到的问题今天解决了!我禁止设备的空闲检测,就不会出现这样的问题了!
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-08 13:41
老哥,看看DDK关于电源的说明文章,D3是设备被关闭,当然不能被访问。ISR是不可重入的,如果你不退出来,他不会被再次调用。用PocallDriver可以发送电源IRP,白你的设备置成D0在清除。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-08 14:15
设备在d3下当然不能直接访问,但是我想不会所有的寄存器都不能访问,硬件不是我设计的,不太清楚。
pocalldriver早就调用过了,可是在isr里调用好像没用。
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-08 21:35
你要确保你对,pocalldriver的调用是正确的,比如说你用的是FDO而不是PDO.我告诉你个好方法,先把DDK里的pocalldriver的说明看一个小时在用,如果还不行,就是硬件的问题。虽然你能根据PCI协议更改硬件的电源状态,但是,系统的记录就会出错,所以不要这么做。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-08 21:43
pocalldriver调用肯定没问题,因为在deviceiocontrol里有调用电源管理的函数,工作正常。现在只是在isr里调用相同的函数却不正确。
在isr里已经临时降低irql到PASSIVE_LEVEL再调用,结果无效
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-08 21:49
如果你有两种情况的对比,可以跟踪一下pocalldriver的执行,就知道问题出在什么地方了,DDK也有不正确的,比如IoGetDeviceObjectPointer,它没有更详细的说明,其实它是得到设备的最上层指针,但是,在说明里体会不出来。可能pocalldriver有属于这种情况。
游客

返回顶部