|
|
发表于 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。/ g$ l( t' W7 M9 K& C& v
& u4 ?1 I3 Y, E4 j6 M' 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)./ `) y: G9 B. q2 ~1 C. |
. U' C5 ?7 @8 n7 O8 V) ~) b
UEFI 规范中connect all controller的示例程序片断:
1 C% D+ @/ R/ O Status = gBS->LocateHandleBuffer (
! P: p) D4 `4 z. v9 H6 p AllHandles,4 ?" |( @8 `% d
NULL,
2 Y8 _4 H j) n0 b9 c NULL,
' f( v, N7 B" ^$ N4 K% O5 U &HandleCount,
6 E! y( t0 A9 s- C3 D! H &HandleBuffer
$ i0 t$ N! q- ~5 y& V: X& L" ] );; }; z) x" J( Y
if (EFI_ERROR (Status)) {
5 Q* p' H) N6 y! }# g/ c- f6 G* F return Status;
4 c; ^+ i' M' J% q- T- Q& s6 m }* @6 o: R# ^' S1 o
. B9 c0 ]6 V# t9 c! z for (Index = 0; Index < HandleCount; Index++) {/ |* a; J/ |* g, C& N; ~
Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);* p8 ~1 @6 d( Z
} |
|