Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los controladores de miniport deben registrar una función de filtro de requisitos de recursos si admiten MSI-X y cambiarán la afinidad de interrupción para cada mensaje de MSI-X o quitarán los recursos de interrupción del mensaje.
NDIS llama a la función MiniportFilterResourceRequirements después de que NDIS reciba el IRP_MN_FILTER_RESOURCE_REQUIREMENTS paquete de solicitud de E/S (IRP) para una tarjeta de interfaz de red (NIC). NDIS llama a MiniportFilterResourceRequirements después de que los controladores de función subyacentes de la pila de dispositivos hayan completado el IRP.
NDIS llamará a MiniportFilterResourceRequirements después de que la función MiniportAddDevice devuelva NDIS_STATUS_SUCCESS. NDIS puede llamar a MiniportFilterResourceRequirements de nuevo en cualquier momento antes de llamar a MiniportRemoveDevice. NDIS puede llamar a MiniportFilterResourceRequirements mientras se ejecuta el miniport. Aunque el miniporte puede modificar la lista de recursos como se describe a continuación, el miniport no debe intentar usar inmediatamente los nuevos recursos. NDIS se detendrá y volverá a inicializar el miniporte con los nuevos recursos; solo debe entonces el miniporte intentar usar los nuevos recursos.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS proporciona una lista de recursos como una estructura de IO_RESOURCE_REQUIREMENTS_LIST en Irp-IoStatus.Information>. Los recursos de la lista se describen mediante IO_RESOURCE_DESCRIPTOR estructuras.
Un controlador de miniport puede modificar la directiva de afinidad de interrupción para cada recurso de tipo CmResourceTypeInterrupt que describe un mensaje de MSI-X. Si una directiva de afinidad solicita tener como objetivo un conjunto específico de procesadores, el controlador de miniporte también establece una máscara KAFFINITY en Interrupt.TargetedProcessors, en la estructura IO_RESOURCE_DESCRIPTOR.
Un controlador de miniport puede quitar todos los recursos de tipo CmResourceTypeInterrupt que son recursos de interrupción de mensajes. A continuación, el controlador puede registrarse para interrupciones de línea en la función MiniportInitializeEx. Si el controlador de miniporte no quita estos recursos de interrupción de mensajes, se producirá un error en el sistema operativo si el controlador intenta registrar interrupciones basadas en línea en MiniportInitializeEx.
Un controlador de miniporte NDIS 6.1 o posterior puede agregar recursos de interrupción de mensajes a la lista de recursos. Por ejemplo, en un equipo con ocho CPU, si la NIC puede generar cuatro mensajes MSI-X y si el sistema operativo habilita las cuatro interrupciones de mensajes, el sistema operativo inicializa cuatro entradas de tabla de mensajes en el espacio de configuración de MSI-X del dispositivo y coloca cuatro recursos de interrupción de mensajes en la lista de recursos. En este caso, dado que el controlador de miniporte requiere más recursos de interrupción de mensajes, puede asignar cuatro recursos de interrupción de mensajes más a la lista de recursos y establecer la afinidad de cada mensaje de MSI-X en una CPU. Si el sistema operativo puede proporcionar más recursos de interrupción de mensajes, el adaptador de miniporte recibe ocho recursos de interrupción de mensajes cuando se inicia. En este caso, los mensajes tienen números comprendidos entre 0 y 7.
A cada recurso de interrupción de mensaje de la lista se le asigna un número de mensaje más adelante que corresponde al orden en que se muestra en la lista. Por ejemplo, el primer recurso de interrupción del mensaje de la lista se asigna al mensaje 0, el segundo se asigna al mensaje 1, etc.
Para asignar una entrada de tabla de MSI-X a una CPU en tiempo de ejecución, el controlador miniport puede llamar a la función NdisMConfigMSIXTableEntry, que asigna una entrada de tabla a un mensaje de MSI-X que ya tiene la afinidad establecida en la CPU. Para obtener más información sobre las operaciones de configuración para las entradas de la tabla MSI-X, consulte Cambio de la afinidad de la CPU de las entradas de la tabla MSI-X.
Para asignar memoria para una nueva lista de requisitos de recursos, use la función NdisAllocateMemoryWithTagPriority . Puede liberar la memoria de la lista de requisitos de recursos antiguos con la función NdisFreeMemory .
Los controladores de miniport no deben modificar otros recursos, como CmResourceTypeMemory y recursos de CmResourceTypePort. Los controladores de miniport deben evitar agregar un nuevo recurso a la lista de recursos. Sin embargo, los controladores de miniporte NDIS 6.1 y versiones posteriores pueden agregar más recursos de interrupción de mensajes. Si el controlador de miniporta agrega más recursos de interrupción de mensajes, no debe quitarlos de la función MiniportStartDevice .
Para obtener más información sobre cómo agregar y quitar recursos, consulte IRP_MN_FILTER_RESOURCE_REQUIREMENTS.