SRIOV_GET_RESOURCE_FOR_BAR回呼函式 (pcivirt.h)
取得特定基位址緩存器 (BAR) 的翻譯資源
語法
SRIOV_GET_RESOURCE_FOR_BAR SriovGetResourceForBar;
NTSTATUS SriovGetResourceForBar(
[in] PVOID Context,
[in] USHORT VfIndex,
[in] USHORT BarIndex,
[out] PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource
)
{...}
參數
[in] Context
驅動程式定義內容的指標。
[in] VfIndex
正在查詢之 VF 之以零起始的索引。
[in] BarIndex
BAR (介於 0 到 5) 之間的索引。
[out] Resource
CM_PARTIAL_RESOURCE_DESCRIPTOR 結構的指標 ,該結構會填入所指定 BAR 的已轉譯硬體資源。
傳回值
如果作業成功,則傳回STATUS_SUCCESS。 否則,傳回適當的 NTSTATUS 錯誤碼。
備註
此回呼函式是由實體函式實作, (PF) 驅動程式。 當系統想要存取虛擬函式特定 BAR 的已翻譯硬體資源時,就會叫用它。
PF 驅動程式會藉由設定SRIOV_DEVICE_INTERFACE_STANDARD的 GetResourceForBar 成員、設定 WDF_QUERY_INTERFACE_CONFIG 結構,以及呼叫 WdfDeviceAddQueryInterface 來註冊其實作。
以下是這個回呼函式的範例實作。
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;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 |
最低支援的伺服器 | Windows Server 2016 |
目標平台 | Windows |
標頭 | pcivirt.h |
IRQL | PASSIVE_LEVEL |