|
|
发表于 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。
/ P$ E& ~+ ?7 \/ `4 [" H( H7 M
: w) x$ x4 ^0 W' U' |/ B! U对一个想管理某种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).# h4 T+ `5 b- Q0 T& a
% s( [% t- m( s! yUEFI 规范中connect all controller的示例程序片断:
0 g; }8 g: `# X @2 A j/ M8 x! J Status = gBS->LocateHandleBuffer (6 n+ o& Q% S" n$ x1 m: C9 _
AllHandles,
2 a# G r$ Q6 n NULL,
( n7 _9 G) _, @! @ NULL,3 E; z. c( m- m% R$ _
&HandleCount,# b5 J9 y; H z9 F
&HandleBuffer
j% ~2 a# W! |8 e* J% n- S );
1 z! {( I0 {" I1 }2 |% A& V# B if (EFI_ERROR (Status)) {1 r2 C' H% O$ y* ^6 u3 e% g% k
return Status;: ]' x. y& j: l! M9 s
}5 G$ e. e7 f' Y9 f* F4 W
* c( W# \6 g9 K( m, T for (Index = 0; Index < HandleCount; Index++) {
; ]3 T# k* {' k; G% I Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
$ u+ }5 A# P) M, `. o7 w2 d8 ^ } |
|