|
|
发表于 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。, Q5 U- B6 Y' g/ v0 n5 N/ N/ y r6 h* H# D
4 \( K7 k! _7 M" m% | H
对一个想管理某种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 W8 b* J8 G+ @
1 E' g. d4 @2 M& @UEFI 规范中connect all controller的示例程序片断:% |" [# D9 A2 z- Y! b
Status = gBS->LocateHandleBuffer (
. ?) z* ?' _8 v/ ~+ X AllHandles,
" E+ B: z" k! w2 X$ O8 {. p NULL,
! H# i4 I, t6 s7 t& k4 t NULL,
$ Q/ r& b5 N1 L) T: }8 Y1 f% _% @ &HandleCount,
, F8 @# W+ y" b3 X( J8 \) J8 F &HandleBuffer) E+ X4 ?- _( A- l
);$ {, ~9 D1 B; A, l$ q% E, r
if (EFI_ERROR (Status)) {6 G" z4 u- v+ X; S1 J
return Status;
5 M$ B3 F3 B" @" t, y% |0 e1 n }8 C% Y; A/ |; ^! Z6 k
; V% i0 N* w3 m/ e for (Index = 0; Index < HandleCount; Index++) {
+ ?) r7 E5 L/ |2 P& X) @ ?6 ?& a Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
+ O" L) t0 g0 F. B. v4 U } |
|