|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!) C/ h9 l' F2 i$ P' t& t; s
5 O' u* |& O1 H8 I) E) p2 L 有优化的方案:
; Q' O/ \5 ^1 |- e; M' _
% V7 c% \2 l, S; j6 c* | 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的# r4 }- \. U6 ~/ }3 [
- Y) Z/ p% l$ }7 C/ F其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。2 k2 S; z5 e6 b1 j- z* k& f) J
1 T, N: |0 J: {: k8 @3 d+ Q 第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描2 R R! `3 D, _8 P- T' M
5 Z( k. M: |+ B" i/ a- b }+ T+ o一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。" J0 \ t. n, r* }# Q
9 c# A9 | y+ R' w& Q
否则该pci设备是single function的。
" ]# s* A: a! Q8 U+ ]$ _9 S
/ @, L2 q4 i6 v1 I- {+ O5 M 基于上面两点,可以优化很不少的时间。% v! S5 w. D7 P5 M
9 ]) y% N) S$ Y+ I, i
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
! Y' v) ?/ |# Q: _7 l8 b" r- r4 r) O
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|