ZPODD firmware requirements
This topic describes Zero Power Optical Disk Drive (ZPODD) firmware requirements.
This information applies to the following operating systems:
- Windows 8
- Windows Server 2012
ODD firmware requirements
ODD follows section 15 (ZPODD effort scheme) in Mt. Fuji 8 revision 0.90 Specification for ODD Firmware or above to support ZPODD. Microsoft may issue separate guidelines for ZPODD requirements in future.
Platform firmware requirements
Windows ZPODD support is based on the ACPI event mechanism described in section 5.6.4 of Advanced Configuration & Power Interface (“General-Purpose Event Handling” section).
There are two ATA types in the ACPI namespace definitions--IDE and SATA. Although this is a SATA feature, almost all SATA controllers have the ability to emulate PATA interfaces in order to maintain compatibility with legacy software. Microsoft does not support ZPODD in the IDE namespace.
Specifically, the requirements are as follows:
The ZPODD and all of its parent devices (PCI Bus, SATA controller, etc.) must be included in the platform’s Differentiated System Description Table (DSDT) or a Secondary System Description Table (SSDT).
The ZPODD device in the DSDT/SSDT must have the following objects:
- Its address on the SATA bus (_ADR).
- A _DSM object under the host controller allowing for the manipulation of port power (see description below).
- Control methods for setting the device to D0 (_PS0) and D3 (_PS3) power states, or the equivalent methods using _PRx objects that identify power resource objects, each containing _ON and _OFF methods.
- _S0W object specifying that wake signals for this device can be delivered in the S0 (working) state.
A mechanism for reporting wake signals to the device drivers associated with SATA host controller and the optical drive. Using a typical PC chipset, this involves using “general purpose events.
The \_GPE scope of the DSDT may contain either a _Lxx method (for level triggering) or a _Exx method (for edge triggering). The name of this method (the ‘xx’) must be the index, in hexadecimal, of the GPEx_STS bit to which the DA signal is connected. It should be exposed via a _PRW object and accompanying _PSW/_DSW method.
Note If the machine targets only Windows 8, the platform designer is free to use any mechanism for delivering wake signals that is described in ACPI 5.0. In the interest of simplicity, this document assumes, however, that the machine will use the “GPE” mechanisms, and all examples are given in terms of that.
_PRW and accompanying _PSW/_DSW is optional only on those machines that do not have an ACPI General Purpose Event pin.
BIOS must use AHCI class codes when implementing the SATA ACPI namespace.
No DA interrupts can be delivered after the wake signal is masked. This happens when either the OL evaluates _DSW or masks the GPE identified in _PRW.
ATA ACPI namespaces and ZPODD (informational)
For a normal SATA ACPI namespace, the node entries under a SATA controller represent a channel/device. Because SATA is a point- to-point protocol, there is a 1:1 mapping between devices and channels so there is no need for distinction between the two. The address entry for SATA is unique. To help distinguish the SATA nodes from legacy IDE nodes, all SATA addresses increment starting with 0 but have 0xffff concatenated to the end. See the ACPI specification.
ACPI callback definition, registration, and handling
During device enumeration, the port driver evaluates _DSM with the proper GUID to determine whether the platform supports Zero Power ODD. If it does, then the port driver sends IRP_MN_WAIT_WAKE before moving the optical drive out of the D0 state. This triggers the evaluation of any objects that the platform supplied for arming the device’s wake signals. Typically, this would either be _DSW or _PRW. When the device needs attention, the ACPI method that handles the GPE notifies the OS that the wake signal was triggered. ACPI
Event Notification example:
Under \_GPE namespace:
// Assume the Device Attention signal is wired to GPE pin 16
Method(_L10, 0x0, NotSerialized)
{
:
// Notify the CDROM device (assume it is PRT0)
Notify(\_SB_.PCI0.SATA.PRT0, 2)
:
}
:
Related topics
ZPODD platform and driver design guidelines for Windows 8