Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een verrassende wekker is een onverwachte overgang naar D0. Nadat een apparaat overgaat naar D3cold, kan het een onverwachte ontwaking ervaren als bijwerking wanneer het stuurprogramma voor een ander apparaat op dezelfde stroomrail een overgang aanvraagt van D3cold naar D0. Het stuurprogramma voor het eerste apparaat moet een melding ontvangen van de onverwachte wekoproep om te voorkomen dat het apparaat in een niet-geïnitieerde D0-status blijft.
Wanneer een apparaat van D3hot naar D3cold wordt verplaatst, doet dit waarschijnlijk omdat de voedingsbron die het deelt met een aantal andere apparaten is uitgeschakeld. Enige tijd nadat deze apparaten D3cold invoeren, kan het stuurprogramma voor een van de apparaten een overgang naar D0 aanvragen. Als reactie op deze aanvraag schakelt het hoofd busstuurprogramma of het ACPI-filterstuurprogramma de voedingsbron in, waardoor alle apparaten die de voedingsbron delen, naar hun standaard, ingeschakelde hardwarestatus overgaan.
Het enige apparaatstuurprogramma dat deze energiestatuswijziging verwacht, is het stuurprogramma dat de wijziging heeft aangevraagd. De stuurprogramma's voor de andere apparaten moeten een melding van deze wijziging ontvangen, zodat ze hun apparaten correct kunnen initialiseren om in D0 te kunnen werken. Alleen een stuurprogramma dat deze melding kan ontvangen, moet het apparaat inschakelen om D3cold in te voeren. Anders weet het stuurprogramma niet wanneer het apparaat D0 binnenkomt.
Wanneer een apparaat is ingeschakeld, wordt een standaard, niet-geïnitialiseerde hardwarestatus ingevoerd. De PCI Express Base 3.0-specificatie definieert bijvoorbeeld een niet-geïnitialiseerde D0-status die een apparaat invoert wanneer het voor het eerst stroom ontvangt. De definitie van deze status is specifiek voor PCI- en PCI Express-apparaten, maar apparaten die verbinding maken met andere bussen zijn ontworpen om vergelijkbare hardwarestatussen in te voeren wanneer ze zijn ingeschakeld.
In het geval van een PCI- of PCI Express-apparaat dat meerdere functies implementeert, delen deze apparaatfuncties waarschijnlijk dezelfde stroomrail. Elke functie kan echter een afzonderlijk stuurprogramma hebben en de stuurprogramma's voor deze functies kunnen waarschijnlijk niet rechtstreeks met elkaar communiceren. Wanneer het stuurprogramma voor een van deze functies een energiestatuswijziging aanvraagt van D3cold naar D0, verwachten de stuurprogramma's voor de andere functies deze wijziging niet. Wanneer deze andere functies stroom ontvangen, moeten hun stuurprogramma's worden gewaarschuwd zodat ze de functies kunnen configureren om correct te werken in D0.
Een busdriver detecteert wanneer een ondergeschikt apparaat van stroom wordt voorzien. Als het functiestuurprogramma van dit apparaat geen overgang naar D0 heeft aangevraagd, vraagt het busstuurprogramma het apparaatstuurprogramma om zichzelf een D0-energie-IRP (een IRP_MN_SET_POWER aanvraag met de doelstatus = PowerDeviceD0) te verzenden om het apparaat te initialiseren voor gebruik in D0. Vanaf deze geïnitialiseerde D0-status kan het apparaatstuurprogramma vervolgens de overgang van het apparaat naar D3hot initiëren. Apparaatstuurprogramma's kunnen als volgt meldingen ontvangen over onverwachte overgangen naar D0, doorgegeven door busstuurprogramma's:
- Apparaatstuurprogramma's die zichzelf direct of indirect registreren als clients van het Runtime Power Management Framework (PoFx) ontvangen callbacks voor meldingen.
- Stuurprogramma's voor apparaten die hun apparaten voor wekken configureren, hebben hun wachtende IRP_MN_WAIT_WAKE aanvragen voltooid door de busstuurprogramma's.
Vanaf Windows 8 kan het functiestuurprogramma van een apparaat, die fungeert als eigenaar van het energiebeleid, zich registreren als een client van PoFx. Wanneer het busstuurprogramma PoFx op de hoogte stelt dat het apparaat een verrassingsovergang naar D0 heeft ervaren, helpt PoFx het apparaat om over te stappen op een geïnitialiseerde D0-status en vervolgens naar D3hot. Eerst roept PoFx de DevicePowerRequiredCallback-routine van het stuurprogramma aan om het apparaatstuurprogramma te vragen om een D0-stroom-IRP omlaag te verzenden van de apparaatstack. Vervolgens roept PoFx de DevicePowerNotRequiredCallback-routine van het stuurprogramma aan om het apparaatstuurprogramma op de hoogte te stellen dat het apparaat niet in de D0-status hoeft te blijven.
Vanaf Kernel-Mode KMDF-versie 1.11 (Driver Framework) kan het KMDF-stuurprogramma voor een apparaat met één component zich indirect registreren bij PoFx door de methode WdfDeviceWdmAssignPowerFrameworkSettings aan te roepen. In deze oproep levert de chauffeur aanwijzers naar callback-routines die de bestuurder op de hoogte stellen van verrassingsovergangen naar D0. Zie Ondersteuning van functionele energietoestanden voor meer informatie.
Een stuurprogramma dat het apparaat niet registreert bij PoFx, kan nog steeds op de hoogte worden gesteld van een onverwachte overgang naar D0 als het apparaat is ingesteld voor ontwaken. Wanneer de buschauffeurs de stroom naar het apparaat inschakelen, voltooien ze de IRP_MN_WAIT_WAKE aanvraag van het stuurprogramma. Als reactie initialiseert het stuurprogramma het apparaat voor gebruik in D0. Het apparaat is waarschijnlijk inactief, dan zal de driver na enige tijd dit apparaat naar D3hot verplaatsen.
Een functiestuurprogramma dat zich niet registreert bij PoFx en zijn apparaat niet configureert voor wake, ontvangt geen melding van een onverwachte overgang van D3cold naar D0. Het apparaat kan grote hoeveelheden tijd besteden aan een niet-geïnitialiseerde D0-status. In deze status zijn alle onderdelen in het apparaat doorgaans ingeschakeld. Om het energieverbruik door inactieve apparaten te verminderen, moeten stuurprogramma's alleen toegang tot D3cold mogelijk maken als ze meldingen van onverwachte overgangen naar D0 kunnen ontvangen.