HII 小节

HII 对大部分工程师可能比较陌生,因为是纯软件的概念。

先解释一下package 是什么

HII 数据库协议 是以包列表(package list) 为单位管理HII相关的数据结构。

目前支持的包类型有:

//
// A package list can contain only one or less than one device path package.
// This rule also applies to image package since ImageId can not be duplicate.
//
typedef struct _HII_DATABASE_PACKAGE_LIST_INSTANCE {
  EFI_HII_PACKAGE_LIST_HEADER           PackageListHdr;
  LIST_ENTRY                            GuidPkgHdr;
  LIST_ENTRY                            FormPkgHdr;
  LIST_ENTRY                            KeyboardLayoutHdr;
  LIST_ENTRY                            StringPkgHdr;
  LIST_ENTRY                            FontPkgHdr;
  HII_IMAGE_PACKAGE_INSTANCE            *ImagePkg;
  LIST_ENTRY                            SimpleFontPkgHdr;
  UINT8                                 *DevicePathPkg;
} HII_DATABASE_PACKAGE_LIST_INSTANCE;

说人话就是 字体包,简单字体包 ,字符串包, 映像包, 设备路径包, 键盘布局包,表格包。

hii package list 是build time 产生的数据,里面包含formset 的声明(IFR),通过InstallPackageList

可以将driver 制作的formset 安装的hii database

然后就可以使用sendform 这个函数去画出某个formset.

如果要更新数据库就要使用

  Status = mHiiDb->RemovePackageList ( mHiiDb, mHiiHandle );
  Status = mHiiDb->NewPackageList ( mHiiDb, NewPackageList, mHiiDriverHandle, &mHiiHandle );

他们必须成对出现。

安装的时候,会触发callback 函数。

所有callback 函数都是由第一个图中的RegisterPackageNotify去注册的。

任何driver 都可以通过调用RegisterPackageNofity去安装callback. 至此,这个协议中的三个关键函数就关联起来了。

猜你喜欢

转载自blog.csdn.net/robinsongsog/article/details/104547338