PCI Express(PCIe) VF(가상 함수)의 미니포트 드라이버는 Hyper-V 자식 파티션의 게스트 운영 체제에서 실행됩니다. 이 때문에 VF 미니포트 드라이버는 VF의 PCI 구성 공간과 같은 하드웨어 리소스에 직접 액세스할 수 없습니다. PCIe 물리적 함수(PF)의 미니포트 드라이버만 VF의 PCI 구성 공간에 액세스할 수 있습니다. PF 미니포트 드라이버는 Hyper-V 부모 파티션의 관리 운영 체제에서 실행되며 VF 리소스에 대한 권한 있는 액세스 권한이 있습니다.
상위 드라이버(예: 가상화 스택)는 VF 미니포트 드라이버가 NdisMSetBusData를 호출하여 PCI 구성 공간에 데이터를 쓸 때 OID_SRIOV_WRITE_VF_CONFIG_SPACE OID 설정 요청을 실행합니다.
이 OID 집합 요청을 실행하기 전에 오버리싱 드라이버는 다음과 같은 방식으로NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS 구조체의 멤버를 설정해야 합니다.
VFId 멤버를 정보를 쓸 VF의 식별자로 설정합니다.
Offset 멤버를 데이터를 쓸 VF의 PCI 구성 공간 내의 오프셋으로 설정합니다.
Length 멤버를 VF의 PCI 구성 공간에 쓸 바이트 수로 설정합니다.
BufferOffset 멤버를,InformationBuffer 멤버에서 참조하는 버퍼 내 오프셋으로 설정하여 지정된 VF의 PCI 구성 공간에 기록될 데이터를 포함하게 합니다. 이 오프셋은 NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS 구조체의 시작 부분에서 바이트 단위로 지정됩니다.
OID_SRIOV_WRITE_VF_CONFIG_SPACEOID 메서드 요청을 처리하는 경우 PF 미니포트 드라이버는 다음 지침을 따라야 합니다.
PF 미니포트 드라이버는 NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS 구조체의 VFId 멤버로 지정된 VF에 이전에 할당된 리소스가 있는지 확인해야 합니다. PF 미니포트 드라이버는 OID_NIC_SWITCH_ALLOCATE_VFOID 메서드 요청을 통해 VF에 대한 리소스를 할당합니다.
지정된 VF에 대한 리소스가 할당되지 않은 경우 드라이버는 OID 요청에 실패해야 합니다.
PF 미니포트 드라이버는 NdisMSetVirtualFunctionBusData 호출하여 요청된 PCI 구성 공간에 씁니다. 그러나 PF 미니포트 드라이버는 PCI 구성 공간의 이전 읽기 또는 쓰기 작업에서 드라이버가 캐시한 VF에 대한 PCI 구성 공간 데이터를 반환할 수도 있습니다.
참고 IHV(독립 하드웨어 공급업체)가 SR-IOV 드라이버 패키지일부로 VBD(가상 버스 드라이버)를 제공하는 경우 PF 미니포트 드라이버는 NdisMSetVirtualFunctionBusData호출해서는 안 됩니다. 대신, 드라이버는 프라이빗 통신 채널을 통해 VBD와 인터페이스하고, VBD에 SetVirtualFunctionData을 호출하도록 요청해야 합니다. 이 함수는 기본 VPCI(가상 PCI) 버스 드라이버에서 지원하는 GUID_VPCI_INTERFACE_STANDARD 인터페이스에서 노출됩니다.
PF 미니포트 드라이버가 OID 요청을 성공적으로 완료할 수 있는 경우 드라이버는 요청된 PCI 구성 공간 데이터를 NDIS_OID_REQUEST 구조의 InformationBuffer 멤버가 참조하는 버퍼에 복사해야 합니다. 드라이버는 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 구조체의BufferOffset 멤버가 지정한 오프셋의 버퍼에 데이터를 복사합니다.