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 用に 1 セット、構成対象 VF ごとに 1 セットずつ存在します。名前-値ペアはオプションであり、デバイスの一部またはすべてで存在していない可能性があります。
使用例 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: