找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 14413|回复: 5

关于PCI Device scan 的一点优化

[复制链接]
发表于 2008-12-19 10:57:34 | 显示全部楼层 |阅读模式
理论上在扫描PCI 设备的时候我们大可用  3个loops来做就可以了。但是这里有很大的弊端!, e/ Y+ A7 d3 @* x; I7 N% _
) O, N2 o/ G' B- c
     有优化的方案:
0 m3 c3 C# h3 A( {9 E) O! o
; @. [) ~9 G3 _8 h% D     第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的7 p" x9 I3 N2 H) A8 d& W2 p# O( n6 q
- \/ h* t4 q8 O" P- A
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
* U! f  ~. y# V4 o3 }' u
2 O# w5 l! w+ I0 M6 x* m     第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描* p/ S: o' o- p

$ J1 Y/ t3 K9 }% U- E- M+ {1 ~: d, t! g一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
0 w! P) W, \2 `7 I. b  f" _8 s( j. d% c- ~& P) Y5 z/ K! A
否则该pci设备是single  function的。
  d, `" y* k! a8 f3 H. r# J6 Z9 i: a& S
      基于上面两点,可以优化很不少的时间。" p( d6 c' u' b8 `; V, W
+ V1 C; W) {# v) D) j- T6 o
      以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
8 L" R' j. }0 t) [. h& c4 Y% M+ ?; o5 I/ m
       以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不?
发表于 2008-12-19 12:59:22 | 显示全部楼层
你是dos下嗎?! M% F+ ?/ I$ y3 ^) X/ A$ r3 }0 Q
9 R! z. t$ Q0 Y4 g0 G
有没有哪位大侠,介绍一下,怎样在xp, vsta下 scan pci, mem , access io port,我很希望自己能" a5 r5 B* i  ?6 i
做一个功能同se.exe那样的东西 1 z& e4 f* k6 M" S
谢谢!!
回复

使用道具 举报

 楼主| 发表于 2008-12-19 15:04:18 | 显示全部楼层
恩,我一直是在纯DOS下做的。至于XP或者 VISTA下,我没有做过。
回复

使用道具 举报

发表于 2008-12-19 18:20:35 | 显示全部楼层
原帖由 weednet 于 2008-12-19 12:59 发表 0 d" Y- X2 W( B! N8 g
你是dos下嗎?
0 D& z) c# k9 b1 q: d
: G! ^* L9 B7 s/ c7 `; b有没有哪位大侠,介绍一下,怎样在xp, vsta下 scan pci, mem , access io port,我很希望自己能( C+ @$ F0 C* X4 @. T# t1 p
做一个功能同se.exe那样的东西 8 M! O9 c7 F' S; |- C9 y
谢谢!!

% i  O! {" h8 {, ?9 P
" Q# D4 }8 [3 w+ e$ P我自己写了一个驱动,现在在X86/X64读IO MEM CPU的MSR之类的都OK。配套的Library基本函数都写完了,但是有些高级一点的function要加,所以目前不发布出来。
回复

使用道具 举报

发表于 2008-12-22 11:37:52 | 显示全部楼层
Dear freevanx,
2 p+ g' O; Q* [# i; @" c+ P “我自己写了一个驱动,现在在X86/X64读IO MEM CPU的MSR之类的都OK。配套的Library基本函数都写完了,但是有些高级一点的function要加,所以目前不发布出来”4 E: w, m% x# i: s
   能介绍一下,需要用到那些工具,有哪些参考资料吗? 分享一下经验
回复

使用道具 举报

发表于 2008-12-23 09:37:12 | 显示全部楼层
原帖由 weednet 于 2008-12-22 11:37 发表
) ]3 k( }' @( ]# p0 z; @Dear freevanx,# z) d: W; k. s9 X3 O
“我自己写了一个驱动,现在在X86/X64读IO MEM CPU的MSR之类的都OK。配套的Library基本函数都写完了,但是有些高级一点的function要加,所以目前不发布出来”) t" B6 P) `9 y. I5 p
   能介绍一下,需要用到那些工具,有哪些参考资 ...

' E2 `) o9 g+ ~: l! w1 U& G% |8 g) Z7 ~- R$ m1 K# y+ B! Y/ u
WDK,里面有个portIO的sample,基本参考那个就OK。一些细节上的代码要自己组织,另外要熟悉User library的写法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-9-21 21:54 , Processed in 0.149726 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表