|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!$ d V% S, A" X- b% Q! r
# P' s8 h! W% v' D1 d
有优化的方案:
; e5 x) v I. k# q# [" {7 n
2 O0 ]4 J0 M& M3 ~: h7 a2 k 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的5 G/ ^+ B2 j4 h
) ^6 A( J" m" X* j6 J, m
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。* l* K' ?0 _7 p* j3 C+ x
8 h) ]( `8 e. D' D4 d" j 第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描. |9 {/ y" J% B, ?/ `: C! K$ [; ?, f
! o7 r% T- ~* q n" S$ i一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
/ r' n- x5 ^% U* n: l. n! K
/ Z: A- j, O1 U7 e! g; K否则该pci设备是single function的。: `7 Q" g% b+ V( B& K$ b+ Z
- Q4 V+ q# S! I0 ^ 基于上面两点,可以优化很不少的时间。: }9 q, H d9 G1 G: J
4 U! _1 c% |( ~/ w) }6 ~" _
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。 l9 Y1 I' q) y+ W* D% X, d1 a; x- m
0 f+ [4 V2 j. H0 c
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|