Establecer los datos de configuración de PCI de una función virtual
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 PCI de VF. Solo el controlador de minipuerto de la función física PCIe (PF) puede acceder al espacio de configuración pci 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.
El controlador de exceso, como la pila de virtualización, emite la solicitud de conjunto de OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE cuando el controlador de miniporte VF llama a NdisMSetBusData para escribir en su espacio de configuración PCI.
Antes de que emite esta solicitud de conjunto de OID, el controlador de sobreslización debe establecer los miembros de la estructurade NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS de la siguiente manera:
Establezca el miembro VFId en el identificador del VF para el que se va a escribir la información.
Establezca el miembro Offset en el desplazamiento dentro del espacio de configuración PCI del VF en el que se escribirán los datos.
Establezca el miembro Length en el número de bytes que se van a escribir en el espacio de configuración PCI de VF.
Establezca el miembro BufferOffset en el desplazamiento dentro del búfer (al que hace referencia el miembroInformationBuffer ) que contendrá los datos que se escriben en el espacio de configuración PCI de VF especificado. Este desplazamiento se especifica en unidades de bytes desde el principio de la estructura NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS .
Cuando controla la solicitud de método OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE, el controlador de miniporte PF debe seguir estas directrices:
El controlador de minipuerto PF debe comprobar que el VF, especificado por el miembro VFId de la estructura de NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS , tiene recursos que se han asignado previamente. El controlador de minipuerto PF 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 miniporte PF llama a NdisMSetVirtualFunctionBusData para escribir en el espacio de configuración PCI solicitado. Sin embargo, el controlador de miniporte PF también puede devolver datos de espacio de configuración PCI para el VF que el controlador ha almacenado en caché de las operaciones de lectura o escritura anteriores del espacio de configuración pci.
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 miniport pf no debe llamar a NdisMSetVirtualFunctionBusData. 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 SetVirtualFunctionData. Esta función se expone desde la interfaz de GUID_VPCI_INTERFACE_STANDARD compatible con el controlador de bus pci virtual (VPCI) subyacente.
Si el controlador de miniporte PF puede completar correctamente la solicitud OID, el controlador debe copiar los datos de espacio de configuración PCI solicitados en el búfer al que hace referencia el miembro InformationBuffer de la estructura de NDIS_OID_REQUEST . 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 .