|
|
发表于 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。
" |; t8 z/ }# l& a
. v6 X% b8 F- z6 H* d对一个想管理某种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).3 } P* _7 B, E) d
8 y) S- P# k5 y: b F9 Z! n
UEFI 规范中connect all controller的示例程序片断:+ ?: _0 N3 D. G; \
Status = gBS->LocateHandleBuffer (
" ?& w) V) P6 R+ P9 y AllHandles,
9 ]$ j! f# h m2 q" u* ~; O NULL,
+ u7 H- M. W) M NULL,! c* w' `& v7 H8 U5 S/ A
&HandleCount,
" Q7 h5 ?& r& {4 K% U- D &HandleBuffer9 b. _6 i) ?/ V) `' S" C: |% n' w
);
; @* I5 v) Y z) ?% \ if (EFI_ERROR (Status)) {; y/ ~& A5 L K) ?2 c
return Status;% ~) L' T7 J+ b
}
; V" a; }+ I( U* R) p2 e
9 z$ |, t8 s7 {1 s for (Index = 0; Index < HandleCount; Index++) {
y' L* d' g! `5 k. d Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);; X+ R' S+ g/ P0 ~9 L: p+ G& L) k( P
} |
|