Comunicación backchannel desde el controlador de miniporte PF
Un miniportador de la función física PCI Express (PCIe) (PF) se comunica con un miniportador de la función virtual PCIe (VF) para emitir notificaciones sobre los cambios en los datos de un bloque de configuración de VF. El controlador de miniporte PF emite estas notificaciones para invalidar los datos en el bloque de configuración de VF. En respuesta a esta notificación, el controlador de miniporte VF puede emitir una solicitud backchannel al controlador de miniporte PF para leer los datos de un bloque de configuración VF invalidado.
Un bloque de configuración de VF se usa para la comunicación backchannel entre los controladores de miniporte PF y VF. El IHV puede definir uno o varios bloques de configuración de VF para el dispositivo. Cada bloque de configuración de VF tiene un formato, longitud y identificador de bloque definidos por IHV.
Nota Los datos de cada bloque de configuración de VF solo los usan los controladores de miniporte PF y VF. El formato y el contenido de estos datos son opacos para los componentes del sistema operativo Windows.
Los pasos siguientes se producen al emitir y controlar notificaciones de datos de configuración de VF no válidos:
En el sistema operativo invitado, NDIS emite una solicitud de control de E/S de IOCTL_VPCI_INVALIDATE_BLOCK. Cuando se completa este IOCTL, se notifica a NDIS que los datos de configuración de VF han cambiado.
En el sistema operativo de administración que se ejecuta en la partición primaria de Hyper-V, se producen los pasos siguientes:
El controlador de miniporte PF llama a la función NdisMInvalidateConfigBlock para notificar a NDIS que los datos de configuración de VF han cambiado y ya no son válidos. El controlador establece el parámetro BlockMask en una máscara de bits de ULONGLONG que especifica qué bloques de configuración de VF han cambiado. Cada bit de la máscara de bits corresponde a un bloque de configuración de VF. Si el bit se establece en uno, los datos del bloque de configuración de VF correspondiente han cambiado.
NDIS señala la pila de virtualización, que se ejecuta en el sistema operativo de administración, sobre el cambio a los datos del bloque de configuración de VF. La pila de virtualización almacena en caché los datos del parámetro BlockMask .
Nota Cada vez que el controlador de miniporte PF llama a NdisMInvalidateConfigBlock, la pila de virtualización ORs los datos del parámetro BlockMask con el valor actual en su memoria caché.
La pila de virtualización notifica al controlador PCI virtual (VPCI), que se ejecuta en el sistema operativo invitado, sobre la invalidación de los datos de configuración de VF. La pila de virtualización envía los datos de parámetros BlockMask almacenados en caché al controlador VPCI.
En el sistema operativo invitado que se ejecuta en una partición secundaria de Hyper-V, se producen los pasos siguientes:
El controlador VPCI guarda los datos de parámetros BlockMask almacenados en caché en el miembro BlockMask de la estructura de VPCI_INVALIDATE_BLOCK_OUTPUT asociada a la solicitud de IOCTL_VPCI_INVALIDATE_BLOCK .
El controlador VPCI completa correctamente la solicitud de IOCTL_VPCI_INVALIDATE_BLOCK . Cuando esto sucede, NDIS emite una solicitud de método de identificador de objeto (OID) de OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK al controlador de minipuerto de VF. Se pasa un NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO en la solicitud OID. Esta estructura contiene los datos de parámetros BlockMask almacenados en caché.
NDIS también emite otra solicitud de IOCTL_VPCI_INVALIDATE_BLOCK para controlar las notificaciones sucesivas de cambios en los datos de configuración de VF.
Cuando el controlador VF controla la solicitud de OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK , puede leer datos de los bloques de configuración de VF especificados llamando a NdisMReadConfigBlock. Para obtener más información sobre este proceso, consulte Comunicación backchannel desde un controlador de miniport de VF.