|
|
发表于 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。- R3 w% s f- ?4 I% }+ P# a. W
' H2 w* M# ?% x* R
对一个想管理某种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)." u% U6 Y2 Y( _, S4 Y
. m. h; L7 G( `& K# c: ]! a- c
UEFI 规范中connect all controller的示例程序片断:6 i( n- a0 |# c) k6 Q0 E8 z/ m
Status = gBS->LocateHandleBuffer (. C9 z4 `' v$ L5 J8 y9 X
AllHandles," g- f3 K4 ?' \9 c' u# P U' r: f
NULL,4 n4 o5 M: z+ x6 F0 }- k z
NULL,& i% E/ _3 V" c7 P
&HandleCount,) b4 P% u2 V: i+ p3 `
&HandleBuffer
' f- e0 K$ h2 ~, @ );
+ U: x3 A( x: D% j. A; Q if (EFI_ERROR (Status)) {1 A( M8 d2 p; o7 T; Z
return Status;
0 \) n8 M$ p3 O( N4 F5 j }; I" ~; }, L0 ]% d
: [* E. R( \. N/ I; X' q( n* y for (Index = 0; Index < HandleCount; Index++) {
* ~1 M% k% `0 r4 f7 g Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
0 g; M% T) P! Q: d' X8 E } |
|