# Advanced Power Management

L'Advanced power management (APM) è un API sviluppata da Intel e Microsoft e pubblicata nel 1992 la quale consente a un sistema operativo che gira su un personal computer IBM-compatibile di funzionare con il BIOS (parte del firmware del computer) per assumere il controllo del risparmio energetico.
L'ultima versione della specifica APM fu la revisione 1.2, distribuita nel 1996. ACPI è inteso come il successore di APM. La Microsoft ha cessato il supporto per l'APM su Windows Vista.

## Panoramica

APM per gestire i dispositivi utilizza un approccio a strati. Le applicazioni capaci di utilizzare l'APM (inclusi i driver di periferica) comunicano con un driver APM specifico per il SO. Questo driver comunica al BIOS provvisto di supporto APM, il quale controlla l'hardware. È possibile escludere dal controllo APM anche un singolo dispositivo e può essere usato se un driver desidera comunicare direttamente con il dispositivo hardware.
La comunicazione è bidirezionale: gli eventi di risparmio energetico sono inviati dal BIOS al driver APM, e il driver APM invia le informazioni e le richieste al BIOS tramite chiamate a funzioni. In questo modo il driver APM funge da intermediario tra il BIOS e il sistema operativo.
Il risparmio energetico avviene in due modi: attraverso le sopracitate chiamate di funzione dal driver APM al BIOS che richiede i cambiamenti di stato dell'energia, e automaticamente basandosi sulle attività del dispositivo.

## Eventi della gestione dell'energia

Ci sono 12 eventi energetici (come lo standby, richieste di sospensione e ripristino, e notifiche di bassa carica della batteria), più gli eventi definiti dall'OEM, che possono essere inviati dal BIOS APM al sistema operativo. Il driver APM effettua regolarmente il poll per le notifica di cambio evento.
Eventi di Gestione dell'Energia:
| Nome | Codice | Commento |
| Notifica richiesta standby sistema | 0x0001 | |
| Notifica richiesta sospensione sistema | 0x0002 | |
| Notifica sistema ripristino normale | 0x0003 | |
| Notifica sistema ripristino critico | 0x0004 | |
| Notifica livello della batteria basso | 0x0005 | |
| Notifica cambio stato energetico | 0x0006 | |
| Notifica aggiornamento ora | 0x0007 | |
| Notifica critica sospensione sistema | 0x0008 | |
| Notifica richiesta utente standby sistema | 0x0009 | |
| Notifica richiesta utente sospensione sistema | 0x000A | |
| Notifica ripristino standby sistema | 0x000B | |
| Notifica cambio capacità | 0x000C | Dovuto a inserimento/rimozione di un'impostazione o dispositivo |
Funzioni di Gestione dell'Energia:
| Nome | Codice | Commento |
| Controllo Installazione APM | 0x00 | |
| Connessione Interfaccia Modalità Reale APM | 0x01 | |
| Connessione Interfaccia Modalità 16-bit APM | 0x02 | Evita modalità reale o virtual86 |
| Connessione Interfaccia Modalità Protetta 32-bit APM | 0x03 | Evita modalità reale o virtual86 |
| Disconnessione Interfaccia APM | 0x04 | |
| CPU Inattiva | 0x05 | Richiede la sospensione del sistema.. 0) Il clock è fermato fino a un interrupt nel tick del timer. 1) Clock lento |
| CPU Occupata | 0x06 | Il driver dice al sistema APM di ripristinare la velocità di clock della CPU. |
| Imposta lo Stato Energetico | 0x07 | Imposta il sistema o dispositivo in stato di Sospensione/Standby/Spegnimendo.. |
| Abilita/Disabilita Gestione Energetica | 0x08 | |
| Ripristina le impostazioni predefinite del BIOS APM | 0x09 | |
| Ottiene lo Stato Energetico | 0x0A | Supporta stati AC "On backup power". E stati di batteria. |
| Ottiene Evento PM | 0x0B | Controlla gli eventi APM. Dovrebbe essere chiamato una volta al secondo. |
| Ottiene Stato Energetico | 0x0C | |
| Attiva/Disattiva Gestione Energetica Dispositivo | 0x0D | |
| Versione Driver APM | 0x0E | |
| Richiede/Libera Gestione Energetica | 0x0F | Gestione APM per il dispositivo specifico. |
| Ottiene Capacità | 0x10 | |
| Ottiene/Imposta/Disabilita Contatore Ripristino | 0x11 | |
| Enable/Disable Resume on Ring Indicator | 0x12 | |
| Enable/Disable Timer Based Requests | 0x13 | |
| Controllo Installazione APM OEM | 0x80 | Dice se il BIOS APM supporta le funzioni dipendenti da hardware OEM. |
| Funzioni APM OEM | 0x80 | Accede alle funzioni OEM specifiche. |

## Funzioni APM

Ci sono 21 chiamate di funzioni APM definite e che il driver APM può utilizzare per richiedere gli stati di gestione dell'energia, o richiedere transizioni di stati energetici. Esempi di chiamate a funzioni includono informare il BIOS sull'utilizzo corrente della CPU (il BIOS può rispondere a questo tipo di chiamata piazzando la CPU in stato di basso consumo, o rimettendola al suo stato di massima energia), richiedendo lo stato di energia corrente di un dispositivo, o richiedendo un cambio dello stato energetico.

## Stati energetici

La specifica APM definisce stati energetici di sistema e di dispositivo.

### Stati energetici di sistema

L'APM definisce cinque stati energetici per il sistema del computer:
* Full On: il computer è acceso, e nessun dispositivo è in modalità risparmio energetico.
* APM Enabled: il computer è acceso, e l'APM sta controllando la gestione energetica del dispositivo se necessario.
* APM Standby: la maggior parte dei dispositivi sono nel rispettivo stato di basso consumo, la CPU è rallentata o fermata, e lo stato di sistema è salvato. Il computer può essere ripristinato rapidamente al suo stato iniziale (in risposta ad attività come la pressione di un tasto della tastiera da parte dell'utente).
* APM Suspend: la maggior parte dei dispositivi sono spenti, ma lo stato del sistema è salvato. Il computer può essere ripristinato al suo stato originario, ma richiede relativamente molto tempo (l'ibernamento è una forma speciale di stato APM Suspend).
* Off: il computer è spento.

### Stati energetici di dispositivo

L'APM definisce anche stati energetici che l'hardware con supporto APM può implementare. Non è necessario che un dispositivo con supporto APM implementi tutti gli stati.
I quattro stati sono:
* Device On: Il dispositivo è in modalità massima energia.
* Device Power Managed: Il dispositivo è ancora acceso, ma alcune funzionalità non sono disponibili, o hanno prestazioni ridotte.
* Device Low Power: Il dispositivo non è in funzione. L'energia è mantenuta affinché il dispositivo possa 'risvegliarsi'.
* Device Off: Il dispositivo è spento.

## Integrazione con la CPU

Il nucleo della CPU (definito nell'APM con clock della CPU, cache, bus di sistema e contatori di sistema) è appositamente trattato nell'APM come l'ultimo dispositivo ad essere spento, e il primo ad essere riacceso. Il nucleo della CPU è controllato esclusivamente attraverso il BIOS APM. I driver possono usare le chiamate di funzione dell'APM per notificare al BIOS la modalità di funzionamento della CPU, ma sta al BIOS agire utilizzando queste informazioni: un driver non può agire direttamente sulla CPU per passare alla modalità di risparmio energetico.