编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

pci_param_get() 接口

SR-IOV 驱动程序必须使用 pci_param_get(9F) 接口来获取当前配置的参数的列表。此接口在驱动程序连接期间或任何其他合适的时间被调用。返回的数据是指向参数列表的指针,包含 PF 及其相应 VF 设备的名称-值信息。

int pci_param_get(dev_info_t *dip, pci_param_t *php)

其中:

dip

指向 dev_info 结构的指针

php

指向 param 句柄 pci_param_t 的指针。

在调用 pci_param_get 接口后,设备驱动程序应执行以下步骤来获取 PF 和 VF 的参数列表:

  1. 调用 pci_plist_get(9F) 接口来获取 PF 设备的参数列表,调用 pci_plist_getvf(9F) 接口来获取所配置的 VF 的参数列表。

  2. 调用 pci_plist_lookup(9F) 接口来获取设备参数。

  3. 验证所有的 PF 和 VF 参数。

  4. 如果参数与当前配置不匹配,则驱动程序应当使设备连接失败。

  5. 调用 pci_param_free(9F) 接口来释放用于获取 PF 和所配置的 VF 设备的参数的参数句柄指针。请参见Example 21–2


注 - 应在配置 VF 之前完成参数验证。

名称-值对是针对每台设备分别定义的。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: