PPI Services

下面这些services 为PPI database 提供了接口的集合:就是说,所有的操作都是基于PPI database的

InstallPpi()

ReinstallPpi()

LocatePpi()

NotifyPpi()


InstallPpi()

小节

这个是由PEI Foundation提供的第一个service.它通过 GUID 向PPI database 中安装一个接口(interface),

这个service的目的就是公布一个interface 以方便其他的部分可以调用额外的PEIM.

原型
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_INSTALL_PPI) (
IN CONST EFI_PEI_SERVICES			**PeiServices,
IN CONST EFI_PEI_PPI_DESCRIPTOR 	*PpiList
);
</pre>参数<p></p><p>PeiServices</p><p><span style="white-space:pre"></span>一个指向EFI_PEI_SERVICES表的间接指针,这个表由PEI Foundation published,不知道翻译成什么</p><p>原文 是  An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.</p><p>PpiList</p><p><span style="white-space:pre">	</span>一个指向将会被安装的interface 列表的指针</p><p>这个service 使得peim 可以向PEI Foundation, PEI Foundation 维护指向列表的指针而不是整个list,</p><p>这个list 要么是peim 本体要么是分配在临时或者永久内存中的。</p><p>有两种类型的EFI_PEI_PPI_DESCRIPTOR 可以被安装,包括</p><p>EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH 和 EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK.</p><p>返回的状态码</p><p><table border="1" width="400" cellspacing="1" cellpadding="1"><tbody><tr><td>EFI_SUCCESS<span style="white-space:pre">		</span></td><td>the interface was successfully installed.</td></tr><tr><td>EFI_INVALID_PARAMETER<span style="white-space:pre">	</span></td><td>The PpiList pointer is NULL</td></tr><tr><td>EFI_INVALID_PARAMETER<span style="white-space:pre">	</span></td><td>Any of the PEI PPI descriptors in the list do not have the EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field.</td></tr><tr><td>EFI_OUT_OF_RESOURCES</td><td>There is no additional space in the PPI database.</td></tr></tbody></table>ReinstallPpi()</p><p>这个函数通过GUID重新安装一个interface,这个service的目的是publish一个Interfere,使得别的部分</p><p>可以替换interface.</p><p></p><p>原型</p><p><pre name="code" class="cpp">typedef
EFI_STATUS
(EFIAPI *EFI_PEI_REINSTALL_PPI) (
IN CONST EFI_PEI_SERVICES 			**PeiServices,
IN CONST EFI_PEI_PPI_DESCRIPTOR		*OldPpi,
IN CONST EFI_PEI_PPI_DESCRIPTOR		*NewPpi
);

参数

PeiServices

一个由PEI Foundation publish的指向EFI_PEI_SERVICES 表

OldPpi

  database中一个指向先前PPI 的指针。

NewPpi

一个指向新的将会被安装的interface的指针


描述

这个service 使得PEIM 在ppi database 里面使用另外一个entry 替换一个entry.


返回的状态码

EFI_SUCCESSthe interface was successfully installed
EFI_INVALID_PARAMETER The Oldppi or NewPpi pointer is NULL
EFI_INVALID_PARAMETER Any of the PEI PPI descriptors in the list do not have the
EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field
EFI_OUT_OF_RESOURCES There is no additional space in the PPI database.
EFI_NOT_FOUND The PPI for which the reinstallation was requested has not been installed.

LocatePpi()

这个函数使用GUID 在 PEI PPI database 中找一个interface.

原型

typedef
EFI_STATUS
(EFIAPI *EFI_PEI_LOCATE_PPI) (
IN CONST EFI_PEI_SERVICES	**PeiServices,
IN CONST EFI_GUID        	*Guid,
IN UINTN	                Instance,
IN OUT EFI_PEI_PPI_DESCRIPTOR	**PpiDescriptor OPTIONAL,
IN OUT VOID						**Ppi
);



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值