|
|
发表于 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。
- o7 Z) p5 @) D& `! o8 y" N
0 X' S& q) R$ C( F, U! p9 _! N8 |对一个想管理某种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).
1 [5 D% c7 M, u9 K# O
$ a- b9 `4 O2 UUEFI 规范中connect all controller的示例程序片断:" x5 h m' J+ k9 }9 G' ^# |
Status = gBS->LocateHandleBuffer (0 \$ A6 ~) f2 p& U
AllHandles,
& R/ O" T a& ]6 P& X0 \ NULL,
! t/ {9 b- m: S! R P0 C( ~' ~ L, G/ r NULL,: C9 ?# Y, A5 t, F& B
&HandleCount," S2 S7 R4 _8 X1 @$ y4 H! b
&HandleBuffer0 G5 Y- E! s4 ?. r% y
);
, v" _ f% f4 D5 l/ H) G/ t if (EFI_ERROR (Status)) {
* `, Q1 V* X4 ?+ Q: w3 a return Status;
$ j7 d; u1 l' m* p3 n }
* U; Q; J; {, Z! B
" f6 x5 P& @" B# j+ \: l# ?0 _ for (Index = 0; Index < HandleCount; Index++) {
. _7 Q/ Y5 X$ o. Q5 I) L/ m Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
; C! r: e9 G- }: j! @ } |
|