|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!
9 g6 C0 Y& j, @% h" R6 g, y" \4 k7 J- K- W4 u
有优化的方案:
6 g+ V o) E- x3 n5 I" @
; G- ~8 U5 ^. S( _6 K 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的
# p) s9 D# [- J. t1 P! g! r& H+ e) t# s- h& V7 B* k6 y
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
8 H) |1 `. n. [+ U R9 O
. Y' l# }7 N7 W) D 第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描8 h2 _. n; E* j1 K1 c5 h
: X3 l2 T6 [0 F0 C) [1 o& a, ^2 ^
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
/ k2 k: Q5 d$ i0 H& [0 d0 c' V0 h$ I! Q* E
否则该pci设备是single function的。7 l0 b7 p5 ]) a; n$ D* L
* e- @" i7 B) c. \ 基于上面两点,可以优化很不少的时间。4 {" P. B+ I& Y, t
: T3 _; ?; X* J7 g2 R0 P' T; x, O 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
, h" M* Y( J6 S8 J+ u6 i5 e
6 A R4 U( [' v2 a 以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|