19.6.120. Scope(打开命名作用域)
语法 :
Scope (Location) {ObjectList}
参数
为一组对象打开并分配一个基础命名空间作用域。在该作用域内定义的所有对象名称都相对于 Location 创建。请注意,Location 不必位于外围作用域之下,而是可以引用命名空间中的任何位置。Scope 术语本身不创建对象,而仅在命名空间中定位对象;实际对象由其他 ASL 术语创建。
说明
Location 所引用的对象必须已存在于命名空间中,并且必须是以下具有相关命名空间作用域的对象类型之一:
预定义作用域,例如:(root), _SB, GPE, _PR, _TZ, 等。
Device
Processor
Thermal Zone
Power Resource
Scope 术语会将当前命名空间位置更改为现有的 Location。这将导致 TermList 中定义的对象相对于命名空间中的这个新位置创建。
对象列表被编码为 TermList,因此并非描述一个静态对象列表,而是可以根据系统设置描述一个动态对象列表。参见“定义块加载 。
注意
在创建次级 SSDT 时,通常需要使用 Scope 运算符来更改命名空间位置,以便在主 DSDT 已定义的命名空间某个部分内创建对象。请使用 External 运算符声明该作用域位置,这样 ASL 编译器就不会因 Location 未定义而发出错误。*
示例
下面的 ASL 代码示例使用了 Scope 运算符并创建了多个对象:
Scope (\PCI0)
{
Name (X, 3)
Scope (\)
{
Method (RQ) {Return (0)}
}
Name (^Y, 4)
}
所创建的对象会按如下所示放置在 ACPI 命名空间中:
\\PCI0.X
\\RQ
\\Y
下面的示例展示了在 SSDT 中将 External 与 Scope 结合使用:
DefinitionBlock ("ssdt.aml", "SSDT", 2, "X", "Y", 0x00000001)
{
External (\_SB.PCI0, DeviceObj)
Scope (\_SB.PCI0)
{
}
}