Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le interruzioni segnalate dai messaggi sono state introdotte nella specifica PCI 2.2 come alternativa agli interrupt basati su riga. Anziché usare un pin dedicato per attivare gli interrupt, i dispositivi che usano msi attivano un interrupt scrivendo un valore in un indirizzo di memoria specifico. PCI 3.0 definisce una forma estesa di IDENTITÀ del servizio gestito, denominata MSI-X, che consente una maggiore programmabilità. Un singolo dispositivo può supportare msi e MSI-X. Per un dispositivo di questo tipo, il sistema operativo userà automaticamente MSI-X.
Un messaggio di interruzione è un valore specifico che un dispositivo scrive in un determinato indirizzo per attivare un interrupt. A differenza degli interrupt basati su riga, gli interrupt con segnalazione dei messaggi hanno una semantica perimetrale. Il dispositivo invia un messaggio ma non riceve alcun riconoscimento hardware che l'interrupt sia stato ricevuto.
Per PCI 2.2, un messaggio è costituito da un indirizzo e da un valore parzialmente opaco a 16 bit. A ogni dispositivo viene assegnato un singolo indirizzo. Per inviare più messaggi, il dispositivo può usare i 4 bit inferiori del valore del messaggio per distinguere i messaggi. Pertanto, per PCI 2.2, i dispositivi possono supportare fino a 16 messaggi.
Per PCI 3.0, un messaggio è costituito da un indirizzo e da un valore opaco a 32 bit. Ogni messaggio diverso ha un proprio indirizzo univoco. A differenza di PCI 2.2, il dispositivo non modifica il valore. Per PCI 3.0, un dispositivo può supportare fino a 2.048 messaggi diversi. I dispositivi che supportano PCI 3.0 MSI-X includono una tabella hardware programmabile dinamicamente che contiene voci per ognuna delle origini di interrupt nel dispositivo. Ogni voce di questa tabella può essere programmata con uno dei messaggi allocati a un dispositivo e può essere mascherata in modo indipendente. I driver possono modificare la configurazione di un messaggio di interrupt in una voce di tabella e se una voce è stata nascosta. Per altre informazioni, vedere Configurazione dinamica di MSI-X.
I driver possono registrare una singola routine InterruptMessageService che gestisce tutti i messaggi possibili o singole routine InterruptService per ogni messaggio.
I driver possono gestire le interruzioni segnalate dal dispositivo (MSI) come segue:
Durante l'installazione del driver, abilitare i pacchetti MSI nel Registro di sistema. È anche possibile usare il Registro di sistema per specificare il numero di messaggi da allocare per il dispositivo. Per altre informazioni, vedere Abilitazione degli interrupt Message-Signaled nel Registro di sistema.
Facoltativamente, incrementare il numero di messaggi di interrupt e salvare alcune impostazioni per ogni messaggio rispondendo a una richiesta di IRP_MN_FILTER_RESOURCE_REQUIREMENTS. Per altre informazioni, vedere Using Interrupt Resource Descriptors.
Nella routine dispatch del driver per IRP_MN_START_DEVICEchiamare IoConnectInterruptEx per registrare un InterruptService o interruptMessageService routine per gestire gli interrupt del dispositivo. Utilizzare la versione CONNECT_FULLY_SPECIFIED di IoConnectInterruptEx per registrare una routine InterruptService per un messaggio specifico o la versione CONNECT_MESSAGE_BASED di IoConnectInterruptEx per registrare una singola routine InterruptMessageService per tutti i messaggi. Per ulteriori informazioni, vedere Utilizzare la versione CONNECT_MESSAGE_BASED di IoConnectInterruptEx e Utilizzare la versione CONNECT_FULLY_SPECIFIED di IoConnectInterruptEx.
Dopo che il driver non ha più intenzione di gestire gli interrupt del dispositivo, chiamare IoDisconnectInterruptEx (dopo aver disabilitato gli interrupt del dispositivo) per rimuovere qualsiasi routine di servizio degli interrupt registrata.
I driver progettati per l'uso di più messaggi devono verificare che il numero previsto di messaggi sia allocato. Se il gestore Plug and Play (PnP) non può allocare il numero richiesto di messaggi, alloca invece esattamente un messaggio al dispositivo. I driver possono controllare il numero di messaggi effettivamente allocati in uno dei modi seguenti:
Il manager PnP segnala il numero di messaggi allocati nel relativo elenco di descrittori di risorse non elaborate. Per altre informazioni, vedere Using Interrupt Resource Descriptors.
Quando IoConnectInterruptEx ritorna, imposta Parameters->MessageBased.ConnectContext.InterruptMessageTable->MessageCount sul numero di messaggi allocati.