|
发表于 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。
" }1 I% t! Q5 q3 i, {8 O& ?- e+ @5 e! s
对一个想管理某种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).
$ L+ R" |' x/ ^/ p3 ]+ ]/ _: s% k' y/ P- t$ v! ?: |
UEFI 规范中connect all controller的示例程序片断:5 b& H8 j3 h1 y
Status = gBS->LocateHandleBuffer (
9 \ u9 E/ R% H6 J+ q( F) J$ ]$ p' _ AllHandles,
5 K' |) D( L3 \+ w NULL,
7 ^* C/ g$ h" Z- b8 j NULL,% I/ t$ Y6 W- g1 k8 M7 N
&HandleCount,
- A& C, C: G$ {3 }+ U &HandleBuffer
1 R/ c! l, N+ U7 G% V& w4 C1 s# e );
& @4 _5 F U7 h; B$ Q: Q if (EFI_ERROR (Status)) {7 }5 t' `; r8 b" U( |2 U6 k
return Status;; J' d1 _4 B% T! \& H: T3 A
}0 E2 k1 x) M+ n1 o! ^
" r( _/ c6 e! |% u7 E# {
for (Index = 0; Index < HandleCount; Index++) {! K2 z( [# u4 {7 _: J
Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
q% n! t, j, `: {" G6 h( ~ } |
|