다음을 통해 공유


가상 함수에 대한 PCI 구성 공간 쿼리

참고 이 메서드는 Hyper-V 부모 파티션의 관리 운영 체제에서 실행되는 드라이버를 과도하게 사용하는 경우에만 사용할 수 있습니다.

PCI Express(PCIe) VF(가상 함수)의 미니포트 드라이버는 Hyper-V 자식 파티션의 게스트 운영 체제에서 실행됩니다. 이 때문에 VF 미니포트 드라이버는 VF의 PCIe 구성 공간과 같은 하드웨어 리소스에 직접 액세스할 수 없습니다. PCIe PF(물리적 함수)의 미니포트 드라이버만 VF의 PCIe 구성 공간에 액세스할 수 있습니다. PF 미니포트 드라이버는 Hyper-V 부모 파티션의 관리 운영 체제에서 실행되며 VF 리소스에 대한 권한 있는 액세스 권한이 있습니다.

관리 운영 체제에서 실행되는 지나치게 많은 드라이버는 네트워크 어댑터의 지정된 VF에 대한 PCIe 구성 공간에서 데이터를 읽기 위해 OID_SRIOV_READ_VF_CONFIG_SPACE OID(개체 식별자) 메서드 요청을 실행합니다.

예를 들어 관리 운영 체제에서 실행되는 가상화 스택은 VF 미니포트 드라이버가 NdisMGetBusData를 호출하여 VF PCIe 구성 공간에서 읽을 때 OID_SRIOV_READ_VF_CONFIG_SPACE OID 메서드 요청을 실행합니다.

이 OID 메서드 요청을 실행하기 전에 오버리싱 드라이버는 다음과 같은 방식으로 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 구조체의 멤버를 설정해야 합니다.

  • VFId 멤버는 정보를 읽을 VF의 식별자로 설정해야 합니다.

  • 오프셋 멤버는 데이터를 읽을 VF의 PCIe 구성 공간 내에서 오프셋으로 설정해야 합니다.

  • Length 멤버는 VF의 PCIe 구성 공간에서 읽을 바이트 수로 설정해야 합니다.

  • BufferOffset 멤버는 지정된 VF의 PCI 구성 공간에서 읽은 데이터를 포함하는 버퍼 내의 오프셋(InformationBuffer 멤버가 참조)으로 설정해야 합니다. 이 오프셋은 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 구조체의 시작부터 바이트 단위로 지정됩니다.

OID_SRIOV_READ_VF_CONFIG_SPACE OID 메서드 요청을 처리하는 경우 PF 미니포트 드라이버는 다음 지침을 따라야 합니다.

  • 미니포트 드라이버는 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 구조체의 VFId 멤버로 지정된 VF에 이전에 할당된 리소스가 있는지 확인해야 합니다. 미니포트 드라이버는 OID_NIC_SWITCH_ALLOCATE_VF OID 메서드 요청을 통해 VF에 대한 리소스를 할당합니다. 지정된 VF에 대한 리소스가 할당되지 않은 경우 드라이버는 OID 요청에 실패해야 합니다.

  • 미니포트 드라이버는 요청된 PCIe 구성 공간 데이터를 반환할 수 있을 만큼 버퍼(NDIS_OID_REQUEST 구조의 InformationBuffer 멤버가 참조)가 큰지 확인해야 합니다. 그렇지 않은 경우 드라이버는 OID 요청에 실패해야 합니다.

  • 미니포트 드라이버는 일반적으로 NdisMGetVirtualFunctionBusData 를 호출하여 요청된 PCIe 구성 공간을 쿼리합니다. 그러나 미니포트 드라이버는 PCIe 구성 공간의 이전 읽기 또는 쓰기 작업에서 드라이버가 캐시한 VF에 대한 PCIe 구성 공간 데이터를 반환할 수도 있습니다.

    참고 IHV(독립 하드웨어 공급업체)가 SR-IOV 드라이버 패키지의 일부로 VBD(가상 버스 드라이버)를 제공하는 경우 미니포트 드라이버는 NdisMGetVirtualFunctionBusData를 호출해서는 안 됩니다. 대신 드라이버는 프라이빗 통신 채널을 통해 VBD와 인터페이스하고 VBD가 ReadVfConfigBlock을 호출하도록 요청해야 합니다. 이 함수는 기본 VPCI(가상 PCI) 버스 드라이버에서 지원하는 GUID_VPCI_INTERFACE_STANDARD 인터페이스에서 노출됩니다.

이 OID 메서드 요청에서 성공적으로 반환된 후 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 호출자가 할당한 버퍼에 대한 포인터가 포함됩니다. 이 버퍼는 다음을 포함하도록 형식이 지정됩니다.