|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!/ @5 s( D* ^; `( g+ C/ w9 d5 ~
) _" A6 W2 p$ S6 Z% U( S5 B 有优化的方案:5 V" K8 y4 i- _* q4 x' p
1 I: v0 |& c* O/ h+ d4 D 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的( k8 W! H5 Z" K8 v. ~1 c
$ B- ~: L' h0 g1 i6 v其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
3 n1 X! R% J, U3 U$ Y3 y9 Y" Q3 h7 |* m" j/ W" c2 a: g& ^; H" i. N
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描
' U/ M$ q0 l5 @ I! C: q8 t, a& U( x% U g) H# ~) ^ y& w
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
! r3 _9 J0 L1 W, L( J7 J+ I( ?8 |% T$ ^, ?% N& X' D
否则该pci设备是single function的。" m; v7 {) m6 C, H' g) m/ w4 b
& T- E* A4 y8 ]: B( o8 ]2 s8 _ 基于上面两点,可以优化很不少的时间。
& p1 C# T2 f7 s% [1 k/ [8 |0 i4 s$ M* H) W, `7 M
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
6 x7 S7 f5 n' E' s& ]" E4 _6 x G( \, Y. I
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|