以下に、本願の開示する情報処理装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置及び情報処理装置の制御方法が限定されるものではない。
図1は、実施例に係る情報処理装置を示す図である。本実施例に係る情報処理装置は、CPU1、PCIeスイッチ2を有する。さらに、本実施例に係る情報処理装置は、SATAコントローラ31、イーサネットコントローラ32、外部ROM(Read Only Memory)4及びメモリ5を有する。メモリ5は、主記憶装置である。
SATAコントローラ31は、PCIeの規格に準拠したコントローラである。SATAコントローラ31は、例えば、ハードディスク、SSD(Solid State Drive)又は光ドライブなどが接続される。
イーサネットコントローラ32は、PCIeの規格に準拠したコントローラである。イーサネットコントローラ32は、ネットワークに接続するためのデバイスである。
本実施例では、PCIeデバイスとして、SATAコントローラ31及びイーサネットコントローラ32を例に説明するが、PCIeデバイスとしてはPCIeに準拠するデバイスあれば他の物でもよい。以下では、SATAコントローラ31及びイーサネットコントローラ32を区別しない場合、「PCIeデバイス30」という。このPCIeデバイス30が、「処理部」の一例にあたる。
CPU1は、演算処理装置である。CPU1は、コア11、PCIeブリッジ12及びルートコンプレックス13を有する。
コア11は、演算処理部である。コア11は、PCIeブリッジ12を介してルートコンプレックス13に接続する。コア11は、情報処理装置の電源投入時、PCIeスイッチ2に接続されたPCIeデバイス30の情報の入力をPCIeブリッジ12から受ける。そして、コア11は、各PCIeデバイス30のデバイス位置情報を生成する。ここで、デバイス位置情報とは、コア11に対するPCIeスイッチ2を介したPCIeデバイス30の位置を示す情報であり、言い換えれば、ルートコンプレックス13を頂点としたデバイスツリーにおける各PCIeデバイス30の位置を示す情報である。具体的には、デバイス位置情報は、バス(Bus)番号、デバイス(Device)番号、ファンクション(Function)番号で表される。以下では、デバイス位置情報を、デバイス位置情報に含まれる各番号の頭文字を取って「BDF(登録商標)」と表す場合がある。さらに、コア11は、PCIeスイッチ2に接続されたPCIeデバイス30の初期化を行う。そして、コア11は、PCIeデバイス30の初期化の通知を各PCIeデバイス30の識別情報及び生成したデバイス位置情報とともにシステム側入力ユニット122へ出力する。
また、コア11は、PCIeブリッジ12、ルートコンプレックス13及びPCIeスイッチ2を介してPCIeデバイス30に命令を送信し、また、PCIeデバイス30から応答を受信する。
PCIeブリッジ12は、コア11、ルートコンプレックス13、外部ROM4及びメモリ5とバスで接続される。PCIeブリッジ12は、ルートコンプレックス13にプロトコル変換を行わせるデバイスである。具体的には、PCIeブリッジ12は、コア11から送られてきた命令をPCIeの仕様規定にあわせて転送するための情報をルートコンプレックス13に送信し、ルートコンプレックス13に命令をPCIeのバスを介して目的のPCIeデバイス30に送信させる。また、PCIeブリッジ12は、ルートコンプレックス13から取得したデータをコア11へ転送する。
また、PCIeブリッジ12は、PCIeデバイス30とメモリ5との間のDMA(Direct Memory Access)を制御する。さらに、PCIeブリッジ12は、外部ROM4に格納された情報を読み込む。
ルートコンプレックス13は、PCIeブリッジ12を介してコア11に接続する。また、ルートコンプレックス13は、PCIeスイッチ2を介してPCIeデバイス30と接続する。ルートコンプレックス13は、プロトコル変換を行うデバイスである。
具体的には、ルートコンプレックス13は、コア11から送信された命令から、PCIeブリッジ12から受信した設定にしたがってPCIeに準拠したパケットを作成する。そして、ルートコンプレックス13は、PCIeスイッチ2を介してPCIeデバイス30へ生成したパケットを送信する。また、ルートコンプレックス13は、PCIeデバイス30から送られてきたデータを、コア11に繋がるシステムバスに合わせたプロトコルに変換してPCIeブリッジ12へ送信する。
すなわち、コア11からルートコンプレックス13までの間はシステムバスで接続される。一方、ルートコンプレックス13からPCIeデバイス30までは、PCIeのバスで接続される。
PCIeスイッチ2は、ルートコンプレックス13に複数のPCIeデバイス30を接続するためのデバイスである。PCIeスイッチ2は、ルートコンプレックス13に接続するポート21を有する。さらに、PCIeスイッチ2は、PCIeデバイス30を接続するためのポート22及び23を有する。ここで、本実施例では、一例としてPCIeスイッチ2がポート22及び23という2つのポートを有する場合で説明するが、PCIeスイッチ2が有するPCIeデバイス30を接続するポートの数はこれに限らない。また、実際には、CPU1とPCIeデバイス30とはPCIeスイッチ2を介してデータや命令の送受信を行うが、説明を分かり易くするために、以下の説明ではCPU1とPCIeデバイス30とが直接データや命令の送受信を行うように説明する場合がある。
外部ROM4は、情報処理装置から取り外し可能の記憶媒体である。外部ROM4には、図2に示すように、PCIeデバイス30の識別情報であるベンダID(Identification)及びデバイスIDに対応させて、イベント発生時に実行する処理の情報が登録されている。図2は、外部ROM及びアクションリストに格納されるデータの一例を示す図である。イベントには、例えば、PCIeデバイス30の初期化、PCIeデバイス30におけるエラー発生及び割り込みがある。また、実行する処理の情報として、例えば、処理に用いるコンフィグレジスタアドレス、読出処理又は書込処理のいずれを行うかの情報及び書込処理の場合の書込データである。読出処理又は書込処理のいずれを行うかの情報は、図2におけるRaed/Writeの欄に登録される。また、書込処理の場合の書込データは、図2におけるWrite Dataの欄に登録される。
外部ROM4のデータは、情報処理装置の管理者により、情報処理装置に実装されると予測されるPCIeデバイス30に関するデータが予め登録される。実行する処理によって用いるPCIeデバイス30はある程度固定であるため、管理者は、その情報処理装置が実行する処理によってどのようなPCIeデバイス30が実装されるかを予測することができる。
次に、図3を参照して、PCIeブリッジ12について詳細に説明する。図3は、PCIeブリッジの詳細を表すブロック図である。このPCIeブリッジ12が、「入出力制御部」の一例にあたる。
システム側出力ユニット121は、コア11へリクエストを出力するための出力インタフェースを有する。システム側出力ユニット121は、コア11からのリクエストを処理するモジュールである。
システム側出力ユニット121は、情報処理装置の電源投入時、PCIeスイッチ2に接続されたPCIeデバイス30の情報をデバイス側入力ユニット129から受信する。そして、システム側出力ユニット121は、取得したPCIeデバイス30の情報をコア11へ出力する。
システム側出力ユニット121は、システム側入力ユニット122又はデバイス側入力ユニット129からリクエストを受信する。加えて、システム側出力ユニット121は、システム側で用いるアドレスを割込処理アドレス変換モジュール123から受信する。そして、システム側出力ユニット121は、指定されたアドレスとともに受信したリクエストをコア11へ出力する。
さらに、システム側入力ユニット122やデバイス側入力ユニット129からのリクエストが割り込みの場合、システム側出力ユニット121は、割込命令を割込処理アドレス変換モジュール123から受信する。そして、システム側出力ユニット121は、割込命令にしたがって、受信したリクエストをコア11へ出力する。
システム側入力ユニット122は、コア11からリクエストを受信するための入力インタフェースを有する。システム側入力ユニット122は、コア11からのリクエストを処理するモジュールである。
システム側入力ユニット122は、情報処理装置の電源投入時、PCIeスイッチ2に接続されたPCIeデバイス30の初期化の通知を各PCIeデバイス30の識別情報及びデバイス位置情報とともにコア11から受ける。そして、システム側入力ユニット122は、PCIeデバイス30の初期化の通知を各PCIeデバイス30のベンダID、デバイスID及びデバイス位置情報とともにPIO管理部125へ送信する。
システム側入力ユニット122は、コア11からリクエストを受信する。そして、例えば、PIO(Programmed Input Output)リクエストをコア11から受信した場合、システム側入力ユニット122は、受信したPIOリクエストをPIO管理部125へ送信する。また、DMA処理のリクエストをコア11から受信した場合、システム側入力ユニット122は、受信したDMA処理のリクエストをDMA制御部124へ出力する。さらに、コア11へのリクエストに対する情報がある場合、システム側入力ユニット122は、リクエストに対する情報をシステム側出力ユニット121へ送信する。
DMA制御部124は、PCIeデバイス30とメモリ5との間のDMA処理を制御する。DMA制御部124は、DMA処理のリクエストをシステム側入力ユニット122から受信する。また、DMA制御部124は、PCIeデバイス30からのDMA処理のリクエストを割込処理アドレス変換モジュール123から受信する。そして、DMA制御部124は、受信した指示にしたがいメモリ5に対するデータの読み書きDMA処理を実行する。
割込処理アドレス変換モジュール123は、PCIeデバイス30から送信されたリクエストの入力をデバイス側入力ユニット129から受ける。そして、割込処理アドレス変換モジュール123は、リクエストが割り込みの場合、割り込みの種類に応じて割込情報をシステム側出力ユニット121又はデバイス側入力ユニット129へ送信する。さらに、割込処理アドレス変換モジュール123は、割込情報をPIO管理部125へ通知する。
また、割込処理アドレス変換モジュール123は、リクエストからPCIeデバイス30で指定されたアドレスを取得し、システム側で用いるアドレスに変換する。そして、割込処理アドレス変換モジュール123は、変換後のアドレスをシステム側出力ユニット121へ出力する。
また、割込処理アドレス変換モジュール123は、PCIeデバイス30から送信されたPCIeデバイス30のエラーメッセージをデバイス側入力ユニット129から受信する。そして、割込処理アドレス変換モジュール123は、エラーメッセージをPIO管理部125へ送信する。
デバイス側入力ユニット129は、ルートコンプレックス13からリクエストを受信するための入力インタフェースを有する。デバイス側入力ユニット129は、ルートコンプレックス13からのリクエストを処理するモジュールである。
デバイス側入力ユニット129は、情報処理装置の電源投入時にPCIeスイッチ2に接続されたPCIeデバイス30の情報をルートコンプレックス13から受信する。そして、デバイス側入力ユニット129は、取得したPCIeデバイス30の情報をシステム側出力ユニット121へ送信する。さらに、デバイス側入力ユニット129は、各PCIeデバイス30の情報からベンダID、デバイスID及び物理アドレスオフセットの情報を取得する。そして、デバイス側入力ユニット129は、各PCIeデバイス30のベンダID、デバイスID及び物理アドレスオフセットを後述するデバイスツリーデータ128へ登録する。
また、デバイス側入力ユニット129は、PCIeデバイス30から送信されたリクエストの入力をルートコンプレックス13から受ける。そして、デバイス側入力ユニット129は、受信したリクエストをシステム側出力ユニット121及び割込処理アドレス変換モジュール123へ送信する。さらに、リクエストにより割り込みが発生した場合、デバイス側入力ユニット129は、割込情報を割込処理アドレス変換モジュール123から受信する。そして、デバイス側入力ユニット129は、割込情報にしたがって、ルートコンプレックス13からのリクエストの入力を受ける。
また、デバイス側入力ユニット129は、ルートコンプレックス13からPCIeデバイス30のエラーメッセージ又は割込情報の入力を受けた場合、受信したエラーメッセージ又は割込情報を割込処理アドレス変換モジュール123へ送信する。
デバイスツリーデータ128は、図4に示される情報を格納する。図4は、デバイスツリーデータの一例を表す図である。デバイスツリーデータ128には、例えば、デバイス位置情報(BDF)に対応させて、ベンダID、デバイスID及び物理アドレスオフセットが登録される。デバイスツリーデータ128のデバイス位置情報は、後述するPIO管理部125によって登録される。また、デバイスツリーデータ128のベンダID、デバイスID及び物理アドレスオフセットは、デバイス側入力ユニット129によって登録される。このデバイスツリーデータ128が、「位置情報」の一例にあたる。
以下では、デバイスツリーデータ128に登録された、デバイス位置情報、ベンダID、デバイスID物理アドレスオフセットの組を「デバイスデータ」という。また、デバイスツリーデータ128におけるデバイスデータの各登録場所を「デバイスツリーデータ128のエントリ」という。
また、アクションリスト127は、PCIeスイッチ2に接続されたPCIeデバイス30毎に、図2に示すイベント発生時に実行する処理の情報が登録される。具体的には、アクションリスト127では、PCIeデバイス30のベンダID及びデバイスIDに対応させて、実行する処理の情報が登録される。すなわち、アクションリスト127は、外部ROM4に登録された情報の中のPCIeスイッチ2に接続されたPCIeデバイス30の情報である。このアクションリスト127が、「実行処理情報」の一例にあたる。
以下では、アクションリスト127における契機となるイベント及び実行する処理の情報の組を「アクションデータ」という。また、アクションリスト127におけるアクションデータの各登録場所を「アクションリスト127のエントリ」という。
外部ROMデータ読込部126は、電源投入時におけるデバイス側入力ユニット129及びPIO管理部125によるデバイスツリーデータ128への情報登録が完了後、デバイスツリーデータ128を参照する。そして、外部ROMデータ読込部126は、デバイスツリーデータ128からPCIeスイッチ2に接続された全てのPCIeデバイス30のベンダID及びデバイスIDを取得する。次に、外部ROMデータ読込部126は、取得したベンダID及びデバイスIDに対応するイベント発生時に実行する処理の情報を外部ROM4から取得する。次に、外部ROMデータ読込部126は、取得したイベント発生時に実行する処理の情報をベンダID及びデバイスIDの組に対応させてアクションリスト127へ登録する。
PIO管理部125は、情報処理装置の電源投入時に、各PCIeデバイス30の初期化の通知をデバイス位置情報とともにシステム側入力ユニット122から受信する。そして、PIO管理部125は、デバイス位置情報で指定されたPCIeデバイス30にID取得のためのPIOリクエストを送信する。ベンダIDとデバイスIDは、PCIeの仕様に規定されたCommon Configration Space HeaderのOffset 0x00に格納される。そこで、PIO管理部125は、このレジスタへのConfiguration Readを実行するPIOを送信する。その後、PIO管理部125は、デバイス位置情報に応じたPCIeデバイス30のベンダID及びデバイスIDをシステム側入力ユニット122から取得する。
そして、PIO管理部125は、各PCIeデバイス30のベンダID及びデバイスIDに対応するデバイス位置情報をデバイスツリーデータ128へ登録する。
さらに、図5を参照して、イベント発生時におけるPIO管理部125の機能について詳細に説明する。図5は、PIO管理部の詳細を表すブロック図である。ただし、図5では、イベント発生時におけるPIO管理部125の機能のみを抽出して記載した。
PIO管理部125は、図5に示すように、ビジー信号管理部201、デバイス特定部202、アクションリスト読出部203、TLP(Transaction Layer Packet)情報生成部204及びパケット管理部205を有する。
ビジー信号管理部201は、システム側入力ユニット122とPIO管理部125との間の通信を監視する。ビジー信号管理部201は、ビジー信号発行要求をデバイス特定部202から受信する。そして、ビジー信号管理部201は、システム側入力ユニット122との間でパケットの処理が行われている場合、その処理が完了するまで待機する。パケットの処理完了後、ビジー信号管理部201は、システム側入力ユニット122に対してビジー信号を発行する。これにより、システム側入力ユニット122からPIO管理部125へのパケットの入力を停止することができる。ビジー信号管理部201は、ビジー信号の発行をデバイス特定部202へ通知する。
その後、ビジー信号管理部201は、ビジー信号の発行停止の指示をデバイス特定部202から受ける。そして、ビジー信号管理部201は、ビジー信号の発行を停止する。これにより、システム側入力ユニット122からPIO管理部125へのパケットの入力が再開する。
デバイス特定部202は、PCIeデバイス30の初期化の通知を各PCIeデバイス30のベンダID及びデバイスIDとともにシステム側入力ユニット122から受ける。そして、デバイス特定部202は、ビジー信号の発行要求をビジー信号管理部201に通知する。その後、デバイス特定部202は、ビジー信号の発行の通知をビジー信号管理部201から受信する。
ビジー信号の発行の通知を受信すると、デバイス特定部202は、デバイスツリーデータ128の先頭のエントリにデバイスポインタを設定する。次に、デバイス特定部202は、デバイスポインタが示すエントリにデバイスデータがあるか否かを判定する。
デバイスポインタが示すエントリにデバイスデータがある場合、デバイス特定部202は、デバイスポインタが示すベンダID及びデバイスID、並びに、発生イベントが初期化である旨をアクションリスト読出部203に通知する。さらに、デバイス特定部202は、デバイスポインタが示すエントリにおける物理アドレスオフセットをデバイスツリーデータ128から取得する。そして、デバイス特定部202は、取得した物理アドレスオフセット、ベンダID及びデバイスIDをTLP情報生成部204へ送信する。
その後アクションリスト読出部203からアクションデータの読み出し完了の通知を受けると、デバイス特定部202は、デバイスポインタをデバイスツリーデータ128の次のエントリに移動する。以下では、デバイスポインタをデバイスツリーデータ128の次のエントリに移動することを、「デバイスポインタをインクリメント」という。
その後、デバイス特定部202は、デバイスデータが登録されていないエントリをデバイスポインタが示すまで、ベンダID、デバイスID及び物理アドレスオフセットの通知、並びに、デバイスポインタのインクリメントを繰り返す。そして、デバイスデータが登録されていないエントリをデバイスポインタが示すようになった場合、デバイス特定部202は、ビジー信号の発行停止をビジー信号管理部201に指示する。
また、デバイス特定部202は、PCIeデバイス30におけるエラー発生及び割り込みの通知をPCIeデバイス30のベンダID及びデバイスIDとともに割込処理アドレス変換モジュール123から受信する。そして、デバイス特定部202は、ビジー信号の発行要求をビジー信号管理部201に通知する。その後、デバイス特定部202は、ビジー信号の発行の通知をビジー信号管理部201から受信する。
ビジー信号の発行の通知を受信すると、デバイス特定部202は、デバイスツリーデータ128の先頭のベンダID及びデバイスIDの組にデバイスポインタを設定する。次に、デバイス特定部202は、受信したベンダID及びデバイスIDの組にデバイスポインタが示すベンダID及びデバイスIDの組が一致するか否かを判定する。
デバイスポインタが示すベンダID及びデバイスIDの組が一致しない場合、デバイス特定部202は、デバイスポインタをインクリメントする。
これに対して、デバイスポインタが示すベンダID及びデバイスIDの組が一致した場合、デバイス特定部202は、デバイスポインタが示すベンダID及びデバイスID、並びに、発生イベントの情報をアクションリスト読出部203に通知する。この場合、発生イベントの情報は、PCIeデバイス30におけるエラー発生及び割り込みの何れかである。さらに、デバイス特定部202は、デバイスポインタが示すベンダID及びデバイスIDに対応する物理アドレスオフセットをデバイスツリーデータ128から取得する。そして、デバイス特定部202は、取得した物理アドレスオフセット、ベンダID及びデバイスIDをTLP情報生成部204へ送信する。
その後、デバイス特定部202は、アクションデータの読み出し完了の通知をアクションリスト読出部203から受ける。そして、デバイス特定部202は、ビジー信号の発行停止をビジー信号管理部201に指示する。
ここで、本実施例では、1つのPCIeデバイス30に関するエラーの発生や割り込みについての対応を行うため、デバイスポインタが示すベンダID及びデバイスIDの組が一致したものが処理の対象となり、他のPCIeデバイス30は処理の対象とならない。そのため、本実施例では、デバイス特定部202は、受信したベンダID及びデバイスIDの組に一致するデバイスポインタが示すベンダID及びデバイスIDの組を検出した後は処理を終了する。しかし、デバイス特定部202によるPCIeデバイス30の特定の処理の流れはこれに限らない。
例えば、デバイス特定部202は、受信したベンダID及びデバイスIDの組に一致するデバイスポインタが示すベンダID及びデバイスIDの組を検出した後も、デバイスポインタをインクリメントしPCIeデバイス30の特定を繰り返してもよい。この場合、デバイスポインタの示すベンダID及びデバイスIDの組がなくなった時点で、デバイス特定部202は、ビジー信号の発行停止をビジー信号管理部201に指示する。こうすることで、複数のPCIeデバイス30に関してエラーの発生や割り込みが起こった場合であっても、PCIeブリッジ12は、それらのイベントに1回で対処することができる。
アクションリスト読出部203は、ベンダID及びデバイスIDをデバイス特定部202から受信する。また、アクションリスト読出部203は、発生したイベントの情報、すなわち、アクションリスト読出部203は、PCIeデバイス30の初期化、エラー発生又は割り込みのいずれが発生したかをデバイス特定部202から受信する。以下では、発生したイベントの情報で示されるイベントを「受信イベント」という。
アクションリスト読出部203は、取得したベンダID及びデバイスIDに対応するアクションリスト127を抽出する。次に、アクションリスト読出部203は、抽出したアクションリスト127の先頭のエントリにアクションポインタを設定する。
次に、アクションリスト読出部203は、アクションポインタが示すエントリに記載された契機が受信イベントと一致するか否かを判定する。ここで、図2のアクションリスト127に示される契機が「初期化時」が、PCIeデバイス30の初期化の場合にあたる。また、契機が「Correctable Error message 受信時」及び「Uncorrectable Error message 受信時」が、PCIeデバイス30でエラーが発生した場合にあたる。また、契機が「MSI 受信時」が、PCIeデバイス30による割り込みの場合にあたる。
受信イベントと一致する場合、アクションリスト読出部203は、アクションリスト127におけるアクションポインタが示すエントリからコンフィグレジスタアドレス及び読み出し書き込みのいずれの処理を実行するかの情報を取得する。さらに、実行する処理が書き込みの場合、アクションリスト読出部203は、書込データをアクションリスト127のエントリから取得する。そして、アクションリスト読出部203は、取得した情報をTLP情報生成部204に通知する。その後、アクションリスト読出部203は、アクションポインタを次のエントリへ移動する。以下では、アクションポインタを次のエントリへ移動することを、「アクションポインタのインクリメント」という。
また、アクションポインタが示すエントリに記載された契機が受信イベントと一致しない場合、アクションリスト読出部203は、アクションポインタをインクリメントする。
アクションリスト読出部203は、アクションデータがないエントリをアクションポインタが示すようになるまで、契機と受信イベントとが一致するか否かの判定を行う。さらに、受信イベントと一致した場合、アクションリスト読出部203は、実行する処理の情報の取得及びTLP情報生成部204への送信を繰り返す。アクションポインタが示すデータがなくなった場合、アクションリスト読出部203は、アクションデータの読み出し完了をデバイス特定部202に通知する。
その後、デバイス特定部202から次のベンダID及びデバイスIDが送られてきた場合、アクションリスト読出部203は、そのベンダID及びデバイスIDに対して同様の処理を繰り返す。
TLP情報生成部204は、物理アドレスオフセット、ベンダID及びデバイスIDをデバイス特定部202から受信する。さらに、TLP情報生成部204は、実行する処理の情報をアクションリスト読出部203から受信する。
次に、TLP情報生成部204は、受信した情報からTLPを生成するための情報を決定する。TLPとは、トランザクション層で用いられるパケットである。図6は、物理層におけるPCIeのパケットの模式図である。TLPは、TLPヘッダ301、データ302及びECRC(End to end Cyclic Redundancy Check)303で生成される。また、TLPにシーケンス番号及びLCRC(Link Cyclic Redundancy Check)を付加したパケットがデータリンクレイヤパケットである。また、データリンクレイヤパケットにスタートフレーム及びエンドフレームを付加したものが、物理層パケットである。TLP情報生成部204は、TLPヘッダ301を生成するための情報を決定する。また、書込処理の場合には、TLP情報生成部204は、データ302への書込データの格納を決定する。
図7は、TLPヘッダの詳細を表す図である。Fmt(format)401は、TLPフォーマットを表す項目である。また、Type402は、TLPの種別を表す項目であるFmt401及びType402により、そのTLPがどのようなTLPかが決まる。また、Length403は、パケットのデータ長を表す項目である。Tag404は、データの順序制御に用いる管理用の番号を表す項目である。BE(Byte Enable)405は、書き込みを許可するバイトの指定を表す項目である。Address406は、使用するアドレスの指定を表す項目である。
TLP情報生成部204は、Fmt401及びType402にPCIe使用規定のConfig Read/Writeを設定する。また、TLP情報生成部204は、Length403を4バイトとして設定する。また、TLP情報生成部204は、BE405に0000_xxxxを設定する。ここで、xxxxは、読み書きの対象とするバイトが指定される。また、TLP情報生成部204は、Tag404に昇順に番号を設定していく。
さらに、TLP情報生成部204は、Address406におけるビット[11:0]に物理アドレスオフセットを加えたビットにアクションリスト127から取得したコンフィグレジスタアドレスを設定する。Address406の上位はバス番号によりシステム毎に規定されたPCIeデバイス30のコンフィグ空間を指定する。
さらに、TLP情報生成部204は、TLPが書き込み処理の場合、図6のデータ302にアクションリスト127から取得した書込データを設定する。
そして、TLP情報生成部204は、TLPの設定情報及び書込データをデバイス位置情報とともにパケット管理部205へ送信する。
バケット管理部205は、TLPの設定情報及び書込データをTLP情報生成部204から受信する。そして、パケット管理部205は、システム側入力ユニット122からのリクエストが無い状態でTLPを発行するために、ステートマシンを遷移するためのダミーPIOリクエスト信号を生成する。そして、パケット管理部205は、生成したダミーPIOリクエスト信号を受信して、TLPを発行する状態に遷移する。その後、パケット管理部205は、設定情報、書込データ及びデバイス位置情報をルートコンプレックス13へ送信する。
また、PIO管理部125は、イベントに対するPCIeデバイス30への処理が書込処理の場合、データを書き込む前のReadデータを保存し、書き込み後に再度Readを行って、2つの値を比較することで書き込みができたか否かを確認してもよい。
次に、図8を参照して、本実施例に係るPCIeブリッジ12による初期化時におけるTLPパケットの設定情報の生成処理について説明する。図8は、実施例に係るPCIeブリッジによる初期化時におけるTLPパケットの設定情報の生成処理のフローチャートである。
コア11は、PCIeスイッチ2に接続されたPCIeデバイス30の初期化を開始する(ステップS1)。デバイス特定部202は、システム側入力ユニット122を介してコア11からPCIeデバイス30の初期化の通知を受ける。そして、デバイス特定部202は、ビジー信号の発行要求をビジー信号管理部201へ送信する。
ビジー信号管理部201は、ビジー信号の発行要求を受けて、コア11とPIO管理部125との間でシステム側入力ユニット122を介して実行中の処理が完了したか否かを判定する(ステップS2)。実行中の処理が完了していない場合(ステップS2:否定)、ビジー信号管理部201は、実行中の処理が完了するまで待機する。これに対して、実行中の処理が完了した場合(ステップS2:肯定)、ビジー信号管理部201は、ビジー信号をシステム側入力ユニット122へ発行する(ステップS3)。そして、ビジー信号管理部201は、ビジー信号の発行をデバイス特定部202へ通知する。
次に、デバイス特定部202は、デバイスツリーデータ128の先頭エントリにデバイスポインタを設定する(ステップS4)。
次に、デバイス特定部202は、デバイスポインタが示すデバイスデータが存在するか否かを判定する(ステップS5)。
デバイスポインタが示すエントリにデバイスデータが存在する場合(ステップS5:肯定)、デバイス特定部202は、デバイスポインタが示すエントリに格納されたベンダID及びデバイスIDをアクションリスト読出部203に通知する。アクションリスト読出部203は、デバイスポインタが示すベンダID及びデバイスIDに対応するアクションリスト127を抽出する(ステップS6)。
アクションリスト読出部203は、抽出したアクションリスト127の先頭エントリにアクションポインタを設定する(ステップS7)。
アクションリスト読出部203は、アクションポインタが示すエントリにアクションデータが存在するか否かを判定する(ステップS8)。アクションデータが存在する場合(ステップS8:肯定)、アクションリスト読出部203は、そのアクションデータにおける契機が初期化か否かを判定する(ステップS9)。契機が初期化の場合(ステップ9:肯定)、アクションリスト読出部203は、TLPパケットの設定情報の生成処理を実行する(ステップS10)。その後、アクションリスト読出部203は、ステップS11へ進む。
これに対して、契機が初期化以外である場合(ステップ9:否定)、アクションリスト読出部203は、ステップS11へ進む。
次に、アクションリスト読出部203は、アクションポインタをインクリメント(ステップS11)し、ステップS8へ戻る。
これに対して、アクションポインタが示すエントリにアクションデータが存在しない場合(ステップS8:否定)、アクションリスト読出部203は、アクションデータの読み出し完了をデバイス特定部202へ通知する。デバイス特定部202は、通知を受けて、デバイスポインタをインクリメントする(ステップS12)。その後、デバイス特定部202は、ステップS5へ戻る。
一方、デバイスポインタが示すエントリにデバイスデータが存在しない場合(ステップS5:否定)、デバイス特定部202は、ビジー信号の停止をビジー信号管理部201に指示する。ビジー信号管理部201は、ビジー信号を停止する(ステップS13)。
次に、図9を参照して、本実施例に係るPCIeブリッジ12のエラー発生時及び割り込み時におけるTLPパケットの設定情報の生成処理について説明する。図9は、実施例に係るPCIeブリッジのエラー発生時及び割り込み時におけるTLPパケットの設定情報の生成処理のフローチャートである。
デバイス特定部202は、イベントメッセージ、すなわちPCIeデバイス30からエラーメッセージ又は割込情報を割込処理アドレス変換モジュール123から受信する(ステップS21)。そして、デバイス特定部202は、ビジー信号の発行要求をビジー信号管理部201へ送信する。
ビジー信号管理部201は、ビジー信号の発行要求を受けて、コア11とPIO管理部125との間でシステム側入力ユニット122を介して実行中の処理が完了したか否かを判定する(ステップS22)。実行中の処理が完了していない場合(ステップS22:否定)、ビジー信号管理部201は、実行中の処理が完了するまで待機する。これに対して、実行中の処理が完了した場合(ステップS22:肯定)、ビジー信号管理部201は、ビジー信号をシステム側入力ユニット122へ発行する(ステップS23)。そして、ビジー信号管理部201は、ビジー信号の発行をデバイス特定部202へ通知する。
次に、デバイス特定部202は、デバイスツリーデータ128の先頭エントリにデバイスポインタを設定する(ステップS24)。
次に、デバイス特定部202は、デバイスポインタが示すデバイスデータが存在するか否かを判定する(ステップS25)。
デバイスポインタが示すエントリにデバイスデータが存在しない場合(ステップS25:否定)、デバイス特定部202は、デバイスポインタをインクリメントする(ステップS26)。その後、デバイス特定部202は、ステップS25へ戻る。
これに対して、デバイスポインタが示すエントリにデバイスデータが存在する場合(ステップS25:肯定)、デバイス特定部202は、デバイスポインタが示すエントリに格納されたベンダID及びデバイスIDをアクションリスト読出部203に通知する。アクションリスト読出部203は、デバイスポインタが示すベンダID及びデバイスIDに対応するアクションリスト127を抽出する(ステップS27)。
アクションリスト読出部203は、抽出したアクションリスト127の先頭エントリにアクションポインタを設定する(ステップS28)。
アクションリスト読出部203は、アクションポインタが示すエントリにアクションデータが存在するか否かを判定する(ステップS29)。アクションデータが存在する場合(ステップS29:肯定)、アクションリスト読出部203は、そのアクションデータにおける契機が受信イベントか否かを判定する(ステップS30)。契機が受信イベントの場合(ステップ30:肯定)、アクションリスト読出部203は、TLPパケットの設定情報の生成処理を実行する(ステップS31)。その後、アクションリスト読出部203は、ステップS32へ進む。
これに対して、契機が受信イベント以外である場合(ステップ30:否定)、アクションリスト読出部203は、ステップS32へ進む。
次に、アクションリスト読出部203は、アクションポインタをインクリメント(ステップS32)し、ステップS29へ戻る。
これに対して、アクションポインタが示すエントリにアクションデータが存在しない場合(ステップS29:否定)、アクションリスト読出部203は、アクションデータの読み出し完了をデバイス特定部202に通知する。デバイス特定部202は、通知を受けて、ビジー信号の停止をビジー信号管理部201に指示する。ビジー信号管理部201は、ビジー信号を停止する(ステップS33)。
次に、図10を参照して、TLPパケットの設定情報の生成処理の流れについて説明する。図10は、TLPパケットの設定情報の生成処理のフローチャートである。図10のフローチャートは、図8のステップS10及び図9のステップS31で実行される処理の一例にあたる。
アクションリスト読出部203は、アクションリスト127からアクションポインタが示すエントリに登録されたアクションデータを取得する(ステップS101)。アクションリスト読出部203は、取得したアクションデータをTLP情報生成部204へ送信する。また、デバイス特定部202は、ベンダID、デバイスID及び物理アドレスオフセットをTLP情報生成部204へ送信する。
TLP情報生成部204は、アクションデータをアクションリスト読出部203から受信する。また、TLP情報生成部204は、ベンダID、デバイスID及び物理アドレスオフセットをデバイス特定部202から受信する。そして、TLP情報生成部204は、TLPヘッダ301におけるFmt401及びType402に動作を設定する(ステップS102)。
次に、TLP情報生成部204は、TLPヘッダ301におけるLength403を4バイトに設定する(ステップS103)。
次に、TLP情報生成部204は、TLPヘッダ301におけるBE(Byte Enable)405に0000_xxxxを設定する(ステップS104)。
次に、TLP情報生成部204は、TLPヘッダ301におけるTag404を昇順に設定する(ステップS105)。
次に、TLP情報生成部204は、TLPヘッダ301のAddress406のビット[11:0]に物理アドレスオフセットを加えたビットにコンフィグレジスタアドレスを設定する(ステップS106)。
次に、TLP情報生成部204は、そのTLPでPCIeデバイス30に実行させる処理が書込処理か否かを判定する(ステップS107)。実行させる処理が書込処理以外である場合(ステップS107:否定)、処理はステップS109へ進む。
これに対して、実行させる処理が書込処理の場合(ステップS107:肯定)、TLP情報生成部204は、アクションリスト127に記載された書込データをデータ302に設定する(ステップS108)。そして、TLP情報生成部204は、デバイス位置情報とともに各設定情報をパケット管理部205へ送信する。
パケット管理部205は、デバイス位置情報及び設定情報をTLP情報生成部204から受信する。そして、パケット管理部205は、ダミーPIOリクエスト信号を生成する(ステップS109)。パケット管理部205は、生成したダミーPIOリクエスト信号を受信して、TLPを発行する状態に遷移する。その後、パケット管理部205は、設定情報、書込データ及びデバイス位置情報をルートコンプレックス13へ送信する。ただし、書込データは、TLPによりPCIeデバイス30に実行させる処理が書き込みの場合のみである。
ルートコンプレックス13は、設定情報、書込データ及びデバイス位置情報をパケット管理部205から受信する。そして、ルートコンプレックス13は、受信した設定情報及び書込データからTLPを生成する。その後、ルートコンプレックス13は、生成したTLPをデバイス位置情報が示すPCIeデバイス30に向けて送信する(ステップS110)。
以上に説明したように、本実施例に係る情報処理装置では、特定のPCIeデバイスでのイベント発生の通知を受けたPCIeブリッジが、その特定のPCIeデバイスに応じた処理を実行させるTLPを生成し送信する。これにより、イベント発生時に、各PCIeデバイスに応じた処理を、それぞれのPCIeデバイスに実行させることができる。そして、この処理は、ハードウェアであるPCIeブリッジで行われるため、デバイスドライバに依存しない。そのため、イベント発生時のPCIe毎の仕様の違いをPCIeブリッジで吸収することができ、デバイスドライバの開発工数を削減することができる。
また、以上では、イベント発生時にTLPを用いてPCIeデバイスに処理を実行させたが、使用するパケットはハードウェアにより制御できるパケットであれば他のパケットを用いてもよい。例えば、物理層パケットやDLLP(Data Link Layer Packet)を用いてもよい。