|
|
发表于 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。
3 W& G u8 _6 T, Z6 L3 V+ D, j# r% w, Y
对一个想管理某种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).4 Z: u& ]$ Q: [
; y K7 P" q8 i
UEFI 规范中connect all controller的示例程序片断:9 A n* W) r6 z) I4 ~) b' b3 e, y
Status = gBS->LocateHandleBuffer (" \% z. b7 e) L4 c, P( m
AllHandles,
& f" [. g. s9 d: V* Y0 f6 \ NULL,
1 W* x4 E! f- }8 T7 H% R! l NULL,
" J$ p4 N* H- F) Z. f &HandleCount,( }3 x. s/ R/ j% w
&HandleBuffer
9 {# a* v: L9 p, o7 c' a9 Q );
3 Y0 `1 z6 U ] {4 F if (EFI_ERROR (Status)) {8 ^$ h, U5 P$ p5 n+ c
return Status;# k7 E, F; U- c% y1 J
}/ W- A, B* l% h2 T k
- A0 o: K2 ?% v1 @ for (Index = 0; Index < HandleCount; Index++) {
& h# ?9 `1 ]6 s% H- s+ k& Y Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);1 ?1 B* e4 J6 {: q& I E7 [
} |
|