|
发表于 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。- X" a9 h7 V% ?: L: v S5 n* _' E
, l( x9 z; ~7 t
对一个想管理某种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).
! _9 X E4 w! K3 ~4 f/ E1 m6 k# i8 G
UEFI 规范中connect all controller的示例程序片断:
: c# F) O* i% C+ }& H2 `3 F) J/ Z Status = gBS->LocateHandleBuffer (
& K k k+ z/ s. x- r AllHandles,5 t( z/ L, u1 _6 g* b
NULL,, |7 K7 m, h* N h% H9 ?
NULL,6 }4 {# Y4 x; S7 V' C$ G
&HandleCount,1 a8 w, I4 ^2 a+ w
&HandleBuffer* M d h5 x0 W9 y1 l
);, Z# |/ x% H$ c
if (EFI_ERROR (Status)) {: o0 Y6 p: ^ u( `
return Status;. o5 z5 q: w) i; N' A! M+ e
}
; Y m. d" S! x7 n N/ W- O( \ X6 j5 g" | o E
for (Index = 0; Index < HandleCount; Index++) {6 H( |; D2 E; E" X+ I* V
Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);3 b" z; Z0 H! |+ i0 }4 q4 R
} |
|