|
|
发表于 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。. ^$ w5 m2 X/ R( D8 l9 K- ~' k
4 i9 F" M$ e M# [. U$ F* F& 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).7 v# w3 x% D9 U) }) Z* }: v
* ] y+ y9 Q6 I, C+ v9 f
UEFI 规范中connect all controller的示例程序片断:% W/ e8 G7 c0 {) f S
Status = gBS->LocateHandleBuffer (
+ E& ~' j) q" J6 }- e( h N AllHandles,
! n2 w6 K* i& y) R7 \$ D1 L* x NULL,
, _7 H0 ?+ g: h- [. m NULL,
% L! l+ b; Q! P &HandleCount,
+ y- k H, T# x &HandleBuffer7 g3 T8 V9 X" ?0 ~
);, w X5 J% v( A9 d
if (EFI_ERROR (Status)) {2 L9 v5 X" R2 }3 f2 ^
return Status;
4 \, K- C5 ]8 P0 k& ? A }
0 i1 M( C6 v7 P' j0 ?8 ~) Q8 \! U0 ^# B- \; K/ g* T
for (Index = 0; Index < HandleCount; Index++) {1 `* _+ c7 {4 Q4 h" z* [+ O; E
Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);, A, w3 U& c6 J4 G; {- {' M
} |
|