Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

pciv_send() インタフェース

pciv_send(9F) インタフェースは、SR-IOV に対応した PF および VF ドライバが互いに通信を行うために使用されます。PF ドライバはいずれの VF ドライバとも通信できますが、VF ドライバはそれ自身の PF ドライバとしか通信できません。

int pciv_send(dev_info_t *dip, pciv_pvp_req_t *req

ここでは:

dip

dev_info 構造体へのポインタ。

req

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;

ここでは:

pvp_dstfunc

PF ドライバから呼び出された場合、VF インデックスの範囲は 1 から num_vf になります。呼び出し元が VF ドライバの場合、これは常に PCIV_PF にすべきです。

pvp_buf

送信対象となる呼び出し元のバッファーのバッファーアドレス。

pvp_nbyte

送信されるバイトの数 (8K 未満でなければならない)。

pvp_cb

pvp_flagPCIV_NOWAIT として設定された場合のコールバック関数のポインタ。

pvp_flagPCIV_NOWAIT に設定した場合、呼び出しがすぐに戻り、pvp_buf のデータが宛先に送信される前に pvp_cb のコールバックルーチンが呼び出されます。呼び出し元はその後、コールバックルーチン内でバッファーを解放することを許可されます。

typedef void (*buf_cb_t)(int rc, caddr_t buf, size_t size, caddr_t cb_arg);

ここでは:

rc

送信用の DDI リターンコード。

buf

送信対象となる呼び出し元のバッファーのバッファーアドレス。

size

送信されるバイトの数。

cb_arg

呼び出し元がルーチンの呼び出し時に設定した入力引数。

pvp_cb_arg

pvp_flagPCIV_NOWAIT として設定された場合の、pvp_cb のコールバック入力引数。

pvp_flag
  • PCIV_NOWAIT – 受信側の応答を待ちません。

  • PCIV_WAIT – これがデフォルトの状態です。受信側から送信の確認を受け取るまで待ちます。

pciv_send() インタフェースは次のいずれかの戻り値を返します。

DDI_SUCCESS

バッファーの送信が成功しました。

DDI_ENOTSUP

デバイスドライバがこの処理をサポートしていません。呼び出し元はハードウェアメールボックスなど、その他のメカニズムを使用できます。

DDI_EINVAL

pvp_nbyte または pvp_dstfunc が無効です。

DDI_ENOMEM

リソース不足により処理が失敗しました。

DDI_ETRANSPORT

着信した送信を処理するためのコールバックが、リモート側で登録されませんでした。

DDI_FAILURE

不明な理由により失敗しました。