_DSM Deep Dive

A practical firmware note on ACPI _DSM, vendor-specific device methods, UUID functions, and OS-specific feature behavior.

3 min read
Đọc bằng English Tiếng Việt 日本語
ACPI Advanced cover

A device works on Windows but behaves differently on Linux. Or a feature is enabled only after a vendor driver loads. Or a Thunderbolt, graphics, battery, camera, or touchpad feature depends on a strange ACPI method with a UUID.

That is often where _DSM appears.

_DSM means Device Specific Method. It gives firmware a way to expose vendor-specific or device-specific functions that do not fit cleanly into standard ACPI methods.

The shape of _DSM

A typical _DSM receives four arguments:

Method (_DSM, 4, Serialized)
{
    // Arg0: UUID
    // Arg1: revision
    // Arg2: function index
    // Arg3: function-specific package
}

The OS or driver calls _DSM with a UUID and function number. Firmware returns a package, integer, buffer, or other object depending on that function.

Item Value Note
Arg0 UUID Identifies the function set.
Arg1 Revision Version of the function interface.
Arg2 Function index Selects a specific operation or query.
Arg3 Package Input arguments for that function.
Function 0 Function support query Usually returns a bitmask of supported functions.

Real World Example: vendor feature switch

Method (_DSM, 4, Serialized)
{
    If (LEqual (Arg0, ToUUID ("12345678-1234-1234-1234-123456789abc"))) {
        Switch (ToInteger (Arg2)) {
        Case (Zero) {
            Return (Buffer() { 0x03 }) // function 0 and 1 supported
        }
        Case (One) {
            Return (Package() { One, "FeatureEnabled" })
        }
        }
    }
    Return (Buffer() { 0x00 })
}

This is not self-explanatory from the AML alone. You usually need the driver expectation, vendor documentation, or OS behavior to interpret the return value.

Debug Diary: OS-specific behavior

A common _DSM debug trap:

Windows driver calls UUID A, function 1 → feature enabled
Linux driver does not call the same _DSM → feature absent
Firmware engineer sees no ACPI error → still a platform integration issue

The bug may be in firmware, driver assumptions, or an unsupported vendor extension.

_DSM debug checklist

Firmware Engineer Notes

_DSM is powerful but dangerous. It can solve real platform gaps, but it can also hide undocumented behavior that only one OS driver understands.

For a Knowledge Base, I read _DSM as a boundary between firmware description and vendor driver contract.

Found this useful?

Save it or share it with someone learning firmware, BIOS/UEFI, and embedded systems.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.