6.2.5. _DSD(设备特定数据)
此可选对象用于通过 OSPM 向设备驱动程序提供附加的设备属性和信息。_DSD 返回一个变长包,其中包含一个设备数据描述符结构列表,每个结构由一个 UUID(参见 通用唯一标识符(UUID))和一个包(数据结构)组成。UUID 是定义该数据结构所需的全部内容。UUID 本身 可以 基于 _HID 或可选的 _CID、_CLS、_HRV、_SUB 对象,或者 _HID 与这些可选对象之一施加限制。但它也 可以不 施加此类限制。
只要 UUID 与其他已发布的 UUID 不同,OEM、IHV 或其他接口或设备管理机构(例如 PCI SIG 或 UEFI Forum)都可以创建新的 UUID。
为 _DSD 分配的知名 UUID 列表及与其相关的数据格式定义,可在 UEFI Forum 托管的辅助文档中获得:http://www.uefi.org/acpi 。
参数:
无
返回值:
一个变长的 Package,包含下面描述的设备数据描述符结构列表。
返回值信息:
Package ()
{
Device Data Descriptor 0
...
Device Data Descriptor n
}
每个设备数据描述符结构由两个元素组成,如下:
UUID // Buffer (16 bytes)
Data Structure // Package (depending on UUID)
UUID 唯一确定数据结构的格式。
数据结构 是一组设备特定数据项,其格式由 UUID 唯一确定,其含义由 UUID 唯一确定,并且可能结合 PNP 或 ACPI 设备 ID 一起确定。
不允许存在具有相同 UUID 的多个设备数据描述符结构。
每次对 _DSD 求值时,它都必须返回相同的数据。固件不应期望每次都会对其求值(如果它被实现为方法的话)。
示例:
注意
以下示例中使用的 UUID 假定将“数据结构”的数据格式定义为一个长度为 2 的 Package 列表(属性),其中第一个元素(键)必须是一个 String,第二个元素是与该键关联的值。有效的键集合以及与其关联的值的格式和解释,随后取决于该设备的 PNP 或 ACPI 设备 ID。
Device (MDEV) {
Name (_HID, "PNP####")
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package (2) {...}, // Property 1
...
Package (2) {...} // Property n
}
})
}
//
// PWM controller with two pins that can be driven and a device using
// those pins with the periods of 5000000 and 4500000 nanoseconds,
// respectively.
//
Device (\_SB.PCI0.PWM) {
Name (_HID, "PNP####")
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package (2) {"#pwm-cells", 2}
}
})
}
Device (\_SB.PCI0.BL) {
Name (_HID, "ACPI####")
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package (2) {
"pwms",
Package () {
\_SB.PCI0.PWM, 0, 5000000,
\_SB.PCI0.PWM, 1, 4500000
}
}
}
})
}
//
// SPI controller using a fixed frequency clock represented by the CLKO
// device object.
//
Device (\_SB_.PCI0) {
Device (CLK0) {
Name (_HID, "PNP####")
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package (2) {"#clock-cells", 0},
Package (2) {"clock-frequency", 120000000}
}
})
}
Device (SPI0) {
Name (_HID, "PNP####")
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package (2) {"clocks", Package () {1, ^CLK0}}
}
})
...
}
}