インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

17.6.2.4. バッファーサイズの計算

DMAは、送信および受信記述子のサイズフィールドを更新しません。DMAは、記述子のステータスフィールド (RDESおよびTDES) のみを更新します。ドライバーでは、サイズの計算を行う必要があります。

送信DMAは、TDES1のバッファー・サイズ・フィールドで示されているサイズに等しいバイト数をMACに転送します。記述子が1番目としてマークされている (TDES1のFSビットが設定されている) 場合、DMAは、バッファーからの最初の転送をフレームの開始としてマークします。記述子が最後 (TDES1のLSビット) としてマークされている場合、DMAは、そのデータバッファーからの最後の転送をMTLへのフレームの終わりとしてマークします。

受信DMAは、バッファーがフルになるまで、もしくはMTLからフレームの終わりを受信するまで、データをバッファーに転送します。記述子が最後としてマーク (RDES0のLSビット) されていない場合、記述子の対応するバッファーはフルです。また、バッファー内の有効なデータの量は、その記述子のFSビットが設定されている場合に、そのバッファー・サイズ・フィールドからデータ・バッファー・ポインターのオフセットを引くことで正確に示されます。データ・バッファー・ポインターがデータバス幅にアライメントされている場合、オフセットは0です。記述子が最後としてマークされている場合に、バッファーがフルではないことがあります (バッファーのサイズはRDES1で示されます)。この最終バッファー内の有効なデータの量を計算するには、ドライバーでフレーム長 (RDES0のFLビット [29:16]) を読み出し、このフレームの先行するバッファーの合計バッファーサイズを引く必要があります。受信DMAは常に、次のフレームの開始を新しい記述子で転送します。

注: 受信バッファーの開始アドレスがシステムバスのデータ幅にアライメントされていない場合でも、システムでは、システムバス幅にアライメントされているサイズの受信バッファーを割り当てる必要があります。例えば、システムがアドレス0x1000から始まる1,024バイト (1KB) の受信バッファーを割り当てている場合に、ソフトウェアでは、受信記述子のバッファー開始アドレスが0x1002のオフセットになるようにプログラミングすることができます。受信DMAは、最初の2つの位置 (0x1000および0x1001) にダミーデータを使用してこのバッファーにフレームを書き込みます。実際のフレームは、0x1002の位置から書き込まれます。したがって、バッファーサイズが1,024バイトでプログラミングされている場合でも、開始アドレスのオフセットがあるため、このバッファーの実際の有効スペースは1,022バイトです。