來自 PF Miniport 驅動程式的反向通道通訊
PCI Express (PCIe 的迷你埠驅動程式) 實體函式 (PF) 與 PCIe 虛擬函式 (VF) 的迷你埠驅動程式通訊,以發出 VF 組態區塊資料變更的相關通知。 PF 迷你埠驅動程式會發出這些通知,使 VF 組態區塊中的資料 失效 。 為了回應此通知,VF 迷你埠驅動程式可以將反向通道要求發出給 PF 迷你埠驅動程式,以從不正確 VF 組態區塊讀取資料。
VF 組態區塊用於 PF 與 VF 迷你埠驅動程式之間的反向通道通訊。 IHV 可以定義裝置的一或多個 VF 組態區塊。 每個 VF 組態區塊都有 IHV 定義的格式、長度和區塊識別碼。
注意 每個 VF 組態區塊的資料只會由 PF 和 VF 迷你埠驅動程式使用。 此資料的格式和內容與 Windows 作業系統的元件不透明。
發出及處理無效 VF 設定資料的通知時,會發生下列步驟:
在客體作業系統中,NDIS 發出 IOCTL_VPCI_INVALIDATE_BLOCK的 I/O 控制要求。 當此 IOCTL 完成時,NDIS 會收到 VF 設定資料已變更的通知。
在 Hyper-V 父分割區中執行的管理作業系統中,會發生下列步驟:
PF 迷你埠驅動程式會呼叫 NdisMInvalidateConfigBlock 函式,以通知 NDIS VF 設定資料已變更且不再有效。 驅動程式會將 BlockMask 參數設定為 ULONGLONG 位元遮罩,指定哪些 VF 組態區塊已變更。 位元遮罩中的每個位都會對應至 VF 組態區塊。 如果位設定為一個,則對應 VF 組態區塊中的資料已變更。
NDIS 會發出虛擬化堆疊,此堆疊會在管理作業系統中針對 VF 組態區塊資料的變更發出訊號。 虛擬化堆疊會快取 BlockMask 參數資料。
注意 每次 PF 迷你埠驅動程式呼叫 NdisMInvalidateConfigBlock時,虛擬化堆疊 ORs 會在其快取中具有目前值的 BlockMask 參數資料。
虛擬化堆疊會通知虛擬 PCI () 驅動程式,該驅動程式會在客體作業系統中執行,以瞭解 VF 組態資料的失效。 虛擬化堆疊會將快取的 BlockMask 參數資料傳送至 APII 驅動程式。
在 Hyper-V 子分割中執行的客體作業系統中,會發生下列步驟:
JSONI 驅動程式會將快取的 BlockMask 參數資料儲存在與IOCTL_VPCI_INVALIDATE_BLOCK要求相關聯之VPCI_INVALIDATE_BLOCK_OUTPUT結構的BlockMask成員中。
此IOCTL_VPCI_INVALIDATE_BLOCK驅動程式已成功完成 IOCTL_VPCI_INVALIDATE_BLOCK 要求。 發生這種情況時,NDIS 會將物件識別碼發出 (OID) 方法要求, OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 至 VF 迷你埠驅動程式。 NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO會在 OID 要求中傳遞。 這個結構包含快取的 BlockMask 參數資料。
NDIS 也會發出另一個 IOCTL_VPCI_INVALIDATE_BLOCK 要求,以處理 VF 設定資料變更的後續通知。
當 VF 驅動程式處理 OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 要求時,它可以藉由呼叫 NdisMReadConfigBlock,從指定的 VF 組態區塊讀取資料。 如需此程式的詳細資訊,請參閱 來自 VF 迷你埠驅動程式的反向通道通訊。