|
|
发表于 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。7 \/ R. ^5 u+ r$ h$ k9 N2 r
6 w0 V8 M6 i* W1 v对一个想管理某种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).; W& `6 ~: U; v K5 R
: b! \& A- V6 X- E: I" ?6 Q5 d
UEFI 规范中connect all controller的示例程序片断:
0 _7 h0 W- [ e6 Y7 ]+ [ Status = gBS->LocateHandleBuffer (
( n2 N( C6 s3 m: @1 y AllHandles,& J% W, G7 ], c1 w4 K0 K; z
NULL,1 X& X1 v0 e3 d) P3 m
NULL,
7 U7 t3 c2 M. j2 }1 F. e5 T4 E &HandleCount,
( b" T( g! {6 |9 T/ j* F3 i &HandleBuffer% S8 q/ m) r! S' ]2 q; z' Q
);. J8 b5 u; ^) |
if (EFI_ERROR (Status)) {
: G) m# d/ `0 Q. s return Status;8 `" {6 q( e! y$ q/ U+ f. g8 w
} C( k5 Q- l( d! {
1 @1 W1 j# k( \/ Z% }
for (Index = 0; Index < HandleCount; Index++) {
! ^% x7 R3 b* A9 B7 A4 D' C) Y Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
k* o v3 b+ ~ } |
|