(57)【要約】【課題】転送制御装置の外部でデータ転送の途中状況を活用し、転送対象のデータに関する多様なニーズに対して柔軟な対応をすること。【解決手段】転送制御装置１０は、転送対象データから分割された複数のデータ列を並列処理によりパケット単位で、通信相手のデバイス装置２０との間で転送する転送処理部１１と、パケットの転送後に、所定のタイミングで、複数のデータ列のそれぞれにおける転送の進捗状況を示す転送進捗情報１３を、外部へ通知する通知部１２と、を備える。【選択図】図１
2014044609.tif 000002
【特許請求の範囲】
【請求項１】
転送対象データから分割された複数のデータ列を、通信相手のデバイス装置との間で転送する転送処理部と、
前記複数のデータ列のそれぞれにおける転送の進捗状況を示す転送進捗情報を、外部へ通知する通知部と、
を備える転送制御装置。
【請求項２】
前記通知部は、
前記転送処理部が前記データ列の一部である部分データの転送を完了するごとに、当該部分データが属するデータ列における転送済みのデータ量を算出し、
所定のタイミングにおいて、前記算出された転送済みのデータ量を前記転送進捗情報として前記外部へ通知する
請求項１に記載の転送制御装置。
【請求項３】
前記通知部は、
前記転送処理部が前記部分データの転送を完了するごとに、当該部分データが属するデータ列における転送進捗情報を前記外部から取得し、当該取得した転送進捗情報に当該部分データのサイズを加算して前記転送済みのデータ量を算出し、当該転送済みのデータ量を前記転送進捗情報の更新値として前記外部へ通知する
請求項２に記載の転送制御装置。
【請求項４】
前記算出された転送済みのデータ量を、前記データ列ごとに対応付けて記憶する記憶部をさらに備え、
前記通知部は、
前記転送処理部が前記部分データの転送を完了するごとに、前記記憶部に記憶された転送済みのデータ量のうち当該部分データが属するデータ列に対応付けられたものについて、当該部分データのサイズを加算して更新し、
前記転送処理部が所定回数の前記転送を完了した場合に、前記記憶部に記憶された各転送済みのデータ量を読み出して、前記転送進捗情報として前記外部へ通知する
請求項２に記載の転送制御装置。
【請求項５】
前記通知部は、
外部から転送の中止指示を受け付けた場合、前記複数のデータ列のそれぞれについて直前に算出された各転送済みのデータ量を前記転送進捗情報として前記外部へ通知する
請求項２に記載の転送制御装置。
【請求項６】
前記外部は、前記通信相手以外であって、前記転送制御装置に接続された記憶装置であり、
前記通知部は、前記複数のデータ列のそれぞれにおける転送進捗情報について、前記記憶装置内の各データ列に関する制御領域に、各データ列に対応する前記転送進捗情報を格納する
請求項１に記載の転送制御装置。
【請求項７】
前記記憶装置は、前記転送制御装置を含むシステムで共有するメモリである
請求項６に記載の転送制御装置。
【請求項８】
前記通知部は、
前記転送処理部が前記通信相手のデバイス装置に対して前記複数のデータ列を送信する場合、各データ列における送信済みのデータ量を前記転送進捗情報として前記外部へ通知し、
前記転送処理部が前記通信相手のデバイス装置から前記複数のデータ列を受信する場合、各データ列における受信済みのデータ量を前記転送進捗情報として前記外部へ通知する
請求項１乃至７のいずれか１項に記載の転送制御装置。
【請求項９】
前記複数のデータ列は、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）３．０に基づく複数のストリームとする
請求項１乃至８のいずれか１項に記載の転送制御装置。
【請求項１０】
転送対象データから分割された複数のデータ列を並列処理によりパケット単位で通信相手との間で転送中に、所定のタイミングで転送済のパケット数に基づく転送済情報を当該データ列ごとに外部へ出力する転送制御装置。
【請求項１１】
前記パケットの転送が完了するごとに、前記転送済情報を前記外部へ出力する
請求項１０に記載の転送制御装置。
【請求項１２】
前記パケットの転送が完了するごとに、前記転送済情報を更新し、
複数回の前記パケットの転送が完了するごとに、更新後の前記転送済情報を前記外部へ出力する
請求項１０に記載の転送制御装置。
【請求項１３】
前記パケットの転送が完了するごとに、前記転送済情報を更新し、
前記外部から転送の中止指示を受け付けた場合、更新後の前記転送済情報を前記外部へ出力する
請求項１０に記載の転送制御装置。
【請求項１４】
前記転送済情報は、前記データ列ごとの転送済のデータ長である
請求項１０乃至１３のいずれか１項に記載の転送制御装置。
【請求項１５】
転送対象データから複数に分割されたデータ列の一部である部分データを、通信相手のデバイス装置との間で転送し、
前記部分データの転送を完了した後、所定のタイミングにおいて、当該部分データが属するデータ列における転送の進捗状況を示す転送進捗情報を、前記データ列ごとに外部へ出力する
転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転送制御装置、転送制御方法及び転送制御プログラムに関し、例えば、転送対象データから複数のデータ列に分割して転送を行う転送制御装置、転送制御方法及び転送制御プログラムに関する。
【背景技術】
【０００２】
特許文献１には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）によるデータ転送を高速に実行するためのＵＳＢホストシステムに関する技術が開示されている。特許文献１にかかるＵＳＢホストシステムは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）用メモリと、ＵＳＢホストコントローラ内部に転送用メモリとを備える。ＵＳＢホストコントローラは、転送要求に従って、ＵＳＢデバイスからのデータを転送用メモリに格納する。ＣＰＵは、制御プログラムに従い、転送完了後に転送用メモリからＣＰＵ用メモリへデータ転送を行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２４９９３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、ホストコントローラとデバイス装置間で大量のデータをバルク転送する場合には、複数のパケット等の転送単位ごとにデータ転送が行われる。但し、当該データの転送は、ＣＰＵからの要求等により中断される場合がある。ここで、複数のパケットのうち前半のパケット群の転送が正常に完了し、後半のパケット群が未転送である場合、パケット単位では転送に失敗していないため、パケットの再送は行われない。一方、元々の転送対象である大量のデータとしては、転送が未完了である。そのため、中断されたデータ転送を再開する場合に、最後に転送が完了したパケットの位置等がわかれば、例えば転送済みのパケットの直後のパケットから転送を再開することができる。そして、このようなデータ転送の途中状況は、通常、ホストコントローラ内で管理される。
【０００５】
しかしながら、ホストコントローラ内でのみ途中状況が管理されている場合、ドライバ等の外部から途中状況の情報を活用できないという問題点がある。特に、ＵＳＢ３．０において、バルク転送が複数のストリームにより並列処理することが可能となったことに伴い、この問題点が顕在化する。上述した特許文献１には、このような問題点の解決手段が開示されていない。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、転送制御装置は、転送対象データから分割された複数のデータ列のそれぞれにおける転送の進捗状況を示す転送進捗情報を、外部へ通知する。
【０００８】
他の実施の形態によれば、転送制御装置は、転送対象データの転送中に、所定のタイミングで転送済のパケット数に基づく転送済情報をデータ列ごとに外部へ出力する。
【発明の効果】
【０００９】
前記一実施の形態によれば、転送制御装置の外部でデータ転送の途中状況を活用し、転送対象のデータに関する多様なニーズに対して柔軟な対応をすることができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態１にかかる転送制御装置の構成を示すブロック図である。
【図２】本実施の形態１にかかる転送制御処理の流れを示すフローチャートである。
【図３】本実施の形態２にかかるＵＳＢホストコントローラの構成を示すブロック図である。
【図４】本実施の形態２にかかるストリームの制御領域を説明するための図である。
【図５】本実施の形態２にかかる転送中間データの登録処理（送信時）の流れを説明するシーケンス図である。
【図６】本実施の形態２にかかる転送中間データの更新処理（送信時）の流れを説明するシーケンス図である。
【図７】本実施の形態２にかかる転送中間データの登録処理（受信時）の流れを説明するシーケンス図である。
【図８】本実施の形態２にかかる転送中止命令時の流れを説明するシーケンス図である。
【図９】本実施の形態３にかかるＵＳＢホストコントローラの構成を示すブロック図である。
【図１０】本実施の形態３にかかる転送中間データの登録処理（送信時）の流れを説明するシーケンス図である。
【図１１】本実施の形態４にかかる転送中止命令時の流れを説明するシーケンス図である。
【発明を実施するための形態】
【００１１】
＜実施の形態１＞
図１は、本実施の形態１にかかる転送制御装置１０の構成を示すブロック図である。転送制御装置１０は、デバイス装置２０との間で転送対象データの送信又は受信の少なくともいずれかである転送を行う。ここで、転送対象のデータは、一回の転送処理では転送しきれないほどに大きいデータであるものとする。そのため、転送制御装置１０とデバイス装置２０間では、パケット等の転送単位でデータ転送が行われる。そして、具体的には、転送制御装置１０とデバイス装置２０間では、転送対象データから分割された複数のデータ列を並列処理によりパケット単位で転送を行うものとする。尚、並列処理とは、例えば、パイプライン処理であり、実際のパケットの転送自体は直列で行われていてもよい。
【００１２】
転送制御装置１０は、転送処理部１１と、通知部１２とを備える。転送処理部１１は、転送対象データから分割された複数のデータ列を、通信相手のデバイス装置との間で転送する。通知部１２は、複数のデータ列のそれぞれにおける転送の進捗状況を示す転送進捗情報１３を、外部へ通知する。ここで、外部とはデバイス装置２０以外の装置であって、転送制御装置１０に接続された装置等である。
【００１３】
実施の形態１にかかる転送制御装置１０を言い換えると、転送対象データから分割された複数のデータ列を並列処理によりパケット単位で通信相手との間で転送中に、所定のタイミングで転送済のパケット数に基づく転送済情報を当該データ列ごとに外部へ出力するものである。
【００１４】
これにより、転送対象データの転送が中断されたとしても、その進捗状況が転送制御装置１０以外の外部も転送進捗情報により知ることができるため、転送進捗情報を活用して多様なニーズに応じた柔軟な処理を行うことができる。
【００１５】
図２は、本実施の形態１にかかる転送制御処理の流れを示すフローチャートである。まず、転送処理部１１は、通信相手のデバイス装置２０との間で、部分データを転送する（Ｓ１１）。ここで、部分データとは、転送対象データから複数に分割されたデータ列の一部であり、例えば、パケットである。また、転送処理部１１は、部分データをデバイス装置２０へ送信するか、デバイス装置２０から受信するかのいずれかであればよい。
【００１６】
次に、通知部１２は、外部へ転送進捗情報１３を出力する（Ｓ１２）。つまり、通知部１２は、部分データの転送を完了した後、所定のタイミングにおいて、当該部分データが属するデータ列における転送の進捗状況を示す転送進捗情報１３を、データ列ごとに外部へ出力する。
【００１７】
このように、本実施の形態１により、転送制御装置の外部でデータ転送の途中状況を活用し、転送対象のデータに関する多様なニーズに対して柔軟な対応をすることができる。
【００１８】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１の転送制御装置１０の一実施例である。本実施の形態２にかかる通知部は、転送処理部がデータ列の一部である部分データの転送を完了するごとに、当該部分データが属するデータ列における転送済みのデータ量を算出し、所定のタイミングにおいて、算出された転送済みのデータ量を転送進捗情報として外部へ通知する。このように、転送進捗情報として転送済のデータ量を用いる。そして、例えばパケットの転送毎に転送済のデータ量を算出する。その後、所定のタイミングによりその時点の転送済のデータ量を外部へ通知する。これにより、転送毎に算出しておくことで、通知が必要なタイミングに最新の転送進捗情報を即時に通知が可能となる。また、転送進捗情報をデータ量とすることで、データ列内で再送時等に再送を開始すべきデータ位置を容易に特定することができる。
【００１９】
さらに本実施の形態２にかかる通知部は、転送処理部が部分データの転送を完了するごとに、当該部分データが属するデータ列における転送進捗情報を外部から取得し、当該取得した転送進捗情報に当該部分データのサイズを加算して転送済みのデータ量を算出し、当該転送済みのデータ量を転送進捗情報の更新値として外部へ通知する。言い換えると、本実施の形態２にかかる転送制御装置は、パケットの転送が完了するごとに、転送済情報を前記外部へ出力する。
【００２０】
このように、一パケットの転送が完了するごとに、転送進捗情報を外部へ通知するため、転送制御装置は、内部に転送進捗情報を保持するためのメモリが不要となる。そのため、転送制御装置内の回路面積を抑制することができる。
【００２１】
また、逐次、最新の転送進捗情報を外部へ通知しておくため、例えば、ＣＰＵ等から転送の中止要求があった場合であっても、既に転送進捗情報が通知済みであるため、ＣＰＵ等は即時に最新の転送進捗情報を取得することができる。
【００２２】
図３は、本実施の形態２にかかるＵＳＢホストコントローラ１００の構成を示すブロック図である。ＵＳＢホストコントローラ１００は、ペリフェラルバス５０２を介してＵＳＢデバイス４００とデータ転送を行うものである。また、ＵＳＢホストコントローラ１００は、システムバス５０１を介してドライバ２００及びシステムメモリ３００等と接続されている。そして、ＵＳＢホストコントローラ１００は、ドライバ２００等からの指示に応じてＵＳＢデバイス４００へ転送対象データの送信又はＵＳＢデバイス４００からの転送対象データの受信を行う。
【００２３】
ＵＳＢホストコントローラ１００は、転送対象データから分割された複数のストリーム単位で並列処理によりデータ転送を行うものである。ここで、以下の説明においは、ＵＳＢホストコントローラ１００がＵＳＢ３．０に対応しているものとする。ＵＳＢ３．０では、ＥｎｄｐｏｉｎｔごとにＥＤＴＬＡ（Ｅｖｅｎｔ  Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｌｅｎｇｔｈ  Ａｃｃｕｍｕｌａｔｏｒ）というデータ転送における中間情報を扱う必要がある。ＥＤＴＬＡは、転送済のデータ長を示す。よって、ＥＤＴＬＡは、いわば上記転送進捗情報の一実施例である。また、Ｂｕｌｋ  Ｓｔｒｅａｍｉｎｇ  Ｐｒｏｔｏｃｏｌを扱う場合には１Ｅｎｄｐｏｉｎｔあたり最大６５５３３個のストリームを処理することができる。よって、ＥＤＴＬＡの数も最大６５５３３個となる。
【００２４】
尚、ＵＳＢホストコントローラ１００は、転送制御装置１０の一実施例であり、ＵＳＢ３．０以外の規格に対応したものであっても構わない。つまり、上述したストリーム数及びＥＤＴＬＡ数はあくまで例示であって、これに限定されるものではない。
【００２５】
ドライバ２００は、ＣＰＵ（不図示）がドライバプログラムを読み込み実行することで実現される機能ブロックである。ドライバ２００は、アプリケーションソフトウェアからＵＳＢホストコントローラ１００へ指示を行うための抽象化したインタフェースを提供する。そのため、ＵＳＢホストコントローラ１００は、ドライバ２００からデータ転送の指示や中止の指示を受け付けることとなる。
【００２６】
システムメモリ３００は、上述した外部の一実施例である。つまり、システムメモリ３００は、ＵＳＢホストコントローラ１００のデータ転送の通信相手（ＵＳＢデバイス４００）以外であって、ＵＳＢホストコントローラ１００に接続された記憶装置である。システムメモリ３００は、制御領域３１０とストリーム３２０とを記憶する。ストリーム３２０は、転送対象データから複数に分割された各データ列である。制御領域３１０は、ストリーム３２０の制御情報を管理するための領域である。本実施の形態２では、制御領域３１０内に後述する転送中間データ３１１を格納する。
【００２７】
図４は、本実施の形態２にかかるストリームの制御領域を説明するための図である。このように、本実施の形態２では、システムメモリ３００内のＳｔｒｅａｍ  Ｃｏｎｔｅｘｔの空き領域に転送中間データ３１１（ＥＤＴＬＡ）を保存する領域を確保している。
【００２８】
ここで、システムメモリ３００は、ＵＳＢホストコントローラ１００やドライバ２００を含むシステム全体で共有する記憶装置である。そのため、転送中間データ３１１をシステムメモリ３００内に格納することで、ドライバ２００等のＵＳＢホストコントローラ１００以外から転送中間データ３１１へ容易にアクセスすることができる。よって、ドライバ２００から転送中間データ３１１を様々な処理に用いることができる。
【００２９】
図３に戻って説明を続ける。ＵＳＢホストコントローラ１００は、システムバス制御部１０１と、データバッファ１０２と、ペリフェラル制御部１０３と、データ転送処理部１０４と、転送進捗状況管理部１０５とを備える。システムバス制御部１０１は、システムバス５０１と接続され、データバッファ１０２、データ転送処理部１０４及び転送進捗状況管理部１０５とドライバ２００及びシステムメモリ３００との通信を制御する。データバッファ１０２は、転送対象データのうち少なくとも１転送単位、例えば１パケット分の部分データを一時的に保持するための記憶装置である。データバッファ１０２には、ＵＳＢデバイス４００へ送信予定の部分データと、ＵＳＢデバイス４００から受信後の部分データの両方又は一方を保存可能である。ペリフェラル制御部１０３は、ペリフェラルバス５０２と接続され、データバッファ１０２及びデータ転送処理部１０４とＵＳＢデバイス４００との通信を制御する。
【００３０】
データ転送処理部１０４は、上述した転送処理部１１の一実施例である。データ転送処理部１０４は、システムバス制御部１０１及びペリフェラル制御部１０３を用いて部分データの送信及び受信処理を行う。転送進捗状況管理部１０５は、上述した通知部１２の一実施例である。転送進捗状況管理部１０５は、データ転送処理部１０４におけるパケットの転送が完了したことを検出し、当該パケットが属するストリームにおける転送済のデータ長を算出することにより、転送中間データを生成する。転送中間データには、ストリームを特定するための識別情報と、当該ストリームにおける転送済のデータ長とが対応付けられている。そして、転送中間データは、上述した転送進捗情報の一実施例である。そのため、転送中間データは、転送済のデータ長に限定されず、ストリーム内の転送済の最後のデータの位置（アドレス）やパケットサイズが固定長である場合には、転送済のパケット数であっても構わない。または、ストリーム当たりのデータ長に占める転送済のデータ長の比率であっても構わない。また、未転送のデータ長や未転送のデータ長の比率を転送中間データとしても構わない。
【００３１】
また、転送進捗状況管理部１０５は、生成した転送中間データを所定のタイミングでシステムバス制御部１０１を介してシステムメモリ３００へ出力する。特に、転送進捗状況管理部１０５は、転送中間データをシステムメモリ３００内の制御領域３１０に格納する。すなわち、転送進捗状況管理部１０５は、複数のストリームのそれぞれにおける転送中間データについて、システムメモリ３００内の各ストリームに関する制御領域３１０に、各ストリームに対応する転送中間データ３１１を格納する。このように、制御領域の空き領域を用いてストリームごとに管理するため、領域を効率的に利用できる。
【００３２】
特に、本実施の形態２にかかる転送進捗状況管理部１０５は、データ転送処理部１０４がパケットの転送を完了するごとに、当該パケットが属するストリームにおける転送中間データ３１１をシステムメモリ３００から取得し、当該取得した転送中間データ３１１に当該パケットのサイズを加算して転送済みのデータ量を算出し、当該転送済みのデータ量を転送中間データ３１１の更新値としてシステムメモリ３００へ通知する。
【００３３】
また、転送進捗状況管理部１０５は、データ転送処理部１０４がＵＳＢデバイス４００に対して複数のストリームを送信する場合、各ストリームにおける送信済みのデータ量をＥＤＴＬＡとしてシステムメモリ３００へ通知する。また、転送進捗状況管理部１０５は、データ転送処理部１０４がＵＳＢデバイス４００から複数のストリームを受信する場合、各ストリームにおける受信済みのデータ量をＥＤＴＬＡとしてシステムメモリ３００へ通知する。そのため、送受信の双方に対応することができる。
【００３４】
図５は、本実施の形態２にかかる転送中間データの登録処理（送信時）の流れを説明するシーケンス図である。前提として、ＣＰＵ等により転送対象データが複数のストリームに分割されてシステムメモリ３００のストリーム３２０に格納されているものとする。併せて、各ストリーム３２０に対応した制御領域３１０が確保されたものとする。但し、この時点では、制御領域３１０に転送中間データ３１１は格納されていない。また、ＵＳＢホストコントローラ１００は、ＵＳＢデバイス４００との間でＵＳＢの接続が確立しているものとする。
【００３５】
まず、ドライバ２００は、ＵＳＢホストコントローラ１００に対してＤｏｏｒｂｅｌｌ  ｒｉｎｇを実行する（Ｓ２０１）。ここでは、ドライバ２００は、システムメモリ３００内の各ストリーム３２０についてデータ送信の開始をＵＳＢホストコントローラ１００に対して指示するものとする。
【００３６】
次に、ＵＳＢホストコントローラ１００は、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｒｅａｄコマンドを実行する（Ｓ２０２）。つまり、ＵＳＢホストコントローラ１００は、システムメモリ３００の制御領域３１０からＥＤＴＬＡを読み出そうとする。但し、ここでは、データ送信の開始前であるため、読み出されない。
【００３７】
続いて、ＵＳＢホストコントローラ１００は、最初にデータ送信を行う対象のストリーム３２０について、ＴＲＢ  Ｆｅｔｃｈを行う（Ｓ２０３）。その後、ＵＳＢホストコントローラ１００は、ＵＳＢデバイス４００に対してＵＳＢ  Ｔｒａｎｓｆｅｒを行う（Ｓ２０４）。ここでは、データ転送処理部１０４は、対象のストリームの先頭から所定サイズのデータを１パケットとしてＵＳＢデバイス４００へ送信する。
【００３８】
その後、ＵＳＢホストコントローラ１００は、ＥＤＴＬＡを算出する（Ｓ２０５）。つまり、転送進捗状況管理部１０５は、パケットの送信が正常に完了した後に、当該パケットのデータ長をＥＤＴＬＡの値とする。そして、ＵＳＢホストコントローラ１００は、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｗｒｉｔｅ  ｗｉｔｈ  ＥＤＴＬＡコマンドを実行する（Ｓ２０６）。つまり、転送進捗状況管理部１０５は、システムメモリ３００の当該ストリームに対応する制御領域３１０内の所定の領域に、算出したＥＤＴＬＡを格納する。
【００３９】
これにより、同一のストリームについてデータ送信を行う際に、既に格納した転送中間データをシステムメモリから読み出すことで、転送済のデータ位置の直後から転送を再開することができる。以下、その例について説明する。
【００４０】
図６は、本実施の形態２にかかる転送中間データの更新処理（送信時）の流れを説明するシーケンス図である。図５のステップＳ２０６に続いて、ドライバ２００は、上記同様、ＵＳＢホストコントローラ１００に対してＤｏｏｒｂｅｌｌ  ｒｉｎｇを実行する（Ｓ２１１）。ここでは、図５と同一のストリームに対して次のパケットを送信する指示であるものとする。
【００４１】
次に、ＵＳＢホストコントローラ１００は、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｒｅａｄ  ｗｉｔｈ  ＥＤＴＬＡコマンドを実行する（Ｓ２１２）。つまり、転送進捗状況管理部１０５は、システムメモリ３００の該当するストリームにおける制御領域３１０からＥＤＴＬＡを読み出す。このとき、読み出されるＥＤＴＬＡは、既に転送済のデータ長が設定されている。
【００４２】
そこで、ＵＳＢホストコントローラ１００は、図５と同一のストリーム３２０のうち、ＥＤＴＬＡが示すデータ長の直後の位置について、ＴＲＢ  Ｆｅｔｃｈを行う（Ｓ２１３）。そして、ＵＳＢホストコントローラ１００は、ＵＳＢデバイス４００に対してＵＳＢ  Ｔｒａｎｓｆｅｒを行う（Ｓ２１４）。ここでは、データ転送処理部１０４は、転送済のデータの直後から所定サイズのデータを１パケットとしてＵＳＢデバイス４００へ送信する（Ｓ２１４）。
【００４３】
その後、ＵＳＢホストコントローラ１００は、ＥＤＴＬＡを更新する（Ｓ２１５）。つまり、転送進捗状況管理部１０５は、ステップＳ２１２で読み出したＥＤＴＬＡに、ステップＳ２１４で送信したパケットサイズを加算してＥＤＴＬＡを更新する。
【００４４】
続いて、ＵＳＢホストコントローラ１００は、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｗｒｉｔｅ  ｗｉｔｈ  ＥＤＴＬＡコマンドを実行する（Ｓ２１６）。つまり、転送進捗状況管理部１０５は、システムメモリ３００の当該ストリームに対応する制御領域３１０内の所定の領域に、更新したＥＤＴＬＡを格納する。
【００４５】
図７は、本実施の形態２にかかる転送中間データの登録処理（受信時）の流れを説明するシーケンス図である。図５との違いとして、ＵＳＢデバイス４００側で転送対象データが複数のストリームに分割されて保持されているものとする。また、システムメモリ３００のストリーム３２０にデータ自体の格納前であるが、制御領域３１０及びストリーム３２０の領域の確保はされているものとする。
【００４６】
まず、ドライバ２００は、ＵＳＢデバイス４００からのデータ受信の開始を指示するために、Ｄｏｏｒｂｅｌｌ  ｒｉｎｇを実行する（Ｓ２２１）。次に、ＵＳＢホストコントローラ１００は、図５のステップＳ２０２及びＳ２０３と同様に、ステップＳ２２２及びＳ２２３を実行する。
【００４７】
そして、ＵＳＢホストコントローラ１００は、ＵＳＢデバイス４００に対してデータ転送要求を送信する（Ｓ２２４）。続いて、ＵＳＢデバイス４００は、データ転送要求に応じて、ＵＳＢホストコントローラ１００に対してＵＳＢ  Ｔｒａｎｓｆｅｒを行う（Ｓ２２５）。そして、ＵＳＢホストコントローラ１００は、パケットを受信し、ＥＤＴＬＡを算出する（Ｓ２２６）。つまり、転送進捗状況管理部１０５は、パケットの受信が正常に完了した後に、当該パケットのデータ長をＥＤＴＬＡの値とする。そして、ＵＳＢホストコントローラ１００は、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｗｒｉｔｅ  ｗｉｔｈ  ＥＤＴＬＡコマンドを実行する（Ｓ２２７）。つまり、転送進捗状況管理部１０５は、システムメモリ３００の当該ストリームに対応する制御領域３１０内の所定の領域に、算出したＥＤＴＬＡを格納する。
【００４８】
尚、継続してデータ受信を行う場合についても図６から類推できるため、図示及び説明を省略する。
【００４９】
図８は、本実施の形態２にかかる転送中止命令時の流れを説明するシーケンス図である。前提として、図５、図６又は図７により予めシステムメモリ３００の制御領域３１０内に転送中間データ３１１が格納済みであり、データの送信又は受信が継続中であるものとする。
【００５０】
まず、ドライバ２００は、ＵＳＢホストコントローラ１００に対してＳｔｏｐ  Ｅｎｄｐｏｉｎｔ  Ｃｏｍｍａｎｄを実行する（Ｓ２３１）。これにより、ＵＳＢホストコントローラ１００は、実行中のデータ転送を中断する。そして、ＵＳＢホストコントローラ１００は、ドライバ２００に対して、Ｃｏｍｐｌｅｔｉｏｎを通知する（Ｓ２３２）。これにより、ドライバ２００は、指示したデータ転送の中断処理が完了したことを認識する。
【００５１】
その後、ドライバ２００は、システムメモリ３００に対してＲｅａｄ  ＡＬＬ  Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ．  ＥＤＴＬＡコマンドを実行する（Ｓ２３３）。つまり、ドライバ２００は、全てのストリームについてのＥＤＴＬＡを取得し、必要に応じて処理を行うことができる。例えば、各ストリームのうち未転送のデータについて更新を行った上で、データ転送を再開するといったこともできる。その他、多様なニーズに応じて柔軟な処理を実現することができる。
【００５２】
このように、本実施の形態２では、転送中間データ３１１をＵＳＢホストコントローラ１００内部のメモリではなく、システムメモリ３００上に格納する。そのため、ＵＳＢホストコントローラ１００における回路面積を抑制することができる。そして、転送中間データ３１１がシステムメモリ３００内にあることにより、ドライバ２００がＳｔｏｐ  Ｅｎｄｐｏｉｎｔ  Ｃｏｍｍａｎｄを実行する際に、システムメモリ３００上のＳｔｒｅａｍ  Ｃｏｎｔｅｘｔに加えられたＥＤＴＬＡのフィールドを読み、全ＳｔｒｅａｍのＥＤＴＬＡの値を把握することができる。
【００５３】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態２のＵＳＢホストコントローラ１００の変形例である。本実施の形態３にかかる転送制御装置は、算出された転送済みのデータ量を、データ列ごとに対応付けて記憶する記憶部をさらに備える。そして、通知部は、転送処理部が部分データの転送を完了するごとに、記憶部に記憶された転送済みのデータ量のうち当該部分データが属するデータ列に対応付けられたものについて、当該部分データのサイズを加算して更新し、転送処理部が所定回数の転送を完了した場合に、記憶部に記憶された各転送済みのデータ量を読み出して、転送進捗情報として外部へ通知する。言い換えると、パケットの転送が完了するごとに、転送済情報を更新し、複数回のパケットの転送が完了するごとに、更新後の転送済情報を外部へ出力する。これにより、例えば、２以上のパケットの転送を完了するごとに転送進捗情報を外部へ通知することになる。そのため、外部への通知回数を減少させて通信負荷を抑制することができる。
【００５４】
図９は、本実施の形態３にかかるＵＳＢホストコントローラ１００ａの構成を示すブロック図である。ＵＳＢホストコントローラ１００ａは、図３との違いとして、転送進捗状況管理部１０５が転送進捗状況管理部１０５ａに置き換わり、記憶部１０６が追加されたものである。
【００５５】
記憶部１０６は、算出された転送済みのデータ量である転送中間データ１０７を、ストリームごとに対応付けて記憶する記憶装置である。転送進捗状況管理部１０５ａは、データ転送処理部１０４がパケットの転送を完了するごとに、記憶部１０６に記憶された転送中間データ１０７のうち当該パケットが属するストリームに対応付けられたものについて、当該部パケットのサイズを加算して更新する。そして、転送進捗状況管理部１０５ａは、データ転送処理部１０４が所定回数の転送を完了した場合に、記憶部１０６に記憶された各ストリームに対応付けられた転送中間データ１０７を読み出して、転送進捗情報としてシステムメモリ３００へ通知する。
【００５６】
図１０は、本実施の形態３にかかる転送中間データの登録処理（送信時）の流れを説明するシーケンス図である。前提は、図５と同等であるものとする。
【００５７】
まず、ドライバ２００は、ＵＳＢデバイス４００へのデータ送信の開始を指示するために、Ｄｏｏｒｂｅｌｌ  ｒｉｎｇを実行する（Ｓ３０１）。次に、ＵＳＢホストコントローラ１００ａは、図５のステップＳ２０２及びＳ２０３と同様に、ステップＳ３０２及びＳ３０３を実行する。
【００５８】
そして、ＵＳＢホストコントローラ１００ａは、ＵＳＢデバイス４００に対してＵＳＢ  Ｔｒａｎｓｆｅｒを行う（Ｓ３０４１）。その後、転送進捗状況管理部１０５ａは、ＥＤＴＬＡを算出し、転送中間データ１０７として記憶部１０６へ格納する（Ｓ３０４２）。引き続き、ＵＳＢホストコントローラ１００ａは、ＵＳＢデバイス４００に対してＵＳＢ  Ｔｒａｎｓｆｅｒを行う（Ｓ３０４３）。つまり、データ転送処理部１０４は、次のパケットの送信を行う。そして、既に該当するストリームにおけるＥＤＴＬＡが格納済みの場合、転送進捗状況管理部１０５ａは、当該ＥＤＴＬＡを読み出して、パケットのデータ長を加算してＥＤＴＬＡを更新する。その後、転送進捗状況管理部１０５ａは、更新したＥＤＴＬＡを記憶部１０６に格納する（Ｓ３０４４）。同様に、ステップＳ３０４５及びＳ３０４６が繰り返される。
【００５９】
その後、転送進捗状況管理部１０５ａがステップＳ３０４５及びＳ３０４６が所定回数繰り返されたことを検出した場合、ＵＳＢホストコントローラ１００ａは、Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ  Ｗｒｉｔｅ  ｗｉｔｈ  ＥＤＴＬＡコマンドを実行する（Ｓ３０５）。つまり、転送進捗状況管理部１０５ａは、記憶部１０６からストリームごとに対応する転送中間データ１０７を読み出し、システムメモリ３００の各ストリームに対応する制御領域３１０内の所定の領域に、読み出したそれぞれのＥＤＴＬＡを格納する。
【００６０】
これにより、実施の形態２に比べて、ＵＳＢホストコントローラ１００ａからシステムメモリ３００への通知回数を減少させることができる。
【００６１】
＜実施の形態４＞
本実施の形４は、上述した実施の形態２のＵＳＢホストコントローラ１００の変形例である。本実施の形態４にかかる転送制御装置の通知部は、外部から転送の中止指示を受け付けた場合、複数のデータ列のそれぞれについて直前に算出された各転送済みのデータ量を転送進捗情報として外部へ通知する。言い換えると、本実施の形態３にかかる転送制御装置は、パケットの転送が完了するごとに、転送済情報を更新し、外部から転送の中止指示を受け付けた場合、更新後の転送済情報を外部へ出力する。このように、本実施の形態４にかかる転送制御装置は、予め転送進捗情報を算出しておきながら、必要時のみ外部へ出力するものである。例えば、ドラバ等からの転送の中止要求時に初めてＵＳＢホストコントローラ１００ａからシステムメモリ３００への通知が発生するため、実施の形態３に比べてさらに通知回数を減少させることができる。
【００６２】
尚、本実施の形態４にかかる転送制御装置の構成は、図９と同等であるため、図示及び説明を省略する。
【００６３】
図１１は、本実施の形態４にかかる転送中止命令時の流れを説明するシーケンス図である。ここでは、図１０のステップＳ３０４１〜Ｓ３０４６のように、ＵＳＢ  Ｔｒａｎｓｆｅｒ及びＥＤＴＬＡの更新・格納が所定回数繰り返して実行されている（Ｓ４０１１〜Ｓ４０１４）。そのため、既に、記憶部１０６には、最新の転送中間データ１０７が格納済みである。
【００６４】
このとき、ドライバ２００は、図８のステップＳ２３１と同様に、ＵＳＢホストコントローラ１００ａに対してＳｔｏｐ  Ｅｎｄｐｏｉｎｔ  Ｃｏｍｍａｎｄを実行する（Ｓ４０２）。これにより、ＵＳＢホストコントローラ１００ａは、実行中のデータ転送を中断する。そして、ＵＳＢホストコントローラ１００ａは、Ｗｒｉｔｅ  ＡＬＬ  Ｓｔｒｅａｍ  ＥＤＴＬＡコマンドを実行する（Ｓ４０３）。つまり、転送進捗状況管理部１０５ａは、記憶部１０６から全てのストリームにおけるＥＤＴＬＡを読み出し、システムメモリ３００の各ストリームにおける制御領域３１０へ格納する。
【００６５】
その後、ＵＳＢホストコントローラ１００ａは、図８のステップＳ２３２と同様に、ドライバ２００に対して、Ｃｏｍｐｌｅｔｉｏｎを通知する（Ｓ４０４）。これにより、ドライバ２００は、指示したデータ転送の中断処理が完了したことを認識する。そして、ドライバ２００は、図８のステップＳ２３３と同様に、システムメモリ３００に対してＲｅａｄ  ＡＬＬ  Ｓｔｒｅａｍ  Ｃｏｎｔｅｘｔ．  ＥＤＴＬＡコマンドを実行する（Ｓ４０５）。これにより、図８と同等の効果を奏することができる。
【００６６】
＜その他の実施の形態＞
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、上述した処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００６７】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、ＢＤ(Blu-ray(登録商標) Disc)、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００６８】
上記に基づき、実施の形態に記載された内容の一部を以下に記載する。
転送制御プログラムは、転送対象データから分割された複数のデータ列を、通信相手のデバイス装置との間で転送する転送処理と、前記複数のデータ列のそれぞれにおける転送の進捗状況を示す転送進捗情報を、外部へ通知する通知処理と、をコンピュータに実行させる。これにより、転送対象データの転送が中断されたとしても、その進捗状況が当該コンピュータ以外の外部も転送進捗情報により知ることができるため、転送進捗情報を活用して多様なニーズに応じた柔軟な処理を行うことができる。
【００６９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００７０】
１０  転送制御装置
１１  転送処理部
１２  通知部
１３  転送進捗情報
２０  デバイス装置
１００  ＵＳＢホストコントローラ
１００ａ  ＵＳＢホストコントローラ
１０１  システムバス制御部
１０２  データバッファ
１０３  ペリフェラル制御部
１０４  データ転送処理部
１０５  転送進捗状況管理部
１０５ａ  転送進捗状況管理部
１０６  記憶部
１０７  転送中間データ
２００  ドライバ
３００  システムメモリ
３１０  制御領域
３１１  転送中間データ
３２０  ストリーム
４００  ＵＳＢデバイス
５０１  システムバス
５０２  ペリフェラルバス
【図１】
2014044609.tif 000003
【図２】
2014044609.tif 000004
【図３】
2014044609.tif 000005
【図４】
2014044609.tif 000006
【図５】
2014044609.tif 000007
【図６】
2014044609.tif 000008
【図７】
2014044609.tif 000009
【図８】
2014044609.tif 000010
【図９】
2014044609.tif 000011
【図１０】
2014044609.tif 000012
【図１１】
2014044609.tif 000013