19.6.31. Device(声明设备包)
语法 :
Device (DeviceName) {TermList}
参数
创建一个名为 DeviceName 的 Device 对象,该对象表示处理器、总线、设备或任何其他类似硬件。Device 会打开一个名称作用域。
描述
设备包是 Differentiated Definition Block 向操作系统描述系统中硬件设备的基本方式之一。每个设备包都定义在与该设备在系统中位置对应的层次命名空间中的某个位置。设备的命名空间中还包含其他名称,这些名称提供设备的信息和控制,以及任何子设备,而这些子设备又进一步描述其子设备,依此类推。
对于任何设备,平台运行时固件仅提供以非硬件标准方式添加到该设备的信息。这种增值功能可以在 ACPI Definition Block 中表达,以便操作系统软件能够使用该功能。
平台运行时固件仅为那些获得了超出设备正常能力之外的某些系统附加功能的设备,以及为在命名空间树中补全此类设备所需的任何 Device 对象提供设备对象。例如,如果系统包含一个没有附加功能(如电源管理)的 PCI 设备(无论是集成的还是其他形式的),则平台运行时固件不会报告此类设备;但是,如果系统在该集成 PCI 设备之下包含一个集成 ISA 设备(该设备是一个 IS bridge),则系统将包含该 ISA 设备的设备包,所添加的最基本特性是该 ISA 设备的 ID 和配置信息,以及其父 PCI 设备,因为这样做是为了确保 ISA 设备包在命名空间中的放置正确。
设备对象列表被编码为 TermList,因此并非描述一个静态设备对象列表,而是可以根据系统设置描述一个动态设备对象列表。见第 5.4.2 节。
示例
下面这段 ASL 示例代码展示了 Device 对象的嵌套用法,用于描述一个连接到根 PCI 总线的 IDE 控制器:
Device (IDE0) { // primary controller
Name (_ADR, 0) // put PCI Address (device/function) here
// define region for IDE mode register
OperationRegion (PCIC, PCI_Config, 0x50, 0x10)
Field (PCIC, AnyAcc, NoLock, Preserve) {
...
}
Device (PRIM) { // Primary adapter
Name (_ADR, 0) // Primary adapter = 0
...
Method (_STM, 2) {
...
}
Method (_GTM) {
...
}
Device (MSTR) { // master channel
Name (_ADR, 0)
Name (_PR0, Package () {0, PIDE})
Name (_GTF) {
...
}
}
Device (SLAV) {
Name (_ADR, 1)
Name (_PR0, Package () {0, PIDE})
Name (_GTF) {
...
}
}
}
}