Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik KMDF dla urządzenia z jednym składnikiem może definiować jeden lub więcej funkcjonalnych stanów zasilania dla składnika i rejestrować funkcje wywołania zwrotnego, które struktura zarządzania energią (PoFx) wywołuje, gdy stan Fx składnika zmienia się lub zmienia się stan aktywny/bezczynny. Począwszy od UMDF w wersji 2.0, sterownik UMDF dla urządzenia z jednym składnikiem może zdefiniować jeden funkcjonalny stan zasilania (F0).
Aby uzyskać więcej informacji na temat narzędzia PoFx, zobacz Omówienie programu Power Management Framework.
Aby zaimplementować obsługę stanu Fx dla urządzenia jednoskładnikowego, należy wykonać następujące czynności w kolejności przed rozpoczęciem lub podczas pierwszego uruchomienia urządzenia.
Ten krok dotyczy tylko sterowników KMDF. Wywołaj WdfDeviceWdmAssignPowerFrameworkSettings, aby określić ustawienia ram zasilania, które WDF używa podczas rejestrowania z PoFx. W strukturze WDF_POWER_FRAMEWORK_SETTINGS, którą sterownik udostępnia podczas wywoływania WdfDeviceWdmAssignPowerFrameworkSettings, sterownik może udostępniać wskaźniki do kilku funkcji wywołania zwrotnego. Jeśli sterownik obsługuje tylko jeden stan zasilania funkcjonalnego (F0), ten krok jest opcjonalny.
Ten krok dotyczy sterowników KMDF i UMDF. Wywołaj WdfDeviceAssignS0IdleSettings i ustaw pole IdleTimeoutType w strukturze WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS na SystemManagedIdleTimeout lub SystemManagedIdleTimeoutWithHint. Powoduje to zarejestrowanie WDF w systemie PoFx.
W przypadku sterowników KMDF podczas rejestracji w PoFx framework używa informacji podanych w WDF_POWER_FRAMEWORK_SETTINGS podczas wywołania WdfDeviceWdmAssignPowerFrameworkSettings.
Ponieważ urządzenie może uruchomić się więcej niż raz, na przykład w przypadku ponownego równoważenia zasobów, sterownik może wykonać poprzednie kroki w funkcji wywołania zwrotnego EvtDeviceSelfManagedIoInit. Jeśli sterownik zarejestrował funkcję wywołania zwrotnego EvtDeviceSelfManagedIoInit, framework wywołuje ją raz dla każdego urządzenia, po wywołaniu funkcji wywołania zwrotnego EvtDeviceD0Entry po raz pierwszy.
Pozostała część informacji w tym temacie dotyczy tylko sterowników KMDF.
Włączanie
Gdy sterownik wywołuje WdfDeviceWdmAssignPowerFrameworkSettings, może dostarczyć wskaźnik do EvtDeviceWdmPostPoFxRegisterDevice funkcji wywołania zwrotnego.
Framework wywołuje funkcję zwrotną sterownika EvtDeviceWdmPostPoFxRegisterDevice po zarejestrowaniu frameworka w PoFx. Oto przykład typowej sekwencji zasilania:
- EvtDevicePrepareHardware
- EvtDeviceD0Entry (PrevState = WdfPowerDeviceD3Final)
- EvtInterruptEnable
- EvtDeviceWdmPostPoFxRegisterDevice // Dostępny jest uchwyt PoFx
Sterownik zapewnia wywołanie zwrotne EvtDeviceWdmPostPoFxRegisterDevice, jeśli musi wykonać dodatkowe operacje z użyciem POHANDLE do rejestracji platformy zasilania. Może to na przykład określać wymagania dotyczące opóźnienia, rezydencji i przebudzenia. Aby uzyskać więcej informacji na temat procedur korzystających z procedury POHANDLE, zobacz Procedury zarządzania energią urządzeń.
Sterownik może również użyć funkcji POHANDLE do wymiany żądań sterowania energią za pomocą narzędzia PoFx:
- Aby wysłać żądanie sterowania zasilaniem do PoFx, sterownik udostępnia funkcję wywołania zwrotnego EvtDeviceWdmPostPoFxRegisterDevice, a następnie używa wynikowego POHANDLE do wywołania PoFxPowerControl.
- Aby wykonać operacje zarządzania zasilaniem żądane przez PoFx, sterownik udostępnia procedurę zwrotną PowerControlCallback w strukturze WDF_POWER_FRAMEWORK_SETTINGS.
Wyłączanie
WDF wywołuje funkcję zwrotną EvtDeviceWdmPrePoFxUnregisterDevice przed usunięciem określonej rejestracji za pomocą PoFx.
Sterownik może dostarczyć wskaźnik do routyny ComponentIdleStateCallback w strukturze WDF_POWER_FRAMEWORK_SETTINGS, którą udostępnia do WdfDeviceWdmAssignPowerFrameworkSettings. PoFx wywołuje tę funkcję, aby powiadomić sterownik o oczekującej zmianie stanu zasilania Fx określonego składnika. W tej procedurze wywołania zwrotnego sterownik może wykonywać operacje specyficzne dla sprzętu związane ze zmianą stanu funkcjonalnego.
Na przykład, przed przejściem komponentu do stanu Fx o niskiej mocy, sterownik może zabezpieczyć stan sprzętu i wyłączyć przerwania oraz DMA. Sterownik wywołuje WdfInterruptReportInactive, aby poinformować system, że przerwanie nie jest już aktywne. Wyłączenie przerwań podczas przejścia stanu F może zmniejszyć ogólne zużycie energii przez system.
Sterownik może również podać wskaźnik do rutyny ComponentIdleConditionCallback w swojej strukturze WDF_POWER_FRAMEWORK_SETTINGS. PoFx wywołuje tę procedurę, aby powiadomić sterownik, że składnik pozostaje bezczynny. W tej procedurze sterownik rozpoczyna proces zatrzymywania kolejek zarządzanych przez system zarządzania energią oraz samodzielnego zarządzania operacjami wejścia/wyjścia.
Wywołaj WdfIoQueueStop raz dla każdej z kolejek zarządzanych przez zasilanie urządzenia. W każdym wywołaniu metody WdfIoQueueStop, podaj procedurę wywołania zwrotnego EvtIoQueueState. Zazwyczaj sterownik wywołuje WdfIoQueueStop z poziomu funkcji ComponentIdleConditionCallback.
Upewnij się, że żądania wysyłane do sterownika z każdej energetycznie zarządzanej kolejki są wykonywane szybko. W zależności od sterownika może to obejmować niektóre lub wszystkie następujące elementy:
- Jeśli sterownik nie przetrzymuje żądań przez wydłużony czas i nie przekazuje ich do docelowego obiektu I/O, który to robi, przejdź do kroku 3.
- Jeśli sterownik przechowuje określone żądania przez dłuższy czas, ponownie kolejkuj takie żądania do kolejki ręcznej. W swojej procedurze ComponentActiveConditionCallback sterownik może następnie pobrać żądania.
- Jeśli sterownik przekazuje niektóre żądania do obiektu docelowego we/wy, który przechowuje je przez dłuższy czas, anuluj te żądania. Proszę ponownie przesłać żądania w ComponentActiveConditionCallback.
Po zatrzymaniu każdej kolejki framework wywołuje EvtIoQueueState. Jeśli sterownik zatrzymuje wiele kolejek zarządzanych przez zasilanie, mechanizm wywołuje EvtIoQueueState wiele razy, raz dla każdej kolejki.
Sterownik musi wywołać PoFxCompleteIdleCondition po ostatnim wywołaniu funkcji EvtIoQueueState. Na przykład sterownik może wykonać to wywołanie z poziomu ostatniego EvtIoQueueState.
Aby określić, które wywołanie było ostatnie, sterownik może użyć licznika do śledzenia, ile razy struktura wywołała EvtIoQueueState. Przykład Singlecomp ilustruje tę technikę. Ten przykład jest dostępny począwszy od zestawu Windows 8 WDK.
Oto przykład typowej sekwencji wyłączania zasilania:
Uruchom ponownie kolejki zarządzane zasilaniem i operacje wejścia-wyjścia zarządzane przez użytkownika w ComponentActiveConditionCallback.
Jeśli sterownik wcześniej wywołał WdfInterruptReportInactive, to nieaktywne przerwania można ponownie włączyć, wywołując WdfInterruptReportActive z ComponentActiveConditionCallback lub ComponentIdleStateCallback.