(57)【特許請求の範囲】
【請求項１】
システムバスから複数のブリッジを介してＰＣＩデバイスへ接続する多段ブリッジ構成コンピュータにおける前記ＰＣＩデバイスに対するＡＣＰＩマシン語テーブル記述方法であって、
多段ブリッジ構成に用いられる前記ブリッジと、前記ＰＣＩデバイスとが、それぞれ前記システムバス直下に接続されているとする仮想ハードウェア構成を、ハードウェア構成情報として、ＯＳのＡＣＰＩドライバに示すためのデータを前記ＡＣＰIマシン語テーブルに含めるステップと、
前記ＡＣＰＩドライバから前記ＰＣＩデバイスのリソース情報を要求されると、前記ＰＣＩデバイス直近の下位ブリッジから前記システムバス直下の上位ブリッジまで各ブリッジに対してＰＣＩコンフィグレーションアクセスを実行していき、前記上位ブリッジのリソース情報を取得し、前記上位ブリッジから前記下位ブリッジまでの各ブリッジに対して、そのＰＣＩコンフィグレーション空間から二次リソース情報を取得していき、前記下位ブリッジのＰＣＩコンフィグレーション空間から得られた二次リソース情報を、前記ＰＣＩデバイスのリソース情報として、前記ＡＣＰＩドライバに返すためのメソッドを前記ＡＣＰIマシン語テーブルに含めるステップとを含むことを特徴とするＡＣＰＩマシン語テーブル記述方法。
【請求項２】
前記ＡＣＰＩドライバからステータス情報を要求されると、前記多段ブリッジ構成に用いられる前記ブリッジに関する情報をＯＳに隠蔽する情報とし、前記ＰＣＩデバイスに関する情報をＯＳに隠蔽しない情報として前記ＡＣＰＩドライバに返すことを特徴とする請求項１に記載のＡＣＰＩマシン語テーブル記述方法。
【請求項３】
システムバスから複数のブリッジを介してＰＣＩデバイスへ接続する多段ブリッジ構成コンピュータにおける前記ＰＣＩデバイスに対するＡＣＰＩマシン語テーブル記述装置であって、
多段ブリッジ構成に用いられる前記ブリッジと、前記ＰＣＩデバイスとが、それぞれ前記システムバス直下に接続されているとする仮想ハードウェア構成を、ハードウェア構成情報として、ＯＳのＡＣＰＩドライバに示すためのデータを前記ＡＣＰIマシン語テーブルに含める手段と、
前記ＡＣＰＩドライバから前記ＰＣＩデバイスのリソース情報を要求されると、前記ＰＣＩデバイス直近の下位ブリッジから前記システムバス直下の上位ブリッジまで各ブリッジに対してＰＣＩコンフィグレーションアクセスを実行していき、前記上位ブリッジのリソース情報を取得し、前記上位ブリッジから前記下位ブリッジまでの各ブリッジに対して、そのＰＣＩコンフィグレーション空間から二次リソース情報を取得していき、前記下位ブリッジのＰＣＩコンフィグレーション空間から得られた二次リソース情報を、前記ＰＣＩデバイスのリソース情報として、前記ＡＣＰＩドライバに返すためのメソッドを前記ＡＣＰIマシン語テーブルに含める手段とを備えることを特徴とするＡＣＰＩマシン語テーブル記述装置。
【請求項４】
前記ＡＣＰＩドライバからステータス情報を要求されると、前記多段ブリッジ構成に用いられる前記ブリッジに関する情報をＯＳに隠蔽する情報とし、前記ＰＣＩデバイスに関する情報をＯＳに隠蔽しない情報として前記ＡＣＰＩドライバに返すことを特徴とする請求項３に記載のＡＣＰＩマシン語テーブル記述装置。
【請求項５】
システムバスから複数のブリッジを介してＰＣＩデバイスへ接続する多段ブリッジ構成コンピュータにおける前記ＰＣＩデバイスに対するＡＣＰＩマシン語テーブル記述プログラムであって、
多段ブリッジ構成に用いられる前記ブリッジと、前記ＰＣＩデバイスとが、それぞれ前記システムバス直下に接続されているとする仮想ハードウェア構成を、ハードウェア構成情報として、ＯＳのＡＣＰＩドライバに示すためのデータを前記ＡＣＰIマシン語テーブルに含める機能と、
前記ＡＣＰＩドライバから前記ＰＣＩデバイスのリソース情報を要求されると、前記ＰＣＩデバイス直近の下位ブリッジから前記システムバス直下の上位ブリッジまで各ブリッジに対してＰＣＩコンフィグレーションアクセスを実行していき、前記上位ブリッジのリソース情報を取得し、前記上位ブリッジから前記下位ブリッジまでの各ブリッジに対して、そのＰＣＩコンフィグレーション空間から二次リソース情報を取得していき、前記下位ブリッジのＰＣＩコンフィグレーション空間から得られた二次リソース情報を、前記ＰＣＩデバイスのリソース情報として、前記ＡＣＰＩドライバに返すためのメソッドを前記ＡＣＰIマシン語テーブルに含める機能とをコンピュータに実行させることを特徴とするＡＣＰＩマシン語テーブル記述プログラム。
【請求項６】
前記ＡＣＰＩドライバからステータス情報を要求されると、前記多段ブリッジ構成に用いられる前記ブリッジに関する情報をＯＳに隠蔽する情報とし、前記ＰＣＩデバイスに関する情報をＯＳに隠蔽しない情報として前記ＡＣＰＩドライバに返す機能をコンピュータに実行させることを特徴とする請求項５に記載のＡＣＰＩマシン語テーブル記述プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＰＣＩ(Peripheral Component Interface)多段ブリッジ構成コンピュータにおけるＡＣＰＩ(Advanced Configuration and Power Interface)マシン語テーブル記述方法に関する。
【背景技術】
【０００２】
ＡＣＰＩ仕様は、ラップトップ／デスクトップ・コンピュータを始めとするパーソナルコンピュータ（ＰＣ）、およびサーバのようなコンピュータ上に確立し、システムのコンフィグレーションおよび電源管理用の業界標準インターフェースを提供する。ＡＣＰＩ仕様は、ハードウェア、ＢＩＯＳ(Basic Input Output System)ソフトウェア、およびオペレーティングシステム（ＯＳ：Operating System）ソフトウェア間のインターフェースを含むＡＣＰＩインターフェースを定義する。
【０００３】
ＡＣＰＩは、システムの電源管理だけではなく、ハードウェアの構成を抽象化する役割も果たし、ＯＳに対してハードウェアの構成情報を渡す。ＯＳはＡＣＰＩからの構成情報を元に、ハードウェアの初期化を行うことができる。
【０００４】
ＡＣＰＩは、抽象化したハードウェアの構成情報を、ｐコードと呼ばれるＡＣＰＩマシン語（ＡＭＬ：ACPI Machine Language）で記述する。ＡＭＬはプラットフォーム固有のアセンブリ言語（マシン語）ではなく、ＡＣＰＩ互換ＯＳによってサポートされる仮想マシン用の擬似コードである。すなわち、ＡＭＬは、ＯＳのＡＣＰＩドライバ（ＡＣＰＩを処理するデバイスドライバ）によって解釈される擬似コードアセンブリ言語である。
【０００５】
ＡＣＰＩソース言語（ＡＳＬ：ACPI Source Language）は、ＢＩＯＳ開発者がＡＭＬイメージを作成するために使用するプログラミング言語である。専用のＡＭＬコンパイラを使って、ＡＳＬからＡＭＬを生成する。ＡＳＬは、システムのハードウェア構成情報を記述するために使用される。
【０００６】
従来のＢＩＯＳによるＡＣＰＩ記述方式では、システムのハードウェア構成をそのままの構成情報として、ＯＳに見せるようになっており、ＡＣＰＩ仕様に準拠したＯＳはＢＩＯＳが提供する構成情報を元に、ハードウェアを制御するようになっている。
【０００７】
図１は、ＰＣＩ多段ブリッジ構成（ＰＣＩ−ｔｏ−ＰＣＩブリッジ同士が接続されるハードウェア構成）を使用する従来のＡＣＰＩ互換システムの一例を示す。このハードウェアの構成情報が、そのままの形態で、ＢＩＯＳによりＯＳに通知される。
【０００８】
また、ＰＣＩ−ＰＣＩブリッジの後で、ＰＣＩデバイスを透過的に結合するための装置がある（例えば、特許文献１参照）。
【特許文献１】特開２０００−２２２３４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、ＰＣＩ多段ブリッジ構成に対応していないＯＳの場合、従来の方式では多段ブリッジ配下のＰＣＩデバイスに対してＰＣＩホットプラグ（システムオンライン状態でのＰＣＩデバイスの挿抜）ができない、もしくはＰＣＩデバイスそのものが認識できない等の問題がある。
【００１０】
すなわち第１の問題点は、多段ブリッジ配下のＰＣＩホットプラグに対応していないＯＳをシステム上で動作させる場合、ＰＣＩデバイスがホットプラグできなくなることである。
【００１１】
第２の問題点は、ブリッジの段数が深くなった場合、ＯＳの実装上の仕様により、ＯＳが最下層のＰＣＩデバイスを認識できないことである。
【００１２】
そこで本発明は、ＰＣＩ多段ブリッジ構成にネイティブで対応していないＯＳに対して、ＡＣＰＩの記述とＢＩＯＳの実装を工夫することにより、ＰＣＩ多段ブリッジ配下のＰＣＩデバイスに対してＯＳがＰＣＩホットプラグ対応できるようにするＰＣＩ多段ブリッジ構成コンピュータにおけるＡＣＰＩマシン語テーブル記述方法及び装置とそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述の課題を解決するため、本発明は、システムバスから複数のブリッジを介してＰＣＩデバイスへ接続する多段ブリッジ構成コンピュータにおける前記ＰＣＩデバイスに対するＡＣＰＩマシン語テーブル記述方法であって、多段ブリッジ構成に用いられる前記ブリッジと、前記ＰＣＩデバイスとが、それぞれ前記システムバス直下に接続されているとする仮想ハードウェア構成を、ハードウェア構成情報として、ＯＳのＡＣＰＩドライバに示すためのデータを前記ＡＣＰIマシン語テーブルに含めるステップと、前記ＡＣＰＩドライバから前記ＰＣＩデバイスのリソース情報を要求されると、前記ＰＣＩデバイス直近の下位ブリッジから前記システムバス直下の上位ブリッジまで各ブリッジに対してＰＣＩコンフィグレーションアクセスを実行していき、前記上位ブリッジのリソース情報を取得し、前記上位ブリッジから前記下位ブリッジまでの各ブリッジに対して、そのＰＣＩコンフィグレーション空間から二次リソース情報を取得していき、前記下位ブリッジのＰＣＩコンフィグレーション空間から得られた二次リソース情報を、前記ＰＣＩデバイスのリソース情報として、前記ＡＣＰＩドライバに返すためのメソッドを前記ＡＣＰIマシン語テーブルに含めるステップとを含むことを特徴とする。
【００１４】
また、前記ＡＣＰＩドライバからステータス情報を要求されると、前記多段ブリッジ構成に用いられる前記ブリッジに関する情報をＯＳに隠蔽する情報とし、前記ＰＣＩデバイスに関する情報をＯＳに隠蔽しない情報として前記ＡＣＰＩドライバに返すことを特徴とする。
【００１５】
以上の構成によって、図１のハードウェア構成を、図２に示す仮想ハードウェア構成としてＯＳに見せることができ、多段ブリッジ配下にあるＰＣＩデバイスを仮想的にシステムバス配下にあるように扱えるようにする。
【発明の効果】
【００１６】
本発明による第１の効果は、システムバス配下のＰＣＩデバイスにのみＰＣＩホットプラグが対応しているＯＳに対して、多段ブリッジ配下のＰＣＩデバイスに対してもＰＣＩホットプラグが可能となることである。その理由は、ハードウェアとしての多段ブリッジ構成を、ＯＳに対してはＰＣＩデバイスがあたかもシステムバス配下に接続されているかのように、ＢＩＯＳが見せるためである。
【００１７】
第２の効果は、ブリッジの段数が深くなり、ＯＳの実装上の仕様により、最下層のＰＣＩデバイスをＯＳが認識できない場合でも、ＯＳが最下層のＰＣＩデバイスを認識できることである。その理由は、ＢＩＯＳがブリッジの存在をＯＳから隠蔽し、ＰＣＩデバイスがあたかもシステムバス配下に接続されているかのように見せるためである。
【発明を実施するための最良の形態】
【００１８】
次に、本発明の最良の形態について図面を参照して説明する。
【００１９】
図１は、ＰＣＩ多段ブリッジ構成のＡＣＰＩ互換システムの一構成例を示す。コンピュータ・システム１００は、ラップトップ／デスクトップ・コンピュータ等のパーソナルコンピュータ（ＰＣ）、またはサーバ等のコンピュータ・システムである。システムバス１０１は、コンピュータ・システム１００においてバスやデバイスの全体を表すバスであり、プロセッサとチップセットを結ぶ。
【００２０】
ブリッジＡ１０３は、２本のＰＣＩバスを相互接続するための回路であり、ＰＣＩ−ｔｏ−ＰＣＩブリッジとも呼ばれる。システムバス１０１とブリッジＡ１０３は、ホストバス１０２で接続される。ホストバスは、システムバス配下に接続されるバスのことである。
【００２１】
ブリッジＢ１０５は、ブリッジＡ１０３と同様ＰＣＩ−ｔｏ−ＰＣＩブリッジであり、配下のＰＣＩデバイスとブリッジＡ１０３とを結ぶ。図１に示すに、複数のブリッジＡ１０３とブリッジＢ１０５が、ホストバス１０４を介して相互接続されている構成を多段ブリッジ構成と呼ぶ。
【００２２】
ＰＣＩデバイスＡ１０７は、ブリッジＢ１０５配下に接続されるＰＣＩデバイスであり、ＰＣＩバス１０６で結ばれる。同様に、ＰＣＩデバイスＢ１０９は、ブリッジＢ１０５配下に接続されるＰＣＩデバイスであり、ＰＣＩバス１０８で結ばれる。
【００２３】
従来のシステムにおいて、ＢＩＯＳは、図１に示すような多段ブリッジを、ハードウェア構成としてそのままＯＳに対して見せるようになっている。
【００２４】
図２は、本発明におけるＢＩＯＳが、ＯＳに対して提供する仮想ハードウェア構成を示す。コンピュータ・システム２００は、ラップトップ／デスクトップ・コンピュータ等のパーソナルコンピュータ（ＰＣ）、またはサーバ等のコンピュータ・システムである。システムバス２０１は、コンピュータ・システム２００においてバスやデバイスの全体を表すバスであり、プロセッサとチップセットを結ぶ。
【００２５】
ブリッジＡ２０３は、２本のＰＣＩバスを相互接続するための回路であり、ＰＣＩ−ｔｏ−ＰＣＩブリッジとも呼ばれる。システムバス２０１とブリッジＡ２０３は、ホストバス２０２で接続される。ホストバスはシステムバス配下に接続されるバスのことである。
【００２６】
ＢＩＯＳは、ＡＳＬ（ＡＭＬ）では、ブリッジＡ２０３をデバイスオブジェクト（ＡＳＬでの一デバイスの定義方式）として定義するが、デバイスオブジェクトに対応するステータスメソッド（ＡＣＰＩドライバが呼び出す制御メソッド）では、ＯＳに隠蔽される値を返すようにする。
【００２７】
ステータスメソッドは、デバイスオブジェクトの状態をＳ１（ＯＳに隠蔽する値）およびＳ２（ＯＳに隠蔽しない値）という返り値で表す。ステータスメソッドは、ＡＳＬのコード内で記述され、ＯＳのＡＣＰＩドライバが呼び出し、デバイスオブジェクトの状態（ステータス）を知ることができる。図２のブリッジＡ２０３をＯＳに対して隠蔽するのは、ブリッジの存在を隠すためである。
【００２８】
図２のブリッジＢ２０５は、２本のＰＣＩバスを相互接続するための回路であり、ＰＣＩ−ｔｏ−ＰＣＩブリッジとも呼ばれる。システムバス２０１とブリッジＢ２０５は、擬似的にホストバス２０４で接続される形で、ＡＳＬで構成情報の記述を行う。また、ＢＩＯＳは、ＡＳＬでは、ブリッジＢ２０５をデバイスオブジェクトとして定義するが、デバイスオブジェクトに対応するステータスメソッドではＳ１（ＯＳに隠蔽する値）を返すようにする。ブリッジＢ２０５をＯＳに対して隠蔽する理由は、ブリッジの存在をＯＳに隠すためである。
【００２９】
ＰＣＩデバイスＡ２０７は、システムバス２０１配下に接続されるＰＣＩデバイスであり、ホストバス２０６で結ばれる。ＰＣＩデバイスＡ２０７は、ＯＳからホストバス直下のＰＣＩデバイスとして見せる必要があるため、ＡＳＬのステータスメソッドではＳ２（ＯＳに隠蔽しない値）を返すようにする。
【００３０】
ＰＣＩデバイスＢ２０９は、システムバス２０１配下に接続されるＰＣＩデバイスであり、ホストバス２０８で結ばれる。ＰＣＩデバイスＡ２０９は、ＯＳからホストバス直下のＰＣＩデバイスとして見せる必要があるため、ＡＳＬのステータスメソッドではＳ２（ＯＳに隠蔽しない値）を返すようにする。
【００３１】
図３は、ＯＳに含まれるＡＣＰＩドライバが、ＢＩＯＳの提供するＡＭＬテーブルを読み込む動作について示している。ＯＳの起動時に、ＡＣＰＩドライバは、ＢＩＯＳからＡＭＬテーブルを読み込み、ハードウェアの構成情報を取得する（ステップ３０１、３０２）。図２において、ブリッジＡ２０３とブリッジＢ２０５は、デバイスオブジェクトとして定義はされているが、ＯＳには隠蔽される（ステップ３０３、３０４）。そのため、ＯＳはブリッジ配下に対してバススキャンを行わない。ＰＣＩデバイスＡ２０７とＰＣＩデバイスＢ２０９は、ＡＳＬ内でデバイスオブジェクトとしてデバイス自身の定義はされており、かつステータスメソッドでＯＳに隠蔽しない値を返すため、ＯＳはＰＣＩデバイスＡ２０７とＰＣＩデバイスＢ２０９を認識することができる（ステップ３０５、３０６）。
【００３２】
図４は、ＡＣＰＩドライバが、ＢＩＯＳから提供されたＡＭＬテーブルからＰＣＩデバイスのバス番号を取得するシーケンスを示す。ＯＳがＰＣＩデバイスに対してＰＣＩコンフィグレーションアクセス（プラグ＆プレイのためのＰＣＩデバイスへの特殊なアクセス）を行う場合、バス番号（０から２５５までの数値）が必要となる。バス番号は、ＡＣＰＩドライバがＡＭＬテーブルのバス番号メソッドを呼び出すことによって取得する（ステップ４１０）。バス番号メソッドは、ＡＳＬで記述されるメソッドである。ＡＣＰＩドライバが当該メソッドを呼び出したあとは、ＡＭＬテーブル内部の処理へ移行する（ステップ４２０）。ＡＣＰＩドライバは、ステップ４２０におけるＡＭＬテーブル内部処理について知る必要はない。
【００３３】
ステップ４２０では、ＰＣＩデバイスのバス番号を返すまでの流れが示されている。実際のハードウェアとしては、図２におけるＰＣＩデバイスＡ２０７およびＰＣＩデバイス２０９は、実際にはブリッジＢ２０５配下に接続されているため、ＰＣＩデバイスのバス番号はブリッジＢ２０５のＰＣＩコンフィグレーション空間（プラグ＆プレイのためのＰＣＩデバイス固有の特別なメモリ空間）に格納されている二次バス番号に相当する。このため、ＰＣＩデバイスＡ２０７およびＰＣＩデバイス２０９のバス番号を返すためには、ブリッジＢ２０５へＰＣＩコンフィグレーションアクセスを行う必要がある（ステップ４２１）。
【００３４】
ブリッジＢ２０５へＰＣＩコンフィグレーションアクセスを行うためには、ブリッジＢ２０５自身のバス番号が必要となってくる。図２では、多段ブリッジ構成なので、ブリッジＢ２０５のバス番号は、上位ブリッジであるブリッジＡ２０３のＰＣＩコンフィグレーション空間に格納されている二次バス番号に相当する。ブリッジＢ２０５のバス番号を取得するためには、ブリッジＡ２０３へＰＣＩコンフィグレーションアクセスを行う必要がある（ステップ４２２）。
【００３５】
ブリッジＡ２０３自身のバス番号は、ホストバス２０２のバス番号レジスタを読み込むことで取得する（ステップ４２３）。ブリッジＡ２０３からブリッジＢ２０５のバス番号を取得し（ステップ４２４）、ブリッジＢ２０５のＰＣＩコンフィグレーション空間から二次バス番号を取得し、ＰＣＩデバイスのバス番号として、これをＡＣＰＩドライバに返す（ステップ４２５）。
【００３６】
図５は、ＡＣＰＩドライバが、ＢＩＯＳから提供されたＡＭＬテーブルのステータスメソッドを実行するしくみについて示す。ＯＳ５００は、コンピュータ・システム上で動作するオペレーティングシステムである。ＡＣＰＩドライバ５０１は、ＯＳ５００に含まれるモジュールの１つであり、ＡＭＬ５０３を解釈する。ＡＭＬ５０３は、ＡＣＰＩマシン言語で記述されたバイナリデータであり、デバイスオブジェクトの状態を表すステータスメソッド５０４を含む。
【００３７】
ＡＣＰＩドライバ５０１は、デバイスオブジェクトの状態を取得するために、ＡＭＬ５０３のステータスメソッド５０４を呼び出す（５０２）。ステータスメソッド５０４は、デバイスオブジェクトの状態をＳ１（ＯＳに隠蔽する値）およびＳ２（ＯＳに隠蔽しない値）のいずれかで返す（５０５、５０６）。
【００３８】
以上のように、ＰＣＩ多段ブリッジ構成においては再帰的にリソース情報を取得していくことで、最終的にＡＣＰＩドライバに対して必要なリソース情報を返却することになる。バス番号以外のリソース情報（メモリマップやＩ／Ｏマップレンジなど）に関しても、同様のシーケンスによりＡＳＬを記述することができる。
【００３９】
本発明において、ＡＳＬ内部では、多段ブリッジを考慮した実装になっているが、ＡＣＰＩ記述方式を工夫することで、ＯＳに対して多段ブリッジを考慮させない作りにすることができる。
【図面の簡単な説明】
【００４０】
【図１】ＰＣＩ多段ブリッジ構成のＡＣＰＩ互換システムの一構成例を示す図である。
【図２】ＢＩＯＳが、ＯＳに対して提供する仮想ハードウェア構成を示す図である。
【図３】ＡＣＰＩドライバが、ＡＭＬテーブルを読み込む動作を示すフローチャートである。
【図４】ＡＣＰＩドライバが、ＡＭＬテーブルからＰＣＩデバイスのバス番号を取得するフローチャートである。
【図５】ＡＣＰＩドライバが、ＡＭＬのステータスメソッドを実行するしくみを示す図である。
【符号の説明】
【００４１】
１００，２００  コンピュータ・システム
１０１，２０１  システムバス
１０３，２０３  ブリッジＡ
１０５，２０５  ブリッジＢ
１０７，２０７  ＰＣＩデバイスＡ
１０９，２０９  ＰＣＩデバイスＢ
【図１】
0004831317.tif 000002
【図２】
0004831317.tif 000003
【図３】
0004831317.tif 000004
【図４】
0004831317.tif 000005
【図５】
0004831317.tif 000006