pciv_send(9F) インタフェースは、SR-IOV に対応した PF および VF ドライバが互いに通信を行うために使用されます。PF ドライバはいずれの VF ドライバとも通信できますが、VF ドライバはそれ自身の PF ドライバとしか通信できません。
int pciv_send(dev_info_t *dip, pciv_pvp_req_t *req
ここでは:
dev_info 構造体へのポインタ。
pciv_pvp_req_t 構造体へのポインタ。
pciv_pvp_req_t の構造:
typedef struct pciv_pvp_req { int pvp_dstfunc; caddr_t pvp_buf; size_t pvp_nbyte; buf_cb_t pvp_cb; caddr_t pvp_cb_arg; uint_t pvp_flag; } pciv_pvp_req_t;
ここでは:
PF ドライバから呼び出された場合、VF インデックスの範囲は 1 から num_vf になります。呼び出し元が VF ドライバの場合、これは常に PCIV_PF にすべきです。
送信対象となる呼び出し元のバッファーのバッファーアドレス。
送信されるバイトの数 (8K 未満でなければならない)。
pvp_flag が PCIV_NOWAIT として設定された場合のコールバック関数のポインタ。
pvp_flag を PCIV_NOWAIT に設定した場合、呼び出しがすぐに戻り、pvp_buf のデータが宛先に送信される前に pvp_cb のコールバックルーチンが呼び出されます。呼び出し元はその後、コールバックルーチン内でバッファーを解放することを許可されます。
typedef void (*buf_cb_t)(int rc, caddr_t buf, size_t size, caddr_t cb_arg);
ここでは:
送信用の DDI リターンコード。
送信対象となる呼び出し元のバッファーのバッファーアドレス。
送信されるバイトの数。
呼び出し元がルーチンの呼び出し時に設定した入力引数。
pvp_flag が PCIV_NOWAIT として設定された場合の、pvp_cb のコールバック入力引数。
PCIV_NOWAIT – 受信側の応答を待ちません。
PCIV_WAIT – これがデフォルトの状態です。受信側から送信の確認を受け取るまで待ちます。
pciv_send() インタフェースは次のいずれかの戻り値を返します。
バッファーの送信が成功しました。
デバイスドライバがこの処理をサポートしていません。呼び出し元はハードウェアメールボックスなど、その他のメカニズムを使用できます。
pvp_nbyte または pvp_dstfunc が無効です。
リソース不足により処理が失敗しました。
着信した送信を処理するためのコールバックが、リモート側で登録されませんでした。
不明な理由により失敗しました。