|
|
发表于 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。. \( ?4 s2 w4 E
+ S' _) H' |% j& h4 Y3 `对一个想管理某种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).
' _( @1 z5 e5 w* B4 p1 S5 B" K3 P# }! A* _1 W3 j- M
UEFI 规范中connect all controller的示例程序片断:8 \* ?9 \ r/ j: z0 Y6 [+ H
Status = gBS->LocateHandleBuffer (# Y/ T' h! A' |$ @
AllHandles,
! W9 D0 W( j. K1 d3 Q6 v! N NULL,3 i" l) c9 O) K% M5 j& ]
NULL,/ J8 f. i! w5 @( q- I
&HandleCount,
% {/ [. _" I% j' L$ C: u! n; t7 \ &HandleBuffer
8 g! y5 t3 a- W( d/ b );
) F9 n; M M1 ]3 d if (EFI_ERROR (Status)) {$ Y F P* \ _7 ]/ g- q4 g
return Status;& X7 ]" M; Q2 o+ u1 ]; B$ @% }3 x+ _' x
}
$ e$ q$ Q3 U: H. W& z; `% k* u! e# O+ m- p, r. _
for (Index = 0; Index < HandleCount; Index++) {
) D4 m! K9 Y+ ~, a/ r! y Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);$ {! M8 H, B) `/ Z
} |
|