19.6.64. Interrupt(中断资源描述符宏)
语法 :
Interrupt ( ResourceUsage, EdgeLevel, ActiveLevel, Shared,
ResourceSourceIndex, ResourceSource, DescriptorName ) { InterruptList
} => Buffer
参数
ResourceUsage 描述设备是消耗指定的中断(ResourceConsumer),还是产生该中断供子设备使用(ResourceProducer)。如果未指定任何值,则假定为 ResourceConsumer。
EdgeLevel 描述中断是边沿触发(Edge)还是电平触发(Level)。字段 DescriptorName._HE 会被自动创建以引用资源描述符的这一部分,其中“1”表示 Edge,“0”表示 Level。
ActiveLevel 描述中断是高电平有效(ActiveHigh)还是低电平有效(ActiveLow)。字段 DescriptorName._LL 会被自动创建以引用资源描述符的这一部分,其中“1”表示 ActiveLow,“0”表示 ActiveHigh。
Shared 描述中断是否可以与其他设备共享(Shared)或不共享(Exclusive),以及它是否能够从低功耗空闲状态或系统睡眠状态唤醒系统(SharedAndWake 或 ExclusiveAndWake)。字段 DescriptorName._SHR 会被自动创建以引用资源描述符的这一部分,其中“1”表示 Shared,“0”表示 Exclusive。如果未指定任何值,则假定为 Exclusive。
ResourceSourceIndex 求值为 0x00 到 0xFF 之间的整数,并描述资源源索引。如果未指定,则不会生成该项。如果指定了此参数,则也必须指定 ResourceSource 参数。
ResourceSource 求值为一个字符串,用于唯一标识资源源。如果未指定,则不会生成该项。如果指定了此参数,但未指定 ResourceSourceIndex 参数,则假定其值为零。
DescriptorName 求值为名称字符串,它引用整个资源描述符。
InterruptList 是一个以逗号分隔的整数列表,至少需要一个值。每个整数表示一个 32 位中断号。必须至少定义一个中断,并且列表中不能有重复值。字段 “DescriptorName. _INT” 会被自动创建以引用资源描述符的这一部分。
说明
Interrupt 宏求值为一个包含中断资源描述符的缓冲区。此描述符的格式可参见第 6.4.3.6 节。此宏设计用于 ResourceTemplate(资源到缓冲区转换宏)内部。
Interrupt 宏使用 ResourceUsage 字段来区分两类设备:ResourceProducer 和 ResourceConsumer。
ResourceProducer 表示一种设备,它可以将来自一个或多个设备的中断转发给 OSPM 管理下的处理器。在中断宏中使用 ResourceProducer 的行为是未定义的,并且会被 OSPM 忽略。不建议将中断宏声明为 ResourceProducer。
ResourceConsumer 是消耗在 InterruptList 中声明的中断的设备。大多数设备都属于这一类别,并使用这种方法声明该设备可产生的中断。声明为 ResourceConsumer 的中断描述符,由 MADT 中描述的主中断控制器,或由充当“中断产生者”的设备生成。ResourceSource 字段用于作出这种区分。如果省略此字段,则 InterruptList 中的中断号标识全局系统中断 GSIV,并且这些中断以 MADT 中描述的主中断控制器为目标(参见第 5.2.12 节)。ResourceSource 字段也可以提供一个设备的名称,该设备是一个“中断产生者”。在这种情况下,InterruptList 中的中断号引用所指示的“中断产生者”设备的某个中断集合的私有中断编号空间。
ResourceSourceIndex 参数是保留的。如果平台在平台范围的 _OSC 中指定了“中断 ResourceSource 支持”(表 6.13中的位 13),则 ResourceSourceIndex 参数必须为零。
以下示例说明了如何指定对“二级中断”的使用。在此示例中,设备 SDC0 使用来自 MUX0 的一个二级中断,MUX0 对一组二级中断线进行复用并生成一个单一的汇总中断(也称为“中断产生者”)。期望 MUX0 的设备驱动程序根据该设备实现定义的细节,生成一个特定的基于软件的二级中断:
Scope(\_SB) {
Device(MUX0){
Name(_HID, EISAID("ACME0F0F")) // vendor specific interrupt combiner
Name(_UID, 0)
Name(_CRS, ResourceTemplate () {
//Register Interface
MEMORY32FIXED(ReadWrite, 0x30000000, 0x200, )
//Summary Interrupt line (GSIV 51)
Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {51}
})
}
Device(SDC0){
Name(_HID, EISAID("PNP0D40")) // SDA Standard Compliant SD Host Controller
Name(_UID, 0)
Name(_CRS, ResourceTemplate() {
//Register Interface
MEMORY32FIXED(ReadWrite, 0xFF000000, 0x200, )
// Secondary Interrupt 10 from interrupt combiner MUX0
Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, “\\_SB.MUX0”){10}
}
)
}
}