|
|
发表于 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。
! }0 @* ?6 R$ q8 @3 n6 e) o$ L1 g: t1 O$ q$ N4 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).
* O' l h: H I6 T$ d+ y8 K1 S) i
) \, u* h% H8 v' B7 MUEFI 规范中connect all controller的示例程序片断:2 H" ]# D; W ~, @( P. t- @
Status = gBS->LocateHandleBuffer (' Z% J, o. X Y. ^9 n
AllHandles,
; h0 L2 s. l% n5 f NULL,4 {* b( F j# \" H0 _
NULL,
+ s4 g" Q t$ ?4 l- J* Z &HandleCount,
: a( e; m1 T5 K &HandleBuffer
5 A: }! A- ]* w );
3 [0 W3 |( E3 \9 q; q/ R if (EFI_ERROR (Status)) {
A# B8 v1 d9 Q! ^/ u7 P" X0 Q- w return Status;
& \! C" ?. E' N0 H8 v5 r8 [2 N6 Y }, l6 S" S9 r- \/ c
( p7 h+ n. @3 M: f for (Index = 0; Index < HandleCount; Index++) {
; @" c5 E* g5 ~. ` Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);9 D. ^. A7 ]7 m8 E8 S* d
} |
|