Comunicazione backchannel dal driver PF Miniport

Un driver miniport della funzione fisica PCI Express (PCIe) comunica con un driver miniport della funzione virtuale PCIe (VF) per inviare notifiche sulle modifiche apportate ai dati di un blocco di configurazione VF. Il driver miniport PF invia queste notifiche per invalidare i dati nel blocco di configurazione VF. In risposta a questa notifica, il driver miniport VF può inviare una richiesta backchannel al driver miniport PF per leggere i dati da un blocco di configurazione VF invalidato.

Viene usato un blocco di configurazione VF per la comunicazione backchannel tra i driver miniport PF e VF. L'IHV può definire uno o più blocchi di configurazione VF per il dispositivo. Ogni blocco di configurazione VF ha un formato, una lunghezza e un ID blocco definiti dall'IHV.

Nota I dati di ogni blocco di configurazione VF vengono usati solo dai driver PF e miniport VF. Il formato e il contenuto di questi dati sono opachi ai componenti del sistema operativo Windows.

I passaggi seguenti si verificano quando si emettono e gestiscono notifiche di dati di configurazione VF non validi:

  1. Nel sistema operativo guest NDIS emette una richiesta di controllo di I/O di IOCTL_VPCI_INVALIDATE_BLOCK. Al termine di questo IOCTL, NDIS riceve una notifica che indica che i dati di configurazione VF sono stati modificati.

  2. Nel sistema operativo di gestione eseguito nella partizione padre Hyper-V vengono eseguiti i passaggi seguenti:

    1. Il driver miniport PF chiama la funzione NdisMInvalidateConfigBlock per notificare a NDIS che i dati di configurazione VF sono stati modificati e non sono più validi. Il driver imposta il parametro BlockMask su una maschera di bit ULONGLONG che specifica quali blocchi di configurazione VF sono stati modificati. Ogni bit nella maschera di bit corrisponde a un blocco di configurazione VF. Se il bit è impostato su uno, i dati nel blocco di configurazione VF corrispondente sono stati modificati.

    2. NDIS segnala lo stack di virtualizzazione, che viene eseguito nel sistema operativo di gestione, sulla modifica ai dati del blocco di configurazione VF. Lo stack di virtualizzazione memorizza nella cache i dati dei parametri BlockMask .

      Nota Ogni volta che il driver miniport PF chiama NdisMInvalidateConfigBlock, lo stack di virtualizzazione ORs i dati del parametro BlockMask con il valore corrente nella cache.

    3. Lo stack di virtualizzazione invia una notifica al driver PCI virtuale (VPCI), che viene eseguito nel sistema operativo guest, sull'invalidazione dei dati di configurazione VF. Lo stack di virtualizzazione invia i dati dei parametri BlockMask memorizzati nella cache al driver VPCI.

  3. Nel sistema operativo guest in esecuzione in una partizione figlio Hyper-V vengono eseguiti i passaggi seguenti:

    1. Il driver VPCI salva i dati dei parametri BlockMask memorizzati nella cache nel membro BlockMask della struttura VPCI_INVALIDATE_BLOCK_OUTPUT associata alla richiesta di IOCTL_VPCI_INVALIDATE_BLOCK .

    2. Il driver VPCI completa correttamente la richiesta di IOCTL_VPCI_INVALIDATE_BLOCK . In questo caso, NDIS invia una richiesta di metodo OID (Object Identifier) di OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK al driver miniport VF. Una NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO viene passata nella richiesta OID. Questa struttura contiene i dati dei parametri BlockMask memorizzati nella cache.

      NDIS invia anche un'altra richiesta di IOCTL_VPCI_INVALIDATE_BLOCK per gestire le notifiche successive delle modifiche ai dati di configurazione VF.

    3. Quando il driver VF gestisce la richiesta di OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK , può leggere i dati dai blocchi di configurazione VF specificati chiamando NdisMReadConfigBlock. Per altre informazioni su questo processo, vedere Comunicazione backchannel da un driver miniport VF.