Windows 7 のデバイス ドライバー インターフェイス (DDI) の変更点

Windows 7 には、カーネル モード ドライバー フレームワーク (KMDF) を使って実装された新しい IEEE 1394 バス ドライバー、1394ohci.sys が含まれています。 新しい 1394 バス ドライバーは、ポート/ミニポート構成のレガシ IEEE バス ドライバー (1394bus.sys および ochi1394.sys) に代わるものです。 1394ohci.sys でサポートされる新機能に新しい DDI が追加されました。 さらに、一部の 1394 DDI は 1394b 仕様の定義よりも速い速度をサポートするように変更され、1394 クライアント ドライバーの開発が簡単になるように改善されました。

このトピックでは、新しい 1394 バス ドライバーをサポートする DDI の一般的な変更について説明します。

拡張バス リセット通知

1394ohci.sys バス ドライバーは、拡張バス リセット通知をサポートしています。 この通知は、バス リセット通知のコンテキストで 1394 クライアント ドライバーに、最新世代のバス (世代数やノード ID など) に関する情報を返します。 この情報により、1394 クライアント ドライバーは、世代数、ノード ID、その他の情報の取得をバス リセット通知ハンドラーと同期する必要がなくなります。

拡張バス リセット通知に登録するために、クライアント ドライバーは既存の REQUEST_BUS_RESET_NOTIFICATION I/O 要求を使用し、新しい EXTENDED_NOTIFICATION_ROUTINE フラグを u.BusResetNotification.fulFlags パラメーターに指定します。 EXTENDED_NOTIFICATION_ROUTINE フラグを指定すると、u.BusResetNotification.ResetContext パラメーターは BUS_RESET_DATA 構造体を指します。

PHY パケット サポート用の新しい IOCTL

1394ohci.sys バス ドライバーは、IEEE-1394a 仕様で定義されているように、PHY パケットを送受信するための次の新しい DDI を公開します。

REQUEST_SEND_PHY_CONFIG_PACKET ではなく、新しい REQUEST_SEND_PHY_PACKET I/O 要求を使用する必要があります。 後者の I/O 要求では世代数を指定できません。これにより、正しくない世代の 1394 バスに PHY パケットが送信される可能性があります。

構成 ROM を取得する新しい IOCTL

新しい IOCTL、REQUEST_GET_CONFIG_ROM は、ノード構成 ROM の内容を返します。最大サイズは 1 KB です。 1394ohci.sys バス ドライバーは、レガシ 1394 バス ドライバーと同じ 1 KB 構成 ROM のみをサポートします。

IEEE バス ドライバー DDI の変更

次の表では、新しい 1394 バス ドライバーとレガシ 1394 バス ドライバーによって公開される DDI の機能的動作の変更について説明します。

デバイス ドライバー インターフェイス 説明
REQUEST_GET_LOCAL_HOST_INFO 1394ohci.sys バス ドライバーでは、 nLevel をGET_HOST_CSR_CONTENTS に設定し、SPEED_MAP_LOCATION を CsrBaseAddress として指定することをサポートしていません。 速度マップは、IEEE-1394a 仕様では廃止されています。
REQUEST_GET_SPEED_TOPOLOGY_MAPS REQUEST_GET_SPEED_TOPOLOGY_MAPS は、Windows 2000 以降のバージョンのオペレーティング システムでは非推奨になりました。 この要求を 1394ohci.sys に送信すると、STATUS_INVALID_PARAMETER が返されます。
REQUEST_GET_SPEED_BETWEEN_DEVICES 1394ohci.sys に REQUEST_GET_SPEED_BETWEEN_DEVICES 要求を送信すると、ローカル ノードとデバイスとの間の速度が取得されます。 USE_LOCAL_NODE フラグは、u.GetMaxSpeedBetweenDevices.fulFlags パラメーターに設定する必要があります。

速度とペイロード サイズの新しいフラグ

Windows 7 Windows Driver Kit の 1394 ヘッダー ファイルである 1394.h では、より高速でペイロードを大きくするための新しいフラグが定義されています。 このセクションでは、これらの新しいフラグと値について説明します。

次の表では、新しくサポートされる速度ごとの最大非同期ペイロード サイズについて説明します。

フラグ 説明
ASYNC_PAYLOAD_800_RATE 4096 800 Mb/秒
ASYNC_PAYLOAD_1600_RATE 4096 160 Mb/秒
ASYNC_PAYLOAD_3200_RATE 4096 3200 Mb/秒

次の表では、新しくサポートされる各速度の速度フラグについて説明します。

フラグ 説明
SPEED_FLAGS_800 0x08 800 Mb/秒
SPEED_FLAGS_1600 0x10 160 Mb/秒
SPEED_FLAGS_3200 0x20 3200 Mb/秒

次の表では、新しくサポートされる各速度の速度コード値について説明します。

フラグ 説明
SCODE_800_RATE 3 800 Mb/秒
SCODE_1600_RATE 4 160 Mb/秒
SCODE_3200_RATE 5 3200 Mb/秒

IEEE 1394 IOCTL の変更

このセクションでは、新しい速度とペイロード サイズの値を使用する 1394 I/O 要求について説明します。

REQUEST_ASYNC_READ
u.AsyncRead.nBlockSize

1394 ノードから読み取られたデータ ストリーム内の各ブロックのサイズを指定します。 このパラメーターが 0 の場合、raw モードのアドレス指定を使用しない限り、デバイスの最大パケット サイズと選択した速度を使用してこれらの読み取り要求が発行されます。

nBlockSize メンバーの ASYNC_PAYLOAD_XXX フラグを指定できます。 Microsoft では、1394 バス ドライバー 1394ohci.sys でサポートされている最大値が使用されるように、クライアント ドライバーが nBlockSize メンバーを 0 に設定することをお勧めします (raw モードのアドレス指定を使用しない場合)。

raw モード アドレス指定を使用する場合、クライアント ドライバーは、nBlockSize メンバーを、接続された速度でデバイスによってサポートされている最大非同期ペイロード サイズに設定する必要があります。

raw モード アドレス指定の詳細については、「IEEE 1394 バスでの非同期 I/O 要求パケットの送信」を参照してください。

REQUEST_ASYNC_WRITE

u.AsyncRead.nBlockSize

1394 ノードに書き込まれるデータ ストリーム内の各ブロックのサイズを指定します。 このパラメーターが 0 の場合、raw モード アドレス指定を使用する場合を除き、選択した速度の最大パケット サイズを使用してこれらの書き込み要求が分割されます。

nBlockSize メンバーの ASYNC_PAYLOAD_XXX フラグを指定できます。 Microsoft では、1394 バス ドライバーがサポートされる最大値を使用するように、クライアント ドライバーが nBlockSize メンバーを 0 に設定することをお勧めします (raw モードのアドレス指定を使用しない場合)。

raw モード アドレス指定を使用する場合、クライアント ドライバーは、nBlockSize メンバーを、接続された速度でデバイスによってサポートされている最大非同期ペイロード サイズに設定する必要があります。

REQUEST_ISOCH_ALLOCATE_BANDWIDTH
SPEED_FLAGS_XXX フラグは fulSpeed メンバーで指定できます。 新しい 1394 バス ドライバーは、SpeedSelected メンバーの新しい SPEED_FLAGS_XXX フラグを返すことができます。

u.IsochAllocateBandwidth.fulSpeed

帯域幅の割り当てに使用する接続速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

u.IsochAllocateBandwidth.SpeedSelected

帯域幅を割り当てるために選択される実際の速度を指定します。 値は SPEED_FLAGS_XXX の 1 つです (fulSpeed メンバーの説明を参照)。

REQUEST_ISOCH_ALLOCATE_RESOURCES
SPEED_FLAGS_XXX フラグは fulSpeed メンバーで指定できます。

u.IsochAllocateResources.fulSpeed

チャンネルでの通信に使用する接続速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

REQUEST_ISOCH_FREE_BANDWIDTH
SPEED_FLAGS_XXX フラグは fulSpeed メンバーで指定できます。

u.IsochFreeBandwidth.fulSpeed

帯域幅の解放に使用する接続速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

Note

新しい 1394 バス ドライバーは、IRB_FLAG_ALLOW_REMOTE_FREE フラグが設定され、IRB のフラグで IRB_FLAG_USE_PRE_CALCULATE_VALUE フラグが設定されていない場合にのみ、fulSpeed メンバーを使用します。 それ以外の場合は、新しい 1394 バス ドライバーは fulSpeed を無視します。

REQUEST_SET_DEVICE_XMIT_PROPERTIES
SPEED_FLAGS_XXX フラグは fulSpeed メンバーで指定できます。

u.SetDeviceXmitProperties.fulSpeed

デバイスへのトランザクションの最大速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

REQUEST_ASYNC_STREAM
SPEED_FLAGS_XXX フラグは nSpeed メンバーで指定できます。

u.AsyncStream.nSpeed

転送速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

REQUEST_ISOCH_MODIFY_STREAM_PROPERTIESfulSpeed メンバーに SPEED_FLAGS__XXX フラグを指定できます。

u.IsochModifyStreamProperties.fulSpeed

デバイスへのトランザクションの最大速度を指定します。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

REQUEST_GET_SPEED_BETWEEN_DEVICES
SPEED_FLAGS_XXX フラグは fulSpeed メンバーで指定できます。

u.GetMaxSpeedBetweenDevices.fulSpeed

送信元デバイスと一連の宛先デバイスとの間で最大限可能なトランザクション速度を指定します。 返される値は、すべてのデバイスが同時にサポートする最大速度です。 指定できる速度の値は SPEED_FLAGS_XXX です。XXX は (概算) 転送速度 (Mbps) です。

Note

クライアント ドライバーは、u.GetMaxSpeedBetweenDevices.fulFlags で USE_SCODE_SPEED フラグを指定して、SPEED_FLAGS_xxx 値ではなく fulSpeed で SCODE_XXX_RATE 速度コード値を返すように要求することもできます。

IEEE 1394 ドライバー スタック
Windows 7 の IEEE 1394 バス ドライバー