|
|
发表于 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。6 A7 T( r, o) \$ |6 M# v- J- H
5 X8 `2 `! J; ~ C) T# J* |
对一个想管理某种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).
; p5 E5 r/ i* \# N
1 X6 U% Z$ M+ K6 Z* x0 d4 HUEFI 规范中connect all controller的示例程序片断:) `( o" W- o& L" Z: u
Status = gBS->LocateHandleBuffer (
+ P. K1 L: ?; C8 \ AllHandles,* u: S/ j! u; f, M0 K
NULL,& l! m7 _# U m1 Y' z# F. B
NULL,
2 v" Y% p( i8 I- |# Y& O3 S &HandleCount,7 ^& F' {& x% O0 H$ T
&HandleBuffer3 T! w8 u9 O$ y( p4 ?" [# f! ~" J
);
/ j6 y# `$ K% c7 o if (EFI_ERROR (Status)) {
1 K5 w1 J$ T' G return Status;: L2 l8 a- q+ F$ l+ f) \; V0 N' t" L
}" b; l* R, ]4 {
6 A7 S. u$ u! m. U2 a# I for (Index = 0; Index < HandleCount; Index++) {
0 D/ c: v; m8 s: d" J6 d6 ` Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);5 w! _3 V8 o: O
} |
|