pciv_vf_config(9F) 接口由 SR-IOV 驱动程序使用,用于获取关于 VF 的配置信息,还用于在驱动程序连接期间配置 VF。
#include <sys/sunddi.h> int pciv_vf_config(dev_info_t *dip, pciv_config_vf_t *vfcfg_p)
其中:
指向 dev_info 结构的指针。
指向 pciv_config_vf 结构的指针。
typedef enum { PCIV_VFCFG_PARAM, PCIV_VF_ENABLE, PCIV_VF_DISABLE PCIV_EVT_VFENABLE_PRE, PCIV_EVT_VFENABLE_POST, PCIV_EVT_VFDISABLE_PRE, PCIV_EVT_VFDISABLE_POST } pciv_vf_config_cmd_t;
pciv_config_vf 结构包含以下字段:
typedef struct pciv_config_vf { int version; pciv_vf_config_cmd_t cmd; uint16_t num_vf; uint16_t first_vf_offset; uint16_t vf_stride; boolean_t ari_cap; uint32_t page_size; } pciv_config_vf_t;
其中:
版本号。
用于指示是否调用此接口来获取配置信息或连接 VF。
PCIV_VFCFG_PARAM-获取配置信息
PCIV_VF_ENABLE-启用 VF
PCIV_EVT_VFENABLE_PRE
PCIV_EVT_VFDISABLE_PRE
PCIV_EVT_VFENABLE_POST
PCIV_EVT_VFDISABLE_POST
在后端定义的 VF 的数量。
两个 VF 之间的距离。
第一个 VF 与 PF 之间的偏移量。
具有 ARI 功能的分层结构。
指定系统页大小。
驱动程序首先应在将 cmd 字段设置为 PCIV_VFCFG_PARAM 的情况下调用 pciv_vfconfig() 接口来获取配置信息。然后,驱动程序应在将 cmd 字段设置为 PCIV_VF_ENABLE 的情况下再次调用此接口来配置 VF。
驱动程序可能会返回以下错误代码之一:
DDI_SUCCESS
DDI_FAILURE
PCIV_REQRESET
PCIV_REQREATTACH
在调用 pciv_vf_config() 接口来启用 VF 之前,驱动程序不必通过设置 DDI_CB_FLAG_SRIOV 位来注册回调。不过,要在 SR-IOV 框架未配置 VF 时接收通知,驱动程序必须在启用 VF 后通过设置 DDI_CB_FLAG_SRIOV 位来注册回调。有关更多信息,请参见Driver Callbacks。
可支持 VF 的所有 PF 驱动程序应该通过在标志参数中设置 DDI_CB_FLAG_SRIOV 标志的情况下调用 ddi_cb_register(9F) 来通知 PCIe 框架它们的容量。在驱动程序的连接例程中必须调用 ddi_cb_register() 函数。如果 PF 设备驱动程序在其连接例程中调用 pciv_vf_config() 函数来启用 VF,则 PF 驱动程序应在启用 VF 后调用 ddi_cb_register() 函数。
框架需要使用 DDI_CB_FLAG_SRIOV 标志才能执行以下操作:
向 Sparc OVM 代理指示存在可支持 VF 的设备驱动程序。Sparc OVM 代理随后将允许创建 VF 设备。如果没有此功能,用户将无法在 Sparc 平台上创建 VF。
框架在禁用 VF 前后将回调 PF 驱动程序。这将有助于 PF 驱动程序执行内部记帐以持续支持 VF。