Share via


Consulta del espacio de configuración de PCI para una función virtual

Nota Este método solo se puede usar mediante controladores que se ejecutan en el sistema operativo de administración de la partición primaria de Hyper-V.

El controlador miniport para una función virtual de PCI Express (PCIe) se ejecuta en el sistema operativo invitado de una partición secundaria de Hyper-V. Debido a esto, el controlador de minipuerto VF no puede acceder directamente a los recursos de hardware, como el espacio de configuración PCIe de VF. Solo el controlador de minipuerto para la función física PCIe (PF) puede acceder al espacio de configuración pcIe para un VF. El controlador de miniporte PF se ejecuta en el sistema operativo de administración de una partición primaria de Hyper-V y tiene acceso con privilegios a los recursos de VF.

Un controlador que se ejecuta en el sistema operativo de administración emite una solicitud de método de identificador de objeto (OID) de OID_SRIOV_READ_VF_CONFIG_SPACE para leer datos del espacio de configuración PCIe de un VF especificado en el adaptador de red.

Por ejemplo, la pila de virtualización que se ejecuta en el sistema operativo de administración emite la solicitud de método OID de OID_SRIOV_READ_VF_CONFIG_SPACE cuando el controlador de miniporte VF llama a NdisMGetBusData para leer desde su espacio de configuración PCIe de VF.

Antes de que emite esta solicitud de método OID, el controlador de sobreslización debe establecer los miembros de la estructura de NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS de la siguiente manera:

  • El miembro VFId debe establecerse en el identificador del VF desde el que se va a leer la información.

  • El miembro Offset debe establecerse en el desplazamiento dentro del espacio de configuración PCIe del VF en el que se leerán los datos.

  • El miembro Length debe establecerse en el número de bytes que se van a leer desde el espacio de configuración PCIe de VF.

  • El miembro BufferOffset debe establecerse en el desplazamiento dentro del búfer (al que hace referencia el miembro InformationBuffer ) que contendrá los datos leídos del espacio de configuración PCI de VF especificado. Este desplazamiento se especifica en unidades de bytes desde el principio de la estructura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .

Cuando controla la solicitud de método OID de OID_SRIOV_READ_VF_CONFIG_SPACE, el controlador de miniporte PF debe seguir estas directrices:

  • El controlador de minipuerto debe comprobar que el VF, especificado por el miembro VFId de la estructura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS , tiene recursos que se han asignado previamente. El controlador de minipuerto asigna recursos para un VF a través de una solicitud de método OID de OID_NIC_SWITCH_ALLOCATE_VF. Si no se han asignado recursos para la VF especificada, el controlador debe producir un error en la solicitud OID.

  • El controlador de minipuerto debe comprobar que el búfer (al que hace referencia el miembro InformationBuffer de la estructura NDIS_OID_REQUEST ) es lo suficientemente grande como para devolver los datos de espacio de configuración PCIe solicitados. Si esto no es cierto, el controlador debe producir un error en la solicitud de OID.

  • El controlador de minipuerto normalmente llama a NdisMGetVirtualFunctionBusData para consultar el espacio de configuración de PCIe solicitado. Sin embargo, el controlador de minipuerto también puede devolver datos de espacio de configuración PCIe para el VF que el controlador ha almacenado en caché de las operaciones de lectura o escritura anteriores del espacio de configuración PCIe.

    Nota Si un proveedor de hardware independiente (IHV) proporciona un controlador de bus virtual (VBD) como parte de su paquete de controladores SR-IOV, su controlador de miniporte no debe llamar a NdisMGetVirtualFunctionBusData. En su lugar, el controlador debe interactuar con VBD a través de un canal de comunicación privado y solicitar que el VBD llame a ReadVfConfigBlock. Esta función se expone desde la interfaz de GUID_VPCI_INTERFACE_STANDARD compatible con el controlador de bus pci virtual (VPCI) subyacente.

Después de una devolución correcta de esta solicitud de método OID, el miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene un puntero a un búfer asignado por el autor de la llamada. Este búfer tiene el formato siguiente:

  • Estructura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS que contiene los parámetros de una operación de lectura del espacio de configuración PCIe de una VF.

  • Espacio de búfer adicional para que los datos se lean desde el espacio de configuración PCIe. El controlador copia los datos en el búfer en el desplazamiento especificado por el miembroBufferOffset de la estructura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .