(57)【要約】【課題】  チェーンリストによるＤＭＡ転送において転送データの任意の位置に挿入、削除を行いながら転送すること。【解決手段】  データ転送装置は、転送元のデータの配置情報を示す第１のリスト、転送先のデータの配置情報を示す第２のリスト、挿入するデータの配置情報を示す第３のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第４のリストを取得する取得部と、受信した転送要求に従って、取得部により取得された第１のリスト乃至第４のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御部と、制御部により生成されたデータを転送先に転送する転送部と、を備える。【選択図】  図６
2013089190.tif 000002
【特許請求の範囲】
【請求項１】
転送元のデータの配置情報を示す第１のリスト、転送先のデータの配置情報を示す第２のリスト、挿入するデータの配置情報を示す第３のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第４のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第１のリスト乃至第４のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、
を備えることを特徴とするデータ転送装置。
【請求項２】
前記制御手段は、前記第１のリストの配置情報に従って転送元のアドレス領域に配置されたデータを読み込み、前記第２のリストの配置情報に従って転送先のアドレス領域に書き込むことにより、前記データを生成することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
受信した転送要求にデータの更新の指定が含まれている場合、前記制御手段は、前記更新の指定の内容に従って前記第１のリストの配置情報を再構成したデータを生成することを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記更新の指定がデータを挿入する指定の場合、前記制御手段は、前記第３のリストに含まれる挿入開始の位置を示す挿入オフセットアドレスを用いて、前記第１のリストにおけるデータの挿入位置を特定することを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記第１のリストは、転送元のデータが配置されている物理的に非連続なアドレス領域および前記アドレス領域から読み込まれるデータのデータサイズの組を構成単位として有し、
前記第２のリストは、データが配置される転送先の物理的に非連続なアドレス領域および前記アドレス領域から書き込まれるデータのデータサイズの組を構成単位として有することを特徴とする請求項１に記載のデータ転送装置。
【請求項６】
前記第３のリストは、挿入元のデータが配置されているアドレス、前記アドレスから読み込まれる挿入元データのデータサイズ、および挿入開始の位置を示す前記挿入オフセットアドレスの組を構成単位として有することを特徴とする請求項４に記載のデータ転送装置。
【請求項７】
前記制御手段は、前記第１のリストにおける挿入位置に、前記第３のリストにおけるアドレスを設定することにより前記第１のリストの配置情報を再構成することを特徴とする請求項６に記載のデータ転送装置。
【請求項８】
前記制御手段により読み込まれるデータのアドレスが前記挿入オフセットアドレスに達した場合、前記制御手段は前記第１のリストに従ったデータの読み込みを中断し、前記第３のリストのアドレスに従った挿入データを読み込むことを特徴とする請求項６または７に記載のデータ転送装置。
【請求項９】
前記第３のリストに従った挿入データのデータサイズ分の転送が完了した場合、前記制御手段は中断していた前記第１のリストに従ったデータの読み込みを再開することを特徴とする請求項８に記載のデータ転送装置。
【請求項１０】
前記更新の指定がデータの削除を指定する場合、前記制御手段は、前記削除オフセットアドレスを用いて、前記第１のリストにおけるデータの削除位置を特定することを特徴とする請求項３に記載のデータ転送装置。
【請求項１１】
前記制御手段は、前記削除するデータのデータサイズを用いて、前記第１のリストのデータサイズを修正することにより前記第１のリストの配置情報を再構成することを特徴とする請求項１０に記載のデータ転送装置。
【請求項１２】
前記制御手段により読み込まれるデータのアドレスが前記削除オフセットアドレスに達した場合に、前記制御手段は前記第４のリストのデータサイズ分のデータの転送を行わないことを特徴とする請求項１０または１１に記載のデータ転送装置。
【請求項１３】
コンピュータを、請求項１乃至１２のいずれか１項に記載のデータ転送装置の各手段として機能させるためのプログラム。
【請求項１４】
データ転送装置におけるデータ転送方法であって、
前記データ転送装置の取得手段が、転送元のデータの配置情報を示す第１のリスト、転送先のデータの配置情報を示す第２のリスト、挿入するデータの配置情報を示す第３のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第４のリストを取得する取得工程と、
前記データ転送装置の制御手段が、受信した転送要求に従って、前記取得手段により取得された前記第１のリスト乃至第４のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御工程と、
前記データ転送装置の転送手段が、前記制御手段により生成された前記データを前記転送先に転送する転送工程と、
を有することを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、チェーンリストによるＤＭＡ（Direct Memory Access）転送を行うデータ転送装置、データ転送方法およびプログラムに関する。
【背景技術】
【０００２】
メモリや周辺機器との間でのデータ転送では、ＣＰＵを介して行うとＣＰＵの負荷が高くなるためＤＭＡを利用して行うのが一般的である。このＤＭＡ転送において、転送したい連続データの途中に別のアドレスに配置されたデータを途中に挿入して転送するためには、挿入する前のデータを転送してから、挿入するデータを転送し、挿入する後のデータを転送するということが求められる。そのため一連のデータ転送の中でＣＰＵ等の主制御部の介在を必要とする。この問題に対し、特許文献１では、予め挿入する位置等の設定を行うことでＣＰＵの介在なしにＤＭＡの処理のみでデータを挿入して転送を行うというＤＭＡが提案されている。
【０００３】
また、転送を行いたいデータが非連続に配置されている場合において、予め転送を行うチェーンリストを作成して、そのチェーンリストをもとに転送を行うというスキャッタ・ギャザー機能付きのＤＭＡ装置が知られている。
【０００４】
一方で、近年汎用ＰＣのみならず組み込み機器においても様々な処理を高速に実行可能にすることが要求されている。これをＭａｉｎＣＰＵでのソフトウェアによる処理のみで要求性能を達成するには、組み込み機器が搭載するプロセッサ能力をはるかに超えてしまう。そこで、補助的なデバイスを付加して処理性能を向上させており、その一つの手法としてシステムの一部機能をサブシステム化して実現する構成が一般化している。このようにＭａｉｎＣＰＵでの処理をサブシステムにオフロードして処理を行う処理系においては、一般的にＭａｉｎＣＰＵによってサブシステムでの処理の前処理や後処理を行っている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１-１６７０４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＭａｉｎＣＰＵが主記憶上に作成した転送元データ、転送先バッファ等のチェーンリストに対してサブシステム側でチェーンリストに従いスキャッタ・ギャザー転送を行う場合がある。この様な場合において、サブシステム側の処理の結果、転送するデータの途中にデータを挿入する必要が発生することがある。特許文献１に示す方法は連続するデータの途中にデータを挿入するというＤＭＡ装置のため、非連続に配置されチェーンリストで構成されたデータの途中に挿入するという要求に対しては効果がない。つまり従来同様、チェーンリストによる複数回ＤＭＡ転送を行う、もしくはチェーンリストを修正してＤＭＡ転送を行う必要となる。しかし、チェーンリストは連続領域に配置する必要があり、ＭａｉｎＣＰＵが管理するメモリ領域に配置されているため、チェーンリストを追加、修正を行うことができない。そこで、ＭａｉｎＣＰＵが作成したチェーンリストをサブシステムが管理するメモリ領域にコピーしてからチェーンリストを追加、修正を行いＤＭＡ転送する必要がある。
【０００７】
また、デバイス等からサブシステムが取得したデータをサブシステムでの処理の結果、一部データを削除してからＭａｉｎＣＰＵへ受け渡す場合がある。この様な場合、デバイスからデータを取得する際に使用したチェーンリストを修正してからＭａｉｎＣＰＵが用意した転送先バッファへ転送するか、チェーンリストにあうようにデータそのものを一部コピーしてから転送する必要がある。
【０００８】
つまり、チェーンリストで構成されたデータの一部を挿入、削除する場合においては一度作成したチェーンリストをそのまま使用することはできない。そのために、チェーンリストを作りかえるか、データそのものをチェーンリストに合う形にコピーして配置する必要がある。これらはいずれも非効率であり、ＣＰＵの負荷を高めてしまう。
【０００９】
上述の課題を鑑み、チェーンリストによるＤＭＡ転送において転送データを任意の位置に挿入、削除しながら転送することが可能なデータ転送技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成する本発明の一つの側面にかかるデータ転送装置は、転送元のデータの配置情報を示す第１のリスト、転送先のデータの配置情報を示す第２のリスト、挿入するデータの配置情報を示す第３のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第４のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第１のリスト乃至第４のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、を備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、チェーンリストによるＤＭＡ転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能になる。
【００１２】
ＤＭＡ処理中にＣＰＵ等の主制御部の介在なしに転送することができ、ＣＰＵの負荷を軽減できる。また、あらかじめ作成されたチェーンリストをそのまま利用可能なため、追加、修正やチェーンリストのコピーといった主制御部で行うＤＭＡ転送の前処理の負荷を減らすことができる。
【００１３】
またモード指定により、各リストの使用の有無を組み合わせてＤＭＡ転送することができることにより、汎用的に利用可能となる。
【図面の簡単な説明】
【００１４】
【図１】第１及び第２実施形態に係るＴＯＥサブシステムの構成を示す図。
【図２】第１実施形態に係るデータパス制御部の構成を説明する図。
【図３】第２実施形態に係るデータパス制御部の構成を説明する図。
【図４】第１及び第２実施形態に係る通信装置の構成例を示すブロック図。
【図５】第１及び第２実施形態に係るディスクリプタの構成を説明する図。
【図６】第１及び第２実施形態に係るデータ転送処理と各種設定パラメータの関係を説明する図。
【図７】第１及び第２実施形態に係るパケット送信時のディスクリプタ及び各チェーンリストの設定例を説明する図。
【図８】第１実施形態に係るディスクリプタ制御部の転送元チェーンリスト再構成処理を説明する図。
【図９】第１実施形態に係るディスクリプタ制御部の転送先チェーンリスト再構成処理を説明する図。
【図１０】第２実施形態に係る挿入リスト制御部の挿入リスト制御処理を説明する図。
【図１１】第２実施形態に係る削除リスト制御部の削除制御処理を説明する図。
【発明を実施するための形態】
【００１５】
（第１実施形態）
通信処理をオフロードするＴＯＥ（TCP/IP Offload Engine）サブシステム１０５を含む通信装置の構成の例について説明する。図１及び図４のシステムバス１０２は英国ＡＲＭ社が提唱するＡＭＢＡ３．０ＡＸＩ（Advanced  eXtensible  Ingerface）仕様に代表されるクロスバースイッチ構造のオンチップバスである。システムバス１０２は通信装置に求められる送受信データの並行転送動作が可能である。ＴＯＥサブシステム１０５は通信装置のシステムバス１０２に接続されている。通信装置はＴＯＥサブシステム１０５が備えるＰＨＹ（Physical  LayerChip）１３４を介してネットワーク１３５に接続されている（図１参照）。
【００１６】
ＨＤ（Ｈａｒｄ  Ｄｉｓｋ）装置４０６は二次記憶制御部４０５を介してシステムバス１０２に接続されている（図４参照）。ＨＤ装置４０６には通信装置の機能を実現するソフトウェアとその関連データと、各サブシステム内のサブプロセッサで動作するファームウエアとその関連データとが格納されている。更に、ＨＤ装置４０６は通信装置の動作履歴や通信履歴等の履歴情報を格納する。ソフトウェアは、通信装置の各機能を実現するアプリケーションソフトウエアと、アプリケーションプロトコルと、関連ハードウエアを制御するためのデバイスドライバと、ＯＳ（Operating  System）と備えている。
【００１７】
Ｆｌａｓｈメモリ４１３はメモリ制御部４１２を介してシステムバス１０２に接続されている。Ｆｌａｓｈメモリ４１３は書き換え可能な不揮発性メモリである。Ｆｌａｓｈメモリ４１３には通信装置の起動時に動作するブートプログラムと通信装置の初期状態設定に必要なパラメータとが格納される。更に、Ｆｌａｓｈメモリ４１３には通信装置の起動時に各ハードウエアを制御するためのデバイスドライバプログラムと各ハードウエア起動時の設定パラメータ等とが保存される。
【００１８】
コンピュータである通信装置の主プロセッサ１０１はＦｌａｓｈメモリ４１３内のブートプログラムを実行する。更に、主プロセッサ１０１は通信装置の各ハードウエアとサブシステムとを初期化した後、ＨＤ装置４０６に格納されているソフトウェアを主メモリ１０４にロードして、ソフトウェアが備えるＯＳを起動する。また、主プロセッサ１０１は、サブシステムの初期化時にＴＯＥサブシステム１０５に内蔵されているサブプロセッサＡからＥの５個のサブプロセッサ（１１１〜１１５）が実行する各ファームウエアを主メモリ１０４上に展開して、各サブプロセッサを起動する。各サブプロセッサ（１１１〜１１５）は主メモリ１０４上に展開された各ファームウエアを、各サブプロセッサに内蔵する命令キャッシュメモリにロードして、ファームウエアプログラムを実行する。
【００１９】
通信装置のシステムバス１０２には、各ハードウエアやＴＯＥサブシステム１０５からの割り込みイベントを主プロセッサ１０１に伝達する、割り込み制御部４０１が接続されている。また、通信装置は、ソフトウェア等により起動され、時間計測やタイムアウトイベントを発生させるタイマ４０２を備える。また、通信装置は、通信装置の動作モードの設定やＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスに代表される各通信パラメータを入力するための入力キー４１０を備える。更に、通信装置は、アプリケーション、通信装置の状態や設定内容等を表示する表示装置４０４と、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎ規格に準拠した無線ＬＡＮに接続するための無線ＬＡＮサブシステム４０８とを備える。
【００２０】
ＴＯＥサブシステム１０５は、内部にサブシステムバス１２３を備え、バスブリッジ１１６を介してシステムバス１０２に接続されている（図１参照）。このサブシステムバス１２３はクロスバースイッチ接続である。ＴＯＥサブシステム１０５が内蔵する５個の各サブプロセッサ（１１１〜１１５）は、サブシステムバス１２３に接続されている。これらの各サブプロセッサによるマルチプロセッサ処理により、主システムからＴＣＰ／ＩＰプロトコル処理をオフロードし、高速に実行する。
【００２１】
また、ＴＯＥサブシステム１０５は、５個の各サブプロセッサＡ〜Ｅ（１１１〜１１５）間の通信部と、情報共有の為の共有メモリ１２５と、ＴＣＰ／ＩＰプロトコル処理に必要な時間計測及びタイムアウトイベントを発生させる通信タイマ１２４とを備える。さらに、ＴＯＥサブシステム１０５は、ネットワーク１３５に接続するためのＰＨＹ１３４とＭＡＣ（Media  Access  Control）１３３とを備える。ＰＨＹ１３４はＯＳＩ参照モデルの第１層に位置するＰＨＹ（物理）層のプロトコル処理と電気信号を扱うハードウエアである。ＭＡＣ１３３はＯＳＩ参照モデルのデータリンク層（第２層）の下位副層に相当するＭＡＣ層のプロトコルを処理するハードウエアである。
【００２２】
ＴＯＥサブシステム１０５は、受信パケットデータと送信パケットデータとを、例えば、主メモリ１０４あるいは共有メモリ１２５であるメモリデバイスと、ＭＡＣ１３３との間でＤＭＡ転送するデータパス制御部１３２を備える。データパス制御部１３２は転送処理中に、パケットデータのチェックサム演算を行う。さらに、ＴＯＥサブシステム１０５は、プロトコル処理の様々な管理情報の格納と検索処理とを行う連想メモリを保有する検索装置１２２を備える。
【００２３】
ＴＯＥサブシステム１０５は、暗号通信プロトコル処理を実行する。暗号通信プロトコルとしては、ＩＰｓｅｃ（Security  Architecture  for  Internet  Protocol）などがある。また、ＳＳＬ（Secure  Socket  Layer）、ＴＬＳ（Transport  Layer  Security）等の暗号通信プロトコル処理も実行する。そのために、ＴＯＥサブシステム１０５は鍵管理部１２６と、乱数発生器１２７と、暗号器１２９とを備える。鍵管理部１２６は暗号通信プロトコル処理のために生成した暗号鍵と、乱数及び素数を機密に保持する。乱数発生器１２７は、暗号処理に必要となる乱数値を生成する。また、ＴＯＥサブシステム１０５が備える暗号器１２９は、米国商務省標準技術局（NIST）によって選定されたＡＥＳ（Advanced  Encryption  Standard）暗号器を備える。また、認証やデジタル署名などに使われるＳＨＡ−１（Secure  Hash  Algorithm  １）ハッシュ関数器を備える。また、ＲＦＣ１３２１としてＩＥＴＦで標準化されているＭＤ５（Message  Digest  ５）ハッシュ関数器等を備える。
【００２４】
(データパス制御部１３２の構成例)
ＴＯＥサブシステム１０５が備えるデータパス制御部１３２の構成例を説明する。図２のデータパス制御部１３２はＴＯＥサブシステム１０５のサブシステムバス１２３及び通信装置のシステムバス１０２、ＭＡＣ１３３に接続されている。データパス制御部１３２は転送元のデータの配置情報を示す第１のリストおよび転送先のデータの配置情報を示す第２のリストを取得する。また、データパス制御部１３２は挿入するデータの配置情報を示す第３のリストおよび削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第４のリストを取得する。そして、データパス制御部１３２は、受信した転送要求に従って、取得した第１のリスト乃至第４のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する。データパス制御部１３２は生成したデータを転送先に転送する。
【００２５】
データパス制御部１３２は各サブプロセッサ及び、主プロセッサ１０１から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ１２５、もしくは主メモリ１０４に図５のディスクリプタ５０１を配置する。ディスクリプタ５０１は連続領域に配置する。さらに転送モード５０３に指定したモードで使用するチェーンリストをディスクリプタ５０１と同様に共有メモリ１２５もしくは主メモリ１０４に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【００２６】
ディスクリプタアドレス５０２をデータパス制御部１３２のレジスタ制御部２０１に設定することにより転送要求を行う。転送要求を受信すると、レジスタ制御部２０１はディスクリプタ制御部２０３へディスクリプタアドレス５０２を通知する。ディスクリプタ制御部２０３はディスクリプタ５０１の読み込み処理を読込制御部２０４から行う。読込制御部２０４はバス制御部２０２を介してディスクリプタ５０１の読込を行う。ディスクリプタ５０１を読み込んだディスクリプタ制御部２０３はディスクリプタ５０１の転送モード５０３に設定されたモードに従い、各リストを処理開始時に一度に取得する。ディスクリプタ制御部２０３は転送モード５０３によって転送元チェーンリスト５１４、転送先チェーンリスト５１５、挿入チェーンリスト５１６、削除チェーンリスト５１７をそれぞれ任意に使用するか否かを設定することができる。
【００２７】
転送モード５０３が転送元チェーンリスト５１４（第１のリスト）を使用する場合、データパス制御部１３２はディスクリプタ５０１の転送元チェーンリストアドレス５０４から転送元チェーンリストユニット数５１０に設定された値分のリストを取得する。転送元チェーンリスト５１４は転送する転送元のデータが配置されているアドレス（物理的に非連続なアドレス領域を示す配置情報）及びアドレスから読み込まれるデータのサイズの組を１つの構成単位としたリストである。転送モード５０３が転送元チェーンリスト５１４を使用しない設定であった場合、転送元チェーンリストアドレス５０４に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【００２８】
転送モード５０３が転送先チェーンリスト５１５（第２のリスト）を使用する設定であった場合、ディスクリプタ５０１の転送先チェーンリストアドレス５０５のアドレスから転送先チェーンリストユニット数５１１に設定された値分のリストを取得する。転送先チェーンリスト５１５はデータが配置される転送先のアドレス（物理的に非連続なアドレス領域を示す配置情報）およびアドレスから書き込まれるデータサイズの組を１つの構成単位としたリストである。転送モード５０３が転送先チェーンリスト５１５を使用しない設定であった場合、転送先チェーンリストアドレス５０５に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【００２９】
転送要求にデータの更新の指定が含まれている場合、更新の指定の内容と第１および第２のリストの配置情報とから第１および第２のリストの配置情報の内容は再構成される。
【００３０】
更新の指定として転送モード５０３が挿入チェーンリスト５１６（第３のリスト）を使用する設定であった場合、挿入チェーンリストアドレス５０６のアドレスから挿入チェーンリストユニット数５１２に設定された値分のリストを取得する。挿入チェーンリスト５１６は、挿入するデータの配置されているアドレス、そのアドレスから転送する挿入元データのサイズ、転送元のデータに対する挿入開始の位置を示す挿入オフセットアドレスの組を１つの構成単位としたリストである。転送モード５０３が挿入チェーンリスト５１６を使用しない設定であった場合、挿入チェーンリストアドレス５０６のフィールドを無視し、データを挿入しての転送を行わない。
【００３１】
更新の指定として転送モード５０３が削除チェーンリスト５１７（第４のリスト）を使用する設定であった場合、削除チェーンリストアドレス５０７のアドレスから削除チェーンリストユニット数５１３に設定された値分のリストを取得する。削除チェーンリスト５１７は削除開始の位置を示す削除オフセットアドレスおよび、その削除オフセットアドレスから削除するデータのデータサイズの組を１つの構成単位（１ユニット）としたリストである。転送モード５０３が削除チェーンリスト５１７を使用しない設定であった場合、削除チェーンリストアドレス５０７のフィールドを無視し、データを削除しての転送を行わない。
【００３２】
ディスクリプタ制御部２０３は、取得した各リストから転送元リスト、転送先リストをローカルメモリ２１０に再構成（作成）する。ディスクリプタ制御部２０３は、ローカルメモリ制御部２０９を介してローカルメモリ２１０にアクセスを行う。
【００３３】
ディスクリプタ制御部２０３がローカルメモリ２１０に作成したリストに従い転送元リスト制御部２０８、転送先リスト制御部２０７の制御によりデータ転送を行う。転送元リスト制御部２０８は転送元リストに示されたアドレスから指定サイズ分のデータを、読込制御部２０４を介してデータを読み込む。読み出したデータはディスクリプタ制御部２０３、チェックサム演算部２０６を経由して転送先リスト制御部２０７へと転送される。チェックサム演算部２０６では転送データのチェックサム計算を行う。
【００３４】
転送先リスト制御部２０７は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部２０５を介してデータを書き込む。ディスクリプタ制御部２０３はディスクリプタ５０１の転送サイズ５０８に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス５０９にチェックサム計算結果および、転送結果のステータスを書き込む。
【００３５】
本実施形態では以上のようなディスクリプタによりデータパス制御部１３２に各種設定パラメータやチェーンリストを与える構成としたが、この構成に限られず、データパス制御部１３２に情報を与えられる構成であればよい。
【００３６】
（データ転送処理と各種設定パラメータの関係）
図６を参照してデータ転送処理を例示的に説明すると共に、各リストに設定したアドレス、サイズ、オフセットの関係を説明する。図６に示すデータ転送では転送元チェーンリストユニット数５１０を４ユニット、転送先チェーンリストユニット数５１１を３ユニット、挿入チェーンリストユニット数５１２を２ユニット、削除チェーンリストユニット数５１３を１ユニットとして説明する。
【００３７】
転送元チェーンリスト５１４は転送元アドレスおよび転送元データサイズの組を１ユニットとするリストである。４ユニットは転送元アドレスI  ６１０、転送元サイズI  ６１２、転送元アドレスII６１５、転送元サイズII６１６、転送元アドレスIII６１７、転送元サイズIII６２０、転送元アドレスIV６２４、転送元サイズ６２５で構成され得る。
【００３８】
転送先チェーンリスト５１５は転送先アドレスおよび転送先データサイズの組を１ユニットとするリストである。転送先チェーンリストユニット数５１１における３ユニットは、例えば、転送先アドレスI  ６３３、転送先サイズI  ６３７、転送先アドレスII６３８、転送先サイズII６４０、転送先アドレスIII６４１、転送先サイズIII６４４で構成され得る。
【００３９】
挿入チェーンリスト５１６は挿入元アドレスと挿入オフセットと挿入データサイズとの組を１ユニットとするリストである。挿入チェーンリスト５１６における２ユニットは、例えば、挿入元アドレスI  ６２６、挿入オフセットI、挿入サイズI  ６２７、挿入元アドレスII６２８、挿入オフセットII、挿入サイズII６３０で構成され得る。挿入オフセットIはオフセットI  ６４５とオフセットII６４６を合計した値となる。挿入オフセットIIはオフセットI  ６４５、オフセットII６４６、オフセットIII６４７、オフセットIV６４８を合計した値となる。
【００４０】
削除チェーンリスト５１７は削除オフセットおよび削除データサイズの組を１ユニットとするリストである。削除チェーンリスト５１７における１ユニットは削除オフセットI、削除サイズIで構成され得る。削除オフセットIはオフセットI  ６４５と等しい値となり、削除サイズIはオフセットII６４６と等しい値となる。
【００４１】
転送サイズ５０８は転送元サイズI  ６１２、転送元サイズII６１６、転送元サイズIII６２０、転送元サイズIV６２５、挿入サイズI  ６２７、挿入サイズII６３０を合計した値となる。
【００４２】
本実施形態では以上のように転送サイズ５０８を判断して転送する例を示したが、挿入チェーンリスト５１６の挿入サイズを含めずに、転送サイズ５０８は転送元チェーンリスト５１４から読み込むサイズであってもよい。この場合、転送サイズ５０８は転送元サイズI  ６１２、転送元サイズII６１６、転送元サイズIII６２０、転送元サイズIV６２５を合計した値となる。
【００４３】
また削除チェーンリスト５１７の削除サイズについても転送サイズ５０８に含めてもよいし、含めない方法であってもよい。つまり転送サイズ５０８はデータ転送において整合性がとれて処理可能であればよい。実際には、データが書き込まれるサイズを転送サイズ５０８に設定することが望ましい。
【００４４】
以上の設定で転送処理を開始すると、点線矢印６０１に示すように転送元アドレスI  ６１０から転送先アドレスI  ６３３へと転送元サイズI−Ａ６１３分のデータが転送される。
【００４５】
次に転送サイズが、オフセットI  ６４５と等しい値で示される削除オフセットIに達すると、転送元サイズＩ−Ａから削除サイズI（オフセットII６４６）分のデータが読み捨てられる。つまり、転送元の領域（Ｓｒｃ−Ｉ−Ａ）に連続する転送元の領域（Ｓｒｃ―Ｉ−Ｂ）の転送元アドレスI−Ｂ６１１から転送元サイズI−Ｂ６１４分のデータは転送先への書き込みが行われない。
【００４６】
次に転送サイズが、オフセットI  ６４５とオフセットII６４６を合計した値で示される挿入オフセットIに達すると点線矢印６０２に示すように挿入元アドレスI６２６から転送先アドレスI−Ｂ６３４へと挿入サイズI  ６２７分のデータが転送される。次に点線矢印６０３に示すように転送元アドレスII６１５から転送先アドレスI−Ｃ６３５へと転送元サイズII６１６分のデータが転送される。
【００４７】
次に点線矢印６０４に示すように転送元アドレスIII６１７から転送先アドレスI−Ｄ６３６へと転送元サイズIII−Ａ６２１分のデータが転送される。次に点線矢印６０５に示すように転送元アドレスIII−Ｂ６１８から転送先アドレスII６３８へと転送元サイズIII−Ｂ６２２分のデータが転送される。
【００４８】
次に転送サイズが挿入オフセットII（オフセットI、II、III、IVの合計）に達すると点線矢印６０６に示すように挿入元アドレスII６２８から転送先アドレスII−Ｂ６３９へと挿入サイズII−Ａ６３１分のデータが転送される。続いて点線矢印６０７に示すように挿入元アドレスII−Ｂ６２９から転送先アドレスIII６４１へと挿入サイズII−Ｂ６３２分のデータが転送される。次に点線矢印６０８に示すように転送元アドレスIII−Ｃ６１９から転送先アドレスIII−Ｂ６４２へと転送元サイズIII−Ｃ６２３分のデータが転送される。次に点線矢印６０９に示すように転送元アドレスIV６２４から転送先アドレスIII−Ｃ６４３へと転送元サイズIV６２４分のデータが転送される。以上の転送で転送サイズ５０８に達したため転送処理は終了する。
【００４９】
（ディスクリプタ及び各チェーンリストの設定例）
図７を参照してパケット送信時のディスクリプタ及び各チェーンリストの設定例について説明する。本図ではＩＰｖ６におけるＵＤＰデータグラムにＩＰｓｅｃ（Security Architecture for Internet Protocol)のＡＨ(Authentication Header)処理を行なう。そして、フラグメント処理をしてパケットをＭＡＣのＦＩＦＯへ転送する場合の処理について説明する。なお本転送処理では第１フラグメントの転送と第２フラグメントの転送を行うため２回の転送処理を行う。
【００５０】
主プロセッサ１０１により配置された送信データが主メモリ１０４の非連続領域に転送元チェーンリストで構成されている。なおＭＡＣヘッダ、ＩＰｖ６ヘッダ、ＵＤＰヘッダは未完成のまま主メモリ１０４に配置され、ＴＯＥサブシステム１０５内のサブプロセッサの処理によって完成されたヘッダを形成する。さらにＴＯＥサブシステム１０５のサブプロセッサ及び各ＨＷアクセラレータの処理によってＩＰｓｅｃ処理が行われる。
【００５１】
検索装置１２２を利用してセキュリティポリシー（ＳＰ）を検索した結果、ＡＨ処理を行う必要がある場合、さらにセキュリティアソシエーション（ＳＡ）を検索する。そして鍵管理部１２６、暗号器１２９を利用して整合性確認値（ＩＣＶ）の計算等が行われ、サブプロセッサによってＡＨヘッダが形成される。その後サブプロセッサによってフラグメント処理が行われ、フラグメント拡張ヘッダが形成される。ＡＨヘッダ及びフラグメント拡張ヘッダは共有メモリ１２５に配置される。なお、ＩＰｓｅｃ処理やフラグメント処理等追加でのＴＯＥサブシステム１０５の処理が無い場合は主プロセッサ１０１により配置された送信データをそのままＭＡＣ１３３のＦＩＦＯ７０３へと順次転送する。本図では主メモリ１０４に非連続領域に配置された送信データに共有メモリ１２５に配置したＡＨヘッダ、フラグメント拡張ヘッダを挿入してまず初めに第１フラグメントパケットをＭＡＣ１３３のＦＩＦＯ７０３へと順次転送する。１パケット目先頭７０１が指しているパケットが第１フラグメントパケットである。次に第２フラグメントパケット様にフラグメント拡張ヘッダの修正が行われる。そして同様にして、主メモリ１０４に非連続領域に配置された送信データに共有メモリ１２５に配置したフラグメント拡張ヘッダを挿入し、第１フラグメントパケットで転送したＵＤＰヘッダ、ペイロードを削除して第２フラグメントパケットを順次転送する。２パケット目先頭７０２が指しているパケットが第２フラグメントパケットである。ＭＡＣ１３３のＦＩＦＯ７０３へ転送されるとパケットの先頭にはＳＯＦ（Start  Of  Frame）が、パケットの終端にはＥＯＦ（End  Of  Frame）がデータ転送とは別にＭＡＣ１３３によってＦＩＦＯ７０３に挿入される。
【００５２】
次に１回目の第１フラグメントパケットの転送、２回目の第２フラグメントパケットの転送におけるディスクリプタ及び、各チェーンリストの設定について説明する。
【００５３】
１回目のディスクリプタ５０１、各チェーンリストについて説明する。転送モード５０３は転送元チェーンリスト５１４及び挿入チェーンリスト５１６を使用し、転送先チェーンリスト５１５及び削除チェーンリスト５１７を使用しない。
【００５４】
転送元チェーンリスト５１４は転送元アドレスI、転送元サイズI、転送元アドレスII、転送元サイズII、転送元アドレスIII、転送元サイズIII、転送元アドレスIV、転送元サイズIV、転送元アドレスＶ、転送元サイズＶで構成される。
【００５５】
このチェーンリストのアドレスを転送元チェーンリストアドレス５０４に設定する。転送元アドレスI  ７０４はＭＡＣヘッダの先頭アドレスを、転送元サイズIはＭＡＣヘッダのサイズを示している。転送元アドレスII７０５はＩＰｖ６ヘッダの先頭アドレスを、転送元サイズII７１１はＩＰｖ６ヘッダのサイズを示している。転送元アドレスIII７０６はＵＤＰヘッダの先頭アドレスを、転送元サイズIII７１２はＵＤＰヘッダのサイズを示している。転送元アドレスIV７０７はペイロードの先頭アドレスを、転送元アドレスＶ７０８はペイロードの途中のアドレスを、転送元サイズIV７１３及び転送元サイズＶ７１４の合計はペイロードのサイズを示している。
【００５６】
転送先チェーンリストアドレス５０５にはＭＡＣ１３３のＦＩＦＯ７０３のアドレスである転送先アドレス７２８を設定する。挿入チェーンリスト５１６は１回目かつ２回目挿入元アドレス７１７、１回目挿入オフセット７２１、１回目かつ２回目挿入サイズI  ７１９、１回目挿入元アドレスII７２０、１回目挿入オフセットII７２１、１回目挿入サイズII７２０で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス５０６に設定する。１回目かつ２回目挿入元アドレスI  ７１７はフラグメント拡張ヘッダの先頭アドレスを、１回目挿入オフセットI  ７２１はフラグメント拡張ヘッダを挿入する位置を、１回目かつ２回目挿入サイズI  ７１９はフラグメント拡張ヘッダのサイズを示している。１回目挿入元アドレスII７２０はＡＨヘッダの先頭アドレスを、１回目挿入オフセットII７２１はＡＨヘッダを挿入する位置を、１回目挿入サイズII７２０はＡＨヘッダのサイズを示している。削除チェーンリスト５１７は使用しないため削除チェーンリストアドレス５０７には何も設定しない。転送サイズ５０８には１回目転送サイズ７２６を設定する。１回目転送サイズ７２６は第１フラグメントパケットの全長を示している。転送元チェーンリストユニット数５１０には５を設定し、転送先チェーンリストユニット数５１１には何も設定しない。また挿入チェーンリストユニット数５１２には２を設定し、削除チェーンリストユニット数５１３には何も設定しない。
【００５７】
次に２回目のディスクリプタ５０１、各チェーンリストについて説明する。転送モード５０３は転送元チェーンリスト５１４、挿入チェーンリスト５１６及び、削除チェーンリスト５１７を使用し、転送先チェーンリスト５１５は使用しない。転送元チェーンリスト５１４、転送元チェーンリストアドレス５０４は１回目と同じ設定をする。また転送先チェーンリストアドレス５０５も同様に１回目と同じ設定をする。挿入チェーンリスト５１６は１回目かつ２回目挿入元アドレスI  ７１７、２回目挿入オフセットI  ７２３、１回目かつ２回目挿入サイズI  ７１９で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス５０６に設定する。１回目かつ２回目挿入元アドレスI  ７１７はフラグメント拡張ヘッダの先頭アドレスを、２回目挿入オフセットI  ７２３はフラグメント拡張ヘッダを挿入する位置を、１回目かつ２回目挿入サイズI  ７１９はフラグメント拡張ヘッダのサイズを示している。削除チェーンリスト５１７は２回目削除オフセットI  ７２４、２回目転送サイズ−Ｂかつ２回目削除サイズI  ７２５で構成される。このチェーンリストのアドレスを削除チェーンリストアドレス５０７に設定する。２回目削除オフセットI  ７２４は第２フラグメントパケットのペイロードの位置を、２回目転送サイズ−Ｂかつ２回目削除サイズ７２５は第１フラグメントで送信したペイロードのサイズを示している。転送サイズ５０８には２回目転送サイズ−Ａ７２７と２回目転送サイズ−Ｂかつ２回目削除サイズI  ７２５との合計サイズを設定する。２回目転送サイズ−Ａ７２７は第２フラグメントパケットの全長を、２回目転送サイズ−Ｂかつ２回目削除サイズI  ７２５は削除チェーンリストによって削除されるペイロードのサイズを示している。転送元チェーンリストユニット数５１０には５を設定し、転送先チェーンリストユニット数５１１には何も設定しない。また挿入チェーンリストユニット数５１２には１を設定し、削除チェーンリストユニット数５１３には１を設定する。
【００５８】
（転送元チェーンリストの挿入再構成処理）
ディスクリプタ制御部２０３による転送元チェーンリストの挿入再構成処理について説明する。図８におけるステップＳ８０１において、ディスクリプタ５０１に設定された転送モード５０３が転送元チェーンリスト５１４を使用するモードであるかを調べる。
【００５９】
ステップＳ８０２において、ステップＳ８０１で転送元チェーンリスト５１４を使用しないモードと判定した場合（Ｓ８０１−Ｎｏ）、転送元アドレスから１ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【００６０】
ステップＳ８０３において、ステップＳ８０１で転送元チェーンリスト５１４を使用するモードと判定した場合（Ｓ８０１−Ｙｅｓ）、転送元チェーンリスト５１４を取得する。
【００６１】
ステップＳ８０４において、ディスクリプタ５０１に設定された転送モード５０３が挿入チェーンリスト５１６を使用するモードであるかを調べる。挿入チェーンリスト５１６を使用しないモードと判定した場合（Ｓ８０４−Ｎｏ）、ステップＳ８１０へ進む。
【００６２】
ステップＳ８０５において、ステップ８０４で挿入チェーンリスト５１６を使用するモードと判定した場合（Ｓ８０４−Ｙｅｓ）、挿入チェーンリスト５１６を取得する。
【００６３】
ステップＳ８０６において、挿入チェーンリスト５１６の挿入オフセットから転送元チェーンリストに追加するデータの挿入位置を計算して特定する。
【００６４】
ステップＳ８０７において、ステップＳ８０６で特定された位置に挿入するために、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合（Ｓ８０７−Ｎｏ）、つまり転送元チェーンリストのユニットとユニットの間に挿入する場合はステップＳ８０９へ進む。１つのユニットを分割する必要があると判定した場合（Ｓ８０７−Ｙｅｓ）、つまり１つのユニットを分割してその間にユニットを挿入する場合、ステップＳ８０８へ進む。
【００６５】
ステップＳ８０８において、ステップＳ８０７で分割する必要があると判定されたユニットを分割する。分割したユニットの１つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは挿入オフセットより計算した値を設定する。分割したユニットの２つ目の転送元アドレスは１つ目の転送元アドレスに１つ目の転送サイズを加算したアドレスを設定し、転送元サイズは分割前のユニットの転送元サイズから分割した１つ目のユニットの転送元サイズを減算した値を設定する。転送元チェーンリスト５１４を使用しないモードであった場合は分割前のユニットの転送元サイズには転送サイズ５０８を用いる。
【００６６】
ステップＳ８０９において、ステップＳ８０６で特定した転送元チェーンリスト５１４の位置にユニットを挿入する。挿入するユニットの転送元アドレスは挿入元アドレスを設定し、転送元サイズは挿入サイズを設定する。
【００６７】
ステップＳ８１０において、再構成が完了した転送元チェーンリストのユニットを格納する。
【００６８】
ステップＳ８１１において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合は（Ｓ８１１―Ｎｏ）、ステップＳ８０６へ進み、ステップＳ８０６からステップＳ８１０までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの挿入再構成処理を終了する（Ｓ８１１−Ｙｅｓ）。
【００６９】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと挿入チェーンリストの整合性が取れる再構成手順であればよい。
【００７０】
（転送元チェーンリストの削除再構成処理）
ディスクリプタ制御部２０３による転送元チェーンリストの削除再構成処理について説明する。図９におけるステップＳ９０１において、再構成された転送元チェーンリストがあるかを調べる。
【００７１】
ステップＳ９０２において、ステップＳ９０１で再構成された転送元チェーンリストがないと判定した場合（Ｓ９０１−Ｎｏ）、転送元アドレスから１ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【００７２】
ステップＳ９０３において、ステップＳ９０１で再構成された転送元チェーンリストがあると判定した場合（Ｓ９０１−Ｙｅｓ）、再構成された転送元チェーンリストを取得する。
【００７３】
ステップＳ９０４において、ディスクリプタ５０１に設定された転送モード５０３が削除チェーンリスト５１７を使用するモードであるかを調べる。削除チェーンリスト５１７を使用しないモードと判定した場合（Ｓ９０４−Ｎｏ）、ステップＳ９１０へ進む。
【００７４】
ステップＳ９０５において、ステップ９０４で削除チェーンリスト５１７を使用するモードと判定した場合（Ｓ９０４−Ｙｅｓ）、削除チェーンリスト５１７を取得する。
【００７５】
ステップＳ９０６において、削除チェーンリスト５１７の削除オフセットから転送元チェーンリストにおける削除開始する位置（削除位置）を計算して特定する。  
ステップＳ９０７において、ステップＳ９０６で特定された位置から削除することで、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合（Ｓ９０７−Ｎｏ）、削除を開始する削除オフセットから所定のデータサイズを削除し、転送元チェーンリストを修正する（Ｓ９０９）。ユニットを分割する必要があると判定した場合（Ｓ９０７−Ｙｅｓ）、つまり削除することにより１ユニットの領域が非連続領域に分割される場合、ステップＳ９０８へ進む。
【００７６】
ステップＳ９０８において、ステップＳ９０７で分割する必要があると判定されたユニットを分割する。分割したユニットの１つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは削除オフセットより計算した値を設定する。分割したユニットの２つ目の転送元アドレスは１つ目の転送元アドレスに１つ目の転送サイズと削除サイズを加算したアドレスを設定する。また転送元サイズは分割前のユニットの転送元サイズから分割した１つ目のユニットの転送元サイズと削除サイズを減算した値を設定する。再構成された転送元チェーンリストが無い場合は分割前のユニットの転送元サイズには転送サイズ５０８を用いる。
【００７７】
ステップＳ９０９において、ステップＳ９０６で特定した転送元チェーンリストの位置から削除するため、一部の転送元チェーンリストのユニットを修正・削除する。ステップＳ９６０で特定した位置から削除サイズ分、転送元チェーンリストをたどり、１ユニットの転送元アドレスから転送元サイズ分の領域が削除サイズにすべて含まれる場合はそのユニットを削除する。１ユニットの転送元アドレスから転送元サイズ分の領域の後方部の領域が一部含まれる場合は、転送元アドレスをそのままとし、転送元サイズを減算して設定する。１ユニットの転送元アドレスから転送元サイズ分の領域の前方部の領域が一部含まれる場合は転送元アドレスを削除しない部分のアドレスへ計算して設定し、転送元サイズを減算して設定する。
【００７８】
ステップＳ９１０において、再構成が完了した転送元チェーンリストのユニットを格納する。
【００７９】
ステップＳ９１１において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合はステップＳ９０６へ進み（Ｓ９１１−Ｎｏ）、ステップＳ９０６からステップＳ９１０までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの削除再構成処理を終了する。
【００８０】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと削除チェーンリストの整合性が取れる再構成手順であればよい。
【００８１】
本実施形態によれば、転送元チェーンリストを挿入チェーンリスト、削除チェーンリストによって、転送処理の前処理としてデータパス制御部がプロセッサの介在無しにチェーンリストを再構成することができる。これによりチェーンリストによるＤＭＡ転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能となり、ＤＭＡ処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うＤＭＡ転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。
【００８２】
（第２実施形態）
第２実施形態に係るＴＯＥサブシステム１０５が備えるデータパス制御部１３２の構成例を説明する。図１、図４、図５、図６、図７は第１実施形態と共通の図であるため、説明を省略する。
【００８３】
図３のデータパス制御部１３２はＴＯＥサブシステム１０５のサブシステムバス１２３及び通信装置のシステムバス１０２、ＭＡＣ１３３に接続されている。
【００８４】
データパス制御部１３２は各サブプロセッサ及び、主プロセッサ１０１から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ１２５、もしくは主メモリ１０４に図５のディスクリプタ５０１を配置する。ディスクリプタ５０１は連続領域に配置する。さらに転送モード５０３に指定したモードで使用するチェーンリストをディスクリプタ５０１と同様に共有メモリ１２５もしくは主メモリ１０４に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【００８５】
ディスクリプタアドレス５０２をデータパス制御部１３２のレジスタ制御部３０１に設定することにより転送要求を行う。転送要求を受け付けると、レジスタ制御部３０１はディスクリプタ制御部３０３へディスクリプタアドレス５０２を通知する。ディスクリプタ制御部３０３はディスクリプタ５０１の読み込み処理を読込制御部３０４から行う。読込制御部３０４はバス制御部３０２を介してディスクリプタ５０１の読込を行う。ディスクリプタ５０１を読み込んだディスクリプタ制御部３０３はディスクリプタ５０１の転送モード５０３に設定されたモードに従い、各リストを順次取得する。転送モード５０３は転送元チェーンリスト５１４、転送先チェーンリスト５１５、挿入チェーンリスト５１６、削除チェーンリスト５１７をそれぞれ任意に使用するか否かを設定することができる。
【００８６】
転送モード５０３が転送元チェーンリスト５１４を使用する設定であった場合、転送元チェーンリストアドレス５０４のアドレスからリストの１ユニット目を取得する。リストの１ユニット目の転送処理が完了すると次のリストを取得し、転送元チェーンリストユニット数５１０に設定された値分のリストを取得するまで継続する。転送元チェーンリスト５１４は転送元アドレス、転送元サイズの組を１ユニットとするリストである。転送モード５０３が転送元チェーンリスト５１４を使用しない設定であった場合、転送元チェーンリストアドレス５０４に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【００８７】
転送モード５０３が転送先チェーンリスト５１５を使用する設定であった場合、転送先チェーンリストアドレス５０５のアドレスからリストの１ユニット目を取得する。リストの１ユニット目の転送処理が完了すると次のリストを取得し、転送先チェーンリストユニット数５１１に設定された値分のリストを取得するまで継続する。転送先チェーンリスト５１５は転送先アドレス、転送先サイズの組を１ユニットとするリストである。転送モード５０３が転送先チェーンリスト５１５を使用しない設定であった場合、転送先チェーンリストアドレス５０５に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【００８８】
転送モード５０３が挿入チェーンリスト５１６を使用する設定であった場合、挿入チェーンリストアドレス５０６のアドレスからリストの１ユニット目を取得する。リストの１ユニット目の転送が完了すると次のリストを取得し、挿入チェーンリストユニット数５１２に設定された値分のリストを取得するまで継続する。挿入チェーンリスト５１６は挿入元アドレスと挿入オフセット、挿入サイズの組を１ユニットとするリストである。転送モード５０３が挿入チェーンリスト５１６を使用しない設定であった場合、挿入チェーンリストアドレス５０６のフィールドを無視し、データを挿入しての転送を行わない。
【００８９】
転送モード５０３が削除チェーンリスト５１７を使用する設定であった場合、削除チェーンリストアドレス５０７のアドレスからリストの１ユニット目を取得する。リストの１ユニット目の転送処理が完了すると次のリストを取得し、削除チェーンリストユニット数５１３に設定された値分のリストを取得するまで継続する。削除チェーンリスト５１７は削除オフセット、削除サイズの組を１ユニットとするリストである。転送モード５０３が削除チェーンリスト５１７を使用しない設定であった場合、削除チェーンリストアドレス５０７のフィールドを無視し、データを削除しての転送を行わない。
【００９０】
各リストの取得は１ユニットずつ取得せず複数ユニットを取得する方式でもよい。また挿入チェーンリスト５１６の挿入オフセット、削除チェーンリスト５１７の削除オフセットのカウント方法は、挿入サイズ、削除サイズを含めてカウントする方式であっても、含めずにカウントする方式であってもよい。挿入サイズ、削除サイズを含めてカウントする方式であった場合は挿入リストの１ユニット目のデータに２ユニット目のデータを挿入する等、ネストして挿入することが可能である。しかし、この場合はリストを１ユニットずつでは無く、複数ユニットを読み出して処理する必要がある。
【００９１】
ディスクリプタ制御部３０３が転送元リスト制御部３０８、転送先リスト制御部３０７、挿入リスト制御部３１０、削除リスト制御部３０９の制御によりデータ転送を行う。転送元リスト制御部３０８は転送元チェーンリスト５１４に示されたアドレスから指定サイズ分のデータを、読込制御部３０４を介してデータを読み込む。挿入リスト制御部３１０は転送元リスト制御部３０８の読み込んだサイズが挿入チェーンリスト５１６に指定したオフセットに達すると、指定されたアドレスから指定サイズ分のデータを、読込制御部３０４を介して読み込む。読み出したデータはディスクリプタ制御部３０３、チェックサム演算部３０６を経由して削除リスト制御部３０９へと転送される。削除リスト制御部３０９は転送されてきたデータが削除チェーンリスト５１７に指定されたオフセットに達したデータから削除チェーンリスト５１７に指定されたサイズ分のデータを破棄する。
【００９２】
破棄されないデータは転送先リスト制御部３０７へと転送される。チェックサム演算部３０６では転送データのチェックサム計算を行う。転送先リスト制御部３０７は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部３０５を介してデータを書き込む。ディスクリプタ制御部３０３はディスクリプタ５０１の転送サイズ５０８に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス５０９にチェックサム計算結果及び、転送結果のステータスを書き込む。
【００９３】
（データの挿入処理）
挿入リスト制御部３１０によるデータの挿入処理（挿入リスト制御処理）について説明する。図１０におけるステップＳ１００１において、ディスクリプタ５０１に設定された転送モード５０３が挿入チェーンリスト５１６を使用するモードであるかを調べる。挿入チェーンリスト５１６を使用しないモードと判定した場合（Ｓ１００１−Ｎｏ）、ステップＳ１０１０へ進む
ステップＳ１００２において、ステップＳ１００１で挿入チェーンリスト５１６を使用するモードと判定した場合（Ｓ１００１−Ｙｅｓ）、挿入チェーンリスト５１６のユニットを取得する。
【００９４】
ステップＳ１００３において、転送元リスト制御部３０８から読み込んだ転送データのカウント値を取得する。
【００９５】
ステップＳ１００４において、ステップＳ１００３で取得したカウント値が挿入オフセットに達したかを調べる。カウント値が挿入オフセットに達していないと判定した場合（Ｓ１００４−Ｎｏ）、ステップＳ１００５へ進む。ステップＳ１００５において、転送元リスト制御部３０８から読み込んだデータをディスクリプタ制御部３０３へ転送する。カウント値が挿入オフセットに達するまでステップＳ１００３、ステップＳ１００４、ステップＳ１００５の処理を繰り返す。
【００９６】
ステップＳ１００６において、ステップＳ１００４でカウント値が挿入オフセットに達したと判定された場合（Ｓ１００４−Ｙｅｓ）、転送元リスト制御部３０８の転送データの読み込み処理を中断させる。
【００９７】
ステップＳ１００７において、挿入元アドレスから挿入サイズ分のデータを読み込み、ディスクリプタ制御部３０３へ転送する。
【００９８】
ステップＳ１００８において、挿入データのデータサイズ分の転送が完了すると、転送元リスト制御部３０８の転送データの読み込み処理を再開させる。
【００９９】
ステップＳ１００９において、処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数５１２に設定した値に達したか調べる。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数５１２に達していないと判定した場合（Ｓ１００９−Ｎｏ）、ステップＳ１００２へ進む。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数５１２に達するまでステップＳ１００２からステップＳ１００９までの処理を繰り返す。
【０１００】
本実施形態では以上のような手順で転送元チェーンリストにデータを挿入して読み出しを行ったが、転送元チェーンリストと挿入チェーンリストを順次読み出しながら挿入するにあたり整合性が取れる手順であればよい。
【０１０１】
挿入チェーンリストのユニット数が挿入チェーンリストユニット数５１２に達した場合（Ｓ１００９−Ｙｅｓ）、処理はステップＳ１０１０に進められる。
【０１０２】
ステップＳ１０１０において、残りすべてのデータ転送が完了するまで、転送元リスト制御部３０８から読み込んだデータをディスクリプタ制御部３０３へ転送する。すべてのデータ転送が完了すると挿入リスト制御処理を終了する。
【０１０３】
（データの削除処理）
削除リスト制御部３０９によるデータの削除処理（削除リスト制御処理）を説明する。図１１におけるステップＳ１１０１において、ディスクリプタ５０１に設定された転送モード５０３が削除チェーンリスト５１７を使用するモードであるかを調べる。削除チェーンリスト５１７を使用しないモードと判定した場合（Ｓ１１０１−Ｎｏ）、ステップＳ１１０８へ進む。
【０１０４】
ステップＳ１１０２において、ステップＳ１１０１で削除チェーンリスト５１７を使用するモードと判定した場合（Ｓ１１０１−Ｙｅｓ）、削除チェーンリスト５１７のユニットを取得する。
【０１０５】
ステップＳ１１０３において、ディスクリプタ制御部３０３から読み込んだ転送データのカウント値を取得する。
【０１０６】
ステップＳ１１０４において、ステップＳ１１０３で取得したカウント値が削除オフセットに達したかを調べる。カウント値が削除オフセットに達していないと判定した場合（Ｓ１１０４−Ｎｏ）、ステップＳ１１０５へ進む。ステップＳ１１０５において、ディスクリプタ制御部３０３から読み込んだデータを転送先リスト制御部３０７へ転送する。カウント値が削除オフセットに達するまで（Ｓ１１０４−Ｙｅｓ）、ステップＳ１１０３、ステップＳ１１０４、ステップＳ１１０５の処理を繰り返す。
【０１０７】
ステップＳ１１０６において、削除サイズ分のデータを転送先リスト制御部３０７へ転送せず破棄する。
【０１０８】
ステップＳ１１０７において、処理した削除チェーンリストのユニット数が削除チェーンリストユニット数５１３に設定した値に達したか調べる。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数５１３に達していないと判定した場合（Ｓ１１０７−Ｎｏ）、ステップＳ１１０２へ進む。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数５１３に達する（Ｓ１１０７−Ｙｅｓ）まで、ステップＳ１１０２からステップＳ１１０７までの処理を繰り返す。
【０１０９】
ステップＳ１１０８において、ステップＳ１１０７で削除チェーンリストの処理が完了したと判定した場合、残りすべてのデータ転送が完了するまで、ディスクリプタ制御部３０３から読み込んだデータを転送先リスト制御部３０７へ転送する。すべてのデータ転送が完了すると削除リスト制御処理を終了する。
【０１１０】
本実施形態では以上のような手順で読み出したデータの一部を削除しながら転送先チェーンリストへ転送する処理を行ったが、転送先チェーンリストと削除チェーンリストを順次読み出しながら一部データを削除するにあたり整合性が取れる手順であればよい。
【０１１１】
本実施形態によれば、挿入チェーンリストによって、挿入リスト制御部がデータを転送元チェーンリストに挿入しながら転送元のデータを読み込むことができる。また削除チェーンリストによって、削除リスト制御部が転送先チェーンリストからデータを一部削除しながらデータを転送することができる。
【０１１２】
データパス制御部はプロセッサの介在無しに任意の位置にデータの挿入、データの削除をしながらデータ転送処理を実行することができる。これによりチェーンリストによるＤＭＡ転送において任意の位置にデータの挿入、任意の位置からのデータの削除を行いながらデータ転送することが可能になる。
【０１１３】
ＤＭＡ処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うＤＭＡ転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。さらに、順次読み出しながら挿入、削除処理を行うためデータパス制御部の内部的にチェーンリストを再構成したものを保持しておく必要がないためオンチップメモリを削減することができる。
【０１１４】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2013089190.tif 000003
【図２】
2013089190.tif 000004
【図３】
2013089190.tif 000005
【図４】
2013089190.tif 000006
【図５】
2013089190.tif 000007
【図６】
2013089190.tif 000008
【図７】
2013089190.tif 000009
【図８】
2013089190.tif 000010
【図９】
2013089190.tif 000011
【図１０】
2013089190.tif 000012
【図１１】
2013089190.tif 000013