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: