(57)【特許請求の範囲】
【請求項１】
ユニバーサルグラフィックスアダプタ（ＵＧＡ）システムであって、
ＵＧＡハードウェアとインターフェイスするＵＧＡ仮想マシンと、
ビデオグラフィックスアダプタ（ＶＧＡ）ハードウェアとインターフェイスするレジスタインターフェイスと、
前記ＵＧＡ仮想マシンを介して前記ＵＧＡハードウェアに関係する情報と前記レジスタインターフェイスを介して前記ＶＧＡハードウェアに関係する情報とを受け取るＵＧＡハードウェア抽象レイヤ（ＵＧＡ  ＨＡＬ）と
を具え、
前記ＵＧＡ  ＨＡＬは、前記ＵＧＡ仮想マシンを介して前記ＵＧＡハードウェアと相互作用するように抽象化されたメソッドを実装すると共に、前記レジスタインターフェイスを介して前記ＶＧＡハードウェアと相互作用するように抽象化されたメソッドを実装するものであり、
前記抽象化されたメソッドは、
Ｉ／Ｏサービスリクエストをディスパッチするメソッドと、
出力範囲をネゴシエートするメソッドと、
デバイスを列挙するメソッドと
を含み、
前記Ｉ／Ｏサービスリクエストをディスパッチするメソッドは、
ユニバーサルグラフィックスアダプタ（ＵＧＡ）クライアントから抽象化されたコンテキストを受け取る手段と、
ＵＧＡファームウェアインターフェイスを通じて前記抽象化されたコンテキストをディスパッチする手段と
ＵＧＡハードウェアが抽象化されたＵＧＡサービスで使用可能かどうかを判別する手段と、
前記抽象化されたＵＧＡサービスをエミュレーションで処理し、使用可能なビデオグラフィックスアダプタ（ＶＧＡ）ハードウェアと相互作用する手段と
を具え、
前記出力範囲をネゴシエートするメソッドは、
初期値を設定する手段と、
前記デバイスを読み込むことでデバイスの初期範囲を決定する手段と、
前記デバイスが読み込んだ最初のデバイスであるかどうかを判別し、そうであれば、前記データ読み込みが成功したかどうかを判別し、成功であれば出力範囲を読み込んだ前記初期範囲として設定する手段と
を具え、
前記デバイスを列挙するメソッドは、
初期デバイスと関連するデータを取得し、前記デバイスとの相互作用を容易に行えるようにコンテキストを作成する手段と、
前記コンテキストを使用して前記初期デバイスを起動する手段と、
前記デバイスを起動できるかどうかを判別し、起動できなければ、前記コンテキストを親コンテキストに設定する手段と、
前記初期デバイスを起動できた場合に子デバイスと関連するデータを取得する手段と
を具えたことを特徴とするユニバーサルグラフィックスアダプタシステム。
【請求項２】
前記ＵＧＡ仮想マシンは、ファームウェアで実装されることを特徴とする請求項１記載のシステム。
【請求項３】
前記ＵＧＡ仮想マシンは、前記ＵＧＡハードウェアと関連するチップ上に格納されることを特徴とする請求項１記載のシステム。
【請求項４】
デバイスが実行する一組のサービスを定義するＵＧＡファームウェアインターフェイスをさらに具えたことを特徴とする請求項１記載のシステム。
【請求項５】
前記サービスセットは、パワーマネージメント機能を具えたことを特徴とする請求項４記載のシステム。
【請求項６】
前記サービスセットは、デバイス記述機能を具えたことを特徴とする請求項４記載のシステム。
【請求項７】
前記サービスセットは、データ通信機能を具えたことを特徴とする請求項４記載のシステム。
【請求項８】
前記ＵＧＡ  ＨＡＬと相互作用するＵＧＡカーネルとをさらに具えたことを特徴とする請求項１記載のシステム。
【請求項９】
ユニバーサルグラフィックスアダプタ（ＵＧＡ）を提供するための方法であって、
ＵＧＡ仮想マシンが、ＵＧＡハードウェアとインターフェイスするステップと、
レジスタインターフェイスが、ビデオグラフィックスアダプタ（ＶＧＡ）ハードウェアとインターフェイスするステップと、
ＵＧＡハードウェア抽象レイヤ（ＵＧＡ  ＨＡＬ）が、前記ＵＧＡ仮想マシンを介して前記ＵＧＡハードウェアに関係する情報と前記レジスタインターフェイスを介して前記ＶＧＡハードウェアに関係する情報とを受け取るステップと
を具え、
前記ＵＧＡ  ＨＡＬは、前記ＵＧＡ仮想マシンを介して前記ＵＧＡハードウェアと相互作用するように抽象化されたメソッドを実装すると共に、前記レジスタインターフェイスを介して前記ＶＧＡハードウェアと相互作用するように抽象化されたメソッドを実装するものであり、
前記抽象化されたメソッドは、
Ｉ／Ｏサービスリクエストをディスパッチするメソッドと、
出力範囲をネゴシエートするメソッドと、
デバイスを列挙するメソッドと
を含み、
前記Ｉ／Ｏサービスリクエストをディスパッチするメソッドは、
ユニバーサルグラフィックスアダプタ（ＵＧＡ）クライアントから抽象化されたコンテキストを受け取るステップと、
ＵＧＡファームウェアインターフェイスを通じて前記抽象化されたコンテキストをディスパッチするステップと
ＵＧＡハードウェアが抽象化されたＵＧＡサービスで使用可能かどうかを判別するステップと、
前記抽象化されたＵＧＡサービスをエミュレーションで処理し、使用可能なビデオグラフィックスアダプタ（ＶＧＡ）ハードウェアと相互作用するステップと
を具え、
前記出力範囲をネゴシエートするメソッドは、
初期値を設定するステップと、
前記デバイスを読み込むことでデバイスの初期範囲を決定するステップと、
前記デバイスが読み込んだ最初のデバイスであるかどうかを判別し、そうであれば、前記データ読み込みが成功したかどうかを判別し、成功であれば出力範囲を読み込んだ前記初期範囲として設定するステップと
を具え、
前記デバイスを列挙するメソッドは、
初期デバイスと関連するデータを取得し、前記デバイスとの相互作用を容易に行えるようにコンテキストを作成するステップと、
前記コンテキストを使用して前記初期デバイスを起動するステップと、
前記デバイスを起動できるかどうかを判別し、起動できなければ、前記コンテキストを親コンテキストに設定するステップと、
前記初期デバイスを起動できた場合に子デバイスと関連するデータを取得するステップと
を具えたことを特徴とする方法。
【請求項１０】
前記コンテキストが有効かどうかを判別するステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項１１】
前記Ｉ／Ｏサービスリクエストが有効かどうかを判別するステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項１２】
前記コンテキストが無効な場合にステータスコードを生成するステップをさらに具えたことを特徴とする請求項１０記載の方法。
【請求項１３】
前記Ｉ／Ｏサービスリクエストが無効な場合にステータスコードを生成するステップをさらに具えたことを特徴とする請求項１１記載の方法。
【請求項１４】
前記サービスをＵＧＡファームウェアインターフェイス内の次に低いレベルにディスパッチするステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項１５】
サービスルーチンが呼び出されるまで、前記ＵＧＡファームウェアインターフェイスの次に低いレベルまで繰り返すステップをさらに具えたことを特徴とする請求項１４記載の方法。
【請求項１６】
前記データ読み込みが失敗した場合に致命的エラーを発行するステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項１７】
前記デバイスの読み込みが成功しなかった場合に次の潜在的なデバイスを識別するステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項１８】
次のデバイスから記述データを読み込めるようにコンテキストを設定するステップをさらに具えたことを特徴とする請求項１７記載の方法。
【請求項１９】
前記デバイスが最初の読み込みデバイスでないが、正常に読み込まれていた場合に、すでに決定された範囲と現在の読み込み範囲との交差を実行することを特徴とする請求項９記載の方法。
【請求項２０】
記述データの読み込み元の他のデバイスがあるかどうかに関する判別を行うステップをさらに具えたことを特徴とする請求項９記載の方法。
【請求項２１】
複数のデバイスを列挙するために再帰的に適用することを特徴とする請求項９記載の方法。
【請求項２２】
複数のビデオ子デバイスは、ユニバーサルグラフィックスアダプタ（ＵＧＡ）ファームウェアによってサポートされることを特徴とする請求項９記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ユニバーサルグラフィックスアダプタに関する。
【０００２】
本発明は、一般的には、ビデオグラフィックスディスプレイ（ｖｉｄｅｏ  ｇｒａｐｈｉｃｓ  ｄｉｓｐｌａｙ）に関するものであり、具体的には、ビデオハードウェアを抽象化し、インターフェイスをオペレーティングシステムに公開するファームウェアサービスを介して使いやすくしたハードウェア独立のビデオディスプレイ（ｖｉｄｅｏ  ｄｉｓｐｌａｙ）に関するものである。
【０００３】
【従来の技術】
ビデオグラフィックスアレイ（Ｖｉｄｅｏ  ｇｒａｐｈｉｃｓ  ａｒｒａｙ）（ＶＧＡ）はパーソナルコンピュータ（ＰＣ）用のグラフィックスディスプレイシステム（ｇｒａｐｈｉｃｓ  ｄｉｓｐｌａｙ  ｓｙｓｔｅｍ）である。ＶＧＡはＰＣ用の事実上の標準の１つになっており、解像度はテキストモードで７２０×４００ピクセルを表示し、グラフィックスモードでは複数の解像度のうちから選択する（例えば、１６色では６４０×４８０、２５６色では３２０×２００）。ＶＧＡは、デジタル信号ではなくアナログ信号を採用するハードウェア固有の標準である。１９８７年にＶＧＡがデビューして以来他の標準も出現したが、ＶＧＡは最小公倍数的標準であり続け、実質的にすべてのＰＣがＶＧＡをサポートしている。しかし、ＶＧＡには欠点がある。
【０００４】
例えば、ＶＧＡはハードウェア固有の機能であり、そのため、ＶＧＡをプログラムするには、ハードウェア、ソフトウェア、およびアセンブリ言語や機械語に関する知識が必要であり、こうしたプログラミングが難しくなっている。さらに、ＶＧＡの最初の動作条件のうちいくつかは、ＰＣが発展し続けるにつれサポートがますます難しくなり、強化された機能をサポートするためにアセンブラおよび／または機械語でコーディングされたＢＩＯＳ（基本入出力システム）コードの広範な作り直しが必要である。１９８０年代から続くＶＧＡ標準では、Ｉｎｔ１０サービス、非線形フレームバッファ、制限された表示モード範囲、リアルモードアセンブリ言語を使用する直接レジスタアドレス指定の使用など、今日では時代遅れになったハードウェアおよびソフトウェアが要求される。他の制限としては、リアルモードのｘ８６環境でＢＩＯＳコードを実行することと、ビデオＢＩＯＳイメージが最大６４Ｋに絶対的に制約されるという点が挙げられる。さらに、ＶＧＡはレガシＩ／Ｏ  （入力／出力）と、再配置不可能なメモリおよび非直観的非線形フレームバッファレイアウトを採用するメモリ使用に束縛されている。また、ＶＧＡはモードのサポートも制限されている（例えば、文字は８０×２５×７０Ｈｚ、グラフィックスは６４０×４８０×１６色）。ＶＧＡはさらに、モバイルコンピューティング環境ではますます重要になってきている、パワーマネージメント機能もサポートしていない。さらに、ＶＧＡアダプタは、既存のオペレーティングシステムでのマルチモニタ構成をファームウェアでサポートしていない。
【０００５】
実質的にすべてのディスプレイデバイスが、公開されているハイパフォーマンスデバイス機能に加えてＶＧＡをサポートしている。多くのＰＣは、システムを起動するのにマシン内にＶＧＡデバイスを必要とし、ＢＩＯＳ  Ｐｏｗｅｒ−Ｏｎ  ＳｅｌｆＴｅｓｔ  （ＰＯＳＴ）メッセージの表示にＶＧＡデバイスが必要である。ＶＧＡは、事実上の普遍的な標準ではあるが、時代遅れの標準ともなっており、その機能はＰＣが進歩したのにあまり変化していない。
【０００６】
【発明が解決しようとする課題】
本発明のいくつかの態様の基本的な内容を理解できるように、本発明の要約を簡単に述べる。この要約は、本発明の概要を広範囲にわたって述べたものではない。また、本発明の鍵となる要素や決定的な要素を示したり、本発明の範囲を定めることを目的としていない。後で提示する詳細な説明の前置きとして本発明のいくつかの概念を簡単に示すことのみを目的とする。
【０００７】
ユニバーサルグラフィックスアダプタ（ＵＧＡ）は、ファームウェアを使用する標準的な方法で低レベルグラフィックスハードウェアをカプセル化し、抽象化するハードウェア独立の設計である。ＵＧＡはファームウェア標準であり、ＶＧＡを含む、既存のまたは予定されているハードウェアをラップする目的のものである。ＵＧＡは、プログラムにアクセスするためにリアルモードのアセンブリ言語、直接ハードウェアレジスタ、またはフレームバッファを使用する必要はなく、この点で従来のシステムに勝る。ＵＧＡは、基本的な描画オペレーション、連続表示モード、およびパワーマネージメントの機能をサポートする。ＵＧＡはファームウェアベースの標準であり、これにより発展するハードウェア機能および新しいハードウェア機能の両方をサポートするように容易にシステムを更新することができる。
【０００８】
ＵＧＡを使用すると、ＶＧＡの短所が軽減されるだけでなく、基本グラフィックオペレーションもそれほど難しくならない。例えば、ファームウェアを使用してハードウェアの実装をラップすることにより、ハードウェアを変更することなくさまざまなディスプレイアダプタをＵＧＡ仕様に合わせることが簡単にできる。ＵＧＡファームウェアのインターフェイスの仕様例を付録Ａとして掲載したが、これは本発明の出願明細の一部とみなされる。ＵＧＡを使用すると、ＵＧＡとＶＧＡ  ＢＩＯＳの両方を含む、複数ＢＩＯＳ、例えば、オプションＲＯＭ（読み取り専用メモリ）をサポートするデバイスを簡単に作ることができる。ＶＧＡレジスタセットは変更されないため、ハイブリッドディスプレイアダプタは既存のマシンでそのまま動作するだけでなく、ＵＧＡ対応のオペレーティングシステムでも動作する。ＵＧＡは、一観点からは、プラグ＆プレイ（ＰｎＰ）およびＡＣＰＩ（ＰＣＩバスの背後）の概念を拡張したものであり、ディスプレイアダプタの子デバイスの列挙および操作を標準化することができる。
【０００９】
ＵＧＡの特長として、ハードウェアの詳細をファームウェアによってラップすること、公開されているデバイス機能をファームウェアで実装すること、ファームウェアによってネイティブモードのサポートを公開すること、レガシＩ／Ｏポートまたはメモリへのアクセスを必要としないこと、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ、ローカルバス標準）空間のみでベースアドレスレジスタ（ＢＡＲ）を採用すること、リアルモードの実行環境を必要としないこと、ＢＩＯＳの６４Ｋサイズ制限をなくすこと、新しい機能をＢＩＯＳに付加しやすくすること、クロスプラットフォームのサポート（例えば、ｘ８６、Ｉｔａｎｉｕｍ）、全体的なグラフィックスハードウェアおよびドライバの品質を改善し、高水準言語（例えば、アセンブラ／機械語に対しＣ言語）でＢＩＯＳをコーディングできるようにすることなどが挙げられるが、これらには制限されない。
【００１０】
ＵＧＡを使用すると、さまざまなユーザがいろいろな形で恩恵を被る。例えば、実質的にすべてのユーザにとって起動前および起動後の操作が改善される。ユーザが最初にコンピュータのスイッチを入れると、パワーオンセルフテスト（ＰＯＳＴ）の実行中および／または実行前にＯＥＭ（相手先商標製造会社）がグラフィックスを表示する高解像度グラフィック表示画面が現れる。例えば、これには、オペレーティングシステムと同じパラダイムに続く、システムを修復または構成するためのツールを含めることができる。マルチモニタサポートを利用したい経験豊富なユーザは、ディスプレイアダプタの一方のＶＧＡ  ＢＩＯＳを無効にする方法を理解している必要はない。ユーザがハイパフォーマンスディスプレイドライバが使用されていないモバイルＰＣ上の旧リリースのオペレーティングシステムからアップグレードすると、従来のＶＧＡドライバとは異なり、パワーマネージメントドライバサポートを利用できるようになる。
【００１１】
ＵＧＡには他にも利点がある。例えば、ＢＩＯＳをアセンブラではなく高水準言語（例えば、Ｃ、Ｃ＃）で開発することができる。つまり、高水準言語のプログラミングの技術はアセンブラの技術よりも広く使用されているため、ＢＩＯＳのメンテナンスが比較的簡単に行える。さらに、ＢＩＯＳのサイズは、６４Ｋに制限されなくなり、新しい機能が利用できるようになり、必要になったときにそのサポートを追加することができる。ディスプレイアダプタはプラットフォーム独立であるため、Ｉｎｔ  １０のサポートまたはｘ８６アセンブラに関するハードウェアの制約から解放され、新しい表示ハードウェアの適応と発展が容易になる。新しいディスプレイアダプタは、ＶＧＡレジスタセットをサポートする必要がないため、アダプタの設計を簡単に刷新することができる。表示ハードウェアは、ファームウェアを通じてＵＧＡをサポートすることによりダイスサイズを縮小することができる。さらに、ＵＧＡドライバをオペレーティングシステムの一部として提供できるため、独立ハードウェアベンダがＵＧＡデバイスドライバを供給する必要がなくなる。したがって、アダプタをちょうど良い時期に市場に投入することができる。
【００１２】
オペレーティングシステム側でＵＧＡドライバを用意することができる。ＵＧＡハードウェア抽象レイヤ（Ｈａｒｄｗａｒｅ  Ａｂｓｔｒａｃｔｉｏｎ  Ｌａｙｅｒ）はネイティブのＵＧＡドライバサポートとＶＧＡドライバとの両方のラッパであり、これにより、システムはＶＧＡデバイスとＵＧＡデバイスの間の移行のサポートを容易に行うことができる。本発明の一実施例では、サポートされている両方のタイプが使用できる場合、システムのデフォルトをＵＧＡに設定することができる。
【００１３】
そこで、本発明の目的は、ファームウェアを使用する標準的な方法で低レベルグラフィックスハードウェアをカプセル化して、抽象化する、ハードウェア独立の設計であるユニバーサルグラフィックスアダプタ（ＵＧＡ）を提供することにある。
【００１４】
前記の目的および関連する目的を達成するために、以下の説明および付属の図面に関して、本発明のいくつかの態様を図で説明する。ただし、これらの態様は本発明の原理を採用するさまざまな方法のうちわずかのみを示しており、本発明はこのような態様およびその等価物すべてを含むことを意図している。本発明の他の利点および新規性は、図面とともに考察したときに、本発明の以下の詳細な説明から明白である。
【００１５】
【課題を解決するための手段】
全体を通して同様の参照番号は同様の要素を参照している図面を参照しながら本発明について説明する。以下の説明では、説明のため本発明を完全に理解できるように多数の特定の詳細を定めている。ただし、当業者であれば、こうした具体的内容がなくても本発明を実践できることは明白であろう。他の例では、よく知られている構造およびデバイスはブロック図の形式で示されており、本発明の説明を理解しやすくなっている。
【００１６】
本出願で使用されているように、「コンピュータコンポーネント」という用語は、コンピュータ関連の実態、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアのいずれかを指すものとする。例えば、コンピュータコンポーネントとして、プロセッサ上で実行されているプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、およびコンピュータを挙げることができるが、これらに制限されない。説明のために、サーバ上で実行されているアプリケーションとサーバを両方ともコンピュータコンポーネントとする。１つまたは複数のコンピュータコンポーネントを１つのプロセッサおよび／または実行のスレッド内に常駐させることができ、またコンピュータコンポーネントを１台のコンピュータにローカルとして配置し、かつ／または２台またはそれ以上のコンピュータ間に分散させることができる。
【００１７】
【発明の実施の形態】
ＵＧＡは、ＶＧＡの後継となる次世代グラフィックスアダプタ技術である。ＵＧＡは、グラフィックスハードウェアを抽象化したもので、ファームウェアインターフェイスの異なる側の実体の間のプラットフォーム独立の相互作用を容易に行えるようにするＵＧＡファームウェアインターフェイスを公開する（例えば、オペレーティングシステムおよびグラフィックディスプレイデバイス）。ＵＧＡファームウェアインターフェイスは、ＵＧＡファームウェアから公開される。
【００１８】
本発明の一実施例では、システムファームウェアおよびＵＧＡ  ＨＡＬドライバはこのインターフェイスを使用してＵＧＡハードウェアの基本操作を実行する。このレイヤにより、レガシビデオＢＩＯＳが置き換わる。この実施例では、ＵＧＡファームウェアは、外部の世界（例えば、システムファームウェア、オペレーティングシステムのランタイム）への単一のエントリポイントをエクスポートする。エクスポートされるエントリポイントの一例として、ＵｇａＦｗＤｉｓｐａｔｃｈＳｅｒｖｉｃｅがあるが、これはＵＧＡ  Ｉ／ＯリクエストをＵＧＡファームウェア内の適切なハンドラにディスパッチする役割を持ち、ＵＧＡデバイス型およびＩ／Ｏリクエスト型に基づく。したがって、ＵＧＡ仕様の一実施例では、５つのＵＧＡデバイス型（ＵｇａＤｔＰａｒｅｎｔＢｕｓ、ＵｇａＤｔＧｒａｐｈｉｃｓＣｏｎｔｒｏｌｌｅｒ、ＵｇａＤｔＯｕｔｐｕｔＣｏｎｔｒｏｌｌｅｒ、ＵｇａＤｔＯｕｔｐｕｔＰｏｒｔ、ＵｇａＤｔＯｔｈｅｒ）を定義し、エントリポイントを介してオペレーティングシステムとの相互作用を簡単に行えるようにしている。
【００１９】
ＵＧＡは、高解像度のＨｉｇｈ  Ｃｏｌｏｒマルチモニタを提供し、ＧＤＩ（グラフィックスデバイスインターフェイス）アクセラレーション機能、およびＬＦＢ（リニアフレームバッファ）レイアウト独立を特長とする。ＵＧＡでは、ＩＨＶ（独立ハードウェアベンダ）がＵＧＡハードウェア上に実装することができるインターフェイスを定義し、ＵＧＡファームウェアを介してオペレーティングシステムとの相互作用を簡単に行えるようにしている。したがって、オペレーティング  システム、ファームウェア、および／またはハードウェアが発展しても、このような実体間のインターフェイスが保持されている限り、このような変更を他の実体と無関係なものとすることができ、関係する実体に対するこのような変更の影響を最小限に抑えられるため、このような影響が大きくなる可能性のある従来のシステムよりも優れている。例えば、グラフィックスディスプレイハードウエアコンポーネントを更新し、高解像度にすることもできる。ハードウェアコンポーネントがＵＧＡファームウェアとのインターフェイスを維持している限り、ＵＧＡファームウェアもオペレーティングシステムも、グラフィックスディスプレイハードウェアが変更されたからといって変更する必要はない。このため、ハードウェアコンポーネントのアップグレードに操作するオペレーティングシステムにパッチを当てる必要がある従来のシステムよりも優れている。
【００２０】
ＵＧＡを使用すると、ディスプレイコントローラファームウェアのＩ／Ｏサービスリクエストのディスパッチを簡単に行え、また出力コントローラおよびデバイスに対する表示機能範囲の報告、ネゴシエート、および設定を簡単に行え、表示コントローラデバイスおよびその子デバイスの列挙を簡単に行え、非常時コントローラデバイスをおよびその子デバイスのパワーマネージメントを容易に行うことができる。このようなサービスを使用すると、プラットフォーム独立のグラフィックス表示環境を構築することができ、これは、従来のシステムに勝っている。
【００２１】
ＵＧＡでは高水準言語（例えば、Ｃ、Ｃ＃）で書くことができるファームウェアのファームウェアインターフェイス仕様を定義し、これをシステムＢＩＯＳおよび／またはオペレーティングシステムの仮想マシンｐコードおよび／またはバイトコードにより解釈できるようにコンパイルできる。ＵＧＡファームウェアは、統合環境向けにディスプレイデバイスおよび／またはシステム内に配置することができる。
【００２２】
図１を参照すると、本発明を採用することにより、オペレーティングシステム１００はＢＩＯＳに格納されているＵＧＡファームウェア１２０を介して抽象化されたＵＧＡハードウェア１１０と相互作用することができる。このようなファームウェアは、オンボード実行環境で実行される高水準言語（例えば、Ｃ、Ｃ＃）でコンパイルされたバイトコードとして解釈することができる。ファームウェア１２０は、オペレーティング  システム１００とハードウェア１１０との間のハードウェア固有でない相互作用を簡単に実行できるようにするインターフェイスを実装できる。このようなインターフェイスとしては、ｄｅｖｉｃｅ＿ｏｎ、ｄｅｖｉｃｅ＿ｏｆｆ、ｄｅｖｉｃｅ＿ａｃｃｅｐｔ＿ｄａｔａ、ｄｅｖｉｃｅ＿ｐｒｏｖｉｄｅ＿ｄａｔａ、およびｄｅｖｉｃｅ＿ｒｅｐｏｒｔ＿ｃｈｉｌｄｒｅｎなどのような抽象化がある。
【００２３】
インターフェイスの一例を付録Ａで説明した。このようなインターフェイスを使用すると、オペレーティングシステムとハードウェアの相互作用を柔軟に行わせることができ、ハードウェアがタスクを実行する仕組みの詳細はハードウェアに制限される。これは、オペレーティングシステム１３０が標準ＶＧＡレジスタインターフェイスを実装するＶＧＡ固有でハードウェア固有のＢＩＯＳ  １５０を通じてＶＧＡハードウェア１４０と相互作用する従来の状況をとは対照的である。ＢＩＯＳ  １５０は、従来、低水準言語（例えば、アセンブラ、機械語）でコーディングされる。
【００２４】
図２を参照すると、ＵＧＡハードウェア２２０とのＵＧＡインターフェイスを介したアクセスを容易にするＵＧＡ仮想マシン２１０を備えるシステム２００が図に示されている。ＵＧＡ仮想マシン２１０は、ファームウェアで実装し、ＵＧＡハードウェア２２０と関連付けられたチップ上のＢＩＯＳに格納することができる。システム２００は、ＶＧＡハードウェア２３０とのレガシ互換性が維持されているコンピュータコンポーネントの一構成を示す。従来、ＶＧＡハードウェア２３０へのアクセスには、Ｉｎｔ  １０、ＶＧＡ  Ｉ／Ｏレジスタインターフェイス２４０を使用していた。
【００２５】
システム２００では、起動時アプリケーション２４２および／または実行時アプリケーション  ２５０は、システム２００がハードウェア抽象レイヤ２６０（ＨＡＬ）およびＵＧＡカーネルサービス２７０の相互作用を通じてＵＧＡハードウェア２２０のみを備えるとみなすことができる。ＨＡＬ  ２６０は、ビデオディスプレイハードウェアの詳細をインターフェイスに抽象化したものである。起動時アプリケーション２４２は、起動時表示ＡＰＩ（アプリケーションプログラミングインターフェイス）２８０を呼び出して、ＰＯＳＴ実行時にメッセージを表示するような動作を実行しかつ／またはパワーオンバナー（ｐｏｗｅｒ  ｏｎｂａｎｎｅｒ）（例えば、商標画面）を表示する。実行時アプリケーション２５０は、実行時表示ＡＰＩ  ２９０を呼び出して、表示機能を実行する（例えば、テキストを表示したり、グラフィックスを表示したりする）。起動時アプリケーション２４２および／または実行時アプリケーション２５０はＵＧＡハードウェア２２０と相互作用しようとする場合があるが、システム２００はＶＧＡハードウェア２３０しか備えることができない。そこで、ＨＡＬ  ２６０は従来のレジスタインターフェイス２４０を通じてＶＧＡハードウェア２３０を操作する抽象化された方法を実装できる。しかし、ＵＧＡハードウェア２２０が存在する場合、ＨＡＬ  ２６０はＵＧＡハードウェア２２０と相互作用するようにＵＧＡ仮想マシン２１０を通じて動作する抽象化された方法を実装することができる。
【００２６】
図３を参照すると、ＵＧＡと関連するコンピュータコンポーネントの階層３００が図に示されている。階層３００は、デバイスを通じて接続されているデバイスとの通信を簡単に行えるようにする、付録Ａに添付されているＵＧＡファームウェア仕様例で定義されている５つのデバイス例を含む。階層３００の最上位に、親デバイス３１０（例えば、ＵｇａＤｔＰａｒｅｎｔＢｕｓ）がある。オペレーティングシステムは、親デバイス３１０と相互作用することができるが、これは、ＵＧＡファームウェアインターフェイスを介した物理および／または論理デバイスである。デバイスと通信するために２つの情報、つまりデバイス識別子（例えば、送信相手のデバイスの情報）とリクエスト型（例えば、デバイスに何をさせたいかの情報）を使用する。
【００２７】
本発明の一実施例では、ユーザがデバイスにさせる動作をサービスと呼ぶ。ＵＧＡファームウェアインターフェイスにより、デバイスに実行させるサービスセットを定義することができる。このようなサービスとしては、パワーマネージメント（例えば、オン、オフ、低電力状態への移行、高電力状態への移行）、デバイス記述（例えば、ＥＤＩＤ（拡張ディスプレイ識別データ標準）データを供給する）、およびデータ通信（例えば、データの受け入れ、データの供給）があるがこれらには制限されない。
【００２８】
階層３００はさらに、グラフィックコントローラ（例えば、ＵｇａＤｔＧｒａｐｈｉｃｓＣｏｎｔｒｏｌｌｅｒ）を備える。このようなコントローラは、オペレーティングシステム用の機能（例えば、サービス）を実行し、さらに他の子コンピュータコンポーネント（例えば、デバイス）と相互作用することもできる。例えば、１つまたは複数の他のデバイス３３０（例えば、ＵｇａＤｔＯｔｈｅｒ）は、コントローラデバイス３２０に論理的にかつ／または物理的に接続することができる。オペレーティングシステムは親デバイス３１０を通じてグラフィックスコントローラ３２０と通信し、したがって他のデバイス３３０と通信することができる。同様に、オペレーティングシステムは親デバイス３１０を通じてグラフィックスコントローラ３２０と通信し、したがって出力コントローラ３４０または３５０（例えば、ＵｇａＤｔＯｕｔｐｕｔＣｏｎｔｒｏｌｌｅｒ）と通信することができる。他のデバイス３３０  １つと、出力コントローラ３４０および３５０  ２つが図に示されているが、本発明でこのようなデバイスをさまざまに組み合わせて使用することができることは明白であろう。出力コントローラ３４０は、実際の出力デバイス（例えば、モニタと関連付けられている出力ポート３４２）と接続することができ、また出力コントローラ３５０は、他の実際に出力デバイス（例えば、テレビと関連付けられている出力ポート３４４）と接続することができる。
【００２９】
階層３００は、付録Ａに添付されているＵＧＡファームウェア仕様で定義されている一例であるが、これにより、オペレーティングシステムはオペレーティングシステムと実際のデバイスとの間に置かれている実際の出力デバイスおよび物理および／または論理デバイスと簡単に通信することができる。本発明の一実施例では、階層３００で識別されている１つまたは複数のコンピュータコンポーネントをビデオグラフィックスアダプタカード上に配置することができる。図を見ると、ビデオグラフィックスカードには２つの出力ポートがあり、１つはテレビ出力用であり、もう１つはコンピュータのモニタ出力用である。このような出力は、出力デバイスの機能を識別し、デバイスのパワーマネージメントを実行するような動作を簡単に実行できるようにする出力コントローラに動作可能なように接続できる。同様に、出力コントローラは、グラフィックスコントローラに動作可能なように接続することができ、これはさらに、バスに動作可能なように接続され、ビデオグラフィックスアダプタカードをホストシステムに接続する作業を簡単に行える。従来、ＶＧＡレジスタインターフェイスを介してビデオグラフィックスカード上の複数の物理および／または論理実体への個別アクセスは、可能だとしても、実用的とはいえなかった。そのため、ＵＧＡファームウェアインターフェイスは、１つの物理デバイス上に配置された複数の物理および／または論理デバイスにアクセスする操作に関して従来のシステムより勝っている。
【００３０】
図に示されている上述のシステム例を鑑みると、本発明により実装される方法論は図４から図６を見るとよく理解されるであろう。説明を簡単にするために、これらの方法を図に示し、一連のブロックとして記述するが、本発明はブロックの順序によって制限されるわけではなく、本発明により、いくつかのブロックはその図に示されているここで説明しているのと異なる順序でかつ／または他のブロックと同時に配置することも可能である。さらに、本発明により方法を実装するために図に示されているすべてのブロックが必要なわけではない。さらに、追加および／または代替方法ではここでは示されていない追加ブロックを採用することもできる。本発明の一実施例では、このような方法は、コンピュータ実行可能命令および／またはオペレーションとして実装することができ、この命令および／またはオペレーションを、ＡＳＩＣ、ＣＤ、ＤＶＤ、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ、ディスク、搬送波（ｃａｒｒｉｅｒ  ｗａｖｅ）、及びメモリスティックなどのコンピュータ読み取り可能媒体に格納することができる。
【００３１】
図４を参照すると、Ｉ／Ｏサービスリクエストディスパッチの方法４００は、フローチャートに示されている。４１０で、ＵＧＡクライアントは、デバイスＩＤ、入力バッファの位置およびサイズ、出力バッファの位置およびサイズ、およびリクエスト型などの情報を設定する作業を含むコンテキストを設定する。４２０で、メソッド（例えば、ＵｇａＨａｌＤｉｓｐａｔｃｈＳｅｒｖｉｃｅ  （Ｃｏｎｔｅｘｔ，  ＩｏＲｅｑｕｅｓｔ））を呼び出して、ＵＧＡファームウェアインターフェイスのレイヤを通じて抽象化されたサービスのディスパッチを開始する。４３０で、４１０で設定したコンテキストが有効かどうかに関する判別を行い、４４０で、要求されたＩ／Ｏアクションが有効かどうかに関する判定を行う。４３０または４４０のいずれかでの判定がＮＯの場合、ステータスコードを生成する処理は４５０へ進む。しかし、判定４３０および４４０がＹＥＳの場合、処理は４６０に進む。
【００３２】
４６０で、要求された抽象化されたＵＧＡサービスに使用可能なＵＧＡハードウェアがあるかどうかに関する判定を行う。４６０での判定がＮＯの場合、ＵＧＡハードウェアはなく、抽象化されたＵＧＡコールをエミュレーションで処理し、使用可能なＶＧＡハードウェアと相互作用することができる。しかし、４６０での判定がＹＥＳの場合、サービスは４７０でＵＧＡファームウェアインターフェイス内の次に低いレベルにディスパッチされる。同様に、４８０で、サービスは、実際のサービスルーチンが４９０から４９９で呼び出されるまで次に低いレベルにディスパッチされる。サービスルーチン４９０および４９２から４９４は、第１のＵＧＡデバイスに対する一組みのサービスを表す。サービスルーチン４９６および４９８から４９９は、第２のＵＧＡデバイスに対する一組みのサービスを表す。ＵＧＡデバイスは、一組の抽象化されたＵＧＡサービスを実装する。したがって、ＵＧＡデバイスは、ＵＧＡクライアントとのインターフェイスを実装する抽象化されたハードウェアのように見せることができ、このため、オペレーティングシステムとハードウェアとの通信および制御が簡素化される。この抽象化は、オペレーティングシステムがＶＧＡハードウェアとのインターフェイス用のレジスタインターフェイスを認識し、実装する必要がある従来のＶＧＡレジスタインターフェイスと直接対比される。
【００３３】
したがって、ＵＧＡファームウェアメソッドを呼び出すために、ＵＧＡクライアントは、ＵＧＡデバイス固有のコンテキストおよびＵＧＡ  Ｉ／Ｏリクエストブロックを供給するＵＧＡファームウェアからエクスポートされるエントリポイント（例えば、ＵｇａＦｗＤｉｓｐａｔｃｈＳｅｒｖｉｃｅ）を呼び出すことができる。Ｉ／Ｏリクエストの対象となるＵＧＡデバイスを識別するためにＵＧＡファームウェアによってＵＧＡデバイスコンテキストが使用される。ＵＧＡクライアントは、ＵＧＡデバイスコンテキスト、ＵＧＡ  Ｉ／Ｏリクエストブロック、ＵＧＡ  Ｉ／Ｏリクエストブロックと関連する入出力バッファ用のメモリ記憶域を備える。ＵＧＡクライアントでは、ＵＧＡ  Ｉ／Ｏリクエストブロックのリクエストコードおよび入力および／または出力バッファの場所とサイズを指定する。Ｉ／Ｏリクエストが正常に完了すると、ＵＧＡファームウェアが、返されたバイトの数をＩ／Ｏリクエストブロックに入れ、ＵＧＡ  Ｉ／Ｏリクエストコードおよびデバイスコンテキストに基づき、要求されたデータを出力バッファに書き込むことができる。ＵＧＡファームウェアは、各ＵＧＡ  Ｉ／ＯリクエストのＩ／Ｏリクエストのステータス（例えば、成功／失敗）を示すステータスコード返すことができる。
【００３４】
ＵＧＡファームウェア実行時環境（例えば、システムファームウェア、オペレーティングシステム）は、ＵＧＡおよび非ＵＧＡ（例えば、ＶＧＡ）ディスプレイデバイスとの共通インターフェイスの実現を容易にするため、ＵＧＡハードウェア抽象レイヤ（ＵＧＡ  ＨＡＬ）を実装することができる。したがって、ファームウェアクライアントでは、ＵＧＡでファームウェアが使用可能であり、非ＵＧＡデバイスについては、ＵＧＡ  ＨＡＬにより、ＵＧＡクライアントおよび非ＵＧＡ（例えば、ＶＧＡ、ファイヤワイヤ、ネットワーク）出力デバイスからＵＧＡ  Ｉ／Ｏリクエストを変換しやすくなると想定することができる。さらに、ローカルではないディスプレイコントローラデバイスに対しＶＧＡ仕様準拠のファームウェアを実装することができる。リモートディスプレイデバイスは、ＵＧＡ  ＨＡＬを含む、ＵＧＡクライアントからはローカルディスプレイデバイスとして見える。
【００３５】
図５を参照すると、出力範囲をネゴシエートする方法５００は、フローチャートに示されている。出力範囲は、ディスプレイデバイスの実行内容と関連している。例えば、第１のディスプレイデバイスは６４０×４８０＠６０Ｈｚで表示することができるが、第２のディスプレイデバイスは１２８０×１０２４＠８０Ｈｚで表示することができる。両方のディスプレイデバイスが同じグラフィックスコントローラと関連している場合、本発明を使用してデバイスのパフォーマンス能力の交差点を確認することができる。
【００３６】
５１０で、初期値を設定する。このような初期値については、使用可能なデバイスセットへのインデックスを設定する作業および出力コントローラのコンテキストを設定する作業が含まれるが、これらに制限されない。５２０で、デバイスの能力に関する情報が読み込まれる。例えば、ＵｇａＦｗＧｅｔＥｄｉｄＳｅｇｍｅｎｔ（ｃｏｎｔｅｘｔ）を呼び出して、デバイスの能力に関するＥＤＩＤデータ（例えば、１２８バイト、２５６バイト）記述を取り出すことができる。このようなＥＤＩＤデータは、離散値（例えば、ある１つの機能を持つデバイス）および／またはある範囲の値（例えば、マルチ機能デバイスの場合）を含むことができる。５３０で、これが読み込まれた最初のデバイスかどうかに関する判定が行われる。そうであれば、データ読み込みが成功したかどうかを５３４で判定する。成功しなかった場合、致命的エラーが発生しており、処理は５４０に進む。しかし、読み込みが成功した場合、５７０で、現在判別された出力範囲が５２０で読み込まれた初期範囲として設定される。これが最初の読み込みでなかった場合、読み込みが成功したかどうかを５３２で判定する。読み込みが成功しなかった場合、処理は５８０に続き、そこで、次の潜在的なデバイスが識別され、次のそのデバイスから記述データを読み込めるようにするテキストを設定する。読み込みが成功した場合、処理は５５０に続き、そこで、すでに決定されている範囲と現在読み込まれている範囲との交差が実行される。５６０で、交差の計算で新しい範囲が決定されたかどうかに関する判定が行われる。決定された場合、５７０で、その決定された交差範囲が更新され、処理は５８０に進む。
【００３７】
５８５で、記述データの読み込み元の他のデバイスがあるかどうかに関する判定が行われる。判定がＹＥＳの場合、処理は５２０に進み、そのような記述データが読み込まれる。判定がＮＯであれば、処理は終了し、決定された出力範囲内にあるビデオモードを安全に採用できる。
【００３８】
そこで、システムファームウェアおよび／またはオペレーティングシステムは、出力コントローラについて返された表示能力データおよびコントローラに接続されている出力ポートを交差する。これらの交差により、接続されたデバイスによってサポートされているビデオモード範囲が定義される。したがって、交差で識別されたモードを出力コントローラ上で設定し、出力コントローラに接続されている出力ポートに接続されている出力デバイス上に表示することができる。
【００３９】
少なくとも一部は、出力ポートおよび／またはコントローラについて返されたＥＤＩＤデータに基づき、サポートされ、交差しているビデオモード範囲は、使用可能なモードの離散または連続セットを含むことができる。したがって、システムファームウェアおよび／またはオペレーティングシステムは交差している範囲からモードを要求できる。その後、システムファームウェアおよび／またはオペレーティングシステムは、デバイスコンテキスト、Ｉ／Ｏリクエスト型および要求されたモードデータ（例えば、水平解像度、垂直解像度、色の深み、リフレッシュ速度）を指定する出力コントローラに基づき、ＵＧＡファームウェアビデオ設定メソッド（例えば、ＵｇａＦｗＳｅｔＶｉｄｅｏＭｏｄｅ）を呼び出すことができ、また、そのような情報に基づき、ＵＧＡファームウェアはＩ／ＯリクエストおよびＵＧＡ子デバイスのＩ／Ｏハンドラメソッドをディスパッチすることができる。例えば、ＵＧＡファームウェアは、連続および／または離散モード範囲について離散モード範囲および／またはタイミング式（例えば、ＶＥＳＡ  ＧＴＦ）を分析するテーブル駆動アルゴリズムを使用して、ＵＧＡハードウェアをプログラムし、要求されたモードを設定するようにできる。
【００４０】
図６は、デバイス列挙メソッド６００のフローチャートを示す。６１０で、再帰的列挙メソッドは、初期デバイスと関連するデータを取得することから始める（例えば、ＵｇａＤｔＰａｒｅｎｔＢｕｓ）。初期データが与えられると、６２０で、デバイスとの相互作用を容易に行えるようにするコンテキストを作成できる。そこで、６３０で、例えば、ＵｇａＦｗＳｔａｒｔＤｅｖｉｃｅコールを介して初期デバイスを起動するコンテキストを使用する。６４０で、デバイスを起動できるかどうかどうかに関する判定が行われる。起動できなければ、６７０でコンテキストは親コンテキストに設定される。デバイスを起動できる場合、処理は６５０に進み、そこで、現在のデバイスと関連する子デバイスと関連するデータを取得する試みが行われる。例えば、ＵｇａＦｗＧｅｔＣｈｉｌｄＤｅｖｉｃｅを呼び出して子データを取り出すことができる。６６０で、子データを取得したかどうかに関する判定が行われる。６６０での判定がＮＯであれば、処理は６７０に進み、そこで、コンテキストは親デバイスのコンテキストに設定される。しかし、６６０での判定がＹＥＳであった場合、処理は６２０に戻り、そこで、子デバイスについてコンテキストが作成され、深さ優先でトラバースする作業を続けてこの子デバイスの子の検索を実行する。
【００４１】
６８０で、有効な親コンテキストがあったどうかに関する判定が行われる。なかった場合、深さ優先のトラバースが完了している。そうでない場合、処理は６９０に進み、そこで再起列挙の次の繰り返しが開始する。
【００４２】
このような再帰的列挙メソッドを使用すると、ＵＧＡファームウェアでさまざまなデバイスをサポートすることができる。ＵＧＡファームウェア仕様により、列挙されたＵＧＡデバイスについてＵＧＡファームウェア内に実装されるＩ／Ｏサービスセットを定義できる。サービスの型はＵＧＡ  Ｉ／Ｏリクエストコードと関連しており、このようなＩ／Ｏリクエストコードは、ＵＧＡファームウェア仕様に追加できる。ＵＧＡファームウェアＩ／Ｏモデルは、新しいＩ／Ｏリクエストコードおよび／または新しいデバイス型をＵＧＡファームウェア仕様に追加できるようにしながら、ＵＧＡクライアント、ＵＧＡ実行時環境、およびＵＧＡファームウェアの間の互換性を保持するように設計されている。
【００４３】
再帰的列挙メソッドを採用することで、ＵＧＡファームウェアは親バス、グラフィックスコントローラ、出力コントローラ、出力ポート、およびその他のデバイス型をはじめとする１つまたは複数のビデオ子デバイスをサポートするが、これらには制限されない。列挙されたＵＧＡデバイスについては、ＵＧＡファームウェアが、システムＢＩＯＳおよびＩＨＶビデオドライバ、汎用子デバイスドライバをサポートする標準化されたＰｎＰ識別子、およびデバイス記述文字列によって解釈できる追加デバイス記述子を用意することができる。ＵＧＡデバイスは、一意的なコンテキストと関連付けるか、または共有コンテキストを単一ＵＧＡアダプタと関連するＵＧＡデバイスによって共有することができる。
【００４４】
ＵＧＡデバイスを列挙するには、システムファームウェアおよび／またはオペレーティングシステムが、例えば、深さ優先トラバースアルゴリズムを使用してＵＧＡデバイスツリーをトラバースする。ＵＧＡファームウェアメソッド（例えば、ＵｇａＦｗＳｔａｒｔＤｅｖｉｃｅ，  ＶｇａＦｗＧｅｔＣｈｉｌｄＤｅｖｉｃｅ）をそれらのデバイスについて呼び出すことができる。本発明の一実施例では、デバイスコンテキスト作成メソッドおよび親デバイス用の起動メソッドが、子デバイスが列挙され、かつ／または起動される前に実行される。
【００４５】
システムＢＩＯＳおよび／またはオペレーティングシステムは、デバイスコンテキストおよびＩ／Ｏリクエスト型をＵＧＡファームウェアに渡し、ファームウェアはその情報に基づいて、Ｉ／ＯリクエストおよびＵＧＡ子デバイスのＩ／Ｏハンドラメソッドをディスパッチすることができる。ＵＧＡファームウェアは、再帰的列挙メソッドを採用することにより、１つまたは複数の出力コントローラおよび／または出力ポートをサポートできる。このような列挙されたポートは物理出力デバイス（例えば、ＣＲＴＣモニタ、フラットパネル、テレビ）に接続することができる。列挙された出力ポートについては、システムファームウェアおよび／またはオペレーティングシステムが、デバイスコンテキストおよびＩ／Ｏリクエスト型を指定するデータ取得メソッド（例えば、ＵｇａＦｗＧｅｔＥｄｉｄＳｅｇｍｅｎｔ）を呼び出す。このような情報に基づき、ＵＧＡファームウェアは、Ｉ／ＯリクエストおよびＵＧＡ子デバイスのＩ／Ｏハンドラメソッドをディスパッチする。その後、ＵＧＡファームウェアは、出力ポートに接続された出力デバイスのディスプレイ識別および設定データを返す。例えば、このような情報は、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）標準で定義されているＥＤＩＤ形式で返すことができる。ＵＧＡファームウェアは、例えば、ＤＤＣ（表示データチャネル標準）および／または実装固有通信チャネルにより、出力デバイスからＥＤＩＤ情報を読み込む。ＥＤＩＤデータを出力デバイスから取得できない場合、ＵＧＡファームウェアはＥＤＩＤを作成する。
【００４６】
ＵＧＡファームウェアが実装していないか、または出力ポートデバイスに対しデータ取得メソッド（例えば、ＵｇａＦｗＧｅｔＥｄｉｄＳｅｇｍｅｎｔ）を使用しているときに失敗した場合、ＵＧＡファームウェアは一組のデバイスチャネルＩ／Ｏルーチン（例えば、ＵｇａＦｗＤｅｖｉｃｅＣｈａｎｎｅｌ０ｐｅｎ、ＵｇａＦｗＤｅｖｉｃｅＣｈａｎｎｅｌＲｅａｄ、ＵｇａＦｗＤｅｖｉｃｅＣｈａｎｎｅｌＷｒｉｔｅ、ＵｇａＦｗＤｅｖｉｃｅＣｈａｎｎｅｌＣｌｏｓｅ）を実装し、これにより、システムファームウェアおよび／またはオペレーティングシステムがＤＤＣまたは実装固有通信チャネルを介して出力デバイスと直接通信することができる。
【００４７】
列挙された出力コントローラについては、出力ポートの処理と同様に、システムファームウェアおよび／またはオペレーティングシステムは、デバイスコンテキストおよびＩ／Ｏリクエスト型を指定するデータ取得メソッド（例えば、ＵｇａＦｗＧｅｔＥｄｉｄＳｅｇｍｅｎｔ）を呼び出す。このような情報に基づき、ＵＧＡファームウェアは、Ｉ／ＯリクエストおよびＵＧＡ子デバイスのＩ／Ｏハンドラメソッドをディスパッチする。その後、ＵＧＡファームウェアは、出力コントローラのディスプレイ識別および設定データを返す。例えば、このような情報は、ＶＥＳＡ  ＥＤＩＤ形式で返すことができる。出力コントローラデバイスのＥＤＩＤデータは、ＵＧＡディスプレイアダプタのハードウェアの能力に応じてＵＧＡファームウェアによって提供される。本発明の一実施例では、出力コントローラデバイスのＵＧＡファームウェアでデータ取得メソッドを実装する必要がある。
【００４８】
本発明で使用可能になるパワーマネージメントに関して、電源オンについてはトップダウンツリーのトラバースを採用し、電源オフについてはボトムアップツリーのトラバースを採用することができる。デバイスについては、ＵＧＡファームウェアメソッド（例えば、ＵｇａＦｗＳｅｔＰｏｗｅｒＳｔａｔｅ）を呼び出すことで、電力状態をプローブし、電力変化を引き起こすことができる。このようなメソッドは拒否されることがあり、その場合、すでに呼び出されている電力状態設定メソッドはキャンセルすることができる。システムファームウェアおよび／またはオペレーティングシステムは、デバイスコンテキスト、Ｉ／Ｏリクエスト型、パワーリクエスト型（ｐｏｗｅｒ  ｒｅｑｕｅｓｔ  ｔｙｐｅｓ）、要求されたデバイス状態、要求された電力状態をＵＧＡファームウェアに渡すことができる。そこで、ＵＧＡデバイスは、複数の電力状態をサポートすることができ、またＵＧＡファームウェアはこのような電力状態管理に関係するＩ／Ｏリクエストおよび子デバイスのＩ／Ｏハンドラメソッドをディスパッチすることができる。
【００４９】
本発明の一実施例では、ＵＧＡをＥＦＩ（拡張可能ファームウェアインターフェイス）ドライバとして実装する。したがって、ＥＦＩ−ＵＧＡバインドプロトコルを、付録Ｂとして掲載したが、これは本発明の出願明細の一部とみなされる。
【００５０】
図７は、ディスプレイデバイス７１０およびその子デバイス７１２から７１８と相互作用するオペレーティングシステム７００を示している。従来、ＶＧＡシステムは、このような子デバイス７１２から７１８とは相互作用できなかった。ＵＧＡにより、ＵＧＡファームウェアインターフェイスを介してこのような子デバイス７１２から７１８を列挙することができ、また子デバイス７１２から７１８がＵＧＡファームウェアインターフェイスを公開する場合、オペレーティングシステム７００はそれらと相互作用できる。そこで、ＵＧＡファームウェアの一実施例では、さまざまな種類の多数の子デバイスをサポートすることができ、またこのようなデバイスを列挙し、このような子デバイスのパワーマネージメントを実行し、このような子デバイスの状態の質問および制御を行い、このような子デバイスの表示モードを設定し、基本的な描画オペレーションを容易に行えるようにするためのメソッドを備える。
【００５１】
本発明のさまざまな態様に対し追加コンテキストを提供するために、図８および以下の説明では、本発明のさまざまな態様を実装する適当なコンピューティング環境８１０の簡潔で一般的な説明を行う。本発明は、１つまたは複数のコンピュータで実行可能なコンピュータ実行可能コンポーネント、命令および／またはオペレーションの一般的コンテキストにおいて上で説明したとおりであるが、当業者であれば、本発明は他のプログラムモジュールと組合せ、かつ／またはハードウェアとソフトウェアとの組合せとして、実装できることも理解するであろう。
【００５２】
一般に、プログラムモジュールには、特定のタスクを実行する、あるいは特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造などが含まれる。さらに、当業者には、本発明の方法が、シングルプロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、パーソナルコンピュータ、携帯型コンピューティングデバイス、マイクロプロセッサベースまたはプログラム可能な家電製品などのコンピュータシステム構成でも実施できることは明白であろう。本発明の図に示されている態様はさらに、通信ネットワークを介してリンクされているリモート処理デバイスにより複数のタスクが実行される分散コンピューティング環境で実施することも可能である。分散コンピューティング環境では、プログラムモジュールをローカルとリモートの両方のメモリ記憶デバイスに配置できる。
【００５３】
図８を参照すると、本発明のさまざまな態様を実装する環境例８１０は、コンピュータ８１２を備え、コンピュータ８１２は処理ユニット８１４、システムメモリ８１６、およびシステムバス８１８を備える。システムバス８１８は、システムメモリ８１６などのシステムコンポーネントを処理ユニット８１４に結合する。処理ユニット８１４は、さまざまなプロセッサがあるがそのうちどれでもよい。デュアルマイクロプロセッサおよびその他のマルチプロセッサアーキテクチャも、処理ユニット８１４として採用することができる。
【００５４】
システムバス８１８には、さまざまなバスアーキテクチャを使用するメモリバスまたはメモリコントローラ、周辺機器バス、およびローカルバスを含む数種類のバス構造がある。システムメモリ８２２は、読み取り専用メモリ（ＲＯＭ）８２０およびランダムアクセスメモリ（ＲＡＭ）８２２を備える。起動時などにコンピュータ８１２内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）は通常、ＲＯＭ  ８２０に格納される。
【００５５】
ＢＩＯＳは、例えば、ＵＧＡファームウェアを含むことができる。
【００５６】
コンピュータ８１２はさらに、ハードディスクドライブ８２４、磁気ディスクドライブ８２６（例えば、取り外し可能ディスク８２８への読み書きを行う）、および光ディスクドライブ８３０（例えば、ＣＤ−ＲＯＭディスク  ８３２の読み込みを行ったり、その他の光媒体への読み書きを行う）を備える。ハードディスクドライブ８２４、磁気ディスクドライブ８２６、および光ディスクドライブ８３０は、ハードディスクドライブインターフェイス８３４、磁気ディスクドライブインターフェイス８３６、および光ドライブインターフェイス８３８によりそれぞれ、システムバス８１８に接続できる。ドライブおよびその関連コンピュータ読み取り可能媒体は、コンピュータ８１２用のデータ、データ構造、コンピュータコンポーネント、コンピュータ読み取り可能命令などを格納する不揮発性ストレージを備える。コンピュータ読み取り可能を媒体の説明ではハードディスク、取り外し可能磁気ディスク、およびＣＤを取り上げているが、ｚｉｐドライブ、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、カートリッジ、ＡＳＩＣなど、コンピュータによって読み取り可能なその他の種類の媒体もオペレーティング環境例で使用することができ、さらに、そのような媒体は本発明の方法を実行するコンピュータ実行可能命令を格納することができることは理解されるであろう。
【００５７】
オペレーティングシステム８４０、１つまたは複数のアプリケーションプログラム８４２、その他のプログラムモジュール８４４、およびプログラムデータ８４６を含む、多数のプログラムモジュールをドライブおよびＲＡＭ  ８２２に格納することができる。本発明は、さまざまなオペレーティングシステムまたはオペレーティングシステムの組合せで実装できることは理解されるだろう。
【００５８】
ユーザは、キーボード８４８およびマウス８５０などのポインティングデバイスを介してコンピュータ８１２にコマンドおよび情報を入力できる。他の入力デバイス（図示せず）としては、ＩＲリモートコントロール、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらの入力デバイスやその他の入力デバイスは、システムバス８１８に結合されているシリアルポートインターフェイス８５２を介して処理ユニット８１４に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）、ＩＲ（赤外線）インターフェイスなどの他のインターフェイスにより接続することもできる。モニタ８５４やその他のタイプの表示デバイスも、ビデオアダプタ８５６などのインターフェイスを介してシステムバス８１８に接続される。モニタに加えて、コンピュータは通常、スピーカやプリンタなどの他の周辺出力デバイス（図に示されていない）を備える。
【００５９】
コンピュータ８１２は、リモートコンピュータ８５８などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク環境で動作することもできる。リモートコンピュータ８５８は、サーバコンピュータ、ルータ、パーソナルコンピュータ、マイクロプロセッサベースの娯楽機器、ピアデバイスまたはその他の共通ネットワークノードでもよく、通常は、コンピュータ８１２に関係する上述の要素の多くまたはすべてを含むが、簡単のためメモリストレージデバイス８６０のみが図に示されている。図に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）８６２とワイドエリアネットワーク（ＷＡＮ）８６４を含む。このようなネットワーキング環境は、事務所、企業規模のコンピュータネットワーク、イントラネットおよびインターネットではよくある。
【００６０】
ＬＡＮネットワーキング環境で使用する場合は、コンピュータ８１２はネットワークインターフェイス８６６を介してローカルエリアネットワーク８６２に接続される。ＷＡＮ環境で使用する場合は、コンピュータ８１２は通常、モデム８６８を備えるか、またはＬＡＮで通信サーバに接続されるか、またはインターネットなどのＷＡＮ  ８６４上で通信を確立するためのその他の手段を備える。モデム８６８は、内蔵でも外付けでもよいが、シリアルポートインターフェイス８５２を介してシステムバス８１８に接続される。ネットワーク環境では、コンピュータ８１２またはその一部に関して述べたプログラムモジュールは、リモートメモリ記憶デバイス８６０に格納できる。図に示されているネットワーク接続は例であり、コンピュータ間に通信リンクを確立するのにその他手段を使用できることは理解されるであろう。
【００６１】
図９は、複数のビデオアダプタイメージが格納されるオプションＲＯＭを示している。例えば、第１イメージは、レガシＸ８６ビデオＢＩＯＳをサポートできるが、第２のイメージはＵＧＡ  ＢＩＯＳをサポートできる。ＵＧＡ  ＢＩＯＳをサポートするには、第２のイメージはファームウェア固有のバインド（例えば、ＥＦＩをＵＧＡに）を含み、これにより、ＵＧＡファームウェアのバイトコードと実行時環境との相互作用が可能になる。第２のイメージはさらに、ランタイムサポートライブラリバインドも含み、これにより、システムファームウェアのバインドとＵＧＡファームウェアサービスディスパッチとの相互作用が可能になる。ＵＧＡファームウェアサービスディスパッチは、ＵＧＡデバイスを対象とするコールを受け取り、ユーザが通信したい相手のデバイスとユーザが実行したいサービスとを識別する。ディスパッチャは、ＵＧＡファームウェアサービス内の適切なメソッドを呼び出す。そこで、複数のイメージをオプションＲＯＭに格納できるので、レガシシステムとＵＧＡシステムの同時サポートが可能になり、従来のシステムに比べて相互運用性が向上する。
【００６２】
上述の内容には、本発明の実施例が含まれる。もちろん、本発明を説明するためにコンポーネントまたは方法の考えられるすべての組合せを説明することは不可能であるが、当業者であれば、本発明の他の多くの組合せおよび置換が可能であることは理解できるであろう。したがって、本発明は、付属の請求項の精神と範囲に収まるそのようなすべての改変、修正、およびバリエーションを包含するものとする。さらに、「含む、備える」という言い回しを詳細な説明または請求項で使用している範囲において、このような用語は「備える、含む」という用語と似た使い方をし、これは請求項の中で暫定的用語と解釈する。
【００６３】
【発明の効果】
以上説明したように、本発明によれば、ファームウェアを使用する標準的な方法で低レベルグラフィックスハードウェアをカプセル化して、抽象化する、ハードウェア独立の設計であるユニバーサルグラフィックスアダプタ（ＵＧＡ）を構成することにより、発展するハードウェア機能および新しいハードウェア機能の両方をサポートするように、容易にシステムを更新することができる。
【００６４】
本発明の出願明細の一部である、ＵＧＡファームウェアインターフェイスの例を示す。
【００６５】
付録A
UGA
ユニバーサルグラフィックアダプタ(Universal Graphics Adapter)
ファームウェアインターフェイス仕様
【００６６】
第1部
1.1  UGAインターフェイス命名規則
UgaFwXxxx - UGAファームウェアによってシステムファームウェアおよびオペレーティング システムおよびUGA 10リクエストハンドラ(request handlers)にエクスポートされるメソッド。
VmlXxxx - UGAVMXXX.LIB I/Oライブラリを介して仮想マシン(Virtual Machine)(VM)によってUGAファームウェアにエクスポートされるメソッド。接頭辞の中のlはLの小文字であることに注意。
【００６７】
第2部
UGAファームウェアインターフェイス
UGAファームウェアインターフェイスは、UGAファームウェアから公開される。システムファームウェアおよびUGA HALドライバではこのインターフェイスを使用してUGAハードウェアの基本操作を実行する。このレイヤにより、レガシビデオBIOSが置き換わる。
【００６８】
0004416390.tif 000002
0004416390.tif 000003
0004416390.tif 000004
0004416390.tif 000005
0004416390.tif 000006
0004416390.tif 000007
【００６９】
【表１】
0004416390.tif 000008
【００７０】
重大度ビットは以下のように定義される。
0004416390.tif 000009
0004416390.tif 000010
【００７１】
【表２】
0004416390.tif 000011
【００７２】
0004416390.tif 000012
UGA_CHANNEL_TRANSFERには、開いているデバイスチャネルとメモリバッファとの間でデータを転送するためにUGAファームウェアが必要とする情報が格納される。
メンバ
pvBuffer
開いているデバイスチャネルに送信されたまたはそこから受信した転送元または転送先メモリバッファへの仮想ポインタ。
ui64Size
要求されたデータ転送のサイズ(バイト単位)。
bEndOfTransfer
UGAファームウェアが続く同じ方向で追加チャネル転送リクエストを予期するかどうかを指定する。FALSEの場合、追加転送はそのまま保留であり、TRUEの場合、最後の転送がバッチで行われる。
0004416390.tif 000013
UGA_DEVICEでは、UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。システムファームウェア/オペレーティングシステムにより、列挙されているそれぞれのデバイスについてUGA_DEVICEが割り当てられる。このオブジェクトへのポインタは、UGAファームウェアメソッドに渡される。これは隠蔽型オブジェクト(opaque object)である。つまり、UGAファームウェアはフィールドの参照を直接には解除できない。レイアウトは予告なしに変更されることがある。
0004416390.tif 000014
UGA_DEVICE_DATAは、UgaFwGetChildDeviceメソッドが返すデバイスデータを指定する。
メンバ
deviceType
デバイスの型を指定する。
deviceId
ビデオIHVで定義したデバイスID。
ui32DeviceContextSize
列挙されたUGAデバイスに対し割り当てられているコンテキストバッファ(context buffer)の要求されたサイズ(バイト数)。このバッファは、システムファームウェア/オペレーティングシステムによって割り当てられる。UGAファームウェアは、このバッファを使用してランタイムデバイス固有の情報を格納することができる。
ui32SharedContextSize
UGAアダプタに対し割り当てられている共有コンテキストバッファの要求されたサイズ(バイト数)。このバッファは、システムファームウェア/オペレーティングシステムによって割り当てられる。UGAファームウェアは、このバッファを使用してランタイムデバイス固有の情報を格納することができる。
0004416390.tif 000015
0004416390.tif 000016
UGA_MEMORY_TRANSFERには、メモリデータ転送を実行するためにUGAファームウェアが必要とする情報が格納される。
メンバ
transferType
転送の種類としてUgaMtSystemToVideo、UgaMtVideoToSystem、またはUgaMtVideoToVideoのいずれかを指定する。
pvSource
システムメモリ内に置かれている転送元への仮想ポインタ。
pvDestination
システムメモリ内に置かれている転送先への仮想ポインタ。
ui64Source
ビデオメモリ内に置かれている転送元のフレームバッファの先頭からのオフセット。
ui64Destination
ビデオメモリ内に置かれている転送先のフレームバッファの先頭からのオフセット。
i32Width
転送領域の幅(バイト数)。
i32Height
転送領域の高さ(ライン数)。
i32SourceDelta
転送元領域の隣接する2つのラインの開始点の間にあるバイトの個数。
i32DestinationDelta
転送先領域の隣接する2つのラインの開始点の間にあるバイトの個数。
bEndOfTransfer
UGAファームウェアで、続けてUgaFwCopyRectangleの呼び出しをさらに予期すべきかどうかを指定する。FALSEの場合、追加転送は保留になり、TRUEの場合、最後の転送がバッチで行われる。UGAファームウェアでは、必要ならばTRUEの値をピクセルキャッシュライン(pixel cache lines)をフラッシュするためのヒントとして解釈できる。
0004416390.tif 000017
0004416390.tif 000018
【００７３】
2.3  UGAファームウェアインターフェイス
UGAファームウェアは、外部の世界(システムファームウェア、オペレーティングシステムのランタイム)への単一のエントリポイントをエクスポートする。エクスポートされるエントリポイントはUgaFwDispatchServiceと呼ばれる。UgaFwDispatchServiceは、UGA IOリクエストをUGAファームウェア内の適切なハンドラにディスパッチする役割を持ち、これは、UGAデバイス型およびIOリクエスト型に基づく。
UgaFwDispatchServiceを呼び出す際に、PUGA_DEVICE pDeviceおよびPUGA_IO_REQUEST pIoRequestの2つの引数を渡す。UgaFwDispatchServiceでは、そのリクエストがVMライブラリメソッドVmlGetDeviceType(pDevice)を呼び出すことを目的としている場合のデバイス型を決定できる。UGAファームウェアはUGA_DEVICEデータ構造内のフィールドの参照を直接には解除できない、つまり隠蔽型オブジェクトであって、その内部レイアウトは将来予告なしに変更されることがあるということである。
UGA仕様バージョン1.0では、以下のようにUGAデバイス型を定義している。
UgaDtParentBus
UgaDtGraphicsController
UgaDtOutputController
UgaDtOutputPort
UgaDtOther
【００７４】
【表３】
0004416390.tif 000019
【００７５】
UGA_IO_REQUESTには、入力および出力バッファへのポインタ、両バッファの長さ、UGAファームウェアが出力バッファ内に返す多数のバイトを格納するフィールド、およびUGA_IO_REQUEST.ioRequestCodeフィールド内のIOリクエストコードが含まれる。
未定:UGA_IO_REQUESTを隠蔽型オブジェクトと宣言し、そのフィールドを操作するメソッドを定義すべきか？
UGA仕様バージョン1.0では、以下のようにUGA IOリクエストコードを定義している。
UgaIoGetVersion
UgaIoGetChildDevice
UgaIoStartDevice
UgaIoStopDevice
UgaIoFlushDevice
UgaIoResetDevice
UgaIoGetDeviceState
UgaIoSetDeviceState
UgaIoSetPowerState
UgaIoGetMemoryConfiguration
UgaIoSetVideoMode
UgaIoCopyRectangle
UgaIoGetEdidSegment
UgaIoDeviceChannelOpen
UgaIoDeviceChannelClose
UgaIoDeviceChannelRead
UgaIoDeviceChannelWrite
UgaIoGetPersistentDataSize
UgaIoGetPersistentData
UgaIoSetPersistentData
UgaIoGetDevicePropertySize
UgaIoGetDeviceProperty
UgaIoBtPrivateInterface
UGAデバイスごとに、UGAファームウェアは、最初に、UgaIoStartDeviceを受け取り、続いて、UgaIoGetChildDevice IOリクエストを受け取り、UGAデバイスツリーの上から下まで移動する。他のIOリクエストは、デバイスが列挙され、起動された後に受け取る。UgaDtParentBusは特別なケース、つまり、UGAデバイス列挙プロセスのシード(seed)となることを目的としており、UgaIoGetVersionおよびUgaIoGetChildDevice以外のものには使用されないということである。
【００７６】
0004416390.tif 000020
UgaFwDispatchServiceは、UGAファームウェアからエクスポートされた唯一のエントリポイントであり、主UGAサービスディスパッチルーチンとして使用される。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
戻り値
UGAファームウェアステータスコード。
【００７７】
2.4.2  UGAファームウェアインターフェイス-IOリクエストハンドラ
UgaFwBtPrivateInterface         オプション、起動時のみ
UgaFwCopyRectangle              必須
UgaFwDeviceChannelClose         必須*
UgaFwDeviceChannelOpen          必須*
UgaFwDeviceChannelRead          必須*
UgaFwDeviceChannelWrite         必須*
UgaFwFlushDevice                必須
UgaFwGetChildDevice             必須
UgaFwGetDeviceProperty          必須
UgaFwGetDevicePropertySize      必須
UgaFwGetDeviceState             必須
UgaFwGetEdidSegment             必須*
UgaFwGetMemoryConfiguration     必須
UgaFwGetPersistentData          オプション
UgaFwGetPersistentDataSize      オプション
UgaFwGetVersion                 オプション
UgaFwResetDevice                必須
UgaFwSetDeviceState             必須
UgaFwSetPersistentData          オプション
UgaFwSetPowerState              必須
UgaFwSetVideoMode               必須
UgaFwStartDevice                必須
UgaFwStopDevice                 必須
*  これらのメソッドは、ハードウェア設定によっては必要でない場合がある。
0004416390.tif 000021
UgaFwBtPrivateInterfaceは、OEM /IHV固有のリクエストをUGAファームウェアに送り、システムとUGAファームウェアとの間で自由形式データを交換するための手段を備えている。これはオプションの起動時のみのメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvlnBuffer
IHV/OEMで定義。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
IHV/OEMで定義。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000022
UgaFwCopyRectangleは、ビデオからビデオメモリへ、システムからビデオメモリへ、またはビデオからシステムメモリへデータをコピーする。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクト(device object)を指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoReqvest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvlnBuffer
UGA_MEMORY_TRANSFERオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
転送元領域と転送先領域との間のビットマップ変換はサポートされていないため、この領域は両方とも、同じ形式を使用する必要がある。UGA 1.0では、l6bppをRGB 565として、32bppをxRGBとしてのみサポートしている。
参照
0004416390.tif 000023
UgaFwDeviceChannelCloseは、スレーブデバイスとの通信チャネルを閉じる。
これは、外部PnPディスプレイデバイスをサポートしていない非PnPディスプレイが組み込まれているOEMシステム(たとえば、ラップトップコンピュータ)を除いて必要なメソッドである。このようなOEMシステムの場合、UgaFwGetEdidSegmentメソッドを実装する必要がある。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwDeviceChannelCloseは、主にディスプレイデバイスからEDIDデータを取り出すことを目的としている(新しいEDID形式を柔軟にサポート)。さらに、IHVドライバ作成者はこのメソッドを使用して、他のビデオ子デバイスと通信することができる。
参照
0004416390.tif 000024
UgaFwDeviceChannelOpenは、スレーブデバイスとの通信を開始する。
これは、外部PnPディスプレイデバイスをサポートしていない非PnPディスプレイが組み込まれているOEMシステム(たとえば、ラップトップコンピュータ)を除いて必要なメソッドである。このようなOEMシステムの場合、UgaFwGetEdidSegmentメソッドを実装する必要がある。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwDeviceChannelOpenは、主にディスプレイデバイスからEDIDデータを取り出すことを目的としている(新しいEDID形式を柔軟にサポート)。さらに、IHVドライバ作成者はこのメソッドを使用して、他のビデオ子デバイスと通信することができる。
参照
0004416390.tif 000025
UgaFwDeviceChannelReadは、スレーブデバイスからデータを1ブロック分読み込む。
これは、外部PnPディスプレイデバイスをサポートしていない非PnPディスプレイが組み込まれているOEMシステム(たとえば、ラップトップコンピュータ)を除いて必要なメソッドである。このようなOEMシステムの場合、UgaFwGetEdidSegmentメソッドを実装する必要がある。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_CHANNEL_TRANSFERへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwDeviceChannelReadは、主にディスプレイデバイスからEDIDデータを取り出すことを目的としている(新しいEDID形式を柔軟にサポート)。さらに、IHVドライバ作成者はこのメソッドを使用して、他のビデオ子デバイスと通信することができる。
参照
0004416390.tif 000026
UgaFwDeviceChannelWriteは、スレーブデバイスにデータを1ブロック分書き込む。
これは、外部PnPディスプレイデバイスをサポートしていない非PnPディスプレイが組み込まれているOEMシステム(たとえば、ラップトップコンピュータ)を除いて必要なメソッドである。このようなOEMシステムの場合、UgaFwGetEdidSegmentメソッドを実装する必要がある。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_CHANNEL_TRANSFERオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwDeviceChannelWriteは、主にディスプレイデバイスからEDIDデータを取り出すことを目的としている(新しいEDID形式を柔軟にサポート)。さらに、IHVドライバ作成者はこのメソッドを使用して、他のビデオ子デバイスと通信することができる。
参照
0004416390.tif 000027
UgaFwFlushDeviceは、保留になっているハードウェアへの書き込みをフラッシュし、すべてのDMAオペレーションなどを完了させる役割を持つ。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UGAハードウェアは、他の何らかのUGAメソッドが呼ばれるまでこのルーチンから戻ったとき完全にアイドル状態でなけれならないが、これはシステムファームウェア/OSがこのデバイスのPCIコンフィギュレーション空間(PCI configuration space)にタッチしている可能性があるからである。
参照
0004416390.tif 000028
UgaFwGetChildDeviceは、pDeviceデバイスオブジェクトと関連するデバイスの子デバイスに関する情報を返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
0を基底とする子インデックス(UINT32値)へのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
UGA_DEVICE_DATAオブジェクトへのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwGetChildDeviceは、すべてのデバイスを報告する必要があるが、これらのデバイスは、列挙時に使用可能かどうかに関係なく、UGAアダプタによってサポートされている。UgaFwGetDeviceStateメソッドを使用して、必要に応じて、デバイスの現在の状態を判別する。
UGA_DEVICE_DATA.ui32SharedContextSizeプロパティを0以外の値に設定すると、実行時環境では、所定のサイズの共有コンテキストバッファを割り当て、それを現在列挙されているデバイスと関連付け、その後列挙されるすべてのデバイスが同じバッファを指すようにするが、ただし、列挙でそれらのデバイスの共有コンテキストサイズとして0が返される場合に限る。一般に、共有コンテキストサイズは、ルートデバイスのみについては0以外の値に設定し、それ以降列挙されるすべてのデバイスについては0に設定する必要がある。
UGAデバイスに関する追加情報は、UgaFwGetDevicePropertySizeおよびUgaFwGetDeviceProperty メソッドを使用すると得られる。
参照
0004416390.tif 000029
UgaFwGetDevicePropertyは、デバイスに関するスタティック情報を返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_DEVICE_PROPERTYオブジェクトへのポイントである。pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
デバイスのプロパティデータ用の記憶域へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000030
UgaFwGetDevicePropertySizeは、デバイスに関するスタティック情報のサイズを返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_DEVICE_PROPERTYオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
デバイスのプロパティのサイズ(UINT64)の記憶域へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000031
UgaFwGetDeviceStateは、デバイスオブジェクトと関連するデバイスの現在状態を返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
UGA_DEVICE_STATEオブジェクトへのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000032
UgaFwGetEdidSegmentは、デバイスのEDIDデータを返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
EDIDセグメント番号(UINT32)へのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
EDIDセグメントデータ用の記憶域へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)(UGA_MAX_EDID_SEGMENT_LENGTH)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
このメソッドは、列挙されたUgaDtOutputControllerおよびUgaDtOutputPortデバイスに使用する。
UgaDtOutputControllerデバイスの場合、UgaFwGetEdidSegmentは個々の出力コントローラの機能、つまりビデオアダプタ自体の機能を返す。
このメソッドは、UGAファームウェアが、所定のUgaDtOutputPortデバイス用にI2Cメソッドを用意しており、そのデバイスのEDIDはI2Cプロトコルを介してアクセスできる場合は、失敗することがある。このメソッドは、UgaDtOutputControllerデバイスと、デフォルトでI2CプロトコルをサポートしていないUgaDtOutputPortデバイス(たとえば、TV、一部のラップトップ用のフラットパネルディスプレイ)については常に成功する必要がある。
このメソッドは、EDIDレスのレガシモニタでは失敗することがある。
参照
0004416390.tif 000033
UgaFwGetVideoMemoryConfigurationは、ビデオメモリ設定データを返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
UGA_MEMORY_CONFIGURATIONオブジェクトへのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
このメソッドは、列挙されたUgaDtOutputControllerデバイスについて呼び出される。
ビデオメモリ設定データは、現在選択されているビデオモードによって異なる。
UgaFwGetMemoryConfigurationは、通常、UgaFwSetVideoMode呼び出しの後呼び出される。
参照
0004416390.tif 000034
UgaFwGetPersistentDataは、自由形式のIHVで定義されたデバイス設定データを返す。このデータは、システムファームウェアにより不揮発性メディアに格納され、再起動が終わっても永続する。
これはオプションのメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
読み込むバイトの個数(UINT64)へのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
読み込んだデータ用の記憶域へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000035
UgaFwGetPersistentDataSizeは、UGAデバイスに使用可能な永続的記憶領域のサイズ(バイト数)を返す。デバイス用の永続的記憶領域は、システムファームウェアおよびハードウェアによって用意される。
これはオプションのメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
永続的データバッファのサイズ(UINT64)へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000036
UgaFwGetVersionは、バージョン情報を返す。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
UGA_VERSIONへのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000037
UgaFwResetDeviceは、デバイスを初期状態にリセットする。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
このメソッドは、UgaDtGraphicsControllerおよびUgaDtOutputControllerデバイスの場合に失敗することがある。つまり、これは、他のUGAメソッドを使用できる初期状態、特に UgaFwSetVideoModeにそれらのデバイスをリセットする必要がある。UgaFwResetDeviceは、非常時にオペレーティングシステムによって使用される。
参照
0004416390.tif 000038
UgaFwSetDeviceStateは、子デバイスの現在状態を有効または無効に設定する。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_DEVICE_STATEオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
どのようなときにもデバイスの実際の状態を判別するには、UgaFwGetDeviceStateを呼び出す必要がある。呼び出し側は、UgaFwSetDeviceStateに渡されるデバイス状態の値に基づいて現在のデバイス状態に関して仮定をおかなくてよい。
UgaFwSetDeviceStateがUgaDtOutputControllerおよびUgaDtOutputPortデバイスについて呼び出された場合、UGAファームウェアはUgaFwSetVideoModeの呼び出しが続くことを予期する、つまりUGAファームウェアは、これが設定されている状態リクエストを完了するために必要であってもビデオモードをそれ自体では設定することはしない。
参照
0004416390.tif 000039
UgaFwSetPersistentDataは、自由形式のIHVで定義されたデバイス設定データを書き込む。このデータは、システムファームウェアにより不揮発性メディアに格納され、再起動が終わっても永続する。
これはオプションのメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
書き込むデータへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)(書き込むバイトの個数)。
pIoRequest->pvOutBuffer
書き込むバイトの個数(UINT64)へのポイントである。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000040
UgaFwSetPowerStateはOKを設定するかプローブするか、プローブをキャンセルするか、またはデバイス電力状態を設定(コミットされたのをプローブ)する。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_POWER_REQUESTオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
デバイスは、UgaPrProbe and UgaPrCommitまたはUgaPrCancelリクエストの間アイドル状態でなければならない。このメソッドは、UgaPrCommitリクエストで失敗することはありえない。
参照
0004416390.tif 000041
UgaFwSetVideoModeはビデオモードを設定する。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
UGA_ViDEO_MODEオブジェクトへのポイントである。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
このメソッドは、列挙されたUgaDtOutputControllerデバイスに使用される。
必要なピクセル深さおよび色順序付け(little endian)。
l6bpp - RGB 565
32bpp - xRGB
アドインUGAアダプタについては、800x600x32bpp at 60Hzがサポートされている必要がある。このモードは、統合ビデオ実装にはオプションである。
参照
0004416390.tif 000042
UgaFwStartDeviceにより、デバイスオブジェクトと関連するデバイスの電源がオンになり、他のUGAファームウェアメソッドをそのデバイスと使用できるときの状態に初期化される。
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
UgaFwStartDeviceコードは破棄できない!起動プロセスのPOST/INITフェーズのときにファームウェアによって使用されるが、別のとき、たとえば、マルチモニタ初期化時や電源管理サイクルなどでも、OSによって使用される場合がある。
参照
0004416390.tif 000043
UgaFwStopDeviceは、UGAデバイスを停止する。pDeviceと関連付けられているすべての資源をクリーンアップする役目を持つ、つまりpDeviceはなくなる!
これは必須のメソッドである。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pIoRequest->ioRequestCode
UGA IOリクエストコード。
pIoRequest->pvInBuffer
未使用。
pIoRequest->ui64InBufferSize
入力バッファのサイズ(バイト数)。
pIoRequest->pvOutBuffer
未使用。
pIoRequest->ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pIoRequest->ui64BytesReturned
返されたときの出力バッファ内のバイトの個数。
戻り値
UGAファームウェアステータスコード。
コメント
参照
UgaFwGetChildDevice。
【００７８】
第3部
仮想マシンインターフェイス
仮想マシンインターフェイスは、システムファームウェア(起動時)とオペレーティングシステム(実行時)により公開される。UGAファームウェアは、このインターフェイスを使用して、実行環境に基本サービスを要求する。UGA-VMスタブは、UGAファームウェアコードがリンクされているUGAVMXXX.LIBスタティックライブラリの一部として含まれている。
【００７９】
0004416390.tif 000044
0004416390.tif 000045
0004416390.tif 000046
【００８０】
0004416390.tif 000047
0004416390.tif 000048
VmlBtPrivateInterfaceは、OEM /IHV固有のリクエストをシステムファームウェアに送り、UGAとシステムファームウェアとの間で自由形式データを交換するための手段を備えている。このメソッドは、起動時のみ使用でき、OS実行時にVMからエクスポートされることはない。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pIoRequest
UGA IOリクエストパケットへのポイントである。
pvlnBuffer
IHV/OEMで定義。
ui64InBufferSize
入力バッファのサイズ(バイト数)。
pvOutBuffer
IHV/OEMで定義。
ui64OutBufferSize
出力バッファのサイズ(バイト数)。
pui64BytesReturned
返されたときの出力バッファ内のバイトの個数へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000049
VmlCopySystemMemoryは、システムメモリ内の転送元領域からデータをシステムメモリ内の転送先領域にコピーする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvDestination
システムメモリ内の転送先領域へのポイントである。
pvSource
コピーするデータのシステムメモリ内の領域へのポイントである。
ui64Length
コピーするバイトの個数を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
pvDestinationおよびpvSourceは、システムのメモリ内のアドレスへのポイントでなければならない。この関数は、デバイスの物理メモリへのアクセスには使用できない。転送元領域+長さは、転送先領域と重なることはできない。
参照
0004416390.tif 000050
VmlGetDeviceContextは、pDeviceが指しているデバイスオブジェクトと関連付けられているIHVで定義されたデバイス固有のコンテキストへのポインタを返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ppvDeviceCont ext
デバイスコンテキストへのポイント用の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
UGAファームウェアにより、親デバイスのUgaFwGetChildDeviceハンドラ内の列挙されている各UGAデバイスのデバイスコンテキストのサイズが指定される。子デバイスのデバイスコンテキストサイズは、UGA_DEVICE_DATA.ui32DeviceContextSizeフィールドに返される。
参照
0004416390.tif 000051
VmlGetDeviceIdは、pDeviceが指しているデバイスオブジェクトと関連付けられているIHVで定義されたデバイス固有のデバイスIDを返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pDeviceId
デバイスID値の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
UGAファームウェアにより、親デバイスのUgaFwGetChildDeviceハンドラ内の列挙されている各UGAデバイスのデバイスIDが指定される。子デバイスのデバイスID値は、UGA_DEVICE_DATA.deviceIdフィールドに返される。
参照
0004416390.tif 000052
VmlGetDeviceTypeは、pDeviceが指しているデバイスオブジェクトと関連するデバイス型を返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pDevice Type
デバイス型値の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
UGAファームウェアにより、親デバイスのUgaFwGetChildDeviceハンドラ内の列挙されている各UGAデバイスのデバイス型が指定される。子デバイスのデバイス型値は、UGA_DEVICE_DATA.deviceTypeフィールドに返される。
参照
0004416390.tif 000053
VmlGetParentDeviceは、pDeviceが指しているデバイスオブジェクトと関連付けられているデバイスの親デバイスオブジェクトへのポインタを返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ppParentDevice
親デバイスオブジェクトへのポインタ用の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
UGA実行時環境では、親デバイスへのリンクのみを保持する。必要ならば、UGAファームウェア自体は、デバイスコンテキスト内の子デバイスへのリンクを保持することもできる(たとえば、UgaFwStartDeviceハンドラの親デバイスにVmlGetParentDeviceおよびVmlGetDeviceContextを使用して)。
参照
0004416390.tif 000054
VmlGetPersistentDataは、自由形式のIHV/OEMで定義されたデバイス設定データを返す。このデータは、システムファームウェアにより不揮発性メディアに格納され、再起動が終わっても永続する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvBuffer
戻るときに、デバイスの永続的記憶領域から読み込まれたデータを格納する。
ui32Offset
デバイスの永続的記憶領域の先頭からのオフセット(バイト数)を指定する。
ui32Length
デバイスの永続的記憶領域から読み込むデータの長さ(バイト数)を指定する。
戻り値
UGAファームウェアステータスコード。
参照
0004416390.tif 000055
VmlGetPersistentDataSizeは、デバイスに使用可能な永続的記憶領域のサイズ(バイト数)を返す。デバイス用の永続的記憶領域は、システムファームウェアおよびハードウェアによって用意される。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pui32Size
戻るときに、デバイスに使用可能な永続的記憶領域のサイズ(バイト数)を格納する。
戻り値
UGAファームウェアステータスコード。
参照
0004416390.tif 000056
VmlGetSharedContextは、所定のディスプレイアダプタに対してUGAファームウェアにより列挙されているすべてのデバイス間で共有されているIHV定義コンテキストへのポインタを返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ppvSharedContext
共有コンテキストへのポインタ用の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
UGAファームウェアにより、UgaFwGetChildDeviceハンドラ内の列挙されている各UGAデバイスの共有コンテキストに同じサイズを指定する必要がある。共有コンテキストサイズは、UGA_DEVICE_DATA.ui32SharedContextSizeフィールドに返される。
参照
0004416390.tif 000057
VmlGetTimeStampは、100ナノ秒単位の現在のタイムスタンプ値を返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pui64TimeStamp
タイムスタンプ値の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000058
VmlGetVersionは、仮想マシンバージョン情報を返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pVmVersion
仮想マシンバージョン情報の記憶領域へのポイントである。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000059
UgaFwGetEdidSegmentは、デバイスのEDIDデータを返す。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pI2cControl
UGA_I2C_CONTROL構造体へのポイントを指定する。呼び出し側は、この構造体のフィールドを、SDA (シリアルデータ)およびSCL (シリアルクロック)ライン切り替えルーチンとI2Cスレーブデバイス(モニタ)で必要なI2C遅延時間へのポインタを書き込んで初期化する必要がある。
ui8Segment
0を基底とするEDIDセグメント番号を指定する。EDIDセグメントの長さは常に256バイトであり、1つまたは2つの128バイトEDID、1つの256バイトEDID、または256バイトを超えるEDIDの一部(書き込み時には存在しない)を含むか、またはいっさいEDIDを含まない。
pvBuffer
戻るときに、EDIDセグメントデータが格納される。
pui32Length
戻るときに、pvBufferが指しているバッファに返されたEDIDデータバイトの個数が格納される。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000060
VmlI2cReadは、I2Cスレーブデバイスからデータを1ブロック分読み込む。パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pI2cControl
UGA_I2C_CONTROL構造体へのポインタを指定する。呼び出し側は、この構造体のフィールドを、SDA (シリアルデータ)およびSCL (シリアルクロック)ライン切り替えルーチンとI2Cスレーブデバイスで必要なI2C遅延時間へのポインタを書き込んで初期化する必要がある。
pvBuffer
戻るときに、I2Cスレーブデバイスから読み込んだデータを格納する。
ui32Length
読み込むデータの長さを指定する(バイト数)。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000061
VmlI2cStartは、スレーブデバイスとのI2C通信を開始する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pI2cControl
UGA_I2C_CONTROL構造体へのポイントを指定する。呼び出し側は、この構造体のフィールドを、SDA (シリアルデータ)およびSCL (シリアルクロック)ライン切り替えルーチンとI2Cスレーブデバイスで必要なI2C遅延時間へのポイントを書き込んで初期化する必要がある。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000062
VmlI2cReadは、スレーブデバイスとのI2C通信を開始する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pI2cControl
UGA_I2C_CONTROL構造体へのポインタを指定する。呼び出し側は、この構造体のフィールドを、SDA (シリアルデータ)およびSCL (シリアルクロック)ライン切り替えルーチンとI2Cスレーブデバイスで必要なI2C遅延時間へのポインタを書き込んで初期化する必要がある。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000063
VmlI2cWriteは、I2Cスレーブデバイスにデータを1ブロック分書き込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pI2cControl
UGA_I2C_CONTROL構造体へのポインタを指定する。呼び出し側は、この構造体のフィールドを、SDA (シリアルデータ)およびSCL (シリアルクロック)ライン切り替えルーチンとI2Cスレーブデバイスで必要なI2C遅延時間へのポインタを書き込んで初期化する必要がある。
pvBuffer
I2Cスレーブデバイスに書き込まれるデータが格納される。
ui32Length
書き込むデータの長さを指定する(バイト数)。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000064
VmlPciAllocateCommonBufferでは、連続するページ化不可能なシステムメモリを割り当て、DMAオペレーションのためプロセッサとデバイスの両方から同時にアクセスできるようにマップする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui64Length
割り当てるメモリのバイト数を指定する。
cachingType
UGA_MEMORY_CACHING_TYPE値を指定し、要求されたメモリで使用可能なキャッシングの種類を示す。ファームウェアで使用できる値は以下のとおりである。
UgaMcNonCached
プロセッサでは要求されたメモリをキャッシュできない。
UgaMcCached
プロセッサは、要求されたメモリをキャッシュできる。
UgaMcWriteCombined
要求メモリは書き込み組み合わせを有効にできる(フレームバッファについては通常)。
ppvHostAddress
戻るときに、割り当てられた範囲のベース仮想アドレスを格納する。
pDeviceAddress
戻るときに、割り当てられた範囲のバス変換ベース物理アドレスを格納する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciAllocateCommonBufferは、プロセッサとデバイスの両方からアクセスできるシステムメモリを割り当てる。このメモリは、デバイスからは連続しているように見える。このメソッドでは、必要ならば、マップレジスタのロードを含む、デバイスの変換を設定する。
VmlPciAllocateCommonBufferは、要求されたui64Lengthに関係なく、少なくとも1ページ分のメモリを割り当てる。PAGE_SIZEバイトよりも少ないメモリを要求する割り当てが成功した後、呼び出し側は要求されたui64Lengthのみにアクセスできる。PAGE_SIZEバイトの整数倍を超えるメモリを要求する割り当てが成功した後、最後に割り当てられたページの残りのバイトは呼び出し側からアクセスできない。
UGAファームウェアが数ページ分の共通バッファ領域を必要とするが、それらのページは連続している必要がない場合、ドライバ側では、1 つの大きなリクエストではなく、複数の1ページリクエストをVmlPciAllocateCommonBufferに送る。この方式だと、連続するメモリが節約される。
参照
0004416390.tif 000065
VmlPciCopyDeviceMemoryは、デバイスメモリブロックの内容を一方の場所から他方の場所へコピーする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダ(PCI Configuration Header)のベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64DestinationOffset
コピー先のBAR相対オフセットを指定する。
ui64SourceOffset
コピー元のBAR相対オフセットを指定する。
ui64Count
実行するメモリオペレーションの回数を指定する。
data Width
メモリオペレーションの幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
転送元と転送先の領域は重なり合うことはできない。
参照
0004416390.tif 000066
VmlPciFlushは、デバイスにポスト(post)されたすべてのデータをフラッシュする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000067
VmlPciFreeCommonBufferは、VmlPciAllocateCommonBufferによって割り当てられた共通バッファを、バッファで使用しているすべての資源とともに解放する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvHostAddress
割り当てられた範囲のベース仮想アドレスを指定する。
ui64Length
解放する割り当て済みメモリのバイト数を指定する。
cachingType
UGA_MEMORY_CACHING_TYPE値を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciFreeCommonBufferに渡されたパラメータは、VmlPciAllocateCommonBufferに渡されたパラメータ、また返されたパラメータと正確に一致している必要がある。UGAファームウェアは、割り当てられている共通バッファを一部だけ解放するということはできない。
参照
0004416390.tif 000068
VmlPciGetRomImageを使用して、システムメモリ内のPCIオプションROMのコピーにアクセスすることができる。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvOutputBuffer
戻るときに、オプションROMイメージから読み込んだデータを格納する。
ui32Offset
オプションROMイメージの先頭からのオフセット(バイト数)を指定する。
ui32Length
読み込むオプションROMイメージ上の長さ(バイト数)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000069
VmlPciLockSystemMemoryは、仮想アドレス範囲によりマップされている物理ページをメモリ内に常駐させ、ロックする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvHostAddress
ロックするメモリブロックの仮想アドレスを指定する。
pui64Length
ロックするメモリブロックの長さ(バイト数)を指定する。
戻るときに、このオペレーションによりロックされた連続物理メモリブロックの長さが格納される。pvAddressが物理メモリ内で連続していない仮想アドレス範囲を指している場合、返された長さは要求した長さよりも小さくなる。
transferType
ロックされているシステムメモリバッファを使用して実行するDMA転送を指定する。有効な値は、UgaMtSystemToVideoとUgaMtVideoToSystemである。
pDeviceAddress
戻るときに、ロックされたメモリ範囲のバス変換ベース物理アドレスを格納する。
ppvMapping
返されたときのシステムメモリマッピング情報を指しているポイント。これは、一致するVmlPciUnlockSystemMemory呼び出しのみで使用する隠蔽型データである。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciLockSystemMemoryは、PCIデバイスから見える一時転送バッファを割り当てなければならない場合がある。この場合、VmlPciLockSystemMemoryは、pvHostAddressが指しているバッファの内容をUgaMtSystemToVideo転送オペレーション用のその一時転送バッファにコピーし、VmlPciUnlockSystemMemoryは、一時転送バッファの内容をUgaMtVideoToSystemオペレーションにコピーする。このデュアルバッファリングがありえるため、CPUが所定の転送オペレーションで一致するVmlPciLockSystemMemoryとVmlPciUnlockSystemMemoryの間でpvHostAddressが指しているバッファに直接アクセスすることは不正である。
pui64Lengthに返される長さが初期値よりも小さい場合、返された長さだけpvAddressを進め、残りの長さについてVmlPciLockSystemMemoryを再度呼び出すことができる。このオペレーションは、メモリ領域全体が正常にロックされるまで繰り返すことができる。メモリ領域全体をロックするためにVmlPciLockSystemMemoryを何度も呼び出す必要がある場合、仮想連続メモリ領域が複数の分離された連続物理メモリブロックにマップされているということである。この場合、複数のマッピング値もppvMapping引数で返される。呼び出し側は、返されたすべてのマッピング値を格納し、VmlPciUnlockSystemMemoryへの一致する呼び出しで使用できるようにする必要がある。
参照
0004416390.tif 000070
VmlPciMapDeviceIoSpaceは、デバイス固有の物理IOアドレス範囲を非ページ化システム領域にマップする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダ(PCI Configuration Header)のベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
マップするIO範囲へのBAR相対ベースオフセットを指定する。
ui64Length
マップするIO範囲の長さ(バイト数)を指定する。
cachingType
UGA_MEMORY_CACHING_TYPE値を指定し、要求されたメモリで使用可能なキャッシングの種類を示す。UGAファームウェアで使用できる値は以下のとおりである。
UgaMcNonCached
プロセッサでは要求されたメモリをキャッシュできない。
UgaMcCached
プロセッサは、要求されたメモリをキャッシュできる。
UgaMcWriteCombined
要求メモリは書き込み組み合わせを有効にできる(フレームバッファについては通常)。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000071
VmlPciMapDeviceMemoryは、デバイス固有の物理メモリアドレス範囲を非ページ化システム領域(nonpaged system space)にマップする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダ(PCI Configuration Header)のベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
マップするデバイスメモリ範囲へのBAR相対ベースオフセットを指定する。
ui64Length
マップするデバイスメモリ範囲の長さ(バイト数)を指定する。
cachingType
UGA_MEMORY_CACHING_TYPE値を指定し、要求されたメモリで使用可能なキャッシングの種類を示す。UGAファームウェアで使用できる値は以下のとおりである。
UgaMcNonCached
プロセッサでは要求されたメモリをキャッシュできない。
UgaMcCached
プロセッサは、要求されたメモリをキャッシュできる。
UgaMcWriteCombined
要求メモリは書き込み組み合わせを有効にできる(フレームバッファについては通常)。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000072
VmlPciPollDeviceIoportは、デバイスIOポートをポーリングして、指定ビットパターンがないか調べる。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
戻るときに、ポーリングしたIOポートから読み込んだ最終的なマスクされていない値を格納する。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
ポーリングするIOポートのBAR相対ベースオフセット(バイト数)を指定する。
pvMask
ポーリングしたIOポートから読み込んだ値とのANDをとるマスクを指しているポイントである。
pvValue
ポーリングしたIOポートから読み込んだ値と比較し、pvMaskが指しているマスクとANDをとる値を指しているポイントである。
data Width
ポーリングしたIOポートから読み込んだ値とpvMask、pvValue、およびpvDataに格納されている値のデータ幅を指定する。
ui64TimeOut
ポーリングオペレーションのタイムアウト値(100秒単位)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciPollDeviceIoPortは、タイムアウトに達する前に一致が見つからないときにUGA_STATUS_TIMEOUTを返す。見つかった場合、VmlPciPollDeviceIoPortは、一致するパターンを読み込んだ直後にUGA_STATUS_SUCCESSを返す。
参照
0004416390.tif 000073
VmlPciPollDeviceMemoryは、デバイスメモリロケーションをポーリングして、指定ビットパターンがないか調べる。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
戻るときに、ポーリングしたデバイスメモリロケーションから読み込んだ最終的なマスクされていない値を格納する。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
ポーリングするデバイスメモリのBAR相対オフセット(バイト数)を指定する。
pvMask
ポーリングしたデバイスメモリロケーションから読み込んだ値とのANDをとるマスクを指しているポイントである。
pvValue
ポーリングしたデバイスメモリロケーションから読み込んだ値と比較し、pvMaskが指しているマスクとANDをとる値を指しているポイントである。
data Width
ポーリングしたデバイスメモリロケーションから読み込んだ値とpvMask、pvValue、およびpvDataに格納されている値のデータ幅を指定する。
ui64TimeOut
ポーリングオペレーションのタイムアウト値(100秒単位)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciPollDeviceMemoryは、タイムアウトに達する前に一致が見つからないときにUGA_STATUS_TIMEOUTを返す。見つかった場合、VmlPciPollDeviceMemoryは、一致するパターンを読み込んだ直後にUGA_STATUS_SUCCESSを返す。
参照
0004416390.tif 000074
VmlPciReadConfigurationSpaceは、UGAデバイスのPCIコンフィギュレーションヘッダからデータを読み込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvBuffer
戻るときに、UGAデバイスのPCIコンフィギュレーションヘッダから読み込んだデータが格納される。
ui32Offset
デバイスコンフィギュレーションデータの先頭からのオフセット(バイト数)を指定する。VmlPciReadConfigurationSpaceは、このオフセット位置から、デバイスコンフィギュレーションデータを読み込む。
ui32Count
コンフィギュレーション空間読み込み回数を指定する。
dataWidth
コンフィギュレーション空間から読み込まれる値のデータ幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000075
VmlPciReadDeviceIoPortは、デバイスIOポートから値を読み込む。パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
戻るときに、IOポートから読み込んだデータを格納する。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
読み込むIOポートのBAR相対オフセット(バイト数)を指定する。
dataWidth
IOポートから読み込む値のデータ幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000076
VmlPciReadDeviceMemoryは、デバイスメモリからデータブロックを読み込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
戻るときに、デバイスメモリから読み込んだデータのブロックを格納する。pvDataが指しているバッファの長さは少なくとも(dataWidth * ui64Count) バイトでなければならない。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
読み込むデバイスメモリのBAR相対ベースオフセット(バイト数)を指定する。
ui64Count
ui64Offsetから実行するdataWidth読み込みの回数を指定する。
dataWidth
デバイスメモリから読み込む値のデータ幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000077
VmlPciUnlockSystemMemoryは、VmlPciLockSystemMemoryによってロックされた物理ページのロックを解除する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvHostAddress
ロック解除するメモリブロックの仮想アドレスを指定する。
ui64Length
ロック解除するメモリブロックの長さ(バイト数)を指定する。
pvMapping
VmlPciLockSystemMemoryによって返されるシステムメモリマッピング情報を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciLockSystemMemoryは、PCIデバイスから見える一時転送バッファを割り当てなければならない場合がある。この場合、VmlPciLockSystemMemoryは、pvHostAddressが指しているバッファの内容をUgaMtSystemToVideo転送オペレーション用のその一時転送バッファにコピーし、VmlPciUnlockSystemMemoryは、一時転送バッファの内容をUgaMtVideoToSystemオペレーションにコピーする。このデュアルバッファリングがありえるため、CPUが所定の転送オペレーションで一致するVmlPciLockSystemMemoryとVmlPciUnlockSystemMemoryの間でpvHostAddressが指しているバッファに直接アクセスすることは不正である。
UGAファームウェアは、ロックされている連続物理メモリブロックの一部のロックを解除することはできない。複数の切り離されている連続物理メモリブロックにマップされている連続仮想メモリブロックをロックするために何回も呼び出す必要があった場合、呼び出し側は、VmlPciUnlockSystemMemoryの一致する呼び出しを何回も実行し、物理メモリの複数のブロックのロックを解除して各物理メモリブロックに対応するpvHostAddress、ui64Length、およびpvMappingを渡す必要がある。
参照
0004416390.tif 000078
VmlPciUnmapDeviceIoSpaceは、VmlPciMapDeviceIoSpaceによってマップされたデバイス固有の物理IOアドレス範囲をアンマップする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
アンマップするIO範囲へのBAR相対ベースオフセットを指定する。
ui64Length
アンマップするIO範囲の長さ(バイト数)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciUnmapDeviceIoSpaceに渡されたパラメータは、VmlPciMapDeviceIoSpaceに渡されたパラメータ、また返されたパラメータと正確に一致している必要がある。UGAファームウェアは、マップされているデバイス物理IO範囲の一部をアンマップすることはできない。
参照
0004416390.tif 000079
VmlPciUnmapDeviceMemoryは、VmlPciMapDeviceMemoryによってマップされたデバイス固有の物理メモリアドレス範囲をアンマップする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
アンマップするデバイスメモリ範囲へのBAR相対ベースオフセットを指定する。
ui64Length
アンマップするデバイスメモリ範囲の長さ(バイト数)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
VmlPciUnmapDeviceMemoryに渡されたパラメータは、VmlPciMapDeviceMemoryに渡されたパラメータ、また返されたパラメータと正確に一致している必要がある。UGAファームウェアは、マップされているデバイス物理メモリ範囲の一部をアンマップすることはできない。
参照
0004416390.tif 000080
VmlPciWriteConfigurationSpaceは、UGAデバイスのPCIコンフィギュレーションヘッダにデータを書き込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvBuffer
UGAデバイスのPCIコンフィギュレーションヘッダに書き込むデータへのポイントである。
ui32Offset
デバイスコンフィギュレーションデータの先頭からのオフセット(バイト数)を指定する。VmlPciWriteConfigurationSpaceは、このオフセット位置から、デバイスコンフィギュレーションデータを書き込む。
ui32Count
コンフィギュレーション空間書き込み回数を指定する。
dataWidth
コンフィギュレーション空間書き込み回数を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000081
VmlPciWriteDeviceIoPortは、デバイスIOポートに値を書き込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
IOポートに書き込む値へのポイントである。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
書き込むIOポートのBAR相対オフセット(バイト数)を指定する。
dataWidth
IOポートに書き込む値のデータ幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000082
VmlPciWriteDeviceMemoryは、デバイスメモリにデータブロックを書き込む。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvData
デバイスメモリに書き込むデータのブロックへのポイントである。pvDataが指しているバッファの長さは少なくとも(dataWidth * ui64Count) バイトでなければならない。
ui8BarIndex
メモリまたはIOアパーチャのPCIコンフィギュレーションヘッダのベースアドレスレジスタ(BAR)の0を基底とするインデックスを指定する。すべてのUGA MMIOおよびIOオペレーションではBAR相対アドレス指定を使用する。この値の有効な範囲は、0-5である。
ui64Offset
書き込むデバイスメモリのBAR相対ベースオフセット(バイト数)を指定する。
ui64Count
ui64Offsetから実行するdataWidth書き込みの回数を指定する。
dataWidth
デバイスメモリに書き込む値のデータ幅を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
参照
0004416390.tif 000083
VmlSetPersistentDataは、自由形式のIHV/OEMで定義されたデバイス設定データを書き込む。このデータは、システムファームウェアにより不揮発性メディアに格納され、再起動が終わっても永続する。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
pvBuffer
デバイスの永続的記憶領域に書き込むデータへのポイントである。
u32Offset
デバイスの永続的記憶領域の先頭からのオフセット(バイト数)を指定する。
ui32Length
デバイスの永続的記憶領域に書き込むデータの長さ(バイト数)を指定する。
戻り値
UGAファームウェアステータスコード。
参照
0004416390.tif 000084
VmlSleepは、UGAファームウェアの実行を指定した時間(100ナノ秒単位)だけサスペンドする。
パラメータ
pDevice
UgaFwGetChildDeviceに列挙されているデバイスと関連するデバイスオブジェクトを指定する。UgaFwGetChildDeviceに列挙されている各デバイスには一意的なデバイスオブジェクトが関連付けられている。
ui64Duration
時間(100ナノ秒単位)を指定する。
戻り値
UGAファームウェアステータスコード。
コメント
現在、最小の「設定可能」値は10であるが、これは持続時間<= 10については、遅延時間は少なくとも10*100ns = lμsになるということを意味する。
参照
UgaFwGetChildDevice。
【００８１】
本発明の出願明細の一部である、拡張可能ファームウェアインターフェイスユニバーサルグラフィックスアダプタ（ＥＦＩ−ＵＧＡ）の例を示す。
【００８２】
付録B
EFI-UGAバインド(Binding)
EFI_UGA_IO_PROTOCOL
【００８３】
第1部
EFI_UGA_IO_PROTOCOL
EFI_UGA_IO_PROTOCOLは、ディスプレイアダプタファームウェアとのEFIインターフェイスを備えており、UGAファームウェアインターフェイス仕様と互換性がある。EFIクライアントコードの実装を簡素化するために、EFI_UGA_IO_PROTOCOLでは、CreateDeviceおよびDeleteDeviceメソッドを、単一UGAファームウェアディスパッチエントリポイントのほかにエクスポートする。
本書に示されているEFI_UGA_IO_PROTOCOLの実装とEFI-UGAドライバのバインドコードサンプルは、完全に汎用なもので、ディスプレイハードウェアのアーキテクチャとは独立である。EFIドライバライブラリの一部として提供できる。
ビデオROMは、EFI 1.1に準拠するためにEEL_UGA_IO_PROTOCOLをエクスポートする必要がある。
【００８４】
1.1  EFI_VGA_IO_PROTOCOLメソッド
このセクションには、EFI_UGA_IO_PROTOCOLメソッドをまとめた。これらのメソッドは、UGAデバイスオブジェクトの作成および初期化、UGAデバイスオブジェクトの削除、およびUGAデバイスオブジェクトへのI/Oリクエストパケットの送信を行う。
0004416390.tif 000085
EFI_UGA_IO_CREATE_DEVICEメソッドは、UGAデバイスオブジェクトの作成および初期化を実行する。
0004416390.tif 000086
パラメータ
This
EFI_UGA_IO_PROTOCOL構造体へのポイント。
ParentDevice
作成するデバイスの親に対するUGA_DEVICE構造体へのポイント。値がNULLの場合、作成されたデバイスオブジェクトは列挙のルートである、つまり、型UgaDtParentBusのUGAデバイスオブジェクト(UGA_DEVICE_TYPE列挙型を参照)が作成される。
DeviceData
作成するデバイスのUGAデバイスデータを格納するUGA_DEVICE_DATA構造体へのポイント。
Run TimeContext
作成するデバイスの実行時環境固有のコンテキストを格納するメモリロケーションへのポイント。
Device
作成されたデバイスのUGA_DEVICE構造体のそのアドレスを受け取るメモリロケーションへのポイント。
戻り値
このメソッドは、標準EFIステータスコードを返す。
ヘッダ
efiuga.h内で宣言されている。efiuga.hとuga.hをインクルードする。
コメント
ビデオIHVは、このメソッドを実装する必要はない。EFI VMLスタティックライブラリに含まれる。実装の詳細については、セクション2.1「EFI-UGAバインドおよびFFI_UGA_IO_PROTOCOL実装例」を参照のこと。
EFI_UGA_IO_DELETE_DEVICE
EFI_UGA_IO_DELETE_DEVICEメソッドは、EFI_UGA_IO_CREATE_DEVICEメソッド呼び出しですでに作成されているUGAデバイスオブジェクトを削除する。
0004416390.tif 000087
パラメータ
This
EFI_UGA_IO_PROTOCOL構造体へのポイント。
Device
削除するデバイスのUGA_DEVICE構造体へのポイント。
戻り値
このメソッドは、標準EFIステータスコードを返す。
ヘッダ
efiuga.h内で宣言されている。efiuga.hとuga.hをインクルードする。
コメント
ビデオIHVは、このメソッドを実装する必要はない。EFI VMLスタティックライブラリに含まれる。実装の詳細については、セクション2.1「EFI-UGAバインドおよびFFI_UGA_IO_PROTOCOL実装例」のサンプルコードを参照のこと。
EFI_UGA_IO_DISPATCH_SERVICE
EFI_UGA_IO_DISPATCH_SERVICEメソッドは、UGA I/OリクエストパケットをUGAデバイスのオブジェクトに送信する。
0004416390.tif 000088
パラメータ
Device
列挙されているUGAデバイスと関連付けられているデバイスオブジェクトのUGA_DEVICE構造体へのポイント。
IoRequest
UGA I/Oリクエストパケットが格納されているUGA_IO_REQUEST構造体を指定する。
戻り値
このメソッドは、標準UGAステータスコードを返す。
ヘッダ
efiuga.h内で宣言されている。efiuga.hとuga.hをインクルードする。
コメント
ビデオIHVは、このメソッドを実装する必要がある。実装例については、セクション2.2「UGAファームウェアインターフェイス実装例」を参照のこと。
このメソッドは、主UGAファームウェアサービスディスパッチルーチンである。このメソッドを実装するほかに、ビデオIHVでは、IoRequest.ioRequestCodeで指定した関数を実装する必要がある(このメソッドが呼び出される関数の名前のリストについてはUGA_IO_REQUEST_CODE列挙型を参照)。
【００８５】
1.2  EFI_UGA_IO_PROTOCOL構造体
このセッションで取り上げている構造体は、EFI_UGA_IO_PROTOCOLメソッドで特定のUGAデバイスオブジェクトに関する情報を保持するために使用される。
0004416390.tif 000089
EFI_UGA_IO_PROTOCOL構造体には、UGAデバイスの作成、UGAデバイスの削除、およびUGAデバイスへのメッセージ送信に使用される関数のアドレスが格納される。
0004416390.tif 000090
メンバ
CreateDevice
UGAデバイスオブジェクトの作成に使用する関数へのポイント。
DeleteDevice
UGAデバイスオブジェクトの削除に使用する関数へのポイント。
DispatchService
UGAデバイスオブジェクトにメッセージを送信するために使用する関数へのポイント。
ヘッダ
efiuga.h内で宣言されている。efiuga.hをインクルードする。
EFI_UGA_I0_PROTOCOL_CONTEXT
EFI_UGA_IO_PROTOCOL_CONTEXT構造体には、EFI_UGA_IO_PROTOCOL構造体の情報と、さらにPCIビデオアダプタと関連するハンドラが格納される。
0004416390.tif 000091
メンバ
Protocol
EFI_UGA_IO_PROTOCOL構造体を指定する。
Controller
PCIビデオアダプタへのハンドラ。EFI実行時環境でこの値を指定する。
ヘッダ
efiuga.h内で宣言されている。efiuga.hをインクルードする。
【００８６】
1.3  EFI_UGA_IO_PROTOCOL定数
このセクションには、EFI_UGA_IO_PROTOCOL定数をまとめた。
0004416390.tif 000092
ヘッダ
efiuga.h内で定義されている。efiuga.hをインクルードする。
【００８７】
第2部
実装例
このセクションには、EFI-UGAバインドおよびEFI_UGA_IO_PROTOCOLの実装の仕方を説明するサンプルコードを掲載している。また、UGAファームウェアインターフェイス実装のサンプルコードも用意した。
2.1  EFI-UGAバインドとEFI_UGA_IO_PROTOCOL実装
2.2  UGAファームウェアインターフェイス実装
【００８８】
2.1  EFI-UGAバインドとEFI_UGA_IO_PROTOCOL実装例
/*++
このコードおよび情報は"as is(そのまま)"で提供され、販売可能性および/または特定目的への適合性の暗黙の保証をはじめとして暗示または明示を問わずいっさいの保証をしない。
Copyright (c) 2000 - 2001 Microsoft Corporation
モジュール名：
efiuga.h
要約：
EFI-UGAバインドコードの実装である。
作成者：
Michael Maciesowicz (mmacie) 07-August-2001
環境：
ファームウェアの起動時およびOSカーネルモードの実行時。
注意：
リビジョン履歴：
0004416390.tif 000093
0004416390.tif 000094
0004416390.tif 000095
0004416390.tif 000096
このコードおよび情報は"as is(そのまま)"で提供され、販売可能性および/または特定目的への適合性の暗黙の保証をはじめとして暗示または明示を問わずいっさいの保証をしない。
Copyright (c) 2000 - 2001 Microsoft Corporation
モジュール名：
efiuga.c
要約：
EFI-UGAバインドコードの実装である。
作成者：
Michael Maciesowicz (mmacie) 24-July-200l
環境：
ファームウェアの起動時およびOSカーネルモードの実行時。
注意：
リビジョン履歴：
0004416390.tif 000097
ルーチンの説明：
これはEFI ドライバへの主エントリポイントである。
引数：
ImageHandle - ドライバのイメージハンドルを指定する。
SystemTable - EFIシステムデータテーブルを指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000098
0004416390.tif 000099
ルーチンの説明：
このルーチンでは、EFIドライバイメージとハードウェアの互換性をチェックする。EFIドライバの必須エントリポイントである。
引数：
This - EFIドライババインドプロトコルを指定する。
Controller - PCIコントローラを指定する。
RemainingDevicePath - 追加EFIデバイスパスを指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000100
0004416390.tif 000101
0004416390.tif 000102
0004416390.tif 000103
0004416390.tif 000104
ルーチンの説明：
このルーチンにより、EFIドライバを起動する。EFIドライバの必須エントリポイントである。
引数：
This - EFIドライババインドプロトコルを指定する。
Controller - PCIコントローラを指定する。
RemainingDevicePath - 追加EFIデバイスパスを指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000105
0004416390.tif 000106
0004416390.tif 000107
ルーチンの説明：
このルーチンにより、EFIドライバを停止する。EFIドライバの必須エントリポイントである。
引数：
This - EFIドライババインドプロトコルを指定する。
Controller - PCIコントローラを指定する。
NumberOfChildren - PCIコントローラの子デバイスの数を指定する。
ChildHandleBuffer - PCIコントローラの子デバイスハンドルのリストを指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000108
0004416390.tif 000109
0004416390.tif 000110
ルーチンの説明：
このルーチンは、UGAデバイスオブジェクトの作成および初期化を実行する。
引数：
This - UGA IOプロトコルを指定する。
ParentDevice - UGA親デバイスを指定する。NULLは、列挙のルートを示し、UgaDtParentBusのUGAデバイスオブジェクトが作成される。
DeviceData - UGAデバイスデータを指定する。
RunTimeContext - 実行時環境固有のコンテキストを指定する。
Device - 作成されたUGAデバイスへのポインタの記憶域を指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000111
0004416390.tif 000112
0004416390.tif 000113
0004416390.tif 000114
0004416390.tif 000115
0004416390.tif 000116
ルーチンの説明：
このルーチンは、UGAデバイスオブジェクトを削除する。
引数：
This - UGA IOプロトコルを指定する。
Device - 削除するUGAデバイスオブジェクトを指定する。
戻り値：
EFIステータスコード。
0004416390.tif 000117
0004416390.tif 000118
【００８９】
2.2  UGAファームウェアインターフェイス実装例
このコードおよび情報は"as is(そのまま)"で提供され、販売可能性および/または特定目的への適合性の暗黙の保証をはじめとして暗示または明示を問わずいっさいの保証をしない。
Copyright (c) 2000 - 2001 Microsoft Corporation
モジュール名：
dispatch.c
要約：
これは、UGAファームウェアドライバ実装テンプレートである。
このモジュールには、UGAサービスのディスパッチルーチンが含まれる。
このテンプレートでは、UGAアダプタの以下の論理的レイアウト例を想定している。
0004416390.tif 000119
作成者：
Michael Maciesowicz (mmacie) 30-October-2000
環境：
ファームウェアの起動時およびOSカーネルモードの実行時。
注意：
リビジョン履歴：
0004416390.tif 000120
ルーチンの説明：
これは、主UGAファームウェアサービスディスパッチルーチンである。
これは必須のメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000121
0004416390.tif 000122
0004416390.tif 000123
ルーチンの説明：
これは、親バスのUGAファームウェアサービスディスパッチルーチンである。
これは必須のメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000124
0004416390.tif 000125
0004416390.tif 000126
ルーチンの説明：
これは、グラフィックコントローラのUGAファームウェアサービスディスパッチルーチンである。
これは必須のメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000127
0004416390.tif 000128
0004416390.tif 000129
ルーチンの説明：
これは、出力コントローラのUGAファームウェアサービスディスパッチルーチンである。
これは必須のメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000130
0004416390.tif 000131
0004416390.tif 000132
ルーチンの説明：
これは、出力ポートのUGAファームウェアサービスディスパッチルーチンである。
これは必須のメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000133
0004416390.tif 000134
0004416390.tif 000135
ルーチンの説明：
これは、その他のデバイスのUGAファームウェアサービスディスパッチルーチンである。
これはオプションのメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
戻り値：
UGAステータスコード。
0004416390.tif 000136
0004416390.tif 000137
0004416390.tif 000138
ルーチンの説明：
これは、デバイス型固有のディスパッチテーブルで渡すUGAファームウェアサービスディスパッチルーチンである。
これはオプションのメソッドである。
引数：
pDevice - 列挙されているUGAデバイスと関連するデバイスオブジェクトを指定する。
pIoRequest - UGA IOリクエストパケットへのポイントである。
ppUgaFwService - デバイス型固有のUGAサービスへのポインタの配列を指すポイント。
戻り値：
UGAステータスコード。
0004416390.tif 000139
0004416390.tif 000140
【図面の簡単な説明】
【図１】ＵＧＡファームウェアで公開されているインターフェイスを通じてＵＧＡハードウェアを抽象化するＢＩＯＳとレジスタインターフェイスと相互作用を行う従来のＶＧＡ特定ＢＩＯＳとの対比の図である。
【図２】本発明の一態様による、ＵＧＡ対応オペレーティングシステムのアーキテクチャ例の図である。
【図３】本発明の一態様による、ＵＧＡ対応ディスプレイアダプタのＵＧＡデバイスツリー例の図である。
【図４】本発明の一態様によりＵＧＡ  Ｉ／Ｏサービスリクエストのディスパッチを説明するフローチャートである。
【図５】本発明の一態様によるＵＧＡ出力範囲ネゴシエート（ｎｅｇｏｔｉａｔｉｎｇ）を説明するフローチャートである。
【図６】本発明の一態様によるＵＧＡデバイスの列挙を説明するフローチャートである。
【図７】本発明の一態様による、ＵＧＡファームウェアと相互作用できる子デバイスを持つ表示デバイスを示す図である。
【図８】本発明の一態様による、本発明が動作することが可能な、コンピューティング環境例の概略ブロック図である。
【図９】本発明の一態様による、ＵＧＡ対応ディスプレイアダプタのオプションＲＯＭレイアウト例の図である。
【符号の説明】
１００  オペレーティングシステム
１１０  ＵＧＡハードウェア
１２０  ＵＧＡファームウェア
１３０  オペレーティングシステム
１４０  ＶＧＡハードウェア
１５０  ＢＩＯＳ
２００  システム
２１０  ＵＧＡ仮想マシン
２２０  ＵＧＡハードウェア
２３０  ＶＧＡハードウェア
２４０  ＶＧＡ  Ｉ／Ｏレジスタインターフェイス
２４２  起動時アプリケーション
２５０  実行時アプリケーション
２６０  ハードウェア抽象レイヤ
２７０  ＵＧＡカーネルサービス
２６０  ＨＡＬ
２８０  起動時表示ＡＰＩ（アプリケーションプログラミングインターフェイス）
２９０  実行時表示ＡＰＩ
３００  階層
３１０  親デバイス
３２０  コントローラデバイス
３３０  デバイス
３４０または３５０  出力コントローラ
３４０  出力コントローラ
３４２  出力ポート
３５０  出力コントローラ
３４４  出力ポート
４００  方法
７００  オペレーティングシステム
７１０  ディスプレイデバイス
７１２から７１８  その子デバイス
８１０  コンピューティング環境
８１２  コンピュータ
８１４  処理ユニット
８１６  システムメモリ
８１８  システムバス
８２２  システムメモリ
８２４  ハードディスクドライブ
８２６  磁気ディスクドライブ
８２８  取り外し可能ディスク
８３０  光ディスクドライブ
８３２  ＣＤ−ＲＯＭディスク
８３４  ハードディスクドライブインターフェイス
８３６  磁気ディスクドライブインターフェイス
８３８  光ドライブインターフェイス
８４０  オペレーティングシステム
８４２  アプリケーションプログラム
８４４  プログラムモジュール
８４６  プログラムデータ
８４８  キーボード
８５０  マウス
８５２  シリアルポートインターフェイス
８５４  モニタ
８５６  ビデオアダプタ
８５８  リモートコンピュータ
８６０  メモリストレージデバイス
８６２  ローカルエリアネットワーク（ＬＡＮ）
８６４  ワイドエリアネットワーク（ＷＡＮ）
８６６  ネットワークインターフェイス
８６８  モデム
【図１】
0004416390.tif 000141
【図２】
0004416390.tif 000142
【図３】
0004416390.tif 000143
【図４】
0004416390.tif 000144
【図５】
0004416390.tif 000145
【図６】
0004416390.tif 000146
【図７】
0004416390.tif 000147
【図８】
0004416390.tif 000148
【図９】
0004416390.tif 000149