(57)【特許請求の範囲】
【請求項１】
汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするためのコンピューティングデバイスであって、
仮想ＧＰＩＯコントローラドライバと、
仮想ＧＰＩＯコントローラファームウェアインターフェースと、
仮想ＧＰＩＯコントローラとを備え、
前記仮想ＧＰＩＯコントローラドライバに基づいて前記コンピューティングデバイスは、（ｉ）前記コンピューティングデバイスのオペレーティングシステムからＧＰＩＯピンにより実装されるべき動作を指定するＧＰＩＯコマンドを受信し、（ｉｉ）前記ＧＰＩＯコマンドの受信に応答して、前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースに基づいて前記コンピューティングデバイスは、前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバから受信し、
前記仮想ＧＰＩＯコントローラに基づいて前記コンピューティングデバイスは、前記仮想ＧＰＩＯコントローラファームウェアインターフェースにおける前記仮想ＧＰＩＯコントローラドライバからの前記ＧＰＩＯコマンドの受信に応答して前記ＧＰＩＯコマンドを実装するべく、仮想ＧＰＩＯピンをエミュレートする、コンピューティングデバイス。
【請求項２】
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記ＧＰＩＯコマンドの一種である読み取りコマンドに応答して、前記仮想ＧＰＩＯピンの仮想入力値を判断することを含み、
前記仮想ＧＰＩＯコントローラドライバに基づいて前記コンピューティングデバイスは、更に、前記仮想ＧＰＩＯピンのエミュレーションに応答して前記仮想入力値を前記オペレーティングシステムに返す、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記ＧＰＩＯコマンドの一種である書き込みコマンドに応答して、前記仮想ＧＰＩＯピンの仮想出力値を判断することと、リファレンス期間中に前記仮想ＧＰＩＯピンの前記仮想出力値を維持することとを含む、請求項１に記載のコンピューティングデバイス。
【請求項４】
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記ＧＰＩＯコマンドの一種である制御コマンドに応答して、前記制御コマンドの機能として、前記仮想ＧＰＩＯピンの状態を修正することを含む、請求項１に記載のコンピューティングデバイス。
【請求項５】
前記仮想ＧＰＩＯコントローラドライバに基づいて前記コンピューティングデバイスは、更に、（ｉ）第２のＧＰＩＯピンにより実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信し、（ｉｉ）前記第２のＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースに基づいて前記コンピューティングデバイスは、更に、前記第２のＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバから受信し、
前記仮想ＧＰＩＯコントローラに基づいて前記コンピューティングデバイスは、更に、前記仮想ＧＰＩＯコントローラファームウェアインターフェースにおける前記仮想ＧＰＩＯコントローラドライバからの前記第２のＧＰＩＯコマンドの受信に応答して、前記第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする、請求項１に記載のコンピューティングデバイス。
【請求項６】
前記仮想ＧＰＩＯピンをエミュレートすることは、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、請求項１に記載のコンピューティングデバイス。
【請求項７】
前記仮想ＧＰＩＯピンをエミュレートすることは、更に、前記エンベデッドコントローラの物理ＧＰＩＯピンを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、請求項６に記載のコンピューティングデバイス。
【請求項８】
前記仮想ＧＰＩＯピンをエミュレートすることは、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、請求項１に記載のコンピューティングデバイス。
【請求項９】
前記仮想ＧＰＩＯコントローラに基づいて前記コンピューティングデバイスは、更に、前記仮想ＧＰＩＯコントローラにより用いるメモリセグメントを予約し、
前記仮想ＧＰＩＯピンをエミュレートすることは、予約した前記メモリセグメントを補助メモリとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、請求項１に記載のコンピューティングデバイス。
【請求項１０】
前記仮想ＧＰＩＯコントローラに基づいて前記コンピューティングデバイスは、更に、
前記仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信し、
前記ＧＰＩＯイベントの機能として、前記仮想ＧＰＩＯピンの前記状態を修正するべく、前記仮想ＧＰＩＯピンをエミュレートする、請求項１〜９のいずれか１項に記載のコンピューティングデバイス。
【請求項１１】
前記仮想ＧＰＩＯピンをエミュレートすることは、前記ＧＰＩＯイベントの一種である、前記コンピューティングデバイスのエンベデッドコントローラから受信されたＩ／Ｏイベントに応答して、前記Ｉ／Ｏイベントの機能として、前記仮想ＧＰＩＯピンの前記状態を修正することを含む、請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記仮想ＧＰＩＯピンをエミュレートすることは、前記ＧＰＩＯイベントの一種である、前記コンピューティングデバイスの周辺機器から受信されたＩ／Ｏイベントに応答して、前記Ｉ／Ｏイベントの機能として、前記仮想ＧＰＩＯピンの前記状態を修正することを含む、請求項１０に記載のコンピューティングデバイス。
【請求項１３】
前記仮想ＧＰＩＯコントローラファームウェアインターフェースに基づいて前記コンピューティングデバイスは、更に、前記仮想ＧＰＩＯピンの前記状態の修正に応答して、前記コンピューティングデバイスのＩ／Ｏサブシステムにより前記オペレーティングシステムに物理的割り込みをトリガする、請求項１０に記載のコンピューティングデバイス。
【請求項１４】
前記オペレーティングシステムに基づいて前記コンピューティングデバイスは、前記割り込みに応答して、前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバに送信する、請求項１３に記載のコンピューティングデバイス。
【請求項１５】
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）の方法を実装するためのものであり、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、仮想マシンアーキテクチャのためのバイトコードに基づくものである、請求項１〜９のいずれか１項に記載のコンピューティングデバイス。
【請求項１６】
コンピューティングデバイス上で汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするための方法であって、
前記コンピューティングデバイスにおけるオペレーティングシステムの仮想ＧＰＩＯコントローラドライバにより、ＧＰＩＯピンによって実装されるべき動作を指定するＧＰＩＯコマンドを受信する段階と、
前記ＧＰＩＯコマンドの受信に応答して、前記仮想ＧＰＩＯコントローラドライバから前記コンピューティングデバイスの仮想ＧＰＩＯコントローラファームウェアインターフェースへと前記ＧＰＩＯコマンドを送信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースにより前記仮想ＧＰＩＯコントローラドライバから前記ＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記ＧＰＩＯコマンドの受信に応答して、前記コンピューティングデバイスの仮想ＧＰＩＯコントローラにより前記ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートする段階とを備える、方法。
【請求項１７】
前記仮想ＧＰＩＯコントローラドライバにより、第２のＧＰＩＯピンによって実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラドライバから前記仮想ＧＰＩＯコントローラファームウェアインターフェースへと前記第２のＧＰＩＯコマンドを送信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースにより前記仮想ＧＰＩＯコントローラドライバから前記第２のＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記第２のＧＰＩＯコマンドの受信に応答して、前記コンピューティングデバイスの前記仮想ＧＰＩＯコントローラにより前記第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする段階とを更に備える、請求項１６に記載の方法。
【請求項１８】
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートする段階を有する、請求項１６に記載の方法。
【請求項１９】
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートする段階を有する、請求項１６に記載の方法。
【請求項２０】
前記仮想ＧＰＩＯコントローラにより、前記仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信する段階と、
前記仮想ＧＰＩＯコントローラにより、前記仮想ＧＰＩＯピンの前記状態を前記ＧＰＩＯイベントの機能として修正するべく、前記仮想ＧＰＩＯピンをエミュレートする段階とを更に備える、請求項１６に記載の方法。
【請求項２１】
前記ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントを前記コンピューティングデバイスのエンベデッドコントローラから受信する段階を有し、
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正する段階を有する、請求項２０に記載の方法。
【請求項２２】
前記ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントを前記コンピューティングデバイスの周辺機器から受信する段階を有し、
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正する段階を有する、請求項２０に記載の方法。
【請求項２３】
プロセッサと、
前記プロセッサにより実行されると、コンピューティングデバイスに請求項１６〜２２のいずれか１項に記載の方法を実行させる複数の命令を格納したメモリとを備える、コンピューティングデバイス。
【請求項２４】
実行されると、請求項１６〜２２のいずれか１項に記載の方法をコンピュータに実行させるコンピュータプログラム。
【請求項２５】
請求項１６〜２２のいずれか１項に記載の方法を実行するための手段を備える、コンピューティングデバイス。
【請求項２６】
請求項２４に記載のコンピュータプログラムを格納する、非一時的コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連する米国特許出願への相互参照］
【０００２】
本願は、２０１４年３月２７日に出願された「ＶＩＲＴＵＡＬ  ＧＥＮＥＲＡＬ−ＰＵＲＰＯＳＥ  Ｉ／Ｏ  ＣＯＮＴＲＯＬＬＥＲ」という名称の米国実用新案登録第１４／２２７，７３５号公報に対する優先権を主張する。
【０００３】
典型的なコンピューティングデバイスは、プラットフォームチップセットまたはプラットフォームシステムオンチップ内に含まれるいくつかの汎用入力／出力（「ＧＰＩＯ」）ピンを含む。ＧＰＩＯピンは、デジタルデータの読み取りおよび書き込みをサポートし得、コンピューティングデバイスに対するハードウェア割り込みを生成し得る。通常、ＧＰＩＯピンは多目的のものであり、コンピューティングデバイスによって特定用途に対して構成され得る。例えば、ＧＰＩＯピンはボタン、インジケータ、（例えばＬＥＤ）、スイッチ、またはセンサ（例えば、蓋閉センサ、ドッキングポートセンサ、ドライブ挿入センサ等）のようなプラットフォーム固有の複数の機能を駆動し、ビットバンし、またはそうでなければ制御するべく用いられ得る。
【０００４】
典型的なコンピューティングデバイスは、複数のＧＰＩＯピンを制御するべくチップセットまたはメインプロセッサに実装される１または複数のハードウェアＧＰＩＯコントローラを含む。コンピューティングデバイス上のソフトウェアまたはファームウェアは、ハードウェアＧＰＩＯコントローラに関連する特定のレジスタまたはメモリアドレスとの間の読み取りおよび書き込みによりハードウェアＧＰＩＯコントローラとインタラクトし得る。アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）仕様は、ハードウェアＧＰＩＯピンへのファームウェアインターフェースの一例を提供する。通常、オペレーティングシステム供給元は、プラットフォームチップセットに含まれなければならない特定のハードウェアＧＰＩＯピンを含む、必要となる最小限のハードウェアリソースを指定する。
【図面の簡単な説明】
【０００５】
本明細書において説明される複数の概念は、添付の複数の図において限定としてではなく例として図示されている。図示を簡単にして見やすくするべく、図に図示される複数の要素は、必ずしも縮尺通りに描かれない。適切と考えられる場合には、対応するか、または類似する複数の要素を示すべく、複数の図面において符号が反復されている。
【０００６】
【図１】仮想ＧＰＩＯコントローラを提供するコンピューティングデバイスの少なくとも一実施形態の簡略ブロック図である。
【０００７】
【図２】図１におけるコンピューティングデバイス環境の少なくとも一実施形態の簡略ブロック図である。
【０００８】
【図３】図１および２におけるコンピューティングデバイスによって実行され得る仮想ＧＰＩＯコントローラを初期化および起動するための方法の少なくとも一実施形態の簡略フロー図である。
【０００９】
【図４】図１および２におけるコンピューティングデバイスによって実行され得る複数のＧＰＩＯコマンドをモニタリングして処理するための方法の少なくとも一実施形態の簡略フロー図である。
【００１０】
【図５】図１および２におけるコンピューティングデバイスによって実行され得る複数のＧＰＩＯイベントをモニタリングして処理するための方法の少なくとも一実施形態の簡略フロー図である。
【発明を実施するための形態】
【００１１】
本開示の概念では、様々な変更形態および代替形態が可能であるが、それらの具体的な実施形態は、図面において例として示されており、本明細書において詳細に説明される。しかし、本開示の複数の概念を開示される特定の形態に限定する意図は存在せず、反対に本開示および添付の特許請求の範囲に即した全ての変更形態、均等物、および代替形態を包含する意図であることを理解されたい。
【００１２】
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」等を参照する場合、説明される実施形態が特定の特徴、構造、または特性を含み得ることを示すが、あらゆる実施形態は、当該特定の特徴、構造、または特性を含み得、または必ずしも含むわけではない場合がある。更に、そのような文言は同一の実施形態を必ずしも参照するわけではない。更に、特定の特徴、構造、または特性が一実施形態に関連して説明される場合、明示的に説明されているか否かにかかわらず、複数の他の実施形態に関連してそのような特徴、構造、または特性をもたらすことは当業者の知識の範囲内であると考えられる。更に、「少なくとも１つのＡ、Ｂ、およびＣ」の形での一覧に含まれる項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または（Ａ、Ｂ、およびＣ）を意味し得ることを理解されたい。同様に、「Ａ、Ｂ、またはＣのうちの少なくとも１つ」の形で列挙された複数の項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または（Ａ、Ｂ、およびＣ）を意味し得る。
【００１３】
複数の開示される実施形態はいくつかの場合に、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組み合わせで実装され得る。複数の開示される実施形態は、１または複数の一時的または非一時的機械可読（例えばコンピュータ可読）ストレージ媒体により実行され、またはこれらに格納される命令としても実装され得る。命令は、１または複数のプロセッサにより読み取られて実行され得る。機械可読ストレージ媒体は、機械（例えば、揮発性もしくは不揮発性メモリ、メディアディスク、または他の媒体のデバイス）により読み取り可能な形態の情報を格納または送信する任意のストレージデバイス、メカニズム、または他の物理構造体として実施され得る。
【００１４】
複数の図面において、いくつかの構造的または方法の特徴は、特定の配置および／または順序で示され得る。しかし、複数のそのような特定の配置および／または順序は必要とされない場合があることを理解されたい。むしろ、いくつかの実施形態においては、複数のそのような特徴は異なる態様で、および／または例示的な図に示されるものとは異なる順序で配置され得る。更に、特定の図面に構造的または方法の特徴を含んでいても、そのような特徴が全ての実施形態において必要とされることを示唆するとは予定されておらず、いくつかの実施形態において含まれていないか、または他の複数の特徴と組み合わされる場合がある。
【００１５】
図１を参照すると、例示的な実施形態においてコンピューティングデバイス１００は、コンピューティングデバイス１００により必要とされる物理ＧＩＰＯピンの総数を低減すべく仮想ＧＰＩＯコントローラを確立する。それを行うべく、以下に詳細に検討されるようにコンピューティングデバイス１００のオペレーティングシステムは、複数のＧＰＩＯコントローラドライバに対する標準的なインターフェースを確立し、その次に仮想ＧＰＩＯコントローラドライバをロードする。仮想ＧＰＩＯコントローラドライバは、オペレーティングシステムから複数のＧＰＩＯコマンド（例えば、読み取り、書き込み、状態、または制御コマンド）を受信して、コマンドを仮想ＧＰＩＯコントローラファームウェアインターフェースに転送する。仮想ＧＰＩＯコントローラファームウェアインターフェースがＧＰＩＯコマンドを受信したことに応答して、仮想ＧＰＩＯコントローラは１または複数の物理ＧＰＩＯピンの動作をエミュレートし、ＧＰＩＯコマンドに適切に応答する。複数のそのようなエミュレート済み物理ＧＰＩＯピンは、本明細書において「仮想ＧＰＩＯピン」と称される。
【００１６】
いくつかの実施形態において、仮想ＧＰＩＯコントローラは更にまたは代替的に、仮想ＧＰＩＯピンのエミュレートされた状態に影響する複数のプラットフォームイベントについてモニタリングし得る。仮想ＧＰＩＯピンのエミュレートされた状態に基づいて、仮想ＧＰＩＯコントローラは、仮想ＧＰＩＯファームウェアインターフェースにオペレーティングシステムにより処理される割り込みをアサートさせ得る。オペレーティングシステムは、１または複数のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバに渡して仮想ＧＰＩＯピンの状態をクエリし、次にそれに応じて応答することにより割り込みを処理する。従って、仮想ＧＰＩＯコントローラによりエミュレートされた仮想ＧＰＩＯピンは、オペレーティングシステムには１または複数の物理ＧＰＩＯピンと同一に見える。仮想ＧＰＩＯコントローラは、任意の数の仮想ＧＰＩＯピンをエミュレートし得ることを理解されたい。
【００１７】
本開示のコンピューティングデバイス１００は、オペレーティングシステム供給元により設定されたＧＰＩＯピンの複数の要件に準拠するべく必要とされる専用物理ＧＰＩＯピンの数を低減し得ることを理解されたい。更にまたは代替的に、コンピューティングデバイス１００は、コンピューティングデバイス１００のメインプロセッサ、チップセット、またはシステムオンチップと比べて通常あまり高価でなく、より容易にカスタマイズされる複数の周辺機器またはエンベデッドコントローラを用いて、必要とされるＧＰＩＯ機能を実装することができる場合がある。
【００１８】
コンピューティングデバイス１００は、本明細書に説明される複数の機能を実行するための任意のタイプのデバイスとして実施され得る。例えば、コンピューティングデバイス１００は、本明細書に説明される複数の機能を実行するように構成されたデスクトップコンピュータ、サーバコンピュータ、ワークステーション、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、スマートフォン、タブレットコンピュータ、携帯電話、ハンドセット、メッセージングデバイス、ウェアラブルコンピューティングデバイス、車両テレマティクスデバイス、分散コンピューティングシステム、マルチプロセッサシステム、消費者向け電子デバイス、および／またはその他のコンピューティングデバイスとして実施され得るが、これらに限定されない。図１に示されるように、例示的なコンピューティングデバイス１００は、プロセッサ１２０、入力／出力サブシステム１２２、メモリ１２６、およびデータストレージデバイス１３０を含む。勿論、他の複数の実施形態においてコンピューティングデバイス１００は、デスクトップコンピュータにおいて一般に見られるもの（例えば、様々な入力／出力デバイス）等の他のまたは追加の複数のコンポーネントを含んでもよい。更にいくつかの実施形態において、例示的なコンポーネントのうちの１または複数は、別のコンポーネントに組み込まれ、そうでなければこの一部を形成し得る。いくつかの実施形態において、例えばメモリ１２６またはその一部は、プロセッサ１２０に組み込まれ得る。
【００１９】
プロセッサ１２０は、本明細書において説明される複数の機能を実行することができる任意のタイプのプロセッサとして実施され得る。例えばプロセッサ１２０は、シングルもしくはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラもしくは他のプロセッサ、または処理／制御回路として実施され得る。同様に、メモリ１２６は、本明細書において説明される複数の機能を実行することができる任意のタイプの揮発性もしくは不揮発性メモリ、またはデータストレージとして実施され得る。動作時にメモリ１２６は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、およびドライバ等のコンピューティングデバイス１００の動作中に用いられる様々なデータおよびソフトウェアを格納し得る。例示的なメモリ１２６は、仮想ＧＰＩＯコントローラ１２８を含む。以下に更に説明されるように、仮想ＧＰＩＯコントローラ１２８は、１または複数の物理ＧＰＩＯピンをエミュレートし、適合させ、または要約するソフトウェアエンティティである。メモリ１２６はＩ／Ｏサブシステム１２２を介してプロセッサ１２０に通信可能に結合され、Ｉ／Ｏサブシステム１２２は、コンピューティングデバイス１００のプロセッサ１２０、メモリ１２６、および複数の他のコンポーネントとの入力／出力動作を容易にする回路および／またはコンポーネントとして実施され得る。例えばＩ／Ｏサブシステム１２２は、入力／出力動作を容易にするメモリコントローラハブ、入力／出力制御ハブ、ファームウェアデバイス、通信リンク（すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、ライトガイド、プリント回路基板トレース等）、および／または他のコンポーネント、ならびにサブシステムとして実施され、またはそうでなければこれらを含み得る。Ｉ／Ｏサブシステム１２２は、低減したピンＧＰＩＯセット１２４を更に含む。低減したピンＧＰＩＯセット１２４は、コンピューティングデバイス１００により用いられるいくつかの物理ＧＰＩＯピンを含み得る。低減したピンＧＰＩＯセット１２４は、通常のＩ／Ｏサブシステムと比較して数を低減した物理ＧＰＩＯピンを含み、いくつかの実施形態において１つのＧＰＩＯピンを含み得る。いくつかの実施形態において、Ｉ／Ｏサブシステム１２２は、１つの集積回路チップ上においてコンピューティングデバイス１００のプロセッサ１２０、メモリ１２６、および複数の他のコンポーネントと共にシステムオンチップ（ＳｏＣ）の一部を形成して組み込まれ得る。
【００２０】
データストレージデバイス１３０は、例えば、メモリデバイスおよび回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または他のデータストレージデバイス等、データの短期的もしくは長期的な格納のために構成された任意のタイプの１または複数のデバイスとして実施され得る。データストレージデバイス１３０は、オペレーティングシステムソフトウェアおよびアプリケーションソフトウェアを含む実行用のソフトウェアまたはの他のデータを格納するべく用いられ得る。
【００２１】
コンピューティングデバイス１００は、エンベデッドコントローラ１３２および／またはいくつかの周辺機器１３４を更に含み得る。エンベデッドコントローラ１３２は、プロセッサ１２０および／またはＩ／Ｏサブシステム１２２とは別個または独立したコンピューティングデバイス１００の任意のマイクロコントローラまたは他のコントローラチップとして実施され得る。エンベデッドコントローラ１３２は、複数の周辺機器１３４のうちの１または複数との通信の管理等、コンピューティングデバイス１００に対する任意の二次的または付随的コンピューティングアクティビティを実行し得る。エンベデッドコントローラ１３２は、ローピンカウント（ＬＰＣ）バスまたはシステム周辺相互接続（ＳＰＩ）バスのような比較的限定されたコンピューティングリソースを必要とするデータ接続を介してＩ／Ｏサブシステム１２２と通信し得る。更に、エンベデッドコントローラ１３２は、プロセッサ１２０またはＩ／Ｏサブシステム１２２と比較してより古いか、またはより大きな半導体処理ノード上に製造され得る。従って、エンベデッドコントローラ１３２は設計し、製造し、またはカスタマイズするには比較的安価であり得る。
【００２２】
複数の周辺機器１３４は、コンピューティングデバイス１００の任意の周辺機器コンポーネントとして実施され得る。例えば、周辺機器１３４は、ヒューマン入力デバイス、ディスプレイ、発光ダイオード（ＬＥＤ）等のインジケータ、温度センサもしくはデバイス挿入センサのようなセンサ、スイッチ、またはボタン等として実施され得る。複数の周辺機器１３４は、コンピューティングデバイス１００の蓋が閉じられているか否かを判断すること、媒体が媒体ドライブに挿入されたか否かを判断すること、またはハードウェアボタンとのユーザインタラクションに応答すること等、コンピューティングデバイス１００に対するプラットフォーム固有の機能を提供し得る。周辺機器１３４の各々は、Ｉ／Ｏサブシステム１２２またはエンベデッドコントローラ１３２に通信可能に直に結合され得る。各周辺機器１３４は、任意の適切なハードウェアインターフェースまたは通信プロトコルを用いて通信し得る。従って、各周辺機器１３４はＩ／Ｏサブシステム１２２の専用ＧＰＩＯピンに結合される必要はない。
【００２３】
ここで図２を参照すると、例示的な実施形態においてコンピューティングデバイス１００は、動作中に環境２００を確立する。例示的な環境２００は、いくつかのアプリケーション２０２、仮想ＧＰＩＯコントローラドライバ２０６を含むオペレーティングシステム２０４、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８、および仮想ＧＰＩＯコントローラ２１２を含む。環境２００の様々なモジュールおよび／またはコンポーネントは、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組み合わせとして実施され得る。
【００２４】
複数のアプリケーション２０２は、以下に更に説明されるように、仮想ＧＰＩＯコントローラ２１２によりエミュレートされた仮想ＧＰＩＯピンからデータを読み取り、書き込み、またはそうでなければアクセスするように構成される。複数のアプリケーション２０２は、ユーザレベルのインタラクティブな複数の機能、ならびに電力管理もしくはドッキングポート管理のようなユーティリティ、またはオペレーティングシステムレベルの機能を提供し得る。いくつかの実施形態において、複数のアプリケーション２０２は、仮想ＧＰＩＯピンを用いて接続された複数の周辺機器１３４に対するより高いレベルのデバイスドライバを含み得る。それらの実施形態において、デバイスドライバは、複数の周辺機器１３４が物理ＧＰＩＯピンに接続される条件において用いられる同一のデバイスドライバであってもよい。
【００２５】
オペレーティングシステム２０４は、複数のアプリケーション２０２を管理し、仮想ＧＰＩＯピンへのアクセスを制御するように構成される。オペレーティングシステム２０４は、複数のデバイスドライバ用の１または複数の規格化インターフェースを含む。従って、オペレーティングシステム２０４は、仮想ＧＰＩＯコントローラドライバ２０６を含むいくつかのデバイスドライバを生成および管理する。オペレーティングシステム２０４は、アプリケーション２０２（いくつかの実施形態において周辺機器ドライバまたは他のソフトウェア／ファームウェアを含む）から受信された複数のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバ２０６に転送し得る。更に、オペレーティングシステム２０４は複数のＧＰＩＯコマンドを独立して生成し、これらのコマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信し得る。更に上記のように、オペレーティングシステム２０４は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８により生成された複数の割り込みに応答し得る。そのような複数の割り込みに応答して、オペレーティングシステム２０４は、複数のＧＰＩＯコマンド、例えばクエリコマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信して、割り込みのソースを判断し得る。オペレーティングシステム２０４は、任意の技術を用い、例えば仮想ＧＰＩＯコントローラドライバ２０６により実装されたいくつかのコールバック機能を起動することにより、複数のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信し得る。
【００２６】
仮想ＧＰＩＯコントローラドライバ２０６は、複数のＧＰＩＯコマンドをオペレーティングシステム２０４から受信して、これらのＧＰＩＯコマンドを仮想ＧＰＩＯコントローラファームウェアインターフェース２０８に転送するように構成され得る。仮想ＧＰＩＯコントローラドライバ２０６は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８により必要とされる複数のＧＰＩＯコマンドを処理し、またはフォーマットし得る。いくつかの実施形態において、ＧＰＩＯコマンドは、大きくは変更されずに仮想ＧＰＩＯコントローラドライバ２０６を通過し得る。仮想ＧＰＩＯコントローラドライバ２０６は、オペレーティングシステム２０４の標準的ＧＰＩＯドライバインターフェースを実装する。従って、オペレーティングシステム２０４の視点から見ると、仮想ＧＰＩＯコントローラドライバ２０６は、物理ＧＰＩＯピン用のドライバと相互に交換可能であり得る。従って仮想ＧＰＩＯコントローラドライバ２０６は、オペレーティングシステム２０４のアドレス空間内に常駐し得る。いくつかの実施形態において、仮想ＧＰＩＯコントローラドライバ２０６およびオペレーティングシステム２０４は、異なる複数のエンティティにより提供され得る。例えば、仮想ＧＰＩＯコントローラドライバ２０６は、プラットフォームハードウェア供給元により提供され得る。
【００２７】
仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、複数のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバ２０６から受信するように構成される。更にまたは代替的に、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、仮想ＧＰＩＯコントローラ２１２により処理または生成された複数のＧＰＩＯイベントに応答して、オペレーティングシステム２０４に割り込み、またはそうでなければシグナリングし得る。仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、物理ＧＰＩＯピンと通信するべく用いられる規格化ファームウェアインターフェースを実装し得る。例えば、いくつかの実施形態において仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）仕様により規定されたファームウェア制御の方法を実装し得る。当該ファームウェア制御の方法は、コンピューティングデバイス１００により変換され得る規格化仮想マシンアーキテクチャ（すなわち「バイトコード」）のための複数の命令の集合として実施され得る。いくつかの実施形態において、それらの機能は、サブモジュールにより、例えばファームウェア制御の方法２１０により実行され得る。
【００２８】
仮想ＧＰＩＯコントローラ２１２は、１または複数の仮想ＧＰＩＯピンをエミュレートして、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８により受信されたＧＰＩＯコマンドを実装するように構成される。更にまたは代替的に、仮想ＧＰＩＯコントローラ２１２は、仮想ＧＰＩＯピンの状態に関係する複数のＧＰＩＯイベントを受信して実装するように構成される。例えば、ＧＰＩＯイベントは、コンピューティングデバイス１００のソフトウェアイベントに基づいてエミュレートされた仮想ＧＰＩＯピンの値における変更に対応し得る。別の例として、ＧＰＩＯイベントは、周辺機器１３４および／またはエンベデッドコントローラ１３２の状態に基づいてエミュレートされた仮想ＧＰＩＯピンの値における変更に対応し得る。仮想ＧＰＩＯコントローラ２１２は、コンピューティングデバイス１００の任意のサポートリソースを用いて仮想ＧＰＩＯピンをエミュレートし得る。例えば、仮想ＧＰＩＯコントローラ２１２は、いくつかの実施形態において仮想ＧＰＩＯピンの状態に関係するデータを格納するべくメモリ１２６の予約済みセグメントを用いて、ソフトウェアにおける仮想ＧＰＩＯピンをエミュレートし得る。更にまたは代替的に、仮想ＧＰＩＯコントローラ２１２は、１または複数の周辺機器１３４の動作を適合させることにより仮想ＧＰＩＯピンをエミュレートし得る。いくつかの実施形態において、仮想ＧＰＩＯコントローラ２１２は、１または複数のエンベデッドコントローラ１３２の動作を適合させることにより、例えばＧＰＩＯピンとして現れるようにエンベデッドコントローラ１３２のリソース（例えばＩ／Ｏピンまたはバス）を適合させることにより、またはいくつかの独立したＧＰＩＯピンとして現れるようにエンベデッドコントローラ１３２のリソースを多重化することにより、仮想ＧＰＩＯピンをエミュレートし得る。仮想ＧＰＩＯコントローラ２１２は、コンピューティングデバイス１００のアプリケーションコード、オペレーティングシステムドライバコード、またはファームウェアコードの任意の組み合わせとして実施され得る。いくつかの実施形態において、それらの機能は、１または複数のサブモジュールにより、例えばエミュレーションモジュール２１４、周辺機器モジュール２１６、またはエンベデッドコントローラモジュール２１８により実行され得る。別個のモジュールとして図示されているが、いくつかの実施形態において仮想ＧＰＩＯコントローラ２１２は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８および／またはファームウェア制御の方法２１０に含まれ、またはそうでなければこれらと組み合わされてもよい。
【００２９】
ここで図３を参照すると、使用中にコンピューティングデバイス１００は、仮想ＧＰＩＯピンを初期化してエミュレートするための方法３００を実行し得る。方法３００はブロック３０２において開始し、コンピューティングデバイス１００は仮想ＧＰＩＯコントローラ２１２を初期化する。コンピューティングデバイス１００は、必要とされる任意のデータ構造体または通信リンクを初期化することを含めて、仮想ＧＰＩＯコントローラ２１２が仮想ＧＰＩＯピンをエミュレートするのに必要ないずれの初期化も実行し得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック３０４において、仮想ＧＰＩＯピンに対するファームウェアを制御した補助メモリの領域を初期化し得る。補助メモリは、ファームウェアにより予約されたメインメモリ１２６のセグメントとして実施され得、従ってオペレーティングシステム２０４および／またはアプリケーション２０２により用いるには利用可能でない。補助メモリは、仮想ＧＰＩＯコントローラ２１２により用いられ、仮想ＧＰＩＯピンの状態、例えば仮想ＧＰＩＯピンに関連する複数の値を含むレジスタおよび仮想ＧＰＩＯピンの動作を制御する複数の値を含むレジスタを格納し得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック３０６において、エンベデッドコントローラ１３２および／または周辺機器１３４を初期化し得る。コンピューティングデバイス１００は、必要とされる任意の初期化、例えば複数のリセット信号または初期化コマンドの送信を実行し得る。
【００３０】
ブロック３０８において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８をロードする。コンピューティングデバイス１００は、オペレーティングシステム２０４と互換性のある任意の技術を用いて仮想ＧＰＩＯコントローラファームウェアインターフェース２０８をロードし得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック３１０において、ファームウェア制御の方法２１０を初期化して、ファームウェア制御の方法２１０をシステムデータテーブル内に格納し得る。ファームウェア制御の方法２１０は、オペレーティングシステム２０４と仮想ＧＰＩＯコントローラ２１２との間の通信を管理できる任意のファームウェアルーチンとして実施され得る。例えば、ファームウェア制御の方法２１０は、ＡＣＰＩ仕様により規定される制御の方法として実施され得る。ＡＣＰＩ制御の方法は、ＡＣＰＩ機械言語（ＡＭＬ）にコンパイルされるＡＣＰＩソース言語（ＡＳＬ）で書かれた複数の宣言および／または命令のセットとして実施され得る。ＡＭＬは、オペレーティングシステム２０４により変換され得るバイトコードの集合として実施され得る。ファームウェア制御の方法２１０のためのＡＭＬは、メモリ１２６内に格納された１または複数のＡＣＰＩテーブルにロードされ得る。ランタイムにおいて、オペレーティングシステム２０４は、複数のＡＣＰＩテーブル内に格納された適切なＡＭＬを検索することによりファームウェア制御の方法２１０にアクセスし得る。コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８の複数の機能を実行するべく、ファームウェア制御の方法２１０のＡＭＬを変換し得る。単一のファームウェア制御の方法２１０として図示されているが、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８はいくつかの実施形態において、任意の数のファームウェア制御の方法２１０を含み得る。例えば、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、いくつかのＡＣＰＩ制御の方法を含むＡＣＰＩデバイスとして実施されてもよい。
【００３１】
ブロック３１２において、コンピューティングデバイス１００は、オペレーティングシステム２０４をロードする。コンピューティングデバイス１００は、制御をオペレーティングシステム２０４に渡すファームウェアブートローダを実行し得る。ブロック３１４において、オペレーティングシステム２０４がロードされる間、またはその後にコンピューティングデバイス１００は仮想ＧＰＩＯコントローラドライバ２０６をロードする。例えば、いくつかの実施形態においてオペレーティングシステム２０４は、プラットフォームファームウェアにより規定された仮想ＧＰＩＯコントローラデバイスをエニュメレートすると、仮想ＧＰＩＯコントローラドライバ２０６をロードし得る。仮想ＧＰＩＯコントローラドライバ２０６をロードすることにより、オペレーティングシステム２０４が仮想ＧＰＩＯコントローラファームウェアインターフェース２０８と通信し、従って仮想ＧＰＩＯピンとインタラクトすることを可能にする。いくつかの実施形態において、コンピューティングデバイス１００は、１または複数のシステムデータテーブルを参照して、ロードされた仮想ＧＰＩＯコントローラファームウェアインターフェース２０８に適切な仮想ＧＰＩＯコントローラドライバ２０６を選択し得る。
【００３２】
ブロック３１６において、コンピューティングデバイス１００は、（オペレーティングシステム２０４により実行される任意のアプリケーション２０２を含む）オペレーティングシステム２０４を起動して、複数のＧＰＩＯイベントについてモニタリングする。複数のＧＰＩＯイベントは、１または複数のアプリケーション２０２により要求された複数のＧＰＩＯイベントを含む、オペレーティングシステム２０４により生じた複数のイベントを含み得る。複数のＧＰＩＯイベントは、ソフトウェアにより発信された複数のイベント、またはエンベデッドコントローラ１３２および／または周辺機器１３４から発信される複数のイベントを含む、仮想ＧＰＩＯコントローラ２１２により生じたイベントも含み得る。複数のＧＰＩＯイベントは、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８によりトリガされた割り込みも含み得る。ＧＰＩＯイベントを処理するための複数の方法は、図４および５に関連して以下に詳細に説明される。いくつかの実施形態では、コンピューティングデバイス１００はブロック３１８において、プロセッサ１２０および／またはＩ／Ｏサブシステム１２２のハードウェア割り込みを可能にし得る。とりわけ、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８は、単一のハードウェア割り込み回線を用いて複数のイベントをオペレーティングシステム２０４にシグナリングし得る。更にいくつかの実施形態において、仮想ＧＰＩＯコントローラ２１２は、ハードウェア割り込みをモニタリングして複数のエンベデッドコントローラ１３２および／または周辺機器１３４からのイベントを管理し得る。方法３００は、ブロック３１６にループバックしてオペレーティングシステム２０４の起動およびＧＰＩＯイベントに対するモニタリングを継続する。
【００３３】
ここで図４を参照すると、使用中にコンピューティングデバイス１００は、オペレーティングシステム２０４により受信された複数のＧＰＩＯイベントをモニタリングしてこれに応答するための方法４００を実行し得る。方法４００はブロック４０２において開始し、コンピューティングデバイス１００は、オペレーティングシステム２０４を用いてＧＰＩＯイベントについてモニタリングする。ＧＰＩＯイベントは、仮想ＧＰＩＯピンの状態に関係する任意のプラットフォームイベントとして実施され得る。複数のＧＰＩＯイベントは、読み取り、書き込み、または制御コマンド、ならびに仮想ＧＰＩＯピンの状態に関係する割り込みまたは他の複数の非同期的イベントのような複数のＧＰＩＯコマンドを含む。いくつかの実施形態では、コンピューティングデバイス１００はブロック４０４において、複数のＧＰＩＯサービスに対する呼び出しをアプリケーション２０２から受信し得る。オペレーティングシステム２０４は、複数のＧＰＩＯサービスに対する呼び出しをアプリケーション２０２から受信するべく規格化されたアプリケーションプログラミングインターフェース（ＡＰＩ）を実装し得る。 通常、サービスに対する呼び出しは、（ブロック４１０に関連して以下に更に説明される）複数のＩ／Ｏコマンドおよび制御コマンドを含む、１または複数のＧＰＩＯコマンドにマッピングされ得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック４０６において、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８から受信されたＧＰＩＯ割り込みをトラップし得る。割り込みは、仮想ＧＰＩＯピンの状態に基づいて、例えばエミュレーションからの状態変化または下の周辺機器１３４および／またはエンベデッドコントローラ１３２における状態変化に基づいて生成され得る。割り込みは、コンピューティングデバイス１００上のファームウェアに利用可能な任意の方法を用いてシグナリングされ得る。例えば、割り込みは、ＡＣＰＩ仕様により規定されるシステム制御割り込み（ＳＣＩ）として生成され得る。ＧＰＩＯ割り込みの生成は、図５の方法５００に関連して更に説明される。
【００３４】
ブロック４０８において、コンピューティングデバイス１００は、ＧＰＩＯイベントが受信されたか否かを判断する。受信されなかった場合、方法４００はブロック４０２にループバックしてＧＰＩＯイベントについてモニタリングを継続する。ＧＰＩＯイベントが受信された場合、方法４００はブロック４１０に進む。
【００３５】
ブロック４１０において、コンピューティングデバイス１００は、オペレーティングシステム２０４から仮想ＧＰＩＯコントローラドライバ２０６へとＧＰＩＯコマンドを送信する。ＧＰＩＯコマンドは、ＧＰＩＯピンにより実行されるべき動作を指定する。ＧＰＩＯコマンドは最終的に仮想ＧＰＩＯピンにより実装されるが、オペレーティングシステム２０４によって同一のインターフェースが物理および仮想ＧＰＩＯピンの双方に用いられる。従って、オペレーティングシステム２０４およびオペレーティングシステム２０４のドライバインターフェースは、物理および仮想ＧＰＩＯピンに対して同一であり得る。上記のように、ＧＰＩＯコマンドはアプリケーション２０２からのサービスに対する要求に応答し得、または仮想ＧＰＩＯコントローラファームウェアインターフェース２０８から受信された割り込みをサービス提供するように生成され得る。コンピューティングデバイス１００は、コマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信する任意の方法を用い得る。例えば、オペレーティングシステム２０４は仮想ＧＰＩＯコントローラドライバ２０６により規定された１または複数のコールバック機能を呼び出し得る。それらのコールバック機能は、複数のＧＰＩＯコントローラ用の周知のドライバインターフェースの一部であってもよい。従って、オペレーティングシステム２０４は、ハードウェアＧＰＩＯドライバについて同じように仮想ＧＰＩＯコントローラドライバ２０６とインタラクトする。
【００３６】
いくつかの実施形態では、コンピューティングデバイス１００はブロック４１２において、Ｉ／Ｏコマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信し得る。Ｉ／Ｏコマンドは、仮想ＧＰＩＯピンからのデータを読み取り、または書き込む複数のコマンドを含み得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック４１４において、制御コマンドを仮想ＧＰＩＯコントローラドライバ２０６に送信し得る。制御コマンドは、仮想ＧＰＩＯピンの動作を調整し、または仮想ＧＰＩＯピンの状態をクエリする複数のコマンドを含み得る。複数の制御コマンドは、仮想ＧＰＩＯピンにおいて割り込みを有効または無効にし、仮想ＧＰＩＯピンのロジックレベルを調整し、仮想ＧＰＩＯピンの駆動電流を調整するコマンド、または他の複数の制御コマンドを含み得る。例えば、オペレーティングシステム２０４は、ＧＰＩＯ割り込みを生じさせた仮想ＧＰＩＯピンまたは複数の仮想ＧＰＩＯピンを判断するべく複数の制御コマンドを送信し得る。
【００３７】
ブロック４１６において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラドライバ２０６から仮想ＧＰＩＯコントローラファームウェアインターフェース２０８へとＧＰＩＯコマンドを送信する。コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８を起動する任意の技術を用い得る。例えば、コンピューティングデバイス１００は、システムデータテーブルからファームウェア制御の方法２１０を選択して当該制御の方法を実行し得る。いくつかの実施形態において、ファームウェア制御の方法２１０は、適切なバイトコードインタプリタを用いて実行され得る。
【００３８】
ブロック４１８において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラ２１２を用いて仮想ＧＰＩＯピンをエミュレートし、ＧＰＩＯコマンドを実装する。コンピューティングデバイス１００は、仮想ＧＰＩＯピンの動作を仮想化し、要約し、またはそうでなければエミュレートする任意の技術を用い得る。勿論、いくつかの実施形態において仮想ＧＰＩＯコントローラファームウェアインターフェース２０８および仮想ＧＰＩＯコントローラ２１２は双方とも、ファームウェアまたは同一のファームウェア制御の方法２１０に実装され得ることを理解されたい。いくつかの実施形態では、コンピューティングデバイス１００はブロック４２０において、ハードウェアＧＰＩＯピンの動作をエミュレートし得る。例えば、コンピューティングデバイス１００は、当該特定の仮想ＧＰＩＯピンに関連する補助メモリ内に格納された値を読み取り、または書き込むことにより読み取りまたは書き込みコマンドに応答し得る。いくつかの実施形態において、補助メモリはファームウェアにより用いるべく予約されたメモリ１２６のセグメントとして実施され、従ってオペレーティングシステム２０４から分離され得る。従って、コンピューティングデバイス１００は、仮想ＧＰＩＯピンに割り当てられた値を維持し得る。すなわちコンピューティングデバイス１００は、少なくともある基準期間中は仮想ＧＰＩＯピンに関連する値を維持し得る。更にまたは代替的に、コンピューティングデバイス１００は、ソフトウェアモデルを用いるデバイスドライバもしくはアプリケーション、または他のエミュレーション技術を起動するハードウェアＧＰＩＯピンの動作をエミュレートし得る。
【００３９】
いくつかの実施形態では、コンピューティングデバイス１００はブロック４２２において、周辺機器１３４またはエンベデッドコントローラ１３２のインターフェースを仮想ＧＰＩＯピンとして適合させ得る。換言すれば、コンピューティングデバイス１００は、周辺機器１３４またはエンベデッドコントローラ１３２を用いて仮想ＧＰＩＯピンをエミュレートし得る。周辺機器１３４のインターフェースを適合させることにより、周辺機器１３４がオペレーティングシステム２０４には１または複数のハードウェアＧＰＩＯピンを介してコンピューティングデバイス１００に接続されているものとして見えるようになってもよい。具体的には、コンピューティングデバイス１００は、周辺機器１３４を制御するように用いられる特定のハードウェアまたはソフトウェアインターフェースを適合させ得る。例えば、コンピューティングデバイス１００は、複数のＧＰＩＯコマンド（例えば、読み取り、書き込み、状態、およびイベント）を特定の周辺機器１３４により用いられるハードウェアインターフェースに変換し得る。エンベデッドコントローラ１３２を適合させることにより、エンベデッドコントローラ１３２の１または複数の入力または出力は、オペレーティングシステム２０４にはハードウェアＧＰＩＯピンとして見えるようになり得る。それらの入力または出力は、エンベデッドコントローラ１３２上で複数の物理ＧＰＩＯピンとして実施され得る。例えば、コンピューティングデバイス１００は、適切な相互接続バスを介してエンベデッドコントローラ１３２との間で複数のＧＰＩＯコマンドを転送し得、エンベデッドコントローラ１３２は、それ自身のＩ／Ｏリソース（例えば、ＧＰＩＯピン、または他の複数のハードウェアインターフェース）により複数のＩ／Ｏ動作を実行し得る。いくつかの実施形態において、エンベデッドコントローラ１３２は、１または複数の周辺機器１３４とこのようにインターフェース接続し得る。
【００４０】
いくつかの実施形態では、コンピューティングデバイス１００はブロック４２４において、エンベデッドコントローラ１３２および／または周辺機器１３４に、またはこれらからＧＰＩＯデータを多重化し得る。例えば、シングルエンベデッドコントローラ１３２は、周辺機器１３４へのいくつかのハードウェアＩ／Ｏ接続を含んでもよいが、シングルバス、ピン、または割り込みを用いてＩ／Ｏサブシステム１２２に接続されてもよい。仮想ＧＰＩＯコントローラ２１２、またはコンピューティングデバイス１００の複数の追加の仮想ＧＰＩＯコントローラ２１２は、２つ以上の仮想ＧＰＩＯピンをエミュレートし得る。仮想ＧＰＩＯコントローラ２１２は、エンベデッドコントローラ１３２が各ハードウェアＩ／Ｏ接続に対して適切な動作を実行し得るように各仮想ＧＰＩＯピンに関係する複数のＧＰＩＯコマンドをパッケージ化し、識別し、またはそうでなければ多重化し得る。例えば、エンベデッドコントローラ１３２はいくつかのハードウェアＧＰＩＯピンを含んでもよく、仮想ＧＰＩＯコントローラ２１２はそれらのハードウェアＧＰＩＯピンの各々に対する仮想ＧＰＩＯピンをエミュレートしてもよい。同様に、いくつかの実施形態においてコンピューティングデバイス１００は、同一のハードウェア接続を共有するいくつかの周辺機器１３４に関連するいくつかの仮想ＧＰＩＯピンについてＧＰＩＯデータを多重化し得る。上記のように、多重化は、周辺機器１３４をサポートするのに必要とされるプロセッサ１２０および／またはＩ／Ｏサブシステム１２２上の物理ピンの数を減らすことができる。
【００４１】
いくつかの実施形態では、コンピューティングデバイス１００はブロック４２６において、仮想ＧＰＩＯピンのエミュレーションに応答してＧＰＩＯイベントを生成し得る。例えば、ソフトウェアエミュレーションは、ＧＰＩＯイベントが仮想ＧＰＩＯピンの新しい状態に基づいて生成されるべきであると決定してもよい。別の例として、コンピューティングデバイス１００は、ＧＰＩＯイベントがエンベデッドコントローラ１３２および／または周辺機器１３４とのインタラクションに基づいて生成されるべきであると決定してもよい。仮想ＧＰＩＯコントローラ２１２により生成されたＧＰＩＯイベントは、下記の図５における方法５００により処理され得る。
【００４２】
ブロック４２８において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラドライバ２０６を介してＧＰＩＯコマンドの結果をオペレーティングシステム２０４に返す。例えば、仮想ＧＰＩＯコントローラドライバ２０６は、オペレーティングシステム２０４により既に呼び出されたコールバックの方法からの結果を返してもよい。返された結果は、状態コードまたはＧＰＩＯイベントの成功を記載する他の情報を含み得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック４３０において、例えば読み取りコマンドに応答して仮想ＧＰＩＯデータをオペレーティングシステム２０４に返し得る。例えば、仮想ＧＰＩＯデータは、仮想ＧＰＩＯピンに関連する仮想入力値を表し得る。順次、オペレーティングシステム２０４は返されたＧＰＩＯデータを用いて、アプリケーション２０２に応答し、割り込みをサービス提供し、またはそうでなければＧＰＩＯイベントを処理し得る。結果を返した後、方法４００はブロック４０２にループバックして、複数のＧＰＩＯイベントについてモニタリングを継続する。
【００４３】
ここで図５を参照すると、使用中にコンピューティングデバイス１００は、仮想ＧＰＩＯコントローラ２１２により受信された複数のＧＰＩＯイベントをモニタリングしてこれに応答するための方法５００を実行し得る。方法５００はブロック５０２において開始し、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラ２１２を用いてＧＰＩＯイベントについてモニタリングする。仮想ＧＰＩＯコントローラ２１２は、ソフトウェアイベント、ハードウェアイベント、割り込み、ネットワークイベント、またはエミュレートされた仮想ＧＰＩＯピンに影響するその他のイベントを含む、仮想ＧＰＩＯピンの状態に影響する任意のプラットフォームイベントについてモニタリングし得る。ブロック５０４において、コンピューティングデバイス１００は、ソフトウェアＧＰＩＯイベントについてモニタリングする。当該ＧＰＩＯイベントは、例えば仮想ＧＰＩＯコントローラドライバ２０６から受信されたＧＰＩＯコマンドに応答して、仮想ＧＰＩＯコントローラ２１２自体によりソフトウェアまたはファームウェアの形で生成され得る。ソフトウェアＧＰＩＯイベントの生成は、図４のブロック４２６に関連して上記において更に説明されている。いくつかの実施形態では、コンピューティングデバイス１００はブロック５０６において、仮想ＧＰＩＯコントローラ２１２のファームウェアを制御した補助メモリをモニタリングし得る。コンピューティングデバイス１００は、例えばプラットフォームイベントがデータを補助メモリに書き込んだ場合に、補助メモリにおける任意の複数の値が変更されたか否かを判断し得る。いくつかの実施形態では、コンピューティングデバイス１００はブロック５０８において、周辺機器１３４とのＩ／Ｏについてモニタリングし得る。コンピューティングデバイス１００は、データが周辺機器１３４に送信または受信されたか否か、周辺機器１３４が割り込みをトリガしたか否か、周辺機器１３４が送信される準備のできたデータを有するか否か、または周辺機器１３４とのその他のＩ／Ｏ動作が保留中か否かを判断し得る。同様にいくつかの実施形態では、コンピューティングデバイス１００はブロック５１０において、エンベデッドコントローラ１３２とのＩ／Ｏについてモニタリングし得る。
【００４４】
ブロック５１２において、コンピューティングデバイス１００は、ＧＰＩＯイベントが受信されたか否かを判断する。受信されなかった場合、方法５００はブロック５０２にループバックして、複数のＧＰＩＯイベントについてモニタリングを継続する。ＧＰＩＯイベントが受信された場合、方法５００はブロック５１４に進む。
【００４５】
ブロック５１４において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラ２１２を用いて仮想ＧＰＩＯピンをエミュレートし、ＧＰＩＯイベントを処理する。具体的には、仮想ＧＰＩＯピンのエミュレートされた状態は、ＧＰＩＯイベントの処理に応答して修正され得る。コンピューティングデバイス１００は、仮想ＧＰＩＯピンの動作を仮想化し、要約し、適合させ、またはそうでなければエミュレートする任意の技術を用い得る。勿論、いくつかの実施形態において仮想ＧＰＩＯコントローラファームウェアインターフェース２０８および仮想ＧＰＩＯコントローラ２１２は双方とも、ファームウェアまたは同一のファームウェア制御の方法２１０に実装され得ることを理解されたい。いくつかの実施形態では、コンピューティングデバイス１００はブロック５１６において、ハードウェアＧＰＩＯピンの動作をエミュレートし得る。例えば、コンピューティングデバイス１００は、仮想ＧＰＩＯピンに関連する仮想入力値または仮想ＧＰＩＯピンに関連する仮想出力値を決定し得る。いくつかの実施形態において、仮想ＧＰＩＯピンのエミュレートされた状態は、上記のようにファームウェアを制御した補助メモリ内に格納され得る。更にまたは代替的に、コンピューティングデバイス１００は、ソフトウェアモデルを用い、デバイスドライバもしくはアプリケーションを起動し、またはその他のエミュレーション技術を用いるハードウェアＧＰＩＯピンの動作をエミュレートし得る。
【００４６】
いくつかの実施形態では、コンピューティングデバイス１００はブロック５１８において、周辺機器１３４またはエンベデッドコントローラ１３２のインターフェースを仮想ＧＰＩＯピンとして適合させ得る。周辺機器１３４のインターフェースを適合させることにより、周辺機器１３４がオペレーティングシステム２０４には１または複数のハードウェアＧＰＩＯピンを介してコンピューティングデバイス１００に接続されているものとして見えるようになってもよい。具体的には、コンピューティングデバイス１００は、周辺機器１３４を制御するように用いられる特定のハードウェアまたはソフトウェアインターフェースを適合させ得る。例えば、コンピューティングデバイス１００は、仮想ＧＰＩＯピンのエミュレートされた状態を修正するべく、特定の周辺機器１３４から受信された複数のＩ／Ｏイベント（例えば、入力、出力、または割り込み）を変換し得る。エンベデッドコントローラ１３２を適合させることにより、エンベデッドコントローラ１３２の１または複数の入力または出力の状態に基づいて仮想ＧＰＩＯピンの状態を修正し得る。それらの入力または出力は、エンベデッドコントローラ１３２上で複数の物理ＧＰＩＯピンとして実施され得る。いくつかの実施形態において、エンベデッドコントローラ１３２は、１または複数の周辺機器１３４とこのようにインターフェース接続し得る。
【００４７】
いくつかの実施形態では、コンピューティングデバイス１００はブロック５２０において、エンベデッドコントローラ１３２および／または周辺機器１３４に、またはこれらからＧＰＩＯデータを多重化し得る。例えば、シングルエンベデッドコントローラ１３２は、周辺機器１３４へのいくつかのハードウェアＩ／Ｏ接続を含んでもよいが、シングルバスピンまたは割り込みを用いてＩ／Ｏサブシステム１２２に接続されてもよい。仮想ＧＰＩＯコントローラ２１２、またはコンピューティングデバイス１００の複数の追加の仮想ＧＰＩＯコントローラ２１２は、２つ以上の仮想ＧＰＩＯピンをエミュレートし得る。仮想ＧＰＩＯコントローラ２１２は、エンベデッドコントローラ１３２から受信された複数のＩ／Ｏイベントをいくつかの仮想ＧＰＩＯピンへとパッケージ化し、識別し、またはそうでなければ多重化し得る。例えば、エンベデッドコントローラ１３２はいくつかのハードウェアＧＰＩＯピンを含んでもよく、仮想ＧＰＩＯコントローラ２１２はそれらのハードウェアＧＰＩＯピンの各々に対する仮想ＧＰＩＯピンをエミュレートしてもよい。同様に、いくつかの実施形態においてコンピューティングデバイス１００は、同一のハードウェア接続を共有するいくつかの周辺機器１３４に関連するいくつかの仮想ＧＰＩＯピンについてＧＰＩＯデータを多重化し得る。上記のように、多重化は、周辺機器１３４をサポートするのに必要とされるプロセッサ１２０および／またはＩ／Ｏサブシステム１２２上の物理ピンの数を減らすことができる。
【００４８】
ＧＰＩＯイベントを処理した後、コンピューティングデバイス１００はブロック５２２において、割り込みがＧＰＩＯイベントに対して有効にされたか否かを判断する。割り込みは、仮想ＧＰＩＯコントローラドライバ２０６または仮想ＧＰＩＯコントローラファームウェアインターフェース２０８から受信された複数の制御コマンドにより既に有効にされている場合がある。割り込みは、個々の仮想ＧＰＩＯピンに対して有効にされてもよい。従って、コンピューティングデバイス１００は、有効にされた複数の仮想ＧＰＩＯピンに関係する仮想ＧＰＩＯデータが変更されたか否かを判断し得る。更にまたは代替的に、コンピューティングデバイス１００は、割り込みがＧＰＩＯイベントに対して適切か否かを判断し得る。例えば、仮想ＧＰＩＯピンの状態が変更された場合には、割り込みは適切であり得る。割り込みが有効にされない場合、方法５００はブロック５０２にループバックして、複数のＧＰＩＯイベントについてモニタリングを継続する。上記のように、オペレーティングシステム２０４は、適切な複数のＧＰＩＯコマンドを送信することにより、後の時点で同期してＧＰＩＯデータを読み取り得る。割り込みが有効にされる場合、方法５００はブロック５２４に進む。
【００４９】
ブロック５２４において、コンピューティングデバイス１００は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８からオペレーティングシステム２０４への割り込みをトリガする。仮想ＧＰＩＯコントローラ２１２は、仮想ＧＰＩＯコントローラファームウェアインターフェース２０８を起動して割り込みを生成し得る。割り込みは、Ｉ／Ｏサブシステム１２２により生成された物理的割り込みとして実施され得、Ｉ／Ｏサブシステム１２２は、上記のようにディスクリートチップとして実施され、またはコンピューティングデバイス１００のシステムオンチップ（ＳｏＣ）に含まれ得る。割り込みはオペレーティングシステム２０４により処理され得、オペレーティングシステム２０４は次に、仮想ＧＰＩＯコントローラドライバ２０６の適切な複数の機能を呼び出して割り込みをサービス提供し得る。ファームウェア割り込みの処理は、図４のブロック４０６に関連して上記において更に説明されている。割り込みは、オペレーティングシステム２０４と互換性のある任意の適切な技術を用いてトリガされ得る。例えば、割り込みは、ＡＣＰＩ仕様により規定されるシステム制御割り込み（ＳＣＩ）として実施され得る。割り込みをトリガした後、方法５００はブロック５０２にループバックして、複数のＧＰＩＯイベントについてモニタリングを継続する。
【００５０】
方法４００、５００は、複数のＧＰＩＯイベントについて同期してモニタリングするものとして説明されているが、いくつかの実施形態において方法４００、５００は、イベント駆動型または非同期的であり得ることを理解されたい。更に方法４００、５００は、コンピューティングデバイス１００上で互いに、コンピューティングデバイス１００のオペレーティングシステム２０４および任意のアプリケーション２０２と同時に実行され得る。
【００５１】
［例］
本明細書に開示される複数の技術の具体例が以下に提供される。複数の技術の実施形態は、下記の複数の例の任意の１または複数および任意の組み合わせを含み得る。
【００５２】
例１は、汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするためのコンピューティングデバイスを含み、コンピューティングデバイスは、仮想ＧＰＩＯコントローラドライバと、仮想ＧＰＩＯコントローラファームウェアインターフェースと、仮想ＧＰＩＯコントローラとを備え、仮想ＧＰＩＯコントローラドライバは、（ｉ）コンピューティングデバイスのオペレーティングシステムからＧＰＩＯピンにより実装されるべき動作を指定するＧＰＩＯコマンドを受信し、（ｉｉ）ＧＰＩＯコマンドの受信に応答して、ＧＰＩＯコマンドを仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、仮想ＧＰＩＯファームウェアインターフェースは、ＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバから受信し、仮想ＧＰＩＯコントローラは、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからのＧＰＩＯコマンドの受信に応答してＧＰＩＯコマンドを実装するべく、仮想ＧＰＩＯピンをエミュレートする。
【００５３】
例２は例１の主題を含み、ＧＰＩＯコマンドは、読み取りコマンドを含み、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートすることは、仮想ＧＰＩＯピンの仮想入力値を判断することを含み、仮想ＧＰＩＯコントローラドライバは、更に、仮想ＧＰＩＯピンのエミュレーションに応答して仮想入力値をオペレーティングシステムに返す。
【００５４】
例３は例１および２のうちのいずれかの主題を含み、ＧＰＩＯコマンドは、書き込みコマンドを含み、ＧＰＩＯコマンド実装するべく仮想ＧＰＩＯピンをエミュレートすることは、仮想ＧＰＩＯピンの仮想出力値を判断することと、基準期間中に仮想ＧＰＩＯピンの仮想出力値を維持することを含む。
【００５５】
例４は例１〜３のいずれかの主題を含み、ＧＰＩＯコマンドは、制御コマンドを含み、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートすることは、仮想ＧＰＩＯピンの状態を制御コマンドの機能として修正することを含む。
【００５６】
例５は例１〜４のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバは、更に、（ｉ）第２のＧＰＩＯピンにより実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信し、（ｉｉ）第２のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、仮想ＧＰＩＯコントローラファームウェアインターフェースは、更に、第２のＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバから受信し、仮想ＧＰＩＯコントローラは、更に、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからの第２のＧＰＩＯコマンドの受信に応答して、第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする。
【００５７】
例６は例１〜５のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートすることは、コンピューティングデバイスのマイクロコントローラを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートすることを含む。
【００５８】
例７は例１〜６のいずれかの主題を含み、マイクロコントローラは、コンピューティングデバイスのエンベデッドコントローラを備える。
【００５９】
例８は例１〜７のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートすることは、更に、エンベデッドコントローラの物理ＧＰＩＯピンを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートすることを含む。
【００６０】
例９は例１〜８のいずれかの主題を含み、仮想ＧＰＩＯコントローラは、更に、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて第２の仮想ＧＰＩＯピンをエミュレートする。
【００６１】
例１０は例１〜９のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートすることは、コンピューティングデバイスの周辺機器へのインターフェースを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートすることを含む。
【００６２】
例１１は例１〜１０のいずれかの主題を含み、仮想ＧＰＩＯコントローラは、更に、仮想ＧＰＩＯコントローラにより用いるメモリセグメントを予約し、仮想ＧＰＩＯピンをエミュレートすることは、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートすることを含む。
【００６３】
例１２は例１〜１１のいずれかの主題を含み、仮想ＧＰＩＯコントローラは、更に、仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信し、仮想ＧＰＩＯピンの状態をＧＰＩＯイベントの機能として修正するべく、仮想ＧＰＩＯピンをエミュレートする。
【００６４】
例１３は例１〜１２のいずれかの主題を含み、ＧＰＩＯイベントは、コンピューティングデバイスのマイクロコントローラから受信されたＩ／Ｏイベントを含み、仮想ＧＰＩＯピンをエミュレートすることは、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正することを含む。
【００６５】
例１４は例１〜１３のいずれかの主題を含み、マイクロコントローラは、コンピューティングデバイスのエンベデッドコントローラを備える。
【００６６】
例１５は例１〜１４のいずれかの主題を含み、仮想ＧＰＩＯコントローラは、更に、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて第２の仮想ＧＰＩＯピンをエミュレートする。
【００６７】
例１６は例１〜１５のいずれかの主題を含み、ＧＰＩＯイベントは、コンピューティングデバイスの周辺機器から受信されたＩ／Ｏイベントを含み、仮想ＧＰＩＯピンをエミュレートすることは、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正することを含む。
【００６８】
例１７は例１〜１６のいずれかの主題を含み、仮想ＧＰＩＯコントローラは、更に、仮想ＧＰＩＯコントローラにより用いられるメモリセグメントを予約し、ＧＰＩＯイベントを受信することは、予約したメモリセグメントへのメモリアクセスを検出することを含み、仮想ＧＰＩＯピンをエミュレートすることは、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートすることを含む。
【００６９】
例１８は例１〜１７のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、更に、仮想ＧＰＩＯピンの状態の修正に応答して、コンピューティングデバイスのＩ／Ｏサブシステムによりオペレーティングシステムに物理的割り込みをトリガする。
【００７０】
例１９は例１〜１８のいずれかの主題を含み、割り込みは、オペレーティングシステムにＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバに送信させる。
【００７１】
例２０は例１〜１９のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバによりＧＰＩＯコマンドを受信することは、オペレーティングシステムからコールバックの方法を受信することを含む。
【００７２】
例２１は例１〜２０のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
【００７３】
例２２は例１〜２１のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、複数のＡＣＰＩ制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）デバイスを有する。
【００７４】
例２３は、コンピューティングデバイス上で汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするための方法を含み、方法は、コンピューティングデバイスにおけるオペレーティングシステムの仮想ＧＰＩＯコントローラドライバにより、ＧＰＩＯピンによって実装されるべき動作を指定するＧＰＩＯコマンドを受信する段階と、ＧＰＩＯコマンドの受信に応答して、仮想ＧＰＩＯコントローラドライバからコンピューティングデバイスの仮想ＧＰＩＯコントローラファームウェアインターフェースへとＧＰＩＯコマンドを送信する段階と、仮想ＧＰＩＯコントローラファームウェアインターフェースにより仮想ＧＰＩＯコントローラドライバからＧＰＩＯコマンドを受信する段階と、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからのＧＰＩＯコマンドの受信に応答して、コンピューティングデバイスの仮想ＧＰＩＯコントローラによりＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートする段階とを備える。
【００７５】
例２４は例２３の主題を含み、ＧＰＩＯコマンドを受信する段階は、読み取りコマンドを受信する段階を有し、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートする段階は、仮想ＧＰＩＯピンの仮想入力値を決定する段階を有し、方法は、仮想ＧＰＩＯピンをエミュレートすることに応答して仮想ＧＰＩＯコントローラドライバからの仮想入力値をオペレーティングシステムに返す段階を更に備える。
【００７６】
例２５は例２３および２４のうちのいずれかの主題を含み、ＧＰＩＯコマンドを受信する段階は、書き込みコマンドを受信する段階を有し、ＧＰＩＯコマンド実装するべく仮想ＧＰＩＯピンをエミュレートする段階は、仮想ＧＰＩＯピンの仮想出力値を判断する段階と、基準期間中に仮想ＧＰＩＯピンの仮想出力値を維持する段階とを有する。
【００７７】
例２６は例２３〜２５のいずれかの主題を含み、ＧＰＩＯコマンドを受信する段階は、制御コマンドを受信する段階を有し、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートする段階は、仮想ＧＰＩＯピンの状態を制御コマンドの機能として修正する段階を有する。
【００７８】
例２７は例２３〜２６のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバにより、第２のＧＰＩＯピンによって実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信する段階と、仮想ＧＰＩＯコントローラドライバから仮想ＧＰＩＯコントローラファームウェアインターフェースへと第２のＧＰＩＯコマンドを送信する段階と、仮想ＧＰＩＯコントローラファームウェアインターフェースにより仮想ＧＰＩＯコントローラドライバから第２のＧＰＩＯコマンドを受信する段階と、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからの第２のＧＰＩＯコマンドの受信に応答して、コンピューティングデバイスの仮想ＧＰＩＯコントローラにより第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする段階とを更に備える。
【００７９】
例２８は例２３〜２７のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートする段階は、コンピューティングデバイスのマイクロコントローラを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００８０】
例２９は例２３〜２８のいずれかの主題を含み、マイクロコントローラを用いて仮想ＧＰＩＯピンをエミュレートする段階は、コンピューティングデバイスのエンベデッドコントローラを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００８１】
例３０は例２３〜２９のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートする段階は、更に、エンベデッドコントローラの物理ＧＰＩＯピンを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００８２】
例３１は例２３〜３０のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて、コンピューティングデバイスの仮想ＧＰＩＯコントローラにより第２の仮想ＧＰＩＯピンをエミュレートする段階を更に有する。
【００８３】
例３２は例２３〜３１のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートする段階は、コンピューティングデバイスの周辺機器へのインターフェースを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００８４】
例３３は例２３〜３２のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより用いられるメモリセグメントを予約する段階を更に備え、仮想ＧＰＩＯピンをエミュレートする段階は、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００８５】
例３４は例２３〜３３のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより、仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信する段階と、仮想ＧＰＩＯコントローラにより、仮想ＧＰＩＯピンの状態をＧＰＩＯイベントの機能として修正するべく、仮想ＧＰＩＯピンをエミュレートする段階とを更に備える。
【００８６】
例３５は例２３〜３４のいずれかの主題を含み、ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントをコンピューティングデバイスのマイクロコントローラから受信する段階を有し、仮想ＧＰＩＯピンをエミュレートする段階は、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正する段階を有する。
【００８７】
例３６は例２３〜３５のいずれかの主題を含み、Ｉ／Ｏイベントを受信する段階は、Ｉ／Ｏイベントをコンピューティングデバイスのエンベデッドコントローラから受信する段階を有する。
【００８８】
例３７は例２３〜３６のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて、仮想ＧＰＩＯコントローラにより第２の仮想ＧＰＩＯピンをエミュレートする段階を更に備える。
【００８９】
例３８は例２３〜３７のいずれかの主題を含み、ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントをコンピューティングデバイスの周辺機器から受信する段階を有し、仮想ＧＰＩＯピンをエミュレートする段階は、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正する段階を有する。
【００９０】
例３９は例２３〜３８のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより用いられるメモリセグメントを予約する段階を更に備え、ＧＰＩＯイベントを受信する段階は、予約したメモリセグメントへのメモリアクセスを検出する段階を有し、仮想ＧＰＩＯピンをエミュレートする段階は、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートする段階を有する。
【００９１】
例４０は例２３〜３９のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、更に、仮想ＧＰＩＯピンの状態の修正に応答して、コンピューティングデバイスのＩ／Ｏサブシステムによりオペレーティングシステムに物理的割り込みをトリガする段階を有する。
【００９２】
例４１は例２３〜４０のいずれかの主題を含み、割り込みは、オペレーティングシステムにＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバに送信させる。
【００９３】
例４２は例２３〜４１のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバによりＧＰＩＯコマンドを受信する段階は、オペレーティングシステムからコールバックの方法を受信する段階を有する。
【００９４】
例４３は例２３〜４２のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
【００９５】
例４４は例２３〜４３のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、複数のＡＣＰＩ制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）デバイスを有する。
【００９６】
例４５は、プロセッサと、プロセッサにより実行されると、コンピューティングデバイスに例２３〜４４のいずれかの方法を実行させる複数の命令を格納したメモリとを備えるコンピューティングデバイスを含む。
【００９７】
例４６は、実行されることに応答して、例２３〜４４のいずれかの方法を実行するコンピューティングデバイスをもたらす、格納された複数の命令を備えた１または複数の機械可読ストレージ媒体を含む。
【００９８】
例４７は、例２３〜４４のいずれかの方法を実行するための手段を備える、コンピューティングデバイスを含む。
【００９９】
例４８は、汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするためのコンピューティングデバイスを含み、コンピューティングデバイスは、コンピューティングデバイスにおけるオペレーティングシステムの仮想ＧＰＩＯコントローラドライバにより、ＧＰＩＯピンによって実装されるべき動作を指定するＧＰＩＯコマンドを受信するための手段と、ＧＰＩＯコマンドの受信に応答して、仮想ＧＰＩＯコントローラドライバからコンピューティングデバイスの仮想ＧＰＩＯコントローラファームウェアインターフェースへとＧＰＩＯコマンドを送信するための手段と、仮想ＧＰＩＯコントローラファームウェアインターフェースにより仮想ＧＰＩＯコントローラドライバからＧＰＩＯコマンドを受信するための手段と、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからのＧＰＩＯコマンドの受信に応答して、コンピューティングデバイスの仮想ＧＰＩＯコントローラによりＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートするための手段とを備える。
【０１００】
例４９は例４８の主題を含み、ＧＰＩＯコマンドを受信するための手段は、読み取りコマンドを受信するための手段を有し、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートするための手段は、仮想ＧＰＩＯピンの仮想入力値を決定するための手段を有し、コンピューティングデバイスは、仮想ＧＰＩＯピンをエミュレートすることに応答して仮想ＧＰＩＯコントローラドライバからの仮想入力値をオペレーティングシステムに返すための手段を更に備える。
【０１０１】
例５０は例４８および４９のうちのいずれかの主題を含み、ＧＰＩＯコマンドを受信するための手段は、書き込みコマンドを受信するための手段を有し、ＧＰＩＯコマンド実装するべく仮想ＧＰＩＯピンをエミュレートするための手段は、仮想ＧＰＩＯピンの仮想出力値を判断するための手段と、基準期間中に仮想ＧＰＩＯピンの仮想出力値を維持するための手段とを有する。
【０１０２】
例５１は例４８〜５０のいずれかの主題を含み、ＧＰＩＯコマンドを受信するための手段は、制御コマンドを受信するための手段を有し、ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートするための手段は、仮想ＧＰＩＯピンの状態を制御コマンドの機能として修正するための手段を有する。
【０１０３】
例５２は例４８〜５１のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバにより、第２のＧＰＩＯピンによって実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信するための手段と、仮想ＧＰＩＯコントローラドライバから仮想ＧＰＩＯコントローラファームウェアインターフェースへと第２のＧＰＩＯコマンドを送信するための手段と、仮想ＧＰＩＯコントローラファームウェアインターフェースにより仮想ＧＰＩＯコントローラドライバから第２のＧＰＩＯコマンドを受信するための手段と、仮想ＧＰＩＯコントローラファームウェアインターフェースによる仮想ＧＰＩＯコントローラドライバからの第２のＧＰＩＯコマンドの受信に応答して、コンピューティングデバイスの仮想ＧＰＩＯコントローラにより第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートするための手段とを更に備える。
【０１０４】
例５３は例４８〜５２のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートするための手段は、コンピューティングデバイスのマイクロコントローラを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１０５】
例５４は例４８〜５３のいずれかの主題を含み、マイクロコントローラを用いて仮想ＧＰＩＯピンをエミュレートするための手段は、コンピューティングデバイスのエンベデッドコントローラを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１０６】
例５５は例４８〜５４のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートするための手段は、更に、エンベデッドコントローラの物理ＧＰＩＯピンを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１０７】
例５６は例４８〜５５のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて、コンピューティングデバイスの仮想ＧＰＩＯコントローラにより第２の仮想ＧＰＩＯピンをエミュレートするための手段を更に有する。
【０１０８】
例５７は例４８〜５６のいずれかの主題を含み、仮想ＧＰＩＯピンをエミュレートするための手段は、コンピューティングデバイスの周辺機器へのインターフェースを仮想ＧＰＩＯピンとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１０９】
例５８は例４８〜５７のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより用いられるメモリセグメントを予約するための手段を更に備え、仮想ＧＰＩＯピンをエミュレートするための手段は、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１１０】
例５９は例４８〜５８のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより、仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信するための手段と、仮想ＧＰＩＯコントローラにより、仮想ＧＰＩＯピンの状態をＧＰＩＯイベントの機能として修正するべく、仮想ＧＰＩＯピンをエミュレートするための手段とを更に備える。
【０１１１】
例６０は例４８〜５９のいずれかの主題を含み、ＧＰＩＯイベントを受信するための手段は、Ｉ／Ｏイベントをコンピューティングデバイスのマイクロコントローラから受信するための手段を有し、仮想ＧＰＩＯピンをエミュレートするための手段は、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正するための手段を有する。
【０１１２】
例６１は例４８〜６０のいずれかの主題を含み、Ｉ／Ｏイベントを受信するための手段は、Ｉ／Ｏイベントをコンピューティングデバイスのエンベデッドコントローラから受信するための手段を有する。
【０１１３】
例６２は例４８〜６１のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第２の仮想ＧＰＩＯピンとして用いて、仮想ＧＰＩＯコントローラにより第２の仮想ＧＰＩＯピンをエミュレートするための手段を更に備える。
【０１１４】
例６３は例４８〜６２のいずれかの主題を含み、ＧＰＩＯイベントを受信するための手段は、Ｉ／Ｏイベントをコンピューティングデバイスの周辺機器から受信するための手段を有し、仮想ＧＰＩＯピンをエミュレートするための手段は、仮想ＧＰＩＯピンの状態をＩ／Ｏイベントの機能として修正するための手段を有する。
【０１１５】
例６４は例４８〜６３のいずれかの主題を含み、仮想ＧＰＩＯコントローラにより用いられるメモリセグメントを予約するための手段を更に備え、ＧＰＩＯイベントを受信するための手段は、予約したメモリセグメントへのメモリアクセスを検出する手段を有し、仮想ＧＰＩＯピンをエミュレートするための手段は、予約したメモリセグメントを補助メモリとして用いて仮想ＧＰＩＯピンをエミュレートするための手段を有する。
【０１１６】
例６５は例４８〜６４のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースにより、仮想ＧＰＩＯピンの状態の修正に応答して、コンピューティングデバイスのＩ／Ｏサブシステムによりオペレーティングシステムに物理的割り込みをトリガするための手段を更に有する。
【０１１７】
例６６は例４８〜６５のいずれかの主題を含み、割り込みは、オペレーティングシステムにＧＰＩＯコマンドを仮想ＧＰＩＯコントローラドライバに送信させる。
【０１１８】
例６７は例４８〜６６のいずれかの主題を含み、仮想ＧＰＩＯコントローラドライバによりＧＰＩＯコマンドを受信する手段は、オペレーティングシステムからコールバックの方法を受信する手段を有する。
【０１１９】
例６８は例４８〜６７のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
【０１２０】
例６９は例４８〜６８のいずれかの主題を含み、仮想ＧＰＩＯコントローラファームウェアインターフェースは、複数のＡＣＰＩ制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）デバイスを有する。
本実施形態の例を下記の各項目として示す。
［項目１］
汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするためのコンピューティングデバイスであって、
仮想ＧＰＩＯコントローラドライバと、
仮想ＧＰＩＯコントローラファームウェアインターフェースと、
仮想ＧＰＩＯコントローラとを備え、
前記仮想ＧＰＩＯコントローラドライバは、（ｉ）前記コンピューティングデバイスのオペレーティングシステムからＧＰＩＯピンにより実装されるべき動作を指定するＧＰＩＯコマンドを受信し、（ｉｉ）前記ＧＰＩＯコマンドの受信に応答して、前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバから受信し、
前記仮想ＧＰＩＯコントローラは、前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記ＧＰＩＯコマンドの受信に応答して前記ＧＰＩＯコマンドを実装するべく、仮想ＧＰＩＯピンをエミュレートする、コンピューティングデバイス。
［項目２］
前記ＧＰＩＯコマンドは、読み取りコマンドを含み、
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記仮想ＧＰＩＯピンの仮想入力値を判断することを含み、
前記仮想ＧＰＩＯコントローラドライバは、更に、前記仮想ＧＰＩＯピンのエミュレーションに応答して前記仮想入力値を前記オペレーティングシステムに返す、項目１に記載のコンピューティングデバイス。
［項目３］
前記ＧＰＩＯコマンドは、書き込みコマンドを含み、
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記仮想ＧＰＩＯピンの仮想出力値を判断することと、リファレンス期間中に前記仮想ＧＰＩＯピンの前記仮想出力値を維持することとを含む、
項目１に記載のコンピューティングデバイス。
［項目４］
前記ＧＰＩＯコマンドは、制御コマンドを含み、
前記ＧＰＩＯコマンドを実装するべく前記仮想ＧＰＩＯピンをエミュレートすることは、前記仮想ＧＰＩＯピンの状態を前記制御コマンドの機能として修正することを含む、項目１に記載のコンピューティングデバイス。
［項目５］
前記仮想ＧＰＩＯコントローラドライバは、更に、（ｉ）第２のＧＰＩＯピンにより実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信し、（ｉｉ）前記第２のＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラファームウェアインターフェースに送信し、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、更に、前記第２のＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバから受信し、
前記仮想ＧＰＩＯコントローラは、更に、前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記第２のＧＰＩＯコマンドの受信に応答して、前記第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする、項目１に記載のコンピューティングデバイス。
［項目６］
前記仮想ＧＰＩＯピンをエミュレートすることは、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、項目１に記載のコンピューティングデバイス。
［項目７］
前記仮想ＧＰＩＯピンをエミュレートすることは、更に、前記エンベデッドコントローラの物理ＧＰＩＯピンを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、項目６に記載のコンピューティングデバイス。
［項目８］
前記仮想ＧＰＩＯピンをエミュレートすることは、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、項目１に記載のコンピューティングデバイス。
［項目９］
前記仮想ＧＰＩＯコントローラは、更に、前記仮想ＧＰＩＯコントローラにより用いるメモリセグメントを予約し、
前記仮想ＧＰＩＯピンをエミュレートすることは、予約した前記メモリセグメントを補助メモリとして用いて前記仮想ＧＰＩＯピンをエミュレートすることを含む、項目１に記載のコンピューティングデバイス。
［項目１０］
前記仮想ＧＰＩＯコントローラは、更に、
前記仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信し、
前記仮想ＧＰＩＯピンの前記状態を前記ＧＰＩＯイベントの機能として修正するべく、前記仮想ＧＰＩＯピンをエミュレートする、項目１〜９のいずれか１項に記載のコンピューティングデバイス。
［項目１１］
前記ＧＰＩＯイベントは、前記コンピューティングデバイスのエンベデッドコントローラから受信されたＩ／Ｏイベントを含み、
前記仮想ＧＰＩＯピンをエミュレートすることは、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正することを含む、
項目１０に記載のコンピューティングデバイス。
［項目１２］
前記ＧＰＩＯイベントは、前記コンピューティングデバイスの周辺機器から受信されたＩ／Ｏイベントを含み、
前記仮想ＧＰＩＯピンをエミュレートすることは、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正することを含む、項目１０に記載のコンピューティングデバイス。
［項目１３］
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、更に、前記仮想ＧＰＩＯピンの前記状態の修正に応答して、前記コンピューティングデバイスのＩ／Ｏサブシステムにより前記オペレーティングシステムに物理的割り込みをトリガする、項目１０に記載のコンピューティングデバイス。
［項目１４］
前記割り込みは、前記オペレーティングシステムに前記ＧＰＩＯコマンドを前記仮想ＧＰＩＯコントローラドライバに送信させる、項目１３に記載のコンピューティングデバイス。
［項目１５］
前記仮想ＧＰＩＯコントローラファームウェアインターフェースは、複数のＡＣＰＩ制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）デバイスを有し、
各ＡＣＰＩ制御の方法は、仮想マシンの制御の方法を含み、前記制御の方法は、前記コンピューティングデバイスのバイトコードインタプリタにより変換される、項目１〜９のいずれか１項に記載のコンピューティングデバイス。
［項目１６］
コンピューティングデバイス上で汎用Ｉ／Ｏ（ＧＰＩＯ）をエミュレートするための方法であって、
前記コンピューティングデバイスにおけるオペレーティングシステムの仮想ＧＰＩＯコントローラドライバにより、ＧＰＩＯピンによって実装されるべき動作を指定するＧＰＩＯコマンドを受信する段階と、
前記ＧＰＩＯコマンドの受信に応答して、前記仮想ＧＰＩＯコントローラドライバから前記コンピューティングデバイスの仮想ＧＰＩＯコントローラファームウェアインターフェースへと前記ＧＰＩＯコマンドを送信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースにより前記仮想ＧＰＩＯコントローラドライバから前記ＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記ＧＰＩＯコマンドの受信に応答して、前記コンピューティングデバイスの仮想ＧＰＩＯコントローラにより前記ＧＰＩＯコマンドを実装するべく仮想ＧＰＩＯピンをエミュレートする段階とを備える、方法。
［項目１７］
前記仮想ＧＰＩＯコントローラドライバにより、第２のＧＰＩＯピンによって実装されるべき動作を指定する第２のＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラドライバから前記仮想ＧＰＩＯコントローラファームウェアインターフェースへと前記第２のＧＰＩＯコマンドを送信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースにより前記仮想ＧＰＩＯコントローラドライバから前記第２のＧＰＩＯコマンドを受信する段階と、
前記仮想ＧＰＩＯコントローラファームウェアインターフェースによる前記仮想ＧＰＩＯコントローラドライバからの前記第２のＧＰＩＯコマンドの受信に応答して、前記コンピューティングデバイスの前記仮想ＧＰＩＯコントローラにより前記第２のＧＰＩＯコマンドを実装するべく第２の仮想ＧＰＩＯピンをエミュレートする段階とを更に備える、項目１６に記載の方法。
［項目１８］
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートする段階を有する、項目１６に記載の方法。
［項目１９］
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想ＧＰＩＯピンとして用いて前記仮想ＧＰＩＯピンをエミュレートする段階を有する、項目１６に記載の方法。
［項目２０］
前記仮想ＧＰＩＯコントローラにより、前記仮想ＧＰＩＯピンの状態に関連するＧＰＩＯイベントを受信する段階と、
前記仮想ＧＰＩＯコントローラにより、前記仮想ＧＰＩＯピンの前記状態を前記ＧＰＩＯイベントの機能として修正するべく、前記仮想ＧＰＩＯピンをエミュレートする段階とを更に備える、項目１６に記載の方法。
［項目２１］
前記ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントを前記コンピューティングデバイスのエンベデッドコントローラから受信する段階を有し、
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正する段階を有する、項目２０に記載の方法。
［項目２２］
前記ＧＰＩＯイベントを受信する段階は、Ｉ／Ｏイベントを前記コンピューティングデバイスの周辺機器から受信する段階を有し、
前記仮想ＧＰＩＯピンをエミュレートする段階は、前記仮想ＧＰＩＯピンの前記状態を前記Ｉ／Ｏイベントの機能として修正する段階を有する、項目２０に記載の方法。
［項目２３］
プロセッサと、
前記プロセッサにより実行されると、コンピューティングデバイスに項目１６〜２２のいずれか１項に記載の方法を実行させる複数の命令を格納したメモリとを備える、コンピューティングデバイス。
［項目２４］
実行されると、項目１６〜２２のいずれか１項に記載の方法をコンピュータに実行させるコンピュータプログラム。
［項目２５］
項目１６〜２２のいずれか１項に記載の方法を実行するための手段を備える、コンピューティングデバイス。
［項目２６］
項目２４に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【図１】
0006319857.tif 000002
【図２】
0006319857.tif 000003
【図３】
0006319857.tif 000004
【図４】
0006319857.tif 000005
【図５】
0006319857.tif 000006