19.3.3. ASL 资源模板
ASL 包含一些用于创建资源描述符的宏。ResourceTemplate 宏创建一个 Buffer,其中可以列出资源描述符宏。ResourceTemplate 宏会自动生成 End 描述符并计算资源模板的校验和。ResourceTemplate 宏的格式如下:
ResourceTemplate ()
{
// List of resource macros
}
以下示例展示了如何使用这些宏来创建一个可由 _PRS 控制方法返回的资源模板:
Name (PRS0, ResourceTemplate ()
{
StartDependentFn (1, 1)
{
IRQ (Level, ActiveLow, Shared) {10, 11}
DMA (TypeF, NotBusMaster, Transfer16) {4}
IO (Decode16, 0x1000, 0x2000, 0, 0x100)
IO (Decode16, 0x5000, 0x6000, 0, 0x100, IO1)
}
StartDependentFn (1, 1)
{
IRQ (Level, ActiveLow, Shared) {}
DMA (TypeF, NotBusMaster, Transfer16){5}
IO (Decode16, 0x3000, 0x4000, 0, 0x100)
IO (Decode16, 0x5000, 0x6000, 0, 0x100, IO2)
}
EndDependentFn ()
})
有时,有必要在运行时更改现有资源模板中某个描述符的参数(即在方法执行期间)。为便于此操作,描述符宏可选择性地包含名称声明,以便后续引用该描述符。当使用描述符声明名称时,ASL 编译器会自动在给定名称下创建字段名,以引用描述符中的各个字段。
对资源描述符字段名的引用所返回的偏移量,要么以字节为单位(对于 8、16、32 和 64 位字段宽度),要么以位为单位(对于所有其他字段宽度)。在所有情况下,返回的偏移量都是该名称相对于父资源模板第一个字节(偏移量 0)的整数偏移量(以字节或位为单位)。
例如,给定上述资源模板,以下代码会更改名为 IO2 的 I/O 描述符的最小和最大地址:
CreateWordField (PRS0, IO2._MIN, IMIN)
Store (0xA000, IMIN)
CreateWordField (PRS0, IO2._MAX, IMAX)
Store (0xB000, IMAX)
每种资源描述符对应的资源模板宏列在下面,即定义该资源描述符的表格之后。资源模板宏的正式定义见资源描述符的 ASL 宏
每个资源描述符字段的保留名称(如 _MIN 和 _MAX)在定义该资源描述符的表中相应的表项中定义。