|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!
3 @- A2 d' @! k5 ^. @% F m) C9 D( Q: j$ W& G( i4 Q; p3 H
有优化的方案:
. y, H) O5 i) R' h0 {$ x7 }+ K$ K A0 K- n' a/ ]
第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的4 s8 ^8 e u' h Z$ g
* Z" N# L6 [& ^; k1 o" V v( k其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
8 D( l3 F: L- K) V! O: t- ?+ f G# r. J) b+ |9 ^1 ^9 K
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描/ ?9 e) Q# h( m1 B
' \- x0 K7 g# |6 O. c4 z4 D1 f
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。4 j& Z8 ?0 g, ?, D+ s$ O7 C5 S
0 g+ m+ R9 @5 W否则该pci设备是single function的。0 X; [$ I3 R! h
- a4 R( W6 n5 g2 T- R" ^5 [5 C, P
基于上面两点,可以优化很不少的时间。
3 s5 ?6 H$ x+ r4 G6 i# U
; A. l4 g5 P4 ]/ Y 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
" K5 K& K, O# U a' W
) Y7 G3 @, S* {! H/ l+ p3 \ 以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|