Udostępnij przez


MSI-X filtrowanie zasobów

Sterowniki Miniport muszą zarejestrować funkcję filtru wymagań zasobów, jeśli obsługują MSI-X i zmienią przypisanie przerwań dla każdej wiadomości MSI-X lub usuną zasoby przerwań wiadomości.

NDIS wywołuje funkcję MiniportFilterResourceRequirements, gdy NDIS otrzymuje pakiet żądania I/O (IRP) IRP_MN_FILTER_RESOURCE_REQUIREMENTS dla karty interfejsu sieciowego (NIC). NDIS wywołuje metodę MiniportFilterResourceRequirements po zakończeniu działania sterowników funkcji bazowych w stosie urządzenia IRP.

NDIS wywoła funkcję MiniportFilterResourceRequirements po tym, jak funkcja MiniportAddDevice zwróci NDIS_STATUS_SUCCESS. Usługa NDIS może wywołać funkcję MiniportFilterResourceRequirements ponownie w dowolnym momencie przed wywołaniem funkcji MiniportRemoveDevice. Usługa NDIS może wywołać funkcję MiniportFilterResourceRequirements, gdy miniport jest uruchomiony. Chociaż miniport może zmodyfikować listę zasobów zgodnie z poniższym opisem, miniport nie powinien natychmiast próbować korzystać z nowych zasobów. NDIS w końcu zatrzyma i ponownie zainicjuje miniport przy użyciu nowych zasobów; tylko wtedy miniport powinien podjąć próbę użycia nowych zasobów.

IRP_MN_FILTER_RESOURCE_REQUIREMENTS udostępnia listę zasobów jako strukturę IO_RESOURCE_REQUIREMENTS_LIST w Irp->IoStatus.Information. Zasoby na liście są opisane przez struktury IO_RESOURCE_DESCRIPTOR .

Sterownik miniportu może modyfikować zasady przypisania przerwań dla każdego zasobu typu CmResourceTypeInterrupt, który opisuje komunikat MSI-X. Jeśli polityka koligacji żąda ukierunkowania dla określonego zestawu procesorów, sterownik miniportu ustawia również maskę KAFFINITY w Interrupt.TargetedProcessors w strukturze IO_RESOURCE_DESCRIPTOR.

Sterownik miniportu może usunąć wszystkie zasoby typu CmResourceTypeInterrupt , które są zasobami przerwania komunikatu. Sterownik może następnie zarejestrować przerwania liniowe w funkcji MiniportInitializeEx. Jeśli sterownik miniportu nie usunie tych zasobów przerwania komunikatu, system operacyjny ulegnie awarii, jeśli sterownik spróbuje zarejestrować przerwania oparte na wierszu w MiniportInitializeEx.

Sterownik miniportu NDIS w wersji 6.1 lub nowszej może dodawać zasoby przerwań komunikatów do listy zasobów. Na przykład na komputerze z ośmioma procesorami, jeśli karta sieciowa może wygenerować cztery komunikaty MSI-X i system operacyjny włączy cztery przerwania komunikatów, to system operacyjny inicjuje cztery wpisy tabeli komunikatów w przestrzeni konfiguracji urządzenia MSI-X i umieszcza cztery zasoby przerwania komunikatów na liście zasobów. W takim przypadku, ponieważ sterownik miniportu wymaga więcej zasobów przerwania komunikatów, może przydzielić cztery więcej zasobów przerwania komunikatów do listy zasobów i ustawić koligację każdego komunikatu MSI-X do procesora CPU. Jeśli system operacyjny może zapewnić więcej zasobów przerwania komunikatów, karta miniport odbiera osiem zasobów przerwania komunikatów po uruchomieniu. W takim przypadku komunikaty mają liczby z zakresu od 0 do 7.

Każdemu zasobowi przerwania wiadomości na liście jest później przypisywany numer wiadomości, który odpowiada jego kolejności na liście. Na przykład pierwszy komunikat przerwania zasobów na liście jest przypisany do komunikatu 0, drugi jest przypisany do komunikatu 1 itd.

Aby przypisać wpis tabeli MSI-X do procesora w czasie wykonywania, sterownik miniportu może wywołać funkcję NdisMConfigMSIXTableEntry, która mapuje wpis tabeli na komunikat MSI-X, mający już ustawioną koligację na procesor. Aby uzyskać więcej informacji na temat operacji konfiguracji dla wpisów tabeli MSI-X, zobacz Zmienianie przypisania CPU wpisów tabeli MSI-X.

Aby przydzielić pamięć dla nowej listy wymagań dotyczących zasobów, użyj funkcji NdisAllocateMemoryWithTagPriority . Możesz zwolnić pamięć dla starej listy wymagań dotyczących zasobów za pomocą funkcji NdisFreeMemory .

Sterowniki miniportu nie powinny modyfikować innych zasobów, takich jak cmResourceTypeMemory i zasoby CmResourceTypePort . Sterowniki miniportu powinny unikać dodawania nowego zasobu do listy zasobów. Jednak sterowniki NDIS 6.1 i nowszych miniportów mogą dodawać więcej zasobów przerwania komunikatów. Jeśli sterownik miniportu dodaje więcej zasobów przerwania komunikatów, nie może usunąć ich z funkcji MiniportStartDevice .

Aby uzyskać więcej informacji na temat dodawania i usuwania zasobów, zobacz IRP_MN_FILTER_RESOURCE_REQUIREMENTS.