SR-IOV 驱动程序必须使用 pci_param_get(9F) 接口来获取当前配置的参数的列表。此接口在驱动程序连接期间或任何其他合适的时间被调用。返回的数据是指向参数列表的指针,包含 PF 及其相应 VF 设备的名称-值信息。
int pci_param_get(dev_info_t *dip, pci_param_t *php)
其中:
指向 dev_info 结构的指针
指向 param 句柄 pci_param_t 的指针。
在调用 pci_param_get 接口后,设备驱动程序应执行以下步骤来获取 PF 和 VF 的参数列表:
调用 pci_plist_get(9F) 接口来获取 PF 设备的参数列表,调用 pci_plist_getvf(9F) 接口来获取所配置的 VF 的参数列表。
调用 pci_plist_lookup(9F) 接口来获取设备参数。
验证所有的 PF 和 VF 参数。
如果参数与当前配置不匹配,则驱动程序应当使设备连接失败。
调用 pci_param_free(9F) 接口来释放用于获取 PF 和所配置的 VF 设备的参数的参数句柄指针。请参见Example 21–2。
名称-值对是针对每台设备分别定义的。PF 有一组名称-值对,每个已配置的 VF 也有一组名称-值对。名称-值对是可选的,可以为任何或所有设备省略名称-值对。
示例 21-2 SR-IOV pci_param_get(9F) 例程 pci_param_t my_params;
pci_plist_t pf_plist;
pci_plist_t vf_plist[8];
labelp = NULL;
rval = pci_param_get(dip,&my_params);
if (rval || (my_params == NULL)) {
cmn_err(CE_NOTE, "No params available\n");
goto continue_with_attach;
}
rval = pci_plist_get(my_params, &pf_list);
if (rval || (pf_plist == NULL)) {
cmn_err(CE_NOTE, "No params for PF \n");
goto continue_with_attach;
}
for (i = 0; i < 8; i++) {
rval = pci_plist_getvf(my_params, i, &vf_plist[i]);
if (rval || (vf_plist[i] == NULL)) {
cmn_err(CE_WARN, "No params for VF %d\n", i);
continue;
}
}
pci_param_free(my_params);
/*
* Validate the PF and VF params lists.
* Fail the attach if the params are incompatible or exceed the
* resources available.
*/
continue_with_attach: