拡張ホスト・コントローラー・アダプター・デバイス・ドライバー
目的
アダプター・デバイス・ドライバーの拡張ホスト・コントローラー・インターフェース (EHCI) 仕様をサポートします。
構文
#include <sys/hcdi.h>
#include <sys/usbdi.h>
#include <sys/usb.h>説明
/dev/usbhcn スペシャル・ファイルは、USB (Universal Serial Bus) ホスト・コントローラー・アダプター・デバイスへのアクセスを可能にするインターフェースを提供します。 これらのファイルは、複数の USB クライアント・ドライバーと USB システム (またはプロトコル・ドライバー) が同じ USB ホスト・コントローラー・アダプター上の USB デバイスに同時にアクセスできるように、アダプター・リソースを管理します。
USB 2.0 設計では、USB Implementers Forum (USB-IF) は、高速データ転送のみをサポートする EHCI と呼ばれる単一仕様を実装しました。 EHCI ベースのアダプターは、USB 1.0 および 1.1 デバイスへのオープン・ホスト・コントローラー・インターフェース (OHCI) 接続をサポートするコンパニオン・コントローラーと呼ばれる仮想ホスト・コントローラー機能で構成される多機能 PCI デバイスです。 EHCI アダプターのオブジェクト・データ・マネージャー (ODM) alt_usb_ctrl 属性は、コンパニオン OHCI コントローラーのロケーション値を提供します。
アダプター・デバイス・ドライバー・エントリー・ポイント・サブルーチン
USB アダプター・デバイス・ドライバーは、 open、 close、 ioctl、および config の各エントリー・ポイントのみをサポートします。 read および write エントリー・ポイントはサポートされていません。
サブルーチンのオープンとクローズ
open サブルーチンは、 open システム・コールのパラメーターとして指定された装置番号を、内部アダプター装置構造に関連付けます。 open サブルーチンは、アダプター構造体を検出すると、対応するアダプター・デバイスが構成済みであり、非アクティブとマークされていないことを検証します。 open サブルーチンは、アダプター構造体を検出しないと、エラーを戻します。 拡張エラー処理 (EEH) 機能が使用可能になっている場合、 open サブルーチンは EEH イベントの処理中にデバイスにアクセスしません。
ioctl サブルーチン
ioctl サブ操作をサポートします。| 操作 | 説明 |
|---|---|
| HCD REGISTER_HC | USB システム (またはプロトコル・ドライバー) とホスト・コントローラー・ドライバーの間のコール・ベクトルを登録します。 コール・ベクトルが登録されると、USB システム (またはプロトコル・ドライバー) とホスト・コントローラー・ドライバーの間のすべての通信は、これらのベクトルによって処理されます。 |
| HCD_REQUEST_COMPANIONS | コンパニオン OHCI ホスト・コントローラーに関するポート・ルーティング情報を要求します。 |
EHCI アダプター・デバイス・ドライバーによって戻されるエラー条件の要約
EHCI アダプター・デバイス・ドライバーの USBstatus (SBstatus) 戻り値として考えられる値は、以下のとおりです。
| エラー・コード | 説明 |
|---|---|
| Usbd_aborted | 関連付けられた IRP が終了しました。 |
| USBD_ABORTING | 関連する入出力要求パケット (IRP) に障害が発生しています。 |
| SBD アクティブ | 論理パイプは作動中で、停止されません。 |
| Usbd_BID ハンドル | 呼び出しベクトル・インターフェースを介してパラメーターとして渡されたハンドルが無効です。 |
| 使用中の帯域幅 | 帯域幅要件のため、論理パイプ接続が失敗しました。 |
| USBD 接続 | 論理パイプは既に接続されています。 |
| SBD データ | デバイスからの応答が無効です。 |
| USBD 切断 | トランザクションに関連付けられているデバイスが切断されるか、削除されます。 |
| SBD エラー | 一般エラー条件。 |
| 使用中の SBD 停止 | トランザクションに関連付けられている論理パイプは停止します。 |
| USBD パワー | 装置が電力予算を超えました。 |
| USBD 速度 | 装置速度の不一致のため、ポート・リセット操作が失敗しました。 |
| 使用中の在庫管理単位 | トランザクションに関連付けられている論理パイプが遅延しています。 |
| USBD_TIMEOUT (USBD タイムアウト) | 入出力操作がタイムアウトになりました。 |
呼び出しベクトル
USB 構成方式を実行すると、 /dev/usb0 USB システム・ドライバー (USBD) 特殊ファイルが開き、 USBD_REGISTER_HC ioctl 操作を使用して、検出され、使用可能な各 USB ホスト・コントローラーを USBD に登録しようとします。 USBD_REGISTER_HC ioctl 操作が処理されると、USBD はホスト・コントローラー・ドライバーを開き、 HCD_REGISTER_HC ioctl 操作を使用してホスト・コントローラー・ドライバー内に保管されている呼び出しベクトルの登録を要求します。 呼び出しベクトルが USBD に登録されると、USBD とホスト・コントローラー・ドライバーの間のそれ以降のすべての通信は、呼び出しベクトルによって処理されます。 呼び出しベクトルの要約を以下に示します。
| 呼び出しベクトル | 説明 |
|---|---|
| hcdGetFrame | 接続されたホスト・コントローラーから現行フレーム番号を取得します。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdPipeAbort | 入出力バッファーの処理を取り消します。 入出力バッファーによって指定されたパイプは、 hcdPipeAbort 呼び出しベクトルが呼び出される前に既に停止しています。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdPipeAddIOB | 未解決の入出力バッファーの最大数を増やします。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdPipeClear | 特定のエンドポイントでの入出力操作をクリア、一時停止解除、および再始動します。 この呼び出しベクトルが呼び出されると、関数はリングが一時停止状態にあるかどうかを検査します。 |
| hcdPipeConnect | 特定の USB デバイス上のエンドポイントへのパイプ接続を作成します。 |
| hcdPipeDisconnect | 特定の USB デバイス上のエンドポイントとの以前に確立されたパイプ接続を削除します。 |
| hcdPipeHalt | ホスト・コントローラーの観点からパイプを停止します。 保留中の入出力操作はすべて保留状態のままです。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdPipeIO | USB デバイスで入出力操作を実行します。 入出力操作は、制御、バルク、等分、および割り込みの転送タイプにすることができます。 |
| hcdPipeResetToggle | データ同期化トグル・ビットを DATA0にリセットします。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdPipeStatus | ホスト・コントローラーの観点からパイプの状況を取得します。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdShutdownComplete | usbdReqHCshutdown 要求が完了したことをホスト・コントローラー・ドライバーに通知します。 この呼び出しベクトルは、USBD によって提供されます。 |
| hcdUnregisterHC | ホスト・コントローラーを USBD から登録抹消します。 |
| usbdBusMap | バス・マスタリング用のメモリーをマップします。 この呼び出しベクトルは、拡張可能ホスト・コントローラー・ドライバー (xHCD) によって提供されます。 |
| usbdPostIOB | 入出力バッファーを廃棄します。 この呼び出しベクトルは、アダプター・ドライバーによって提供されます。 |
| usbdReqHCrestart | この呼び出しベクトルは、アダプターでエラーが検出され、このエラーからアダプター・ドライバーをリカバリーするためにアダプターを再始動する必要がある場合に提供されます。 |
| usbdReqHCshutdown | この呼び出しベクトルは、ホスト・コントローラーの取り外し中に提供されます。 |
| usbdReqHCunregister | アダプター・ドライバーの CFG TERM 関数は、ホスト・コントローラーを登録抹消するように USBD に要求します。 この呼び出しベクトルは、ホスト・コントローラーの取り外し中に提供されます。 |