|
发表于 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。
N M) }8 R+ l# Q' ?" E" Q! }2 }5 S% J' L H
对一个想管理某种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).8 J1 ^6 f7 W! ^0 ]2 U
& h# T. H. E# n" @9 Y+ C- @UEFI 规范中connect all controller的示例程序片断: ]. ^# N0 ^: k4 m: S
Status = gBS->LocateHandleBuffer (
/ t* L* M, D: x1 E. o3 T+ e+ n AllHandles,
/ r! W1 J5 D% _: x NULL,' E; m2 q* o& q, ^. J
NULL," \& L- H: V4 P3 p$ C. [) ^
&HandleCount,! p* X: O T5 `& ~0 p3 V
&HandleBuffer( N0 d; X! F8 o6 \6 [( m
);& U% P1 F/ Q6 Q% J3 I& w
if (EFI_ERROR (Status)) {$ o( V U3 {# e. H
return Status;
0 s# K7 X( ~; E b }% O5 p8 ^( S/ A, S+ d/ b
# G; N3 o3 e9 w* V+ c& Y# A
for (Index = 0; Index < HandleCount; Index++) {
5 j$ t' O" k8 r! |3 N: c Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);( U2 N; ~# X- ?5 A! y, \6 J1 {
} |
|