(57)【特許請求の範囲】
【請求項１】
高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）ソース言語（「ＡＳＬ」）コードを、ＡＣＰＩ準拠のＢＩＯＳを有するコンピュータ・システムの基本入出力システム（「ＢＩＯＳ」）において自動生成する方法であって、
コンピュータ・システムによって、ＢＩＯＳ構築処理によって生成されたファイルを読み取って、デバイス・ノード構造を発見するステップと、
前記コンピュータ・システムによって、前記発見された前記デバイス・ノード構造に対応するＡＳＬコードを生成するステップと
を含み、さらに、前記ＡＳＬコードを生成するステップが、
前記発見されたデバイス・ノード構造から読み取ったプラグアンドプレイ（ＰｎＰ）Ｉｄに対応するデバイスを、デバイス識別オブジェクトによって識別するステップと、
前記識別されたデバイスのリソースを、デバイス構成オブジェクトによって構成するステップと
を含んでいる方法。
【請求項２】
高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）ソース言語（「ＡＳＬ」）コードを、ＡＣＰＩ準拠のＢＩＯＳを有するコンピュータ・システムの基本入出力システム（「ＢＩＯＳ」）において自動生成する方法であって、
コンピュータ・システムによって、ＢＩＯＳ構築処理によって生成されたファイルを読み取って、静的デバイス・ノード構造を発見するステップと、
前記コンピュータ・システムによって、前記発見された前記静的デバイス・ノード構造に対応するＡＳＬコードを生成するステップと
を含んでいる方法。
【請求項３】
前記デバイス構成オブジェクトが、前記デバイスの現在のリソース設定を指定するための＿ＣＲＳ制御メソッドを含んでいる請求項１に記載の方法。
【請求項４】
前記ＢＩＯＳ構築処理によって生成されたファイルがＢＣＧ．ＲＯＭ、ＲＯＭＥＸＥＣ．ＲＯＭ、およびＢＵＩＬＤ．ＭＡＰファイルを含んでいる請求項２に記載の方法。
【請求項５】
前記デバイス・ノード構造がマザーボード構成可能デバイス（「ＭＣＤ」）に対応する請求項１に記載の方法。
【請求項６】
前記ＡＳＬコードを生成する前記ステップが、同じＰｎＰ  Ｉｄを有する２つのデバイスの間で区別するための２次Ｉｄを生成することをさらに含んでいる請求項１に記載の方法。
【請求項７】
前記ＡＳＬコードを生成する前記ステップが、
ＭＣＤマクロを読み取ること、および
前記ＭＣＤマクロに含まれた情報を符号化するＡＳＬパッケージ・コードを生成することを含んでいる請求項５に記載の方法。
【請求項８】
前記デバイス構成オブジェクトが、さらに、デバイスの可能なリソース設定を指定する＿ＰＲＳ、該＿ＰＲＳによって指定されたリソース設定を構成する＿ＳＲＳ、デバイスを使用不可にする＿ＤＩＳ、デバイスの状況を返す＿ＳＴＡ制御メソッドを含んでいる請求項１に記載の方法。
【請求項９】
高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）準拠の基本入出力システム（「ＢＩＯＳ」）を有するコンピュータ・システムにおいて使用可能なコンピュータ可読記憶媒体であって、
前記コンピュータ・システムにおけるＡＣＰＩソース言語（「ＡＳＬ」）コードを自動生成するためのコンピュータ可読プログラム・コードを含んでおり、前記コンピュータ可読プログラム・コードは、
コンピュータ・システムに、ＢＩＯＳ構築処理によって生成されたファイルを読み取らせてデバイス・ノード構造を発見させる第１のプログラム・コードと、
前記コンピュータ・システムに、前記発見された前記デバイス・ノード構造に対応するＡＳＬコードを生成させる第２のプログラム・コードと
を含み、さらに、この第２のプログラム・コードが、
前記発見されたデバイス・ノード構造から読み取ったプラグアンドプレイ（ＰｎＰ）Ｉｄに対応するデバイスを、前記コンピュータ・システムのデバイス識別オブジェクトに識別させるプログラム・コードと、
前記識別されたデバイスのリソースを、前記コンピュータ・システムのデバイス構成オブジェクトに構成させるプログラム・コードと
を含んでいるコンピュータ可読記憶媒体。
【請求項１０】
高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）準拠の基本入出力システム（「ＢＩＯＳ」）を有するコンピュータ・システムにおいて使用可能なコンピュータ可読記憶媒体であって、
前記コンピュータ・システムにおけるＡＣＰＩソース言語（「ＡＳＬ」）コードを自動生成するためのコンピュータ可読プログラム・コードを含んでおり、前記コンピュータ可読プログラム・コードは、
コンピュータ・システムに、ＢＩＯＳ構築処理によって生成されたファイルを読み取らせて静的デバイス・ノード構造を発見させる第１のプログラム・コードと、
前記コンピュータ・システムに、前記発見された静的デバイス・ノード構造に対応するＡＳＬコードを生成させる第２のプログラム・コードと
を含んでいるコンピュータ可読記憶媒体。
【請求項１１】
前記第２のプログラム・コードが、前記デバイスの現在のリソース設定を指定するための＿ＣＲＳ制御メソッドを、前記コンピュータ・システムに作成させるプログラム・コードを含んでいる請求項９に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記ＢＩＯＳ構築処理によって生成されたファイルがＢＣＧ．ＲＯＭ、ＲＯＭＥＸＥＣ．ＲＯＭ、およびＢＵＩＬＤ．ＭＡＰファイルを含んでいる請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記デバイス・ノード構造がマザーボード構成可能デバイス（「ＭＣＤ」）に対応する請求項９に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記第２のプログラム・コードが、同じＰｎＰ  Ｉｄを有するデバイスの間で区別するための２次Ｉｄを、前記コンピュータ・システムに生成させるプログラム・コードを含んでいる請求項９に記載のコンピュータ可読記憶媒体。
【請求項１５】
第２のプログラム・コードが、前記コンピュータ・システムにＭＣＤマクロを読み取らせ、前記ＭＣＤマクロに含まれた情報を符号化するＡＳＬパッケージ・コードを生成させるプログラム・コードを含んでいる請求項１４に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記第２のプログラム・コードが、さらに、デバイスの可能なリソース設定を指定する＿ＰＲＳ、該＿ＰＲＳによって指定されたリソース設定を構成する＿ＳＲＳ、デバイスを使用不可にする＿ＤＩＳ、デバイスの状況を返す＿ＳＴＡ制御メソッドを前記コンピュータ・システムに生成させるプログラム・コードをさらに含んでいる請求項９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【０００１】
（発明の背景）
（発明の分野）
本発明は、一般に、コンピュータ・システムの構成の分野に関し、詳細には、ＡＣＰＩ使用可能オペレーティング・システム（「ＯＳ」）を有するコンピュータの周辺リソース構成のための高度構成およびパワー・マネージメント・インタフェース（Ａｄｖａｎｃｅｄ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ａｎｄ  Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ  Ｉｎｔｅｒｆａｃｅ）（「ＡＣＰＩ」）ソース言語（「ＡＳＬ」）コードの自動生成に関する。
【０００２】
（関連技術の説明）
ＡＣＰＩは、Ｍｉｃｒｏｓｏｆｔ、ＩｎｔｅｌおよびＴｏｓｈｉｂａによって共同開発され、公開された仕様である。これは、ＯＳに、ＰＣなどのコンピュータ・システムにおけるパワー・マネージメントおよびリソース管理についてのより大きい制御を与えることができる、拡張可能な手段を定義する。ＡＣＰＩは、ＯＳがマザーボード・デバイスの特性を操作できる、ハードウェアおよびソフトウェア・インタフェースを定義する。この技術は、既存の基本入出力システム（「ＢＩＯＳ」）技術とは、少なくとも２点に関して異なる。すなわち、（ｉ）ＢＩＯＳサポート・コードが、プラットフォーム固有のアセンブリ言語ではなく、本明細書でさらに論じられるＡＣＰＩ機械語（「ＡＭＬ」）と呼ばれるｐコードで書かれること、および（ｉｉ）ＢＩＯＳサポート・コードが、電力またはリソース管理のためのポリシーまたはタイムアウトを決定しないことである。むしろ、これらのポリシーは、オペレーティング・システムによって決定される。
【０００３】
ＡＣＰＩハードウェア・インタフェースがＯＳへ、２つの類別における機能性を提供する。すなわち、（ｉ）システム管理割込み（「ＳＭＩ」：System Management Interrupt）ではなく、システム制御割込み（「ＳＣＩ」：System Control Interrupt）と呼ばれる標準割り込みを使用したシステム制御イベントの制御／検出、および（ｉｉ）システム電力状態の制御である。プラットフォームのハードウェア・インタフェースのサポートの詳細は、システムＢＩＯＳ内の明確なテーブルのセット内に提供されている。
【０００４】
ＡＣＰＩソフトウェア・インタフェースは、ＯＳが異なるＡＣＰＩ関連テーブルをシステムＢＩＯＳにおいて発見する手段、および、ＯＳがＡＭＬを使用してマザーボード・デバイスの特性を理解かつ制御する手段を提供する。ＡＭＬは、システムＢＩＯＳ内のテーブルに存在する。
【０００５】
ＡＣＰＩソース言語（「ＡＳＬ」）は、ＯＳが、たとえば、ＷｉｎｄｏｗｓおよびＷｉｎｄｏｗｓ  ＮＴオペレーティング・システムの最新リリースにおけるパワー・マネージメント、プラグアンドプレイおよびドッキング・サポートを制御する機構を提供し、ＡＣＰＩ準拠となるにはこれらが必要とされる。ＡＳＬはＢＩＯＳ構築処理中にＡＭＬにコンパイルされる。
【０００６】
ＡＳＬは、ＡＣＰＩ制御メソッドを書くために好ましいソース言語である。大抵のＯＥＭおよびＢＩＯＳ開発者は制御メソッドをＡＳＬで書く。次いで、ＡＳＬコードが変換ツールによってＡＭＬコード・バージョンの制御メソッドへ変換される。ＡＳＬおよびＡＭＬは密接に関係があるが、異なる言語であることに留意されたい。
【０００７】
あらゆるＡＣＰＩ準拠のＯＳがＡＭＬをサポートしなければならない。しかし、ＡＳＬの使用は強制的ではないが、それでもＡＳＬを使用することが非常に望ましい。少なくとも理論上は、ユーザが自分自身の任意のソース言語を開発することができ、変換器を使用してこの任意のソース言語をＡＭＬに変換することができる。
【０００８】
ＡＭＬは、ＡＣＰＩ制御メソッド仮想機械語であり、すなわち、ＡＣＰＩ互換ＯＳによってサポートされる仮想機械用の機械コードである。これは、疑似コード・アセンブリ言語であり、ＯＳドライバによって解釈される。ＡＣＰＩ制御メソッドをＡＭＬで書くことができるが、プログラマは通常、制御メソッドをＡＳＬでコーディングする。Ｉｎｔｅｌ、Ｍｉｃｒｏｓｏｆｔ、およびＴｏｓｈｉｂａによる「ＡＣＰＩ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」Ｒｅｖｉｓｉｏｎ  １．０ａ、１９９８年７月１日発行の第１５章は、ＡＳＬリファレンスを記載しており、その開示が全体として、参照により本明細書に組み込まれる。「ＡＣＰＩ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」Ｒｅｖｉｓｉｏｎ  １．０ａを、以下で「ＡＣＰＩ仕様」と称する。
【０００９】
ＡＭＬは、ＡＣＰＩメソッド・インタプリタによって処理された言語である。これは本来、宣言言語であり、１組の宣言を提供し、これがＡＣＰＩインタプリタによって、定義ブロックのロード時にＡＣＰＩネーム空間にコンパイルされる。ＡＭＬの要件の１つは、メモリ、Ｉ／Ｏ、およびＰＣＩコンフィギュレーション空間へのそのアクセスが静的であることであり、そうでなければ動的な値のために提供された機能が大幅に無用となるように制限される。その理由は次の通りである。
（ａ）それらが、ＡＭＬが最初にＯＳによってロードされたときに評価され、かつ
（ｂ）その時点で修正することは大変困難であるからである。
【００１０】
たとえば、少なくとも２つのオブジェクトがあり、オブジェクトのパラメータを修正する能力が望ましい、すなわちＰｒｏｃｅｓｓｏｒおよびＯｐｅｒａｔｉｏｎＲｅｇｉｏｎである。一般に、ＯｐｅｒａｔｉｏｎＲｅｇｉｏｎ（名前、タイプ、オフセット、長さ）が、メモリのチャンク、Ｉ／Ｏ空間、ＰＣＩコンフィギュレーション空間、埋め込みコントローラ空間、またはＳＭＢｕｓ空間へのＡＳＬコード・アクセスを提供する。しかし、「オフセット」および「長さ」は式であるが、これらはＯＳがＡＣＰＩテーブルをロードするときにのみ評価され、したがって、Ｉ／Ｏアドレスがマザーボード構成可能デバイス／プラグ・アンド・プレイ・ルーチン（「ＭＣＤ／ＰｎＰ」）またはマザーボード上のジャンパ設定によって位置変更されたときなど、システムにおいて変更された状態に基づいて修正することは困難である。
【００１１】
ＡＣＰＩ  Ｐｒｏｃｅｓｓｏｒ（名前、ＡＰＩＣＩＤ、オフセット、長さ）オブジェクトは、ＣＰＵおよびそのパワー・マネージメント制御Ｉ／ＯポートをＯＳへ宣言する。「オフセット」および「長さ」は式ではなく、したがって、構築時に位置指定されなければならない。これは特に、これらのＩ／Ｏアドレスを、たとえばＭＣＤ／ＰｎＰを使用して位置変更することが望ましい場合、極度な制限である。
【００１２】
プラグ・アンド・プレイ（ＰｎＰ）が、ｉｎｔｅｒ  ａｌｉａ、ＭｉｃｒｏｓｏｆｔおよびＩｎｔｅｌによって開発された技術の名称であり、ＰＣハードウェアを、接続された周辺デバイスと自動的に動作させるものであることに留意されたい。マザーボード構成可能デバイス（ＭＣＤ）は、Ｐｈｏｅｎｉｘ  Ｔｅｃｈｎｏｌｏｇｉｅｓの、ＢＩＯＳにおける使用のためのＰｎＰ仕様の実装である。プラグ・アンド・プレイ技術は、ハードウェアでは、オペレーティング・システムに実装され、および、デバイス・ドライバおよびＢＩＯＳなどのサポーティング・ソフトウェアに実装される。様々なプラグ・アンド・プレイ技術があり、たとえば、ＢＩＯＳ、ＩＳＡ、ＳＣＳＩ、ＩＤＥ  ＣＤ−ＲＯＭおよびその他が含まれる。この明細書では、プラグ・アンド・プレイへの参照は、プラグ・アンド・プレイＢＩＯＳ仕様への、かつ、プラグ・アンド・プレイＢＩＯＳ仕様のＭＣＤ実装への参照である。
【００１３】
もう１つの問題が起こる理由は、システムＢＩＯＳにおいて、ユーザがＳｅｔｕｐプログラムを入力して、マザーボード統合周辺装置の設定を修正することができるからである。この設定にはしばしば、たとえば、デバイスのデフォルト・リソース設定（Ｉ／Ｏ、ＩＲＱなど）、デバイスが使用可能であるか使用不可であるか、ＯＳがデバイスの設定をランタイムで修正できるかどうか、が含まれる。
【００１４】
ＰｎＰなど、従来のリソース管理システムでは、これらの設定が、ランタイム・サービスがＯＳへ返す情報を制御する。しかし、ＡＣＰＩでは、ある新しい問題があり、このタイプの統合をより困難にする。
【００１５】
１．ＯＳがもはやＰｎＰランタイム・サービスを呼び出さない。
２．ＡＳＬコード（ＰｎＰランタイム呼出しに置き換わる）が、ＣＭＯＳメモリにアクセスしてユーザ設定を決定することができない。
３．ＯＳは、＿ＤＩＳ（Ｄｉｓａｂｌｅ）メソッドがデバイスについて存在する場合、これを呼び出すとこのデバイスを使用不可にすると仮定する。しかし、これは、このデバイスが保護されるように指定するユーザ設定と競合する可能性があり、したがって、この方法ではＯＳによって変更可能ではない可能性がある。
４．ＯＳは、＿ＰＲＳ（Ｐｏｓｓｉｂｌｅ  Ｒｅｓｏｕｒｃｅ  Ｓｅｔｔｉｎｇｓ）オブジェクトがデバイス下で発見された場合、ユーザの設定がそうでないものを指示する場合でも、このデバイスが多数の構成をサポートしなければならないと仮定する。したがって、ＯＳがリソース設定を、Ｓｅｔｕｐプログラムを使用してユーザによって指示されたプリファレンスと矛盾する方法で、修正することができる。
【００１６】
以下のサブセクションはＡＣＰＩアーキテクチャの概観を提供し、これは、以下の「発明の概要」というセクションに要約された、本発明のよりよい理解を容易にするものである。
【００１７】
（ＡＣＰＩアーキテクチャの概観）
ＡＣＰＩ仕様は、ＯＳソフトウェア、ハードウェアおよびＢＩＯＳソフトウェアの間のインタフェースを含んでいるＡＣＰＩインタフェースを定義する。加えて、この仕様は、これらのインタフェースの意味も定義する。
【００１８】
図１は、ＡＣＰＩに関連したソフトウェアおよびハードウェア構成要素、および、それらが互いにどのように関係するかを定義するブロック図である。ＡＣＰＩ仕様は、構成要素の間のインタフェース、ＡＣＰＩテーブルの内容、および、他のＡＣＰＩ構成要素の関連した意味を記述する。ＡＣＰＩテーブルがＡＣＰＩ実装の重要な特徴であり、ＡＣＰＩ準拠のＢＩＯＳの役割が主として、アプリケーション・プログラミング・インタフェース（ＡＰＩ）ではなくＡＣＰＩテーブルを供給することであることに留意されたい。
【００１９】
図１は、ＡＣＰＩの３つのランタイム構成要素を示す。
（ｉ）ＡＣＰＩテーブル３０。これらのテーブルは、ハードウェアとのインタフェースを記述する。これらのインタフェースは様々な構成を取ることができ、ＡＭＬコードによる記述を含むことができる。記述のいくつかでは構築できるものを制限するが、大抵の記述ではハードウェアを任意の方法で構築することができ、ハードウェアを動作させるために必要とされた任意の動作シーケンスを記述することもできる。ＡＣＰＩテーブルが、解釈されるＡＭＬを使用することができるので、ＯＳがＡＭＬインタプリタ１１を含んでおり、これが、ＡＭＤで符号化されてＡＣＰＩテーブル３０に格納された手順を実行する。
【００２０】
（ｉｉ）ＡＣＰＩレジスタ１０。これらは、ハードウェア・インタフェースの制限された部分であり、少なくとも場所において、ＡＣＰＩテーブル３０によって記述される。
【００２１】
（ｉｉｉ）ＡＣＰＩ  ＢＩＯＳ２０は、ＡＣＰＩ仕様と互換性のあるファームウェアの一部を指す。ＡＣＰＩ  ＢＩＯＳ２０は、通常はシステムＢＩＯＳ２１から分離しないが、分離した構成要素として図示されて、その付加機能性、およびＡＣＰＩ仕様との互換性が強調されていることに留意されたい。したがって、このＡＣＰＩ  ＢＩＯＳ２０は、機械をブートするコード、ならびに、スリープ、ウェイク、およびいくつかの再起動動作のためのインタフェースを実装することを含んでいる。
【００２２】
ＡＣＰＩのさらなる詳細は、Ｍｉｃｒｏｓｏｆｔ、ＩｎｔｅｌおよびＴｏｓｈｉｂａによる「ＡＣＰＩ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｄｏｃｕｍｅｎｔ」Ｒｅｖｉｓｉｏｎ  １．０ａ、１９９８年７月１日において提供されており、その内容が全体として、参照により本明細書に組み込まれる。この文書は現在、インターネット上のｈｔｔｐ：／／ｗｗｗ．ｔｅｌｅｐｏｒｔ．ｃｏｍ／〜ａｃｐｉでも入手可能である。
【００２３】
以前に論じたように、新しいＡＣＰＩ仕様の出現により、以前にＰｈｏｅｎｉｘ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＣＤ／ＰｎＰサブシステムによって提供されたサービスおよびリソース構成情報が、現在はＡＣＰＩ構成要素によって提供されなければならない。したがって、以前にＭＣＤ／ＰｎＰによって提供されたサービスおよびリソース構成が、現在はＡＭＬにおいてＡＣＰＩ準拠のＢＩＯＳに定義されなければならない。すなわち、以前に従来のＰｎＰ  ＢＩＯＳによって提供されたサービスおよびリソース構成情報が、現在はＡＣＰＩ準拠のＢＩＯＳによって提供されなければならない。
【００２４】
これらのＰｎＰサービスおよびリソース構成情報が、ＡＳＬ言語を使用して定義されるべきであることが好ましい。次いで、ＡＳＬ言語をＡＭＬにコンパイルすることができ、ＡＣＰＩドライバがＡＭＬインタプリタと共にＡＭＬコードにアクセスして、リソース構成情報および他の従来のＰｎＰサービスをＡＣＰＩ準拠のＯＳへ提供できるようにする。したがって、すべてのＰｎＰ構成特定コードを移植する必要が大いにあり、これは典型的には、アセンブリ言語においてＡＳＬへ行われ、ＡＣＰＩ準拠のＢＩＯＳが、以前にＰｈｏｅｎｉｘ  Ｔｅｃｈｎｏｌｏｇｙによって提供されたＢＩＯＳの従来のＭＣＤ／ＰｎＰサブシステムによって提供されたランタイム・サービス、および、リソース構成要素を提供できるようにする。
【００２５】
このアセンブリ・コードのすべてをＡＳＬコードへ移植することは、非常に困難な作業である。これは、アセンブリ・コードが各デバイスに特有であるからである。たとえば、Ｐｈｏｅｎｉｘ  ＴｅｃｈｎｏｌｏｇｉｅｓのＢＩＯＳは、ＰｎＰリソース構造情報をデバイス・ノード構造の形式で格納する。デバイスの構造を格納するこのＰｈｏｅｎｉｘ  ＢＩＯＳサブシステムは、マザーボード構成可能デバイス（「ＭＣＤ」）サブシステムと呼ばれる。ＭＣＤ構造は、ＢＩＯＳにおいてマクロによって初期化される。
【００２６】
ＡＳＬコードを、ＭＣＤデバイスのすべての可能な構成について生成する必要があり、これにより大量のＡＳＬコードが書かれる結果となる可能性がある。したがって、ＢＩＯＳのための構築処理が完了した後で、これらのＰｎＰ  ＭＣＤ構造をＡＳＬへ自動変換する必要性が大いにある。このＰｎＰ  ＭＣＤ情報がＡＳＬへ変換された後、ＡＣＰＩ準拠のＢＩＯＳがＡＳＬコードへのアクセスを有し、したがって、以前に従来のＭＣＤ／ＰｎＰサブシステムによって提供された周辺構成情報を知る。
【００２７】
（発明の概要）
したがって、本発明の全般的な目的は、上で識別された問題および欠点を軽減することである。
【００２８】
本発明の目的の１つは、ＡＣＰＩ  ＡＳＬコードを、従来のＭＣＤ／ＰｎＰ  ＢＩＯＳにおいて使用可能である周辺リソース構成情報を提供するコンピュータ・システムのＢＩＯＳにおいて、自動生成するための方法を提供することである。
【００２９】
本発明の別の目的は、コンピュータ・システムにおいて使用可能な製造品を提供することであり、これはＢＩＯＳにおいてデバイス・ノード構造を走査して、指定された基準を満たすデバイス・ノード構造を発見し、次いで、このデバイス・ノード構造に含まれたリソース構成情報に対応するＡＳＬコードを生成するものである。
【００３０】
本発明の別の目的は、静的デバイスのためのデバイス・ノード構造に対応するＡＣＰＩ  ＡＳＬコードの自動生成のための方法を提供することである。
【００３１】
本発明の別の目的は、ＭＣＤデバイスのためのデバイス・ノード構造に対応するＡＣＰＩ  ＡＳＬコードの自動生成のための方法を提供することである。
【００３２】
本発明のさらなる目的は、ＡＣＰＩ  ＡＳＬコードを生成して、デバイスのＰｎＰ  Ｉｄに対応する識別Ｉｄを含めるための方法を提供することである。
【００３３】
本発明のさらなる目的は、＿ＣＲＳ制御メソッド、および、任意選択的に、必要とされる他の制御メソッドを含んでいる、ＡＣＰＩ  ＡＳＬコードを生成する方法を提供することである。
【００３４】
本発明の別の目的は、静的デバイスに対応するＡＳＬコードを生成する、コンピュータ・システムにおいて使用可能な製造品を提供することである。
【００３５】
本発明の別の目的は、ＭＣＤデバイスに対応するＡＳＬコードを生成する、コンピュータ・システムにおいて使用可能な製造品を提供することである。
【００３６】
本発明のさらなる目的は、ＡＳＬコードを生成して、デバイスのＰｎＰ  Ｉｄに対応する識別Ｉｄを含める、コンピュータ・システムにおいて使用可能な製造品を提供することである。
【００３７】
本発明のさらなる目的は、ＡＳＬコードを生成して、＿ＣＲＳ制御メソッド、および、任意選択的に、必要とされる可能性がある他の制御メソッドを含める、コンピュータ・システムにおいて使用可能な製造品を提供することである。
【００３８】
これらの目的および他の目的は、高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）ソース言語（「ＡＳＬ」）コードを、ＡＣＰＩ準拠のＢＩＯＳを有するコンピュータ・システムの基本入出力システム（「ＢＩＯＳ」）において自動生成する方法を提供することによって達成され、この方法は、（ｉ）デバイス・ノード構造をＢＩＯＳにおいて走査するステップ、（ｉｉ）指定された基準に従ってデバイス・ノード構造を発見するステップ、および（ｉｉｉ）指定された基準に基づいて発見されたデバイス・ノード構造に対応するＡＳＬコードを生成するステップを含んでいる。
【００３９】
この方法には、デバイス・ノード構造を発見するために指定された基準が、静的デバイスに、あるいはＭＣＤデバイスに対応するデバイス・ノード構造を含んでいる。
【００４０】
この方法には、ＡＳＬコードを生成することが、デバイスのＰｎＰ  Ｉｄを抽出することを含んでいる。
【００４１】
この方法にはさらに、ＡＳＬコードを生成することが、＿ＣＲＳ制御メソッドを作成すること、および、任意選択的に、必要とされる可能性がある他の制御メソッドを作成することを含んでいる。
【００４２】
また、提供されるものには、高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）準拠の基本入出力システム（「ＢＩＯＳ」）を有するコンピュータ・システムにおいて使用可能な製造品もあり、この製造品は、コンピュータ・システムにおけるＡＣＰＩソース言語（「ＡＳＬ」）コードの自動生成のためにそこに書き込まれたコンピュータ可読プログラム・コードを有するコンピュータ可読媒体を含んでおり、このコンピュータ可読プログラム・コードは、（Ｉ）ＢＩＯＳにおいてすべてのデバイス・ノード構造を走査し、指定された基準に従ってデバイス・ノード構造を発見する第１のコンピュータ可読コード、および、（ｉｉ）指定された基準に基づいて発見されたオブジェクトに対応するＡＳＬコードを修正する第２のコンピュータ可読コードを含んでいる。
【００４３】
第１のコンピュータ可読コードは、静的デバイスまたはＭＣＤデバイスに対応するデバイス・ノード構造を発見するコードを含んでいる。
【００４４】
第２のコンピュータ可読コードは、ＰｎＰ  Ｉｄをデバイス・ノード構造から抽出するコードを含んでいる。
【００４５】
第２のコンピュータ可読コードは、＿ＣＲＳ制御メソッドを作成し、任意選択的に、他の制御メソッドを作成するコードをさらに含んでいる。
【００４６】
添付の図面は、本明細書に組み込まれ、その一部を構成し、本発明の好ましい実施形態をほどなく例示し、上で与えられた一般の説明、および、以下で与えられた好ましい実施形態の詳細な説明と共に、本発明の原理を説明するために役立つものである。
【００４７】
（好ましい実施形態の説明）
本発明は、一般の態様において、ＡＣＰＩ準拠のＢＩＯＳを有するコンピュータ・システムの基本入出力システム（「ＢＩＯＳ」）において、高度構成およびパワー・マネージメントインタフェース（「ＡＣＰＩ」）ソース言語（「ＡＳＬ」）コードを自動生成する方法および製造品を提供する。これらは、（ｉ）デバイス・ノード構造をＢＩＯＳにおいて走査するステップ、（ｉｉ）指定された基準に従ってデバイス・ノード構造を発見するステップ、および（ｉｉｉ）指定された基準に基づいて発見されたデバイス・ノード構造に対応するＡＳＬコードを生成するステップを含んでいる。
【００４８】
この方法および製造品は、デバイス・ノード構造を発見するために指定された基準が、静的デバイスに、あるいはＭＣＤデバイスに対応するデバイス・ノード構造を含んでいる。
【００４９】
この方法および製造品は、ＡＳＬコードを生成することが、デバイスのプラグ・アンド・プレイ（ＰｎＰ）Ｉｄを抽出することを含んでいる。
【００５０】
この方法および製造品は、ＡＳＬコードを生成することが、＿ＣＲＳ制御メソッドを作成すること、および、任意選択的に、必要とされる可能性がある他の制御メソッドを作成することを含んでいることを、さらに提供する。
【００５１】
ＡＣＰＩ準拠のＯＳは、いくつかのオブジェクトが制御メソッドで使用されてデバイスが構成されると予想する。これらのオブジェクトを以下の３タイプに分類することができる。
【００５２】
（ｉ）デバイスをＰｎＰ  Ｉｄと関連付けるデバイス識別オブジェクト、
（ｉｉ）ＡＣＰＩを使用して列挙されたデバイスのためのハードウェア・リソースを構成する、デバイス構成オブジェクト、および
（ｉｉｉ）デバイス挿入および除去オブジェクトが、デバイスの動的挿入および除去を処理するための機構を提供する。これらの３タイプの各デバイスについては、以下のパラグラフでより詳細に論じられる。
【００５３】
デバイス識別オブジェクトが、各プラットフォーム・デバイスをＰｎＰ  Ｉｄと関連付ける。デバイス識別オブジェクトがすぐ以下にリストされる。
【００５４】
＿ＡＤＲは、デバイスのアドレスをその親バス上で評価するオブジェクトである。
＿ＣＩＤは、デバイスのＰｎＰ互換Ｉｄリストを評価するオブジェクトである。
＿ＤＤＮは、論理ソフトウェア名、たとえばＣＯＭ１をデバイスと関連付けるオブジェクトである。
＿ＨＩＤは、デバイスのＰｎＰハードウェアＩｄを評価するオブジェクトである。
＿ＳＵＮは、スロットのためのスロットＵＩ番号を評価するオブジェクトである。
＿ＵＩＤは、デバイスに固有の持続的Ｉｄ、または、それを生成する制御メソッドを指定するオブジェクトである。
【００５５】
たとえばＩＳＡバスなど、バスの列挙可能タイプ上にないいかなるデバイスについても、ＡＣＰＩドライバがドライバのＰｎＰ  Ｉｄを列挙し、ＡＣＰＩ  ＢＩＯＳが、各デバイスについて＿ＨＩＤを供給して、ＡＣＰＩドライバがデバイスを列挙できるようにする。たとえばＰＣＩバスなど、列挙可能なバス上のデバイスについては、ＡＣＰＩシステムが、列挙可能なバス上のどのデバイスが特定のＰｎＰ  Ｉｄによって識別されるかを識別する必要がある。これを実施するため、ＡＣＰＩ  ＢＩＯＳが＿ＡＤＲオブジェクトを供給する。
【００５６】
デバイス構成オブジェクトが、ＡＣＰＩによって列挙されたデバイスのためのハードウェア・リソースを構成するための情報を提供する。これらのオブジェクトが、現在および可能なリソース要件、共有リソースの間の関係、および、ハードウェア・リソースを構成するための方法についての情報を提供する。デバイス構成オブジェクトは、以下の通りである。
【００５７】
＿ＣＲＳは、デバイスの現在のリソース設定を指定するオブジェクトであり、あるいはそのようなオブジェクトを生成する制御メソッドである。これは、ＡＣＰＩ仕様において必要とされるオブジェクトである。リソース・データが、一連のデータ構造として提供され、各データ構造が一意のタグまたは識別子を有する。リソース・データ構造におけるデータの例には、メモリ・アドレス範囲、Ｉ／Ｏポート、割り込み、およびＤＭＡチャネルなど、標準のコンピュータ・システム・リソースに関係するデータが含まれる。
【００５８】
＿ＤＩＳは、デバイスを使用不可にする制御メソッドである。
＿ＰＲＳは、デバイスの可能なリソース設定を指定するオブジェクトであり、あるいはそのようなオブジェクトを生成する制御メソッドである。
＿ＰＲＴは、ＰＣＩ割り込み経路指定テーブルを指定するオブジェクトである。
＿ＳＲＳは、デバイスの設定を設定する制御メソッドである。
＿ＦＤＩは、フロッピー・ドライブに関する情報を返すオブジェクトである。
【００５９】
デバイス挿入および除去オブジェクトが、デバイスの動的な挿入および除去を処理するための機構を提供する。同じ機構が、ドッキングおよびドッキング解除にも使用される。デバイス挿入および除去オブジェクトが、以下にリストされる。
【００６０】
＿ＥＪＤは、名前付きデバイスが従属している、デバイス・オブジェクト名を評価するオブジェクトである。名前付きデバイスが排出されたときは、従属するデバイスが排出通知を受信しなければならない。
＿ＥＪｘは、デバイスを排出する制御メソッドである。
＿ＬＣＫは、デバイスをロックあるいはロック解除する制御メソッドである。
＿ＲＭＶは、所与のデバイスが除去可能であるかどうかを指示するオブジェクトである。
＿ＳＴＡは、デバイスの状況を返す制御メソッドである。
【００６１】
ＡＣＰＩ構成オブジェクトのさらなる詳細は、ＡＣＰＩ仕様の第６章に提供されており、その内容が全体として、参照により本明細書に組み込まれる。
【００６２】
図２は、本発明の一実施形態を実施する、静的デバイスのためのＡＳＬ構成コードを生成する処理１００の典型的なステップを例示する流れ図である。本発明は、構成静的デバイス処理１００の流れ図のステップを実施する、コンピュータ可読プログラム・コードも提供する。開示されたステップの実際のコーディングは、過度の実験なしに、コンピュータおよびシステム・プログラミングの技術分野における当業者の技術の範囲内のものである。いくつかのサンプル・コード・フラグメントも、流れ図において開示されたステップのコーディング処理の理解を容易にするために提供される。
【００６３】
ステップ１１０で、静的デバイス・ノードが読み取られる。静的デバイス・ノードが、ＢＩＯＳ構築処理によって生成されるファイルから読み取られる。これらのファイルには、たとえば、ＢＣＧ．ＲＯＭ、ＲＯＭＥＸＥＣ．ＲＯＭ、およびＢＵＩＬＤ．ＭＡＰファイルが含まれる。静的デバイス・ノードは、たとえば、静的デバイス・ノード・テーブルの開始へのポインタである、ＢＣＧ．ＲＯＭ画像ファイルにおけるｄｅｖＮｏｄｅＰｔｒＴａｂｌｅポインタをたどることによって、読み取ることができる。静的デバイス・ノード構造（＿ｄｅｖｎｏｄｅ）が、静的デバイス・ノード・テーブルから読み込まれる。この構造が、デバイス・ノード・サイズ、デバイスのＰｎＰ  Ｉｄおよびデバイス・ノード属性を含んでいるデバイス情報を含んでいる。
【００６４】
ステップ１１５で、すべてあるいは所定の数の静的デバイス・ノードが静的デバイス・ノード・テーブルから処理されたかどうかを調べるために処理が検査し、処理される静的デバイス・ノード・エントリがそれ以上ない場合、１５０で処理が終了する。もう１つの静的デバイス・ノードが読み込まれる場合、処理がステップ１２０へ進行する。
【００６５】
ステップ１２０で、処理が、デバイスのハードウェアＩＤを生成する。ＡＳＬコードが、＿ＨＩＤオブジェクトを使用して、デバイスのハードウェアＰｎＰ  Ｉｄを報告する。処理が、ＰｎＰ  Ｉｄを＿ｄｅｖｎｏｄｅ構造から抽出し、＿ＨＩＤオブジェクトを生成する。生成された＿ＨＩＤオブジェクトが、典型的には、出力ファイルへ書き込まれる。次いで、処理がステップ１３０へ進行する。
【００６６】
ステップ１３０で、処理が、静的デバイス・ノードの＿ＣＲＳ制御メソッドを生成する。さらに、静的デバイス・ノードの構成が、定義によって、変更不可能であるため、静的デバイスについてそれ以上の制御メソッドが生成されない。ｄｅｖの後に続くバイト、ノード構造（＿ｄｅｖｎｏｄｅ）が、デバイス構成データへのポインタである。＿ＣＲＳ制御メソッドが、ＡＣＰＩ仕様によって指定されたデータ構造の形式における構成を返す。
【００６７】
補遺Ａは、静的デバイスならびに静的デバイス・オブジェクトの構造のためのＡＳＬコードを生成するルーチンのための、サンプル・コード・フラグメントである。
【００６８】
図３および図４は、本発明の別の実施形態を実施する、ＭＣＤデバイスのためのＡＳＬコードを生成する処理のステップを例示する流れ図である。本発明は、構成ＭＣＤデバイス処理２００および生成任意選択制御メソッド処理２６０の流れ図のステップを実施するコンピュータ可読プログラム・コードも提供する。これらの処理において開示されたステップの実際のコーディングは、過度の実験なしに、コンピュータおよびシステム・プログラミングの技術分野における当業者の技術の範囲内のものである。
【００６９】
図３は、構成ＭＣＤノード処理のステップを開示する流れ図である。ステップ２１０で、処理が、次のＭＣＤデバイス・ノード構造を読み取る。処理が、構築ファイル、ＢＣＧ．ＲＯＭを読み取り、ここでＭＣＤデバイス・ノード構造が、特定の開始および終了アドレスと共に動的デバイス・テーブルに格納される。読取り処理２１０は、ＭＣＤデバイス処理２００の最初の繰り返し中に、最初のエントリを動的デバイス・テーブルから読み取ることによって開始し、その後、ステップ２５０で処理が終了されるまで、読取り処理２００の後続の繰り返しにおいて、次のエントリを動的デバイス・テーブルから読み取る。
【００７０】
ステップ２１５で、処理が、ＭＣＤデバイス・ノード・エントリがさらにあるかどうかを調べるために検査する。ＭＣＤデバイス・エントリがそれ以上ない場合、ステップ２５０で処理２００が終了する。処理２００が、所定の数のＭＣＤデバイス・ノード構造が読み取られた後で終了できるようにすることも可能であることを理解されたい。これは、たとえば、ステップ２１５で所定の数のＭＣＤデバイス・ノードが読み取られたかどうかを決定するために検査するように、処理を変更することによって実施することができる。そうでない場合、処理２００がステップ２２０へ進行して、デバイスのための一意のＩｄを生成する。
【００７１】
ステップ２２０で、処理が、デバイスのＰｎＰ  Ｉｄを抽出して＿ＨＩＤオブジェクトを生成し、次いでこれが、典型的には出力ファイルへ書き込まれる。ステップ２２０で、処理が、＿ＵＩＤオブジェクトも生成して、同じ＿ＨＩＤを有する２つのデバイスの間で区別する。たとえば、スーパーＩ／Ｏコントローラが、同じ＿ＨＩＤを有する２つのシリアル・ポートを有する場合、別々の＿ＵＩＤオブジェクトが生成されて、これらの２つのデバイスの間で区別される。
【００７２】
ステップ２３０で、処理２００が、適切なパラメータと共に、ＭＣＤマクロに対応する読み／書きメソッドへの呼び出しを生成する。読み／書きメソッドはチップセットに固有であり、チップセット・エンジニアによって書かれる必要がある。ＭＣＤは３つのマクロを提供し、これらによって、構成要素のエンジニアがデバイスのための構成情報を変更することができる。処理２００がこれらのＭＣＤマクロを解釈し、ＡＳＬパッケージを生成する。次いで、これらのパッケージを、＿ＣＲＳ、＿ＳＲＳ、＿ＤＩＳ制御メソッドなど、他の制御メソッドによって処理して、適切にデバイスの現在の状態を変更することができる。
【００７３】
ステップ２４０で、処理２００が、＿ＣＲＳ制御メソッドを生成する。これはＡＣＰＩ仕様に従って必要とされた制御メソッドである。デバイスの現在のリソースを得る関数ｐｒｏｃｅｓｓ＿ｇｅｔ＿ｃｕｒｒｅｎｔが提供される。この関数が、たとえば、ＭＣＤマクロ情報を得る２つの他の関数を呼び出し、次いでこの情報をＡＳＬパッケージに入れる。ステップ２４０が、これらのＡＳＬパッケージに格納された情報を理解するＡＳＬコードも生成する。ステップ２４０が、関数ｃｒｅａｔｅ＿ｔｅｍｐｌａｔｅも呼び出す。これが、＿ＣＲＳによって使用された空のＡＳＬバッファを作成する。次いで、＿ＣＲＳメソッドがこれらのバッファを現在のリソース構成で満たし、バッファをＯＳへ返す。
【００７４】
ＰｈｏｅｎｉｘのＭＣＤは、２タイプのリソース、従属および独立リソースを使用する。従属および独立リソースは共に完全なリソースを構成する。＿ＣＲＳ制御メソッドがデータをチップから読み取り、チップにおける値に応じて、独立および従属リソースの組み合わせをＯＳへ返す。
【００７５】
ステップ２６０で、処理２００が、他の任意選択の制御メソッドを生成する。図４は、生成任意選択制御メソッド処理２６０の詳細なステップを開示する流れ図のステップを示す。
【００７６】
ステップ３１０で、処理２６０が、たとえばＢＣＧ．ＲＯＭなどの構築またはＢＩＯＳ  ＲＯＭファイルにおける、ＴＡＧ＿ＤＥＶＩＣＥ＿ＮＯＤＥ＿ＰＯＳＳＩＢＬＥ＿ＳＴＡＲＴタグ名などのタグを探索する。ステップ３１０で、処理２６０がタグを発見しなかった場合、判断ブロック３４０へ進行する。ステップ３１０で、処理２６０がタグを発見した場合、ステップ３２０へ進行し、デバイスのための可能なリソース設定を記述する＿ＰＲＳオブジェクトを生成して書き出す。＿ＰＲＳ制御メソッドが生成された後、ステップ３３０で、処理２６０が＿ＳＲＳ制御メソッドを生成する。ＯＳが、デバイスの構成を設定したいときに、＿ＳＲＳ制御メソッドを呼び出す。＿ＳＲＳ制御メソッドは、＿ＰＲＳ制御メソッドがないときには生成されない。
【００７７】
ステップ３４０で、処理２６０が、構築またはＢＩＯＳ  ＲＯＭファイルを検査して、ＭＣＤデバイスがＤＩＳＡＢＬＥ＿ＣＯＮＦＩＧ＿ＳＴＡＲＴマクロを使用したかどうかを決定する。そうである場合、処理２６０がステップ３５０へ進行して、＿ＤＩＳ制御メソッドを生成し、これがＯＳによって使用されてデバイスが使用不可にされ、次いでステップ３６０へ行く。そうでない場合、処理が直接ステップ３６０へ進行する。
【００７８】
ステップ３６０が＿ＳＴＡオブジェクトを生成し、これが使用されて、ＯＳへ、デバイスが使用不可にされ存在していないかどうかが通知される。＿ＳＴＡデバイスは、典型的には、コンピュータ・ブート時に、ＢＩＯＳのＰｏｗｅｒ−ｏｎ  Ｓｅｌｆ  Ｔｅｓｔ（ＰＯＳＴ）処理中に更新される。
【００７９】
ステップ２６０で処理が完了した後、処理２００がステップ２７０へ進行する。ステップ２７０で、構成ＭＣＤデバイス・ノード処理２００が、デバイスのためのＭＣＤオブジェクトを生成する。デバイスのためのＭＣＤオブジェクトは、典型的には、値０ｘ８０００ｘｘｘｘを含んでおり、ただしｘｘｘｘはこのデバイスのデバイス・ノード番号を表す。次いで、デバイス・ノード番号がＰＯＳＴ処理によって使用されて、ＰＯＳＴ中にデバイスの状況が正しく更新される。
【００８０】
本発明の他の実施形態は、本明細書に開示された本発明の仕様および実施の考慮から、当業者には明らかになるであろう。本明細書が例示的としてのみ見なされ、本発明の真の精神および範囲が以下の特許請求の範囲によって示されることが、意図されるものである。
【００８１】
（補遺Ａ）
静的デバイスのためのＡＳＬコードを生成する、サンプル・コード・フラグメント（関数テンプレート）
Ｖｏｉｄ  ｄｏＳｔａｔｉｃ（ＷＯＲＤ  ｓｔａｔｉｃＳｔａｒｔ，ＷＯＲＤ  ｓｔａｔｉｃＥｎｄ，ｃｈａｒ＊  ｂｕｆｆｅｒ，ｃｈａｒ＊  ｅｎｄＢｕｆｆｅｒ，ＷＯＲＤ  ｂｉｏｓＥｎｄ，ＦＩＬＥ＊  ｏｕｔＦｉｌｅ）；
ＳｔａｔｉｃＳｔａｒｔは、ＢＣＧ．ＲＯＭにおいて静的ｄｅｖｎｏｄｅが格納される場所である。ＳｔａｔｉｃＥｎｄは、ＢＣＧ．ＲＯＭにおいてｄｅｖｎｏｄｅが終了する場所である。
ＯｕｔＦｉｌｅは、ＭＣＤ２ＡＣＰＩがＡＳＬコードを書き込むファイルへのポインタである。
ＢｕｆｆｅｒおよびｂｉｏｓＥｎｄは、デバイス・ノード構造へのポインタを計算するために使用される。
【００８２】
（静的デバイス・ノードの例）
＃ｉｆｄｅｆ  ＳＴＡＴＤＥＶＮＯＤＥ  ／／静的デバイス・ノード名
Ｎａｍｅ（＿ＨＩＤ，ＥＩＳＡＩＤ（”ＰＮＰ０Ｅ０３”））  ／／デバイスのＰｎＰ  Ｉｄ
Ｍｅｔｈｏｄ（＿ＣＲＳ，０）｛
Ｒｅｔｕｒｎ（Ｂｕｆｆｅｒ（）  ｛
／／小さいリソース：  Ｉ／Ｏポート
０ｘ４７，０ｘ０１，０ｘＥ０，０ｘ０３，０ｘＥ０，０ｘ０３，０ｘ０１，０ｘ０２，
／／小さいリソース：  ＩＲＱ
０ｘ２２，０ｘ００，０ｘ００，
／／小さいリソース：  終了タグ
０ｘ７９，０ｘ００，
）｝
｝
＃ｅｎｄｉｆ  ／／デバイス・ノードの終了
【図面の簡単な説明】
【図１】  ＡＣＰＩに関連したソフトウェアおよびハードウェア構成要素を示すブロック図である。
【図２】  本発明の一実施形態の、静的デバイスのためのＡＳＬコードを生成するステップを例示する流れ図である。
【図３】  本発明の別の実施形態の、ＭＣＤデバイスのためのＡＳＬコードを生成するステップを例示する流れ図である。
【図４】  生成任意選択制御メソッド処理のステップを例示する流れ図である。
【図１】
0004327363.tif 000002
【図２】
0004327363.tif 000003
【図３】
0004327363.tif 000004
【図４】
0004327363.tif 000005