Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ruft die übersetzte Ressource für ein bestimmtes Basisadressregister (BAR) ab.
Syntax
SRIOV_GET_RESOURCE_FOR_BAR SriovGetResourceForBar;
NTSTATUS SriovGetResourceForBar(
[in] PVOID Context,
[in] USHORT VfIndex,
[in] USHORT BarIndex,
[out] PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource
)
{...}
Parameter
[in] Context
Ein Zeiger auf einen vom Treiber definierten Kontext.
[in] VfIndex
Ein nullbasierter Index des VF, der abgefragt wird.
[in] BarIndex
Der Index der BALKEN (zwischen 0 und 5).
[out] Resource
Ein Zeiger auf eine CM_PARTIAL_RESOURCE_DESCRIPTOR Struktur, die mit den übersetzten Hardwareressourcen für die angegebene LEISTE gefüllt ist.
Rückgabewert
Gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Geben Sie andernfalls einen geeigneten NTSTATUS- Fehlercode zurück.
Bemerkungen
Diese Rückruffunktion wird vom PF-Treiber (Physical Function) implementiert. Es wird aufgerufen, wenn das System auf die übersetzten Hardwareressourcen einer bestimmten BAR einer virtuellen Funktion zugreifen möchte.
Der PF-Treiber registriert seine Implementierung durch Festlegen des GetResourceForBar- Mitglieds der SRIOV_DEVICE_INTERFACE_STANDARD, Konfigurieren einer WDF_QUERY_INTERFACE_CONFIG-Struktur und Aufrufen WdfDeviceAddQueryInterface.
Hier ist eine Beispielimplementierung dieser Rückruffunktion.
NTSTATUS
Virtualization_GetResourceForBar(
__inout PVOID Context,
__in USHORT VfIndex,
__in USHORT BarIndex,
__out PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource
)
{
PDEVICE_CONTEXT deviceContext;
PAGED_CODE();
deviceContext = (PDEVICE_CONTEXT)Context;
TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INTERFACE,
"Virtualization_GetResourceForBar received with"
"VFIndex = %d, BarIndex = %d\n",
VfIndex, BarIndex);
NT_ASSERT(BarIndex < PCI_TYPE0_BAR_COUNT);
if(VfIndex >= deviceContext->NumVFs)
{
NT_ASSERT(FALSE);
return STATUS_INVALID_DEVICE_REQUEST;
}
//
// Copy the descriptor for all VFs at the given Bar index
// to the output descriptor.
//
*Resource = deviceContext->AssignedVfBarResources[BarIndex];
if(Resource->Type == CmResourceTypeMemory ||
Resource->Type == CmResourceTypeMemoryLarge)
{
NT_ASSERT((Resource->u.Memory.Length % deviceContext->NumVFs) == 0);
Resource->u.Memory.Length /= deviceContext->NumVFs;
Resource->u.Memory.Start.QuadPart += (Resource->u.Memory.Length * VfIndex);
}
return STATUS_SUCCESS;
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10 |
mindestens unterstützte Server- | Windows Server 2016 |
Zielplattform- | Fenster |
Header- | pcivirt.h |
IRQL- | PASSIVE_LEVEL |