19.6.77. LoadTable(从 XSDT 加载定义块)
语法 :
LoadTable ( SignatureString, OEMIDString, OEMTableIDString,
RootPathString, ParameterPathString, ParameterData ) => Boolean
参数
在 XSDT 中搜索满足以下条件的表:Signature 字段与 SignatureString 匹配,OEM ID 字段与 OEMIDString 匹配,并且 OEM Table ID 与 OEMTableIDString 匹配。所有比较都区分大小写。如果 SignatureString 超过四个字符,OEMIDString 超过六个字符,或者 OEMTableID 超过八个字符,则会生成运行时错误。OS 还可以根据数据库检查 OEM Table ID 和 Revision ID,以查找具有相同 OEM Table ID 的较新修订版定义块,并改为加载它。
RootPathString 指定定义块的根路径。它使用正常的作用域规则进行求值,假定 LoadTable 指令的作用域为当前作用域。新的定义块可以通过指定绝对名称或使用 Scope 运算符调整命名空间位置来覆盖此设置。如果未指定 RootPathString,则假定为 “"
如果指定了 ParameterPathString 和 ParameterData,则在将该表添加到命名空间之后,由 ParameterData 指定的数据对象将存储到由 ParameterPathString 指定的对象中。如果 ParameterPathString 的第一个字符是反斜杠(‘')或插入符(‘^’)字符,则对象的路径为 ParameterPathString。否则,其路径为 RootPathString.ParameterPathString。如果指定的对象不存在,则会生成运行时错误。
该操作的状态以布尔值返回。值为零(false)表示操作失败。任何其他值表示操作成功。
说明
执行从 XSDT 运行时加载定义块。LoadTable 引用的任何表都必须位于被 AddressRangeReserved 或 AddressRangeNVS 标记的内存中。
注意:OSPM 在初始化期间加载 DSDT 和所有 SSDT。因此,要通过 LoadTable 有条件加载的定义块必须包含不同于 “SSDT” 的签名。
加载定义块是一个同步操作。操作完成时,定义块已被加载。在加载期间,不会执行定义块中定义的控制方法。
示例 :
Store (LoadTable ("OEM1", "MYOEM", "TABLE1", "\\_SB.PCI0","MYD", Package () {0,"\\_SB.PCI0"}), Local0)
此操作将在 RSDT 或 XSDT 中搜索一个具有签名 “OEM1”、OEM ID 为 “MYOEM” 且表 ID 为 “TABLE1” 的表。如果未找到,它将把 Zero 存储到 Local0 中。否则,它将把一个包含 0 和 “\_SB.PCI0” 的包存储到 \_SB.PCI0.MYD 处的变量中。