DEVICE_PROBE()
メソッドはデバイスがあるかどうかを知るためにプローブするべきです。
デバイスが存在すれば 0 を、デバイスが見つからなければ
ENXIO
を返すべきです。
プローブの間にその他のエラー (メモリ割当の失敗など) が起こった場合は、
適切なエラーコードが返されるべきです。
1 つのデバイスに 2 つ以上のドライバが当てはまるような場合のために、
優先順位を返すことができます。
この場合、成功の値は 0 以下の値で、
最も大きな値が最も適切であることを意味します。
失敗の値は正の値で表現され、通常の
Unix
エラーコードが目的に応じて使用されるべきです。
ドライバが 0 より小さい成功値を返す場合、
ドライバはそのデバイスにアタッチされるのが
同じドライバであると想定してはいけません。
特に、softc 構造体に格納されたすべての値が
アタッチメソッドで利用可能であると想定してはいけませんし、
また、アタッチメソッドが呼ばれた場合、
プローブの間に割り当てられたあらゆるリソースは解放して
再割り当てしなければなりません。
加えて、そのプローブルーチンはどんなことがあっても副作用がないことが、
絶対必要条件です。
プローブルーチンは、アタッチルーチンが呼び出される前に 2 回以上
呼び出されることがあります。
成功値 0 を返す場合には、
ドライバはそのデバイスがアタッチされるであろうと想定することはできますが、
プローブルーチンが戻った時にいかなるリソースをも保持してはなりません。
成功コード 0 を返すときには、
ドライバは softc は保存されていると決めてかかることができます。