|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!
' \+ O$ u7 b( ], k/ ?4 m' n9 y/ c1 M
有优化的方案:
1 W2 i# M, k2 t9 o0 N4 g5 Z
2 g! h8 }+ v2 w. J. j 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的' J# u: x0 f5 ~# K- x
9 p9 F5 F; S6 O) b4 ]
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。! ~6 n x$ j3 j- N; v7 d2 y
; Y7 V- d9 W, r- Z: A: U 第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描2 c$ p" V$ b$ K- `
" [/ d+ d i: K5 `
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
6 {+ f/ E6 [6 i1 F) V
0 a2 E7 t% Y( x7 U) _# q否则该pci设备是single function的。
: H" H/ C# D: \: n, r5 {. \& i; Y
! z2 D; P( N1 }/ V& R 基于上面两点,可以优化很不少的时间。. _/ L0 M8 m6 Y% i5 ~* T- }; M- s% @
. F, Q" u0 s4 B4 w" @1 r 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。9 n( i8 E- `6 a2 S# Z
. X; A I+ ]) |- x- Z1 ?! V/ |. } 以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|