|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!; h8 P' L' C: d' d/ G5 S, z
) U; ?; p/ _! ]3 p+ P 有优化的方案:$ x2 K6 n j2 A Z% t
$ r/ t2 C% A. ~9 _7 }! y 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的
, v( v. [3 g" X
( Z3 p+ N& u: L其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。" p1 K) F' d$ C4 i/ @1 k) J. _2 h
7 c6 A/ n# e! l4 R, E, a# G. V
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描; M- n; C: Z* S5 [
) F, F0 H2 h4 m$ Y e A
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
1 V/ ~, l1 t `$ a% {5 j+ |& J8 R7 e& `
否则该pci设备是single function的。
' z% a2 b* e3 K. E+ j6 i, o
0 ?3 r% e3 a8 S' V 基于上面两点,可以优化很不少的时间。& ?1 n' L; t+ _$ A+ q/ T
2 c7 h5 a! m8 Y: e6 b( ~ y
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。# o2 ~" X7 l# ^3 ^0 O: h7 G
5 h8 g+ A8 }& e- h! J# P. ~5 u1 R; \$ K 以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|