|
|
发表于 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。
% i" @8 @, ~; t3 n+ L x0 U) J1 H4 k0 K. b- n, |- k
对一个想管理某种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).
J7 S7 R j$ z4 P4 J
5 D3 E0 {% m; w$ [) FUEFI 规范中connect all controller的示例程序片断:6 l$ I. s/ G& @2 i, x" j3 Q
Status = gBS->LocateHandleBuffer (5 j) B3 B/ c4 k
AllHandles,
* T' z1 D: O" V2 y- M NULL,
/ ?. g Z/ n+ R$ M4 { NULL,
; M+ ]5 L7 D+ w' [5 k! _) s5 P &HandleCount,/ w" }! Z ^8 H: |
&HandleBuffer
: ?7 J( {1 R# P1 J) O! x. a );5 ~2 t( q% P: \7 U* L
if (EFI_ERROR (Status)) {+ f( H% H3 ~$ S. x& \3 ^# G
return Status;
7 j1 L; ]" r. d# H }
. v; r4 B, f8 |- [4 \' Y. }$ f: }+ j6 `9 y9 ^8 L
for (Index = 0; Index < HandleCount; Index++) {7 ]" b& J( b" J& K) d1 _
Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
0 n$ n1 }- L( ^1 g" H } |
|