|
|
发表于 2009-3-17 14:57:51
|
显示全部楼层
Driver Binding Protcol.support()用来支持将driver和要管理的device动态匹配起来,driver不能对传入的handle有任何假定,传入的handle有可能是device handle或者是和硬件无关的image handle和service handle。driver在support()函数中判断传入的handle是不是自己要管理的device的handle。
+ C% s9 Z5 u! G. w2 K
& I1 p( Q8 ?8 f0 `* o ?/ j) ]+ D p对一个想管理某种PCI device的driver来说传入的handle没有PCI IO Protocl是正常的。没有PCI IO Protcol说明这个handle不是PCI device handle,甚至根本就不是device handle。(PCI bus driver在enumeration的时候会有发现的每个PCI device创建一个device handle,并在此handle上安装PCI IO Protocol).
; L- ^( J4 e! H3 i# i& d6 w" U# A0 Y4 j1 m0 I, U: r. Z
UEFI 规范中connect all controller的示例程序片断:
0 |+ F" Z. C& }0 G: r: ]& Z# M Status = gBS->LocateHandleBuffer (1 p p* M9 H* p1 I' M& t# [
AllHandles,
# w3 p) z% F4 K NULL,
$ c, ~& q6 j) t. f% |, _ NULL,
# {* |$ l6 H; R* f+ w, [& y; o: N &HandleCount,( [8 N. C# G% j4 |
&HandleBuffer% _6 }6 z6 A1 a9 r
);
0 `, _; t( S# c1 @; T if (EFI_ERROR (Status)) {+ W$ o! ~' l7 r# h9 q7 U
return Status;
: b3 _( Q5 e5 A3 [6 s. k6 i1 Q- K }& U& C+ a+ G0 Z. h2 ?
9 |) m( D+ S3 J. C for (Index = 0; Index < HandleCount; Index++) {
. c( N" l/ e$ f+ W0 i Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);9 w: u- t* R( Z2 y q
} |
|