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 ドライバはすべて、その機能を PCIe フレームワークに知らせるために、flags 引数に DDI_CB_FLAG_SRIOV フラグを設定して ddi_cb_register(9F) を呼び出す必要があります。ddi_cb_register() 関数は、ドライバの接続ルーチン内で呼び出す必要があります。PF デバイスドライバがその接続ルーチン内で pciv_vf_config() 関数を呼び出して VF を有効化する場合、PF ドライバは VF の有効化後に ddi_cb_register() 関数を呼び出すべきです。
フレームワークは、次のアクションを実行する際に DDI_CB_FLAG_SRIOV フラグを必要とします。
VF をサポートできるデバイスドライバが存在することを Sparc OVM エージェントに示します。すると、Sparc OVM エージェントは VF デバイスの作成を許可します。この機能がないと、ユーザーは SPARC プラットフォーム上で VF を作成できません。
フレームワークは、VF を無効にする前とあとで、PF ドライバに対してコールバックを発行します。これにより、PF ドライバは VF サポートのための内部管理作業を容易に行えるようになります。