JP2017509974A - 仮想汎用i/oコントローラ - Google Patents

仮想汎用i/oコントローラ Download PDF

Info

Publication number
JP2017509974A
JP2017509974A JP2016552951A JP2016552951A JP2017509974A JP 2017509974 A JP2017509974 A JP 2017509974A JP 2016552951 A JP2016552951 A JP 2016552951A JP 2016552951 A JP2016552951 A JP 2016552951A JP 2017509974 A JP2017509974 A JP 2017509974A
Authority
JP
Japan
Prior art keywords
gpio
virtual
virtual gpio
computing device
controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016552951A
Other languages
English (en)
Other versions
JP6319857B2 (ja
Inventor
アダムス、ニコラス、ジェイ.
ゴフ、ロバート、イー.
バラガンガダラ、サイ、プラサド パイタラ
バラガンガダラ、サイ、プラサド パイタラ
ドウッタ、プロネイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2017509974A publication Critical patent/JP2017509974A/ja
Application granted granted Critical
Publication of JP6319857B2 publication Critical patent/JP6319857B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/105Program control for peripheral devices where the programme performs an input/output emulation function
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Microcomputers (AREA)
  • Debugging And Monitoring (AREA)

Abstract

仮想汎用I/O(GPIO)のための複数の技術は、仮想GPIOコントローラドライバ、仮想GPIOコントローラファームウェアインターフェース、および仮想GPIOコントローラを有するコンピューティングデバイスを備える。ドライバは、GPIOコマンドをコンピューティングデバイスのオペレーティングシステムから受信する。GPIOコマンドは、GPIOピンにより実行されるべき動作を指定する。ドライバは、GPIOコマンドをファームウェアインターフェースに送信する。ファームウェアインターフェースがコマンドを受信することに応答して、仮想GPIOコントローラは、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートする。ファームウェアインターフェースは、オペレーティングシステムにより受信され得る割り込みをトリガし得る。仮想GPIOコントローラは、ファームウェアにより予約された補助メモリ、エンベデッドコントローラ、またはコンピューティングデバイスの周辺機器へのインターフェースを用いて仮想GPIOピンをエミュレートし得る。ファームウェアインターフェースは、ACPI制御の方法であってもよい。他の複数の実施形態が説明され、特許請求される。

Description

[関連する米国特許出願への相互参照]
本願は、2014年3月27日に出願された「VIRTUAL GENERAL−PURPOSE I/O CONTROLLER」という名称の米国実用新案登録第14/227,735号公報に対する優先権を主張する。
典型的なコンピューティングデバイスは、プラットフォームチップセットまたはプラットフォームシステムオンチップ内に含まれるいくつかの汎用入力/出力(「GPIO」)ピンを含む。GPIOピンは、デジタルデータの読み取りおよび書き込みをサポートし得、コンピューティングデバイスに対するハードウェア割り込みを生成し得る。通常、GPIOピンは多目的のものであり、コンピューティングデバイスによって特定用途に対して構成され得る。例えば、GPIOピンはボタン、インジケータ、(例えばLED)、スイッチ、またはセンサ(例えば、蓋閉センサ、ドッキングポートセンサ、ドライブ挿入センサ等)のようなプラットフォーム固有の複数の機能を駆動し、ビットバンし、またはそうでなければ制御するべく用いられ得る。
典型的なコンピューティングデバイスは、複数のGPIOピンを制御するべくチップセットまたはメインプロセッサに実装される1または複数のハードウェアGPIOコントローラを含む。コンピューティングデバイス上のソフトウェアまたはファームウェアは、ハードウェアGPIOコントローラに関連する特定のレジスタまたはメモリアドレスとの間の読み取りおよび書き込みによりハードウェアGPIOコントローラとインタラクトし得る。アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)仕様は、ハードウェアGPIOピンへのファームウェアインターフェースの一例を提供する。通常、オペレーティングシステム供給元は、プラットフォームチップセットに含まれなければならない特定のハードウェアGPIOピンを含む、必要となる最小限のハードウェアリソースを指定する。
本明細書において説明される複数の概念は、添付の複数の図において限定としてではなく例として図示されている。図示を簡単にして見やすくするべく、図に図示される複数の要素は、必ずしも縮尺通りに描かれない。適切と考えられる場合には、対応するか、または類似する複数の要素を示すべく、複数の図面において符号が反復されている。
仮想GPIOコントローラを提供するコンピューティングデバイスの少なくとも一実施形態の簡略ブロック図である。
図1におけるコンピューティングデバイス環境の少なくとも一実施形態の簡略ブロック図である。
図1および2におけるコンピューティングデバイスによって実行され得る仮想GPIOコントローラを初期化および起動するための方法の少なくとも一実施形態の簡略フロー図である。
図1および2におけるコンピューティングデバイスによって実行され得る複数のGPIOコマンドをモニタリングして処理するための方法の少なくとも一実施形態の簡略フロー図である。
図1および2におけるコンピューティングデバイスによって実行され得る複数のGPIOイベントをモニタリングして処理するための方法の少なくとも一実施形態の簡略フロー図である。
本開示の概念では、様々な変更形態および代替形態が可能であるが、それらの具体的な実施形態は、図面において例として示されており、本明細書において詳細に説明される。しかし、本開示の複数の概念を開示される特定の形態に限定する意図は存在せず、反対に本開示および添付の特許請求の範囲に即した全ての変更形態、均等物、および代替形態を包含する意図であることを理解されたい。
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」等を参照する場合、説明される実施形態が特定の特徴、構造、または特性を含み得ることを示すが、あらゆる実施形態は、当該特定の特徴、構造、または特性を含み得、または必ずしも含むわけではない場合がある。更に、そのような文言は同一の実施形態を必ずしも参照するわけではない。更に、特定の特徴、構造、または特性が一実施形態に関連して説明される場合、明示的に説明されているか否かにかかわらず、複数の他の実施形態に関連してそのような特徴、構造、または特性をもたらすことは当業者の知識の範囲内であると考えられる。更に、「少なくとも1つのA、B、およびC」の形での一覧に含まれる項目は、(A)、(B)、(C)、(AおよびB)、(AおよびC)、(BおよびC)、または(A、B、およびC)を意味し得ることを理解されたい。同様に、「A、B、またはCのうちの少なくとも1つ」の形で列挙された複数の項目は、(A)、(B)、(C)、(AおよびB)、(AおよびC)、(BおよびC)、または(A、B、およびC)を意味し得る。
複数の開示される実施形態はいくつかの場合に、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組み合わせで実装され得る。複数の開示される実施形態は、1または複数の一時的または非一時的機械可読(例えばコンピュータ可読)ストレージ媒体により実行され、またはこれらに格納される命令としても実装され得る。命令は、1または複数のプロセッサにより読み取られて実行され得る。機械可読ストレージ媒体は、機械(例えば、揮発性もしくは不揮発性メモリ、メディアディスク、または他の媒体のデバイス)により読み取り可能な形態の情報を格納または送信する任意のストレージデバイス、メカニズム、または他の物理構造体として実施され得る。
複数の図面において、いくつかの構造的または方法の特徴は、特定の配置および/または順序で示され得る。しかし、複数のそのような特定の配置および/または順序は必要とされない場合があることを理解されたい。むしろ、いくつかの実施形態においては、複数のそのような特徴は異なる態様で、および/または例示的な図に示されるものとは異なる順序で配置され得る。更に、特定の図面に構造的または方法の特徴を含んでいても、そのような特徴が全ての実施形態において必要とされることを示唆するとは予定されておらず、いくつかの実施形態において含まれていないか、または他の複数の特徴と組み合わされる場合がある。
図1を参照すると、例示的な実施形態においてコンピューティングデバイス100は、コンピューティングデバイス100により必要とされる物理GIPOピンの総数を低減すべく仮想GPIOコントローラを確立する。それを行うべく、以下に詳細に検討されるようにコンピューティングデバイス100のオペレーティングシステムは、複数のGPIOコントローラドライバに対する標準的なインターフェースを確立し、その次に仮想GPIOコントローラドライバをロードする。仮想GPIOコントローラドライバは、オペレーティングシステムから複数のGPIOコマンド(例えば、読み取り、書き込み、状態、または制御コマンド)を受信して、コマンドを仮想GPIOコントローラファームウェアインターフェースに転送する。仮想GPIOコントローラファームウェアインターフェースがGPIOコマンドを受信したことに応答して、仮想GPIOコントローラは1または複数の物理GPIOピンの動作をエミュレートし、GPIOコマンドに適切に応答する。複数のそのようなエミュレート済み物理GPIOピンは、本明細書において「仮想GPIOピン」と称される。
いくつかの実施形態において、仮想GPIOコントローラは更にまたは代替的に、仮想GPIOピンのエミュレートされた状態に影響する複数のプラットフォームイベントについてモニタリングし得る。仮想GPIOピンのエミュレートされた状態に基づいて、仮想GPIOコントローラは、仮想GPIOファームウェアインターフェースにオペレーティングシステムにより処理される割り込みをアサートさせ得る。オペレーティングシステムは、1または複数のGPIOコマンドを仮想GPIOコントローラドライバに渡して仮想GPIOピンの状態をクエリし、次にそれに応じて応答することにより割り込みを処理する。従って、仮想GPIOコントローラによりエミュレートされた仮想GPIOピンは、オペレーティングシステムには1または複数の物理GPIOピンと同一に見える。仮想GPIOコントローラは、任意の数の仮想GPIOピンをエミュレートし得ることを理解されたい。
本開示のコンピューティングデバイス100は、オペレーティングシステム供給元により設定されたGPIOピンの複数の要件に準拠するべく必要とされる専用物理GPIOピンの数を低減し得ることを理解されたい。更にまたは代替的に、コンピューティングデバイス100は、コンピューティングデバイス100のメインプロセッサ、チップセット、またはシステムオンチップと比べて通常あまり高価でなく、より容易にカスタマイズされる複数の周辺機器またはエンベデッドコントローラを用いて、必要とされるGPIO機能を実装することができる場合がある。
コンピューティングデバイス100は、本明細書に説明される複数の機能を実行するための任意のタイプのデバイスとして実施され得る。例えば、コンピューティングデバイス100は、本明細書に説明される複数の機能を実行するように構成されたデスクトップコンピュータ、サーバコンピュータ、ワークステーション、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、スマートフォン、タブレットコンピュータ、携帯電話、ハンドセット、メッセージングデバイス、ウェアラブルコンピューティングデバイス、車両テレマティクスデバイス、分散コンピューティングシステム、マルチプロセッサシステム、消費者向け電子デバイス、および/またはその他のコンピューティングデバイスとして実施され得るが、これらに限定されない。図1に示されるように、例示的なコンピューティングデバイス100は、プロセッサ120、入力/出力サブシステム122、メモリ126、およびデータストレージデバイス130を含む。勿論、他の複数の実施形態においてコンピューティングデバイス100は、デスクトップコンピュータにおいて一般に見られるもの(例えば、様々な入力/出力デバイス)等の他のまたは追加の複数のコンポーネントを含んでもよい。更にいくつかの実施形態において、例示的なコンポーネントのうちの1または複数は、別のコンポーネントに組み込まれ、そうでなければこの一部を形成し得る。いくつかの実施形態において、例えばメモリ126またはその一部は、プロセッサ120に組み込まれ得る。
プロセッサ120は、本明細書において説明される複数の機能を実行することができる任意のタイプのプロセッサとして実施され得る。例えばプロセッサ120は、シングルもしくはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラもしくは他のプロセッサ、または処理/制御回路として実施され得る。同様に、メモリ126は、本明細書において説明される複数の機能を実行することができる任意のタイプの揮発性もしくは不揮発性メモリ、またはデータストレージとして実施され得る。動作時にメモリ126は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、およびドライバ等のコンピューティングデバイス100の動作中に用いられる様々なデータおよびソフトウェアを格納し得る。例示的なメモリ126は、仮想GPIOコントローラ128を含む。以下に更に説明されるように、仮想GPIOコントローラ128は、1または複数の物理GPIOピンをエミュレートし、適合させ、または要約するソフトウェアエンティティである。メモリ126はI/Oサブシステム122を介してプロセッサ120に通信可能に結合され、I/Oサブシステム122は、コンピューティングデバイス100のプロセッサ120、メモリ126、および複数の他のコンポーネントとの入力/出力動作を容易にする回路および/またはコンポーネントとして実施され得る。例えばI/Oサブシステム122は、入力/出力動作を容易にするメモリコントローラハブ、入力/出力制御ハブ、ファームウェアデバイス、通信リンク(すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、ライトガイド、プリント回路基板トレース等)、および/または他のコンポーネント、ならびにサブシステムとして実施され、またはそうでなければこれらを含み得る。I/Oサブシステム122は、低減したピンGPIOセット124を更に含む。低減したピンGPIOセット124は、コンピューティングデバイス100により用いられるいくつかの物理GPIOピンを含み得る。低減したピンGPIOセット124は、通常のI/Oサブシステムと比較して数を低減した物理GPIOピンを含み、いくつかの実施形態において1つのGPIOピンを含み得る。いくつかの実施形態において、I/Oサブシステム122は、1つの集積回路チップ上においてコンピューティングデバイス100のプロセッサ120、メモリ126、および複数の他のコンポーネントと共にシステムオンチップ(SoC)の一部を形成して組み込まれ得る。
データストレージデバイス130は、例えば、メモリデバイスおよび回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または他のデータストレージデバイス等、データの短期的もしくは長期的な格納のために構成された任意のタイプの1または複数のデバイスとして実施され得る。データストレージデバイス130は、オペレーティングシステムソフトウェアおよびアプリケーションソフトウェアを含む実行用のソフトウェアまたはの他のデータを格納するべく用いられ得る。
コンピューティングデバイス100は、エンベデッドコントローラ132および/またはいくつかの周辺機器134を更に含み得る。エンベデッドコントローラ132は、プロセッサ120および/またはI/Oサブシステム122とは別個または独立したコンピューティングデバイス100の任意のマイクロコントローラまたは他のコントローラチップとして実施され得る。エンベデッドコントローラ132は、複数の周辺機器134のうちの1または複数との通信の管理等、コンピューティングデバイス100に対する任意の二次的または付随的コンピューティングアクティビティを実行し得る。エンベデッドコントローラ132は、ローピンカウント(LPC)バスまたはシステム周辺相互接続(SPI)バスのような比較的限定されたコンピューティングリソースを必要とするデータ接続を介してI/Oサブシステム122と通信し得る。更に、エンベデッドコントローラ132は、プロセッサ120またはI/Oサブシステム122と比較してより古いか、またはより大きな半導体処理ノード上に製造され得る。従って、エンベデッドコントローラ132は設計し、製造し、またはカスタマイズするには比較的安価であり得る。
複数の周辺機器134は、コンピューティングデバイス100の任意の周辺機器コンポーネントとして実施され得る。例えば、周辺機器134は、ヒューマン入力デバイス、ディスプレイ、発光ダイオード(LED)等のインジケータ、温度センサもしくはデバイス挿入センサのようなセンサ、スイッチ、またはボタン等として実施され得る。複数の周辺機器134は、コンピューティングデバイス100の蓋が閉じられているか否かを判断すること、媒体が媒体ドライブに挿入されたか否かを判断すること、またはハードウェアボタンとのユーザインタラクションに応答すること等、コンピューティングデバイス100に対するプラットフォーム固有の機能を提供し得る。周辺機器134の各々は、I/Oサブシステム122またはエンベデッドコントローラ132に通信可能に直に結合され得る。各周辺機器134は、任意の適切なハードウェアインターフェースまたは通信プロトコルを用いて通信し得る。従って、各周辺機器134はI/Oサブシステム122の専用GPIOピンに結合される必要はない。
ここで図2を参照すると、例示的な実施形態においてコンピューティングデバイス100は、動作中に環境200を確立する。例示的な環境200は、いくつかのアプリケーション202、仮想GPIOコントローラドライバ206を含むオペレーティングシステム204、仮想GPIOコントローラファームウェアインターフェース208、および仮想GPIOコントローラ212を含む。環境200の様々なモジュールおよび/またはコンポーネントは、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組み合わせとして実施され得る。
複数のアプリケーション202は、以下に更に説明されるように、仮想GPIOコントローラ212によりエミュレートされた仮想GPIOピンからデータを読み取り、書き込み、またはそうでなければアクセスするように構成される。複数のアプリケーション202は、ユーザレベルのインタラクティブな複数の機能、ならびに電力管理もしくはドッキングポート管理のようなユーティリティ、またはオペレーティングシステムレベルの機能を提供し得る。いくつかの実施形態において、複数のアプリケーション202は、仮想GPIOピンを用いて接続された複数の周辺機器134に対するより高いレベルのデバイスドライバを含み得る。それらの実施形態において、デバイスドライバは、複数の周辺機器134が物理GPIOピンに接続される条件において用いられる同一のデバイスドライバであってもよい。
オペレーティングシステム204は、複数のアプリケーション202を管理し、仮想GPIOピンへのアクセスを制御するように構成される。オペレーティングシステム204は、複数のデバイスドライバ用の1または複数の規格化インターフェースを含む。従って、オペレーティングシステム204は、仮想GPIOコントローラドライバ206を含むいくつかのデバイスドライバを生成および管理する。オペレーティングシステム204は、アプリケーション202(いくつかの実施形態において周辺機器ドライバまたは他のソフトウェア/ファームウェアを含む)から受信された複数のGPIOコマンドを仮想GPIOコントローラドライバ206に転送し得る。更に、オペレーティングシステム204は複数のGPIOコマンドを独立して生成し、これらのコマンドを仮想GPIOコントローラドライバ206に送信し得る。更に上記のように、オペレーティングシステム204は、仮想GPIOコントローラファームウェアインターフェース208により生成された複数の割り込みに応答し得る。そのような複数の割り込みに応答して、オペレーティングシステム204は、複数のGPIOコマンド、例えばクエリコマンドを仮想GPIOコントローラドライバ206に送信して、割り込みのソースを判断し得る。オペレーティングシステム204は、任意の技術を用い、例えば仮想GPIOコントローラドライバ206により実装されたいくつかのコールバック機能を起動することにより、複数のGPIOコマンドを仮想GPIOコントローラドライバ206に送信し得る。
仮想GPIOコントローラドライバ206は、複数のGPIOコマンドをオペレーティングシステム204から受信して、これらのGPIOコマンドを仮想GPIOコントローラファームウェアインターフェース208に転送するように構成され得る。仮想GPIOコントローラドライバ206は、仮想GPIOコントローラファームウェアインターフェース208により必要とされる複数のGPIOコマンドを処理し、またはフォーマットし得る。いくつかの実施形態において、GPIOコマンドは、大きくは変更されずに仮想GPIOコントローラドライバ206を通過し得る。仮想GPIOコントローラドライバ206は、オペレーティングシステム204の標準的GPIOドライバインターフェースを実装する。従って、オペレーティングシステム204の視点から見ると、仮想GPIOコントローラドライバ206は、物理GPIOピン用のドライバと相互に交換可能であり得る。従って仮想GPIOコントローラドライバ206は、オペレーティングシステム204のアドレス空間内に常駐し得る。いくつかの実施形態において、仮想GPIOコントローラドライバ206およびオペレーティングシステム204は、異なる複数のエンティティにより提供され得る。例えば、仮想GPIOコントローラドライバ206は、プラットフォームハードウェア供給元により提供され得る。
仮想GPIOコントローラファームウェアインターフェース208は、複数のGPIOコマンドを仮想GPIOコントローラドライバ206から受信するように構成される。更にまたは代替的に、仮想GPIOコントローラファームウェアインターフェース208は、仮想GPIOコントローラ212により処理または生成された複数のGPIOイベントに応答して、オペレーティングシステム204に割り込み、またはそうでなければシグナリングし得る。仮想GPIOコントローラファームウェアインターフェース208は、物理GPIOピンと通信するべく用いられる規格化ファームウェアインターフェースを実装し得る。例えば、いくつかの実施形態において仮想GPIOコントローラファームウェアインターフェース208は、アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)仕様により規定されたファームウェア制御の方法を実装し得る。当該ファームウェア制御の方法は、コンピューティングデバイス100により変換され得る規格化仮想マシンアーキテクチャ(すなわち「バイトコード」)のための複数の命令の集合として実施され得る。いくつかの実施形態において、それらの機能は、サブモジュールにより、例えばファームウェア制御の方法210により実行され得る。
仮想GPIOコントローラ212は、1または複数の仮想GPIOピンをエミュレートして、仮想GPIOコントローラファームウェアインターフェース208により受信されたGPIOコマンドを実装するように構成される。更にまたは代替的に、仮想GPIOコントローラ212は、仮想GPIOピンの状態に関係する複数のGPIOイベントを受信して実装するように構成される。例えば、GPIOイベントは、コンピューティングデバイス100のソフトウェアイベントに基づいてエミュレートされた仮想GPIOピンの値における変更に対応し得る。別の例として、GPIOイベントは、周辺機器134および/またはエンベデッドコントローラ132の状態に基づいてエミュレートされた仮想GPIOピンの値における変更に対応し得る。仮想GPIOコントローラ212は、コンピューティングデバイス100の任意のサポートリソースを用いて仮想GPIOピンをエミュレートし得る。例えば、仮想GPIOコントローラ212は、いくつかの実施形態において仮想GPIOピンの状態に関係するデータを格納するべくメモリ126の予約済みセグメントを用いて、ソフトウェアにおける仮想GPIOピンをエミュレートし得る。更にまたは代替的に、仮想GPIOコントローラ212は、1または複数の周辺機器134の動作を適合させることにより仮想GPIOピンをエミュレートし得る。いくつかの実施形態において、仮想GPIOコントローラ212は、1または複数のエンベデッドコントローラ132の動作を適合させることにより、例えばGPIOピンとして現れるようにエンベデッドコントローラ132のリソース(例えばI/Oピンまたはバス)を適合させることにより、またはいくつかの独立したGPIOピンとして現れるようにエンベデッドコントローラ132のリソースを多重化することにより、仮想GPIOピンをエミュレートし得る。仮想GPIOコントローラ212は、コンピューティングデバイス100のアプリケーションコード、オペレーティングシステムドライバコード、またはファームウェアコードの任意の組み合わせとして実施され得る。いくつかの実施形態において、それらの機能は、1または複数のサブモジュールにより、例えばエミュレーションモジュール214、周辺機器モジュール216、またはエンベデッドコントローラモジュール218により実行され得る。別個のモジュールとして図示されているが、いくつかの実施形態において仮想GPIOコントローラ212は、仮想GPIOコントローラファームウェアインターフェース208および/またはファームウェア制御の方法210に含まれ、またはそうでなければこれらと組み合わされてもよい。
ここで図3を参照すると、使用中にコンピューティングデバイス100は、仮想GPIOピンを初期化してエミュレートするための方法300を実行し得る。方法300はブロック302において開始し、コンピューティングデバイス100は仮想GPIOコントローラ212を初期化する。コンピューティングデバイス100は、必要とされる任意のデータ構造体または通信リンクを初期化することを含めて、仮想GPIOコントローラ212が仮想GPIOピンをエミュレートするのに必要ないずれの初期化も実行し得る。いくつかの実施形態では、コンピューティングデバイス100はブロック304において、仮想GPIOピンに対するファームウェアを制御した補助メモリの領域を初期化し得る。補助メモリは、ファームウェアにより予約されたメインメモリ126のセグメントとして実施され得、従ってオペレーティングシステム204および/またはアプリケーション202により用いるには利用可能でない。補助メモリは、仮想GPIOコントローラ212により用いられ、仮想GPIOピンの状態、例えば仮想GPIOピンに関連する複数の値を含むレジスタおよび仮想GPIOピンの動作を制御する複数の値を含むレジスタを格納し得る。いくつかの実施形態では、コンピューティングデバイス100はブロック306において、エンベデッドコントローラ132および/または周辺機器134を初期化し得る。コンピューティングデバイス100は、必要とされる任意の初期化、例えば複数のリセット信号または初期化コマンドの送信を実行し得る。
ブロック308において、コンピューティングデバイス100は、仮想GPIOコントローラファームウェアインターフェース208をロードする。コンピューティングデバイス100は、オペレーティングシステム204と互換性のある任意の技術を用いて仮想GPIOコントローラファームウェアインターフェース208をロードし得る。いくつかの実施形態では、コンピューティングデバイス100はブロック310において、ファームウェア制御の方法210を初期化して、ファームウェア制御の方法210をシステムデータテーブル内に格納し得る。ファームウェア制御の方法210は、オペレーティングシステム204と仮想GPIOコントローラ212との間の通信を管理できる任意のファームウェアルーチンとして実施され得る。例えば、ファームウェア制御の方法210は、ACPI仕様により規定される制御の方法として実施され得る。ACPI制御の方法は、ACPI機械言語(AML)にコンパイルされるACPIソース言語(ASL)で書かれた複数の宣言および/または命令のセットとして実施され得る。AMLは、オペレーティングシステム204により変換され得るバイトコードの集合として実施され得る。ファームウェア制御の方法210のためのAMLは、メモリ126内に格納された1または複数のACPIテーブルにロードされ得る。ランタイムにおいて、オペレーティングシステム204は、複数のACPIテーブル内に格納された適切なAMLを検索することによりファームウェア制御の方法210にアクセスし得る。コンピューティングデバイス100は、仮想GPIOコントローラファームウェアインターフェース208の複数の機能を実行するべく、ファームウェア制御の方法210のAMLを変換し得る。単一のファームウェア制御の方法210として図示されているが、仮想GPIOコントローラファームウェアインターフェース208はいくつかの実施形態において、任意の数のファームウェア制御の方法210を含み得る。例えば、仮想GPIOコントローラファームウェアインターフェース208は、いくつかのACPI制御の方法を含むACPIデバイスとして実施されてもよい。
ブロック312において、コンピューティングデバイス100は、オペレーティングシステム204をロードする。コンピューティングデバイス100は、制御をオペレーティングシステム204に渡すファームウェアブートローダを実行し得る。ブロック314において、オペレーティングシステム204がロードされる間、またはその後にコンピューティングデバイス100は仮想GPIOコントローラドライバ206をロードする。例えば、いくつかの実施形態においてオペレーティングシステム204は、プラットフォームファームウェアにより規定された仮想GPIOコントローラデバイスをエニュメレートすると、仮想GPIOコントローラドライバ206をロードし得る。仮想GPIOコントローラドライバ206をロードすることにより、オペレーティングシステム204が仮想GPIOコントローラファームウェアインターフェース208と通信し、従って仮想GPIOピンとインタラクトすることを可能にする。いくつかの実施形態において、コンピューティングデバイス100は、1または複数のシステムデータテーブルを参照して、ロードされた仮想GPIOコントローラファームウェアインターフェース208に適切な仮想GPIOコントローラドライバ206を選択し得る。
ブロック316において、コンピューティングデバイス100は、(オペレーティングシステム204により実行される任意のアプリケーション202を含む)オペレーティングシステム204を起動して、複数のGPIOイベントについてモニタリングする。複数のGPIOイベントは、1または複数のアプリケーション202により要求された複数のGPIOイベントを含む、オペレーティングシステム204により生じた複数のイベントを含み得る。複数のGPIOイベントは、ソフトウェアにより発信された複数のイベント、またはエンベデッドコントローラ132および/または周辺機器134から発信される複数のイベントを含む、仮想GPIOコントローラ212により生じたイベントも含み得る。複数のGPIOイベントは、仮想GPIOコントローラファームウェアインターフェース208によりトリガされた割り込みも含み得る。GPIOイベントを処理するための複数の方法は、図4および5に関連して以下に詳細に説明される。いくつかの実施形態では、コンピューティングデバイス100はブロック318において、プロセッサ120および/またはI/Oサブシステム122のハードウェア割り込みを可能にし得る。とりわけ、仮想GPIOコントローラファームウェアインターフェース208は、単一のハードウェア割り込み回線を用いて複数のイベントをオペレーティングシステム204にシグナリングし得る。更にいくつかの実施形態において、仮想GPIOコントローラ212は、ハードウェア割り込みをモニタリングして複数のエンベデッドコントローラ132および/または周辺機器134からのイベントを管理し得る。方法300は、ブロック316にループバックしてオペレーティングシステム204の起動およびGPIOイベントに対するモニタリングを継続する。
ここで図4を参照すると、使用中にコンピューティングデバイス100は、オペレーティングシステム204により受信された複数のGPIOイベントをモニタリングしてこれに応答するための方法400を実行し得る。方法400はブロック402において開始し、コンピューティングデバイス100は、オペレーティングシステム204を用いてGPIOイベントについてモニタリングする。GPIOイベントは、仮想GPIOピンの状態に関係する任意のプラットフォームイベントとして実施され得る。複数のGPIOイベントは、読み取り、書き込み、または制御コマンド、ならびに仮想GPIOピンの状態に関係する割り込みまたは他の複数の非同期的イベントのような複数のGPIOコマンドを含む。いくつかの実施形態では、コンピューティングデバイス100はブロック404において、複数のGPIOサービスに対する呼び出しをアプリケーション202から受信し得る。オペレーティングシステム204は、複数のGPIOサービスに対する呼び出しをアプリケーション202から受信するべく規格化されたアプリケーションプログラミングインターフェース(API)を実装し得る。 通常、サービスに対する呼び出しは、(ブロック410に関連して以下に更に説明される)複数のI/Oコマンドおよび制御コマンドを含む、1または複数のGPIOコマンドにマッピングされ得る。いくつかの実施形態では、コンピューティングデバイス100はブロック406において、仮想GPIOコントローラファームウェアインターフェース208から受信されたGPIO割り込みをトラップし得る。割り込みは、仮想GPIOピンの状態に基づいて、例えばエミュレーションからの状態変化または下の周辺機器134および/またはエンベデッドコントローラ132における状態変化に基づいて生成され得る。割り込みは、コンピューティングデバイス100上のファームウェアに利用可能な任意の方法を用いてシグナリングされ得る。例えば、割り込みは、ACPI仕様により規定されるシステム制御割り込み(SCI)として生成され得る。GPIO割り込みの生成は、図5の方法500に関連して更に説明される。
ブロック408において、コンピューティングデバイス100は、GPIOイベントが受信されたか否かを判断する。受信されなかった場合、方法400はブロック402にループバックしてGPIOイベントについてモニタリングを継続する。GPIOイベントが受信された場合、方法400はブロック410に進む。
ブロック410において、コンピューティングデバイス100は、オペレーティングシステム204から仮想GPIOコントローラドライバ206へとGPIOコマンドを送信する。GPIOコマンドは、GPIOピンにより実行されるべき動作を指定する。GPIOコマンドは最終的に仮想GPIOピンにより実装されるが、オペレーティングシステム204によって同一のインターフェースが物理および仮想GPIOピンの双方に用いられる。従って、オペレーティングシステム204およびオペレーティングシステム204のドライバインターフェースは、物理および仮想GPIOピンに対して同一であり得る。上記のように、GPIOコマンドはアプリケーション202からのサービスに対する要求に応答し得、または仮想GPIOコントローラファームウェアインターフェース208から受信された割り込みをサービス提供するように生成され得る。コンピューティングデバイス100は、コマンドを仮想GPIOコントローラドライバ206に送信する任意の方法を用い得る。例えば、オペレーティングシステム204は仮想GPIOコントローラドライバ206により規定された1または複数のコールバック機能を呼び出し得る。それらのコールバック機能は、複数のGPIOコントローラ用の周知のドライバインターフェースの一部であってもよい。従って、オペレーティングシステム204は、ハードウェアGPIOドライバについて同じように仮想GPIOコントローラドライバ206とインタラクトする。
いくつかの実施形態では、コンピューティングデバイス100はブロック412において、I/Oコマンドを仮想GPIOコントローラドライバ206に送信し得る。I/Oコマンドは、仮想GPIOピンからのデータを読み取り、または書き込む複数のコマンドを含み得る。いくつかの実施形態では、コンピューティングデバイス100はブロック414において、制御コマンドを仮想GPIOコントローラドライバ206に送信し得る。制御コマンドは、仮想GPIOピンの動作を調整し、または仮想GPIOピンの状態をクエリする複数のコマンドを含み得る。複数の制御コマンドは、仮想GPIOピンにおいて割り込みを有効または無効にし、仮想GPIOピンのロジックレベルを調整し、仮想GPIOピンの駆動電流を調整するコマンド、または他の複数の制御コマンドを含み得る。例えば、オペレーティングシステム204は、GPIO割り込みを生じさせた仮想GPIOピンまたは複数の仮想GPIOピンを判断するべく複数の制御コマンドを送信し得る。
ブロック416において、コンピューティングデバイス100は、仮想GPIOコントローラドライバ206から仮想GPIOコントローラファームウェアインターフェース208へとGPIOコマンドを送信する。コンピューティングデバイス100は、仮想GPIOコントローラファームウェアインターフェース208を起動する任意の技術を用い得る。例えば、コンピューティングデバイス100は、システムデータテーブルからファームウェア制御の方法210を選択して当該制御の方法を実行し得る。いくつかの実施形態において、ファームウェア制御の方法210は、適切なバイトコードインタプリタを用いて実行され得る。
ブロック418において、コンピューティングデバイス100は、仮想GPIOコントローラ212を用いて仮想GPIOピンをエミュレートし、GPIOコマンドを実装する。コンピューティングデバイス100は、仮想GPIOピンの動作を仮想化し、要約し、またはそうでなければエミュレートする任意の技術を用い得る。勿論、いくつかの実施形態において仮想GPIOコントローラファームウェアインターフェース208および仮想GPIOコントローラ212は双方とも、ファームウェアまたは同一のファームウェア制御の方法210に実装され得ることを理解されたい。いくつかの実施形態では、コンピューティングデバイス100はブロック420において、ハードウェアGPIOピンの動作をエミュレートし得る。例えば、コンピューティングデバイス100は、当該特定の仮想GPIOピンに関連する補助メモリ内に格納された値を読み取り、または書き込むことにより読み取りまたは書き込みコマンドに応答し得る。いくつかの実施形態において、補助メモリはファームウェアにより用いるべく予約されたメモリ126のセグメントとして実施され、従ってオペレーティングシステム204から分離され得る。従って、コンピューティングデバイス100は、仮想GPIOピンに割り当てられた値を維持し得る。すなわちコンピューティングデバイス100は、少なくともある基準期間中は仮想GPIOピンに関連する値を維持し得る。更にまたは代替的に、コンピューティングデバイス100は、ソフトウェアモデルを用いるデバイスドライバもしくはアプリケーション、または他のエミュレーション技術を起動するハードウェアGPIOピンの動作をエミュレートし得る。
いくつかの実施形態では、コンピューティングデバイス100はブロック422において、周辺機器134またはエンベデッドコントローラ132のインターフェースを仮想GPIOピンとして適合させ得る。換言すれば、コンピューティングデバイス100は、周辺機器134またはエンベデッドコントローラ132を用いて仮想GPIOピンをエミュレートし得る。周辺機器134のインターフェースを適合させることにより、周辺機器134がオペレーティングシステム204には1または複数のハードウェアGPIOピンを介してコンピューティングデバイス100に接続されているものとして見えるようになってもよい。具体的には、コンピューティングデバイス100は、周辺機器134を制御するように用いられる特定のハードウェアまたはソフトウェアインターフェースを適合させ得る。例えば、コンピューティングデバイス100は、複数のGPIOコマンド(例えば、読み取り、書き込み、状態、およびイベント)を特定の周辺機器134により用いられるハードウェアインターフェースに変換し得る。エンベデッドコントローラ132を適合させることにより、エンベデッドコントローラ132の1または複数の入力または出力は、オペレーティングシステム204にはハードウェアGPIOピンとして見えるようになり得る。それらの入力または出力は、エンベデッドコントローラ132上で複数の物理GPIOピンとして実施され得る。例えば、コンピューティングデバイス100は、適切な相互接続バスを介してエンベデッドコントローラ132との間で複数のGPIOコマンドを転送し得、エンベデッドコントローラ132は、それ自身のI/Oリソース(例えば、GPIOピン、または他の複数のハードウェアインターフェース)により複数のI/O動作を実行し得る。いくつかの実施形態において、エンベデッドコントローラ132は、1または複数の周辺機器134とこのようにインターフェース接続し得る。
いくつかの実施形態では、コンピューティングデバイス100はブロック424において、エンベデッドコントローラ132および/または周辺機器134に、またはこれらからGPIOデータを多重化し得る。例えば、シングルエンベデッドコントローラ132は、周辺機器134へのいくつかのハードウェアI/O接続を含んでもよいが、シングルバス、ピン、または割り込みを用いてI/Oサブシステム122に接続されてもよい。仮想GPIOコントローラ212、またはコンピューティングデバイス100の複数の追加の仮想GPIOコントローラ212は、2つ以上の仮想GPIOピンをエミュレートし得る。仮想GPIOコントローラ212は、エンベデッドコントローラ132が各ハードウェアI/O接続に対して適切な動作を実行し得るように各仮想GPIOピンに関係する複数のGPIOコマンドをパッケージ化し、識別し、またはそうでなければ多重化し得る。例えば、エンベデッドコントローラ132はいくつかのハードウェアGPIOピンを含んでもよく、仮想GPIOコントローラ212はそれらのハードウェアGPIOピンの各々に対する仮想GPIOピンをエミュレートしてもよい。同様に、いくつかの実施形態においてコンピューティングデバイス100は、同一のハードウェア接続を共有するいくつかの周辺機器134に関連するいくつかの仮想GPIOピンについてGPIOデータを多重化し得る。上記のように、多重化は、周辺機器134をサポートするのに必要とされるプロセッサ120および/またはI/Oサブシステム122上の物理ピンの数を減らすことができる。
いくつかの実施形態では、コンピューティングデバイス100はブロック426において、仮想GPIOピンのエミュレーションに応答してGPIOイベントを生成し得る。例えば、ソフトウェアエミュレーションは、GPIOイベントが仮想GPIOピンの新しい状態に基づいて生成されるべきであると決定してもよい。別の例として、コンピューティングデバイス100は、GPIOイベントがエンベデッドコントローラ132および/または周辺機器134とのインタラクションに基づいて生成されるべきであると決定してもよい。仮想GPIOコントローラ212により生成されたGPIOイベントは、下記の図5における方法500により処理され得る。
ブロック428において、コンピューティングデバイス100は、仮想GPIOコントローラドライバ206を介してGPIOコマンドの結果をオペレーティングシステム204に返す。例えば、仮想GPIOコントローラドライバ206は、オペレーティングシステム204により既に呼び出されたコールバックの方法からの結果を返してもよい。返された結果は、状態コードまたはGPIOイベントの成功を記載する他の情報を含み得る。いくつかの実施形態では、コンピューティングデバイス100はブロック430において、例えば読み取りコマンドに応答して仮想GPIOデータをオペレーティングシステム204に返し得る。例えば、仮想GPIOデータは、仮想GPIOピンに関連する仮想入力値を表し得る。順次、オペレーティングシステム204は返されたGPIOデータを用いて、アプリケーション202に応答し、割り込みをサービス提供し、またはそうでなければGPIOイベントを処理し得る。結果を返した後、方法400はブロック402にループバックして、複数のGPIOイベントについてモニタリングを継続する。
ここで図5を参照すると、使用中にコンピューティングデバイス100は、仮想GPIOコントローラ212により受信された複数のGPIOイベントをモニタリングしてこれに応答するための方法500を実行し得る。方法500はブロック502において開始し、コンピューティングデバイス100は、仮想GPIOコントローラ212を用いてGPIOイベントについてモニタリングする。仮想GPIOコントローラ212は、ソフトウェアイベント、ハードウェアイベント、割り込み、ネットワークイベント、またはエミュレートされた仮想GPIOピンに影響するその他のイベントを含む、仮想GPIOピンの状態に影響する任意のプラットフォームイベントについてモニタリングし得る。ブロック504において、コンピューティングデバイス100は、ソフトウェアGPIOイベントについてモニタリングする。当該GPIOイベントは、例えば仮想GPIOコントローラドライバ206から受信されたGPIOコマンドに応答して、仮想GPIOコントローラ212自体によりソフトウェアまたはファームウェアの形で生成され得る。ソフトウェアGPIOイベントの生成は、図4のブロック426に関連して上記において更に説明されている。いくつかの実施形態では、コンピューティングデバイス100はブロック506において、仮想GPIOコントローラ212のファームウェアを制御した補助メモリをモニタリングし得る。コンピューティングデバイス100は、例えばプラットフォームイベントがデータを補助メモリに書き込んだ場合に、補助メモリにおける任意の複数の値が変更されたか否かを判断し得る。いくつかの実施形態では、コンピューティングデバイス100はブロック508において、周辺機器134とのI/Oについてモニタリングし得る。コンピューティングデバイス100は、データが周辺機器134に送信または受信されたか否か、周辺機器134が割り込みをトリガしたか否か、周辺機器134が送信される準備のできたデータを有するか否か、または周辺機器134とのその他のI/O動作が保留中か否かを判断し得る。同様にいくつかの実施形態では、コンピューティングデバイス100はブロック510において、エンベデッドコントローラ132とのI/Oについてモニタリングし得る。
ブロック512において、コンピューティングデバイス100は、GPIOイベントが受信されたか否かを判断する。受信されなかった場合、方法500はブロック502にループバックして、複数のGPIOイベントについてモニタリングを継続する。GPIOイベントが受信された場合、方法500はブロック514に進む。
ブロック514において、コンピューティングデバイス100は、仮想GPIOコントローラ212を用いて仮想GPIOピンをエミュレートし、GPIOイベントを処理する。具体的には、仮想GPIOピンのエミュレートされた状態は、GPIOイベントの処理に応答して修正され得る。コンピューティングデバイス100は、仮想GPIOピンの動作を仮想化し、要約し、適合させ、またはそうでなければエミュレートする任意の技術を用い得る。勿論、いくつかの実施形態において仮想GPIOコントローラファームウェアインターフェース208および仮想GPIOコントローラ212は双方とも、ファームウェアまたは同一のファームウェア制御の方法210に実装され得ることを理解されたい。いくつかの実施形態では、コンピューティングデバイス100はブロック516において、ハードウェアGPIOピンの動作をエミュレートし得る。例えば、コンピューティングデバイス100は、仮想GPIOピンに関連する仮想入力値または仮想GPIOピンに関連する仮想出力値を決定し得る。いくつかの実施形態において、仮想GPIOピンのエミュレートされた状態は、上記のようにファームウェアを制御した補助メモリ内に格納され得る。更にまたは代替的に、コンピューティングデバイス100は、ソフトウェアモデルを用い、デバイスドライバもしくはアプリケーションを起動し、またはその他のエミュレーション技術を用いるハードウェアGPIOピンの動作をエミュレートし得る。
いくつかの実施形態では、コンピューティングデバイス100はブロック518において、周辺機器134またはエンベデッドコントローラ132のインターフェースを仮想GPIOピンとして適合させ得る。周辺機器134のインターフェースを適合させることにより、周辺機器134がオペレーティングシステム204には1または複数のハードウェアGPIOピンを介してコンピューティングデバイス100に接続されているものとして見えるようになってもよい。具体的には、コンピューティングデバイス100は、周辺機器134を制御するように用いられる特定のハードウェアまたはソフトウェアインターフェースを適合させ得る。例えば、コンピューティングデバイス100は、仮想GPIOピンのエミュレートされた状態を修正するべく、特定の周辺機器134から受信された複数のI/Oイベント(例えば、入力、出力、または割り込み)を変換し得る。エンベデッドコントローラ132を適合させることにより、エンベデッドコントローラ132の1または複数の入力または出力の状態に基づいて仮想GPIOピンの状態を修正し得る。それらの入力または出力は、エンベデッドコントローラ132上で複数の物理GPIOピンとして実施され得る。いくつかの実施形態において、エンベデッドコントローラ132は、1または複数の周辺機器134とこのようにインターフェース接続し得る。
いくつかの実施形態では、コンピューティングデバイス100はブロック520において、エンベデッドコントローラ132および/または周辺機器134に、またはこれらからGPIOデータを多重化し得る。例えば、シングルエンベデッドコントローラ132は、周辺機器134へのいくつかのハードウェアI/O接続を含んでもよいが、シングルバスピンまたは割り込みを用いてI/Oサブシステム122に接続されてもよい。仮想GPIOコントローラ212、またはコンピューティングデバイス100の複数の追加の仮想GPIOコントローラ212は、2つ以上の仮想GPIOピンをエミュレートし得る。仮想GPIOコントローラ212は、エンベデッドコントローラ132から受信された複数のI/Oイベントをいくつかの仮想GPIOピンへとパッケージ化し、識別し、またはそうでなければ多重化し得る。例えば、エンベデッドコントローラ132はいくつかのハードウェアGPIOピンを含んでもよく、仮想GPIOコントローラ212はそれらのハードウェアGPIOピンの各々に対する仮想GPIOピンをエミュレートしてもよい。同様に、いくつかの実施形態においてコンピューティングデバイス100は、同一のハードウェア接続を共有するいくつかの周辺機器134に関連するいくつかの仮想GPIOピンについてGPIOデータを多重化し得る。上記のように、多重化は、周辺機器134をサポートするのに必要とされるプロセッサ120および/またはI/Oサブシステム122上の物理ピンの数を減らすことができる。
GPIOイベントを処理した後、コンピューティングデバイス100はブロック522において、割り込みがGPIOイベントに対して有効にされたか否かを判断する。割り込みは、仮想GPIOコントローラドライバ206または仮想GPIOコントローラファームウェアインターフェース208から受信された複数の制御コマンドにより既に有効にされている場合がある。割り込みは、個々の仮想GPIOピンに対して有効にされてもよい。従って、コンピューティングデバイス100は、有効にされた複数の仮想GPIOピンに関係する仮想GPIOデータが変更されたか否かを判断し得る。更にまたは代替的に、コンピューティングデバイス100は、割り込みがGPIOイベントに対して適切か否かを判断し得る。例えば、仮想GPIOピンの状態が変更された場合には、割り込みは適切であり得る。割り込みが有効にされない場合、方法500はブロック502にループバックして、複数のGPIOイベントについてモニタリングを継続する。上記のように、オペレーティングシステム204は、適切な複数のGPIOコマンドを送信することにより、後の時点で同期してGPIOデータを読み取り得る。割り込みが有効にされる場合、方法500はブロック524に進む。
ブロック524において、コンピューティングデバイス100は、仮想GPIOコントローラファームウェアインターフェース208からオペレーティングシステム204への割り込みをトリガする。仮想GPIOコントローラ212は、仮想GPIOコントローラファームウェアインターフェース208を起動して割り込みを生成し得る。割り込みは、I/Oサブシステム122により生成された物理的割り込みとして実施され得、I/Oサブシステム122は、上記のようにディスクリートチップとして実施され、またはコンピューティングデバイス100のシステムオンチップ(SoC)に含まれ得る。割り込みはオペレーティングシステム204により処理され得、オペレーティングシステム204は次に、仮想GPIOコントローラドライバ206の適切な複数の機能を呼び出して割り込みをサービス提供し得る。ファームウェア割り込みの処理は、図4のブロック406に関連して上記において更に説明されている。割り込みは、オペレーティングシステム204と互換性のある任意の適切な技術を用いてトリガされ得る。例えば、割り込みは、ACPI仕様により規定されるシステム制御割り込み(SCI)として実施され得る。割り込みをトリガした後、方法500はブロック502にループバックして、複数のGPIOイベントについてモニタリングを継続する。
方法400、500は、複数のGPIOイベントについて同期してモニタリングするものとして説明されているが、いくつかの実施形態において方法400、500は、イベント駆動型または非同期的であり得ることを理解されたい。更に方法400、500は、コンピューティングデバイス100上で互いに、コンピューティングデバイス100のオペレーティングシステム204および任意のアプリケーション202と同時に実行され得る。
[例]
本明細書に開示される複数の技術の具体例が以下に提供される。複数の技術の実施形態は、下記の複数の例の任意の1または複数および任意の組み合わせを含み得る。
例1は、汎用I/O(GPIO)をエミュレートするためのコンピューティングデバイスを含み、コンピューティングデバイスは、仮想GPIOコントローラドライバと、仮想GPIOコントローラファームウェアインターフェースと、仮想GPIOコントローラとを備え、仮想GPIOコントローラドライバは、(i)コンピューティングデバイスのオペレーティングシステムからGPIOピンにより実装されるべき動作を指定するGPIOコマンドを受信し、(ii)GPIOコマンドの受信に応答して、GPIOコマンドを仮想GPIOコントローラファームウェアインターフェースに送信し、仮想GPIOファームウェアインターフェースは、GPIOコマンドを仮想GPIOコントローラドライバから受信し、仮想GPIOコントローラは、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからのGPIOコマンドの受信に応答してGPIOコマンドを実装するべく、仮想GPIOピンをエミュレートする。
例2は例1の主題を含み、GPIOコマンドは、読み取りコマンドを含み、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートすることは、仮想GPIOピンの仮想入力値を判断することを含み、仮想GPIOコントローラドライバは、更に、仮想GPIOピンのエミュレーションに応答して仮想入力値をオペレーティングシステムに返す。
例3は例1および2のうちのいずれかの主題を含み、GPIOコマンドは、書き込みコマンドを含み、GPIOコマンド実装するべく仮想GPIOピンをエミュレートすることは、仮想GPIOピンの仮想出力値を判断することと、基準期間中に仮想GPIOピンの仮想出力値を維持することを含む。
例4は例1〜3のいずれかの主題を含み、GPIOコマンドは、制御コマンドを含み、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートすることは、仮想GPIOピンの状態を制御コマンドの機能として修正することを含む。
例5は例1〜4のいずれかの主題を含み、仮想GPIOコントローラドライバは、更に、(i)第2のGPIOピンにより実装されるべき動作を指定する第2のGPIOコマンドを受信し、(ii)第2のGPIOコマンドを仮想GPIOコントローラファームウェアインターフェースに送信し、仮想GPIOコントローラファームウェアインターフェースは、更に、第2のGPIOコマンドを仮想GPIOコントローラドライバから受信し、仮想GPIOコントローラは、更に、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからの第2のGPIOコマンドの受信に応答して、第2のGPIOコマンドを実装するべく第2の仮想GPIOピンをエミュレートする。
例6は例1〜5のいずれかの主題を含み、仮想GPIOピンをエミュレートすることは、コンピューティングデバイスのマイクロコントローラを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートすることを含む。
例7は例1〜6のいずれかの主題を含み、マイクロコントローラは、コンピューティングデバイスのエンベデッドコントローラを備える。
例8は例1〜7のいずれかの主題を含み、仮想GPIOピンをエミュレートすることは、更に、エンベデッドコントローラの物理GPIOピンを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートすることを含む。
例9は例1〜8のいずれかの主題を含み、仮想GPIOコントローラは、更に、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて第2の仮想GPIOピンをエミュレートする。
例10は例1〜9のいずれかの主題を含み、仮想GPIOピンをエミュレートすることは、コンピューティングデバイスの周辺機器へのインターフェースを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートすることを含む。
例11は例1〜10のいずれかの主題を含み、仮想GPIOコントローラは、更に、仮想GPIOコントローラにより用いるメモリセグメントを予約し、仮想GPIOピンをエミュレートすることは、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートすることを含む。
例12は例1〜11のいずれかの主題を含み、仮想GPIOコントローラは、更に、仮想GPIOピンの状態に関連するGPIOイベントを受信し、仮想GPIOピンの状態をGPIOイベントの機能として修正するべく、仮想GPIOピンをエミュレートする。
例13は例1〜12のいずれかの主題を含み、GPIOイベントは、コンピューティングデバイスのマイクロコントローラから受信されたI/Oイベントを含み、仮想GPIOピンをエミュレートすることは、仮想GPIOピンの状態をI/Oイベントの機能として修正することを含む。
例14は例1〜13のいずれかの主題を含み、マイクロコントローラは、コンピューティングデバイスのエンベデッドコントローラを備える。
例15は例1〜14のいずれかの主題を含み、仮想GPIOコントローラは、更に、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて第2の仮想GPIOピンをエミュレートする。
例16は例1〜15のいずれかの主題を含み、GPIOイベントは、コンピューティングデバイスの周辺機器から受信されたI/Oイベントを含み、仮想GPIOピンをエミュレートすることは、仮想GPIOピンの状態をI/Oイベントの機能として修正することを含む。
例17は例1〜16のいずれかの主題を含み、仮想GPIOコントローラは、更に、仮想GPIOコントローラにより用いられるメモリセグメントを予約し、GPIOイベントを受信することは、予約したメモリセグメントへのメモリアクセスを検出することを含み、仮想GPIOピンをエミュレートすることは、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートすることを含む。
例18は例1〜17のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、更に、仮想GPIOピンの状態の修正に応答して、コンピューティングデバイスのI/Oサブシステムによりオペレーティングシステムに物理的割り込みをトリガする。
例19は例1〜18のいずれかの主題を含み、割り込みは、オペレーティングシステムにGPIOコマンドを仮想GPIOコントローラドライバに送信させる。
例20は例1〜19のいずれかの主題を含み、仮想GPIOコントローラドライバによりGPIOコマンドを受信することは、オペレーティングシステムからコールバックの方法を受信することを含む。
例21は例1〜20のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
例22は例1〜21のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、複数のACPI制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)デバイスを有する。
例23は、コンピューティングデバイス上で汎用I/O(GPIO)をエミュレートするための方法を含み、方法は、コンピューティングデバイスにおけるオペレーティングシステムの仮想GPIOコントローラドライバにより、GPIOピンによって実装されるべき動作を指定するGPIOコマンドを受信する段階と、GPIOコマンドの受信に応答して、仮想GPIOコントローラドライバからコンピューティングデバイスの仮想GPIOコントローラファームウェアインターフェースへとGPIOコマンドを送信する段階と、仮想GPIOコントローラファームウェアインターフェースにより仮想GPIOコントローラドライバからGPIOコマンドを受信する段階と、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからのGPIOコマンドの受信に応答して、コンピューティングデバイスの仮想GPIOコントローラによりGPIOコマンドを実装するべく仮想GPIOピンをエミュレートする段階とを備える。
例24は例23の主題を含み、GPIOコマンドを受信する段階は、読み取りコマンドを受信する段階を有し、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートする段階は、仮想GPIOピンの仮想入力値を決定する段階を有し、方法は、仮想GPIOピンをエミュレートすることに応答して仮想GPIOコントローラドライバからの仮想入力値をオペレーティングシステムに返す段階を更に備える。
例25は例23および24のうちのいずれかの主題を含み、GPIOコマンドを受信する段階は、書き込みコマンドを受信する段階を有し、GPIOコマンド実装するべく仮想GPIOピンをエミュレートする段階は、仮想GPIOピンの仮想出力値を判断する段階と、基準期間中に仮想GPIOピンの仮想出力値を維持する段階とを有する。
例26は例23〜25のいずれかの主題を含み、GPIOコマンドを受信する段階は、制御コマンドを受信する段階を有し、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートする段階は、仮想GPIOピンの状態を制御コマンドの機能として修正する段階を有する。
例27は例23〜26のいずれかの主題を含み、仮想GPIOコントローラドライバにより、第2のGPIOピンによって実装されるべき動作を指定する第2のGPIOコマンドを受信する段階と、仮想GPIOコントローラドライバから仮想GPIOコントローラファームウェアインターフェースへと第2のGPIOコマンドを送信する段階と、仮想GPIOコントローラファームウェアインターフェースにより仮想GPIOコントローラドライバから第2のGPIOコマンドを受信する段階と、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからの第2のGPIOコマンドの受信に応答して、コンピューティングデバイスの仮想GPIOコントローラにより第2のGPIOコマンドを実装するべく第2の仮想GPIOピンをエミュレートする段階とを更に備える。
例28は例23〜27のいずれかの主題を含み、仮想GPIOピンをエミュレートする段階は、コンピューティングデバイスのマイクロコントローラを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートする段階を有する。
例29は例23〜28のいずれかの主題を含み、マイクロコントローラを用いて仮想GPIOピンをエミュレートする段階は、コンピューティングデバイスのエンベデッドコントローラを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートする段階を有する。
例30は例23〜29のいずれかの主題を含み、仮想GPIOピンをエミュレートする段階は、更に、エンベデッドコントローラの物理GPIOピンを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートする段階を有する。
例31は例23〜30のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて、コンピューティングデバイスの仮想GPIOコントローラにより第2の仮想GPIOピンをエミュレートする段階を更に有する。
例32は例23〜31のいずれかの主題を含み、仮想GPIOピンをエミュレートする段階は、コンピューティングデバイスの周辺機器へのインターフェースを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートする段階を有する。
例33は例23〜32のいずれかの主題を含み、仮想GPIOコントローラにより用いられるメモリセグメントを予約する段階を更に備え、仮想GPIOピンをエミュレートする段階は、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートする段階を有する。
例34は例23〜33のいずれかの主題を含み、仮想GPIOコントローラにより、仮想GPIOピンの状態に関連するGPIOイベントを受信する段階と、仮想GPIOコントローラにより、仮想GPIOピンの状態をGPIOイベントの機能として修正するべく、仮想GPIOピンをエミュレートする段階とを更に備える。
例35は例23〜34のいずれかの主題を含み、GPIOイベントを受信する段階は、I/Oイベントをコンピューティングデバイスのマイクロコントローラから受信する段階を有し、仮想GPIOピンをエミュレートする段階は、仮想GPIOピンの状態をI/Oイベントの機能として修正する段階を有する。
例36は例23〜35のいずれかの主題を含み、I/Oイベントを受信する段階は、I/Oイベントをコンピューティングデバイスのエンベデッドコントローラから受信する段階を有する。
例37は例23〜36のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて、仮想GPIOコントローラにより第2の仮想GPIOピンをエミュレートする段階を更に備える。
例38は例23〜37のいずれかの主題を含み、GPIOイベントを受信する段階は、I/Oイベントをコンピューティングデバイスの周辺機器から受信する段階を有し、仮想GPIOピンをエミュレートする段階は、仮想GPIOピンの状態をI/Oイベントの機能として修正する段階を有する。
例39は例23〜38のいずれかの主題を含み、仮想GPIOコントローラにより用いられるメモリセグメントを予約する段階を更に備え、GPIOイベントを受信する段階は、予約したメモリセグメントへのメモリアクセスを検出する段階を有し、仮想GPIOピンをエミュレートする段階は、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートする段階を有する。
例40は例23〜39のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、更に、仮想GPIOピンの状態の修正に応答して、コンピューティングデバイスのI/Oサブシステムによりオペレーティングシステムに物理的割り込みをトリガする段階を有する。
例41は例23〜40のいずれかの主題を含み、割り込みは、オペレーティングシステムにGPIOコマンドを仮想GPIOコントローラドライバに送信させる。
例42は例23〜41のいずれかの主題を含み、仮想GPIOコントローラドライバによりGPIOコマンドを受信する段階は、オペレーティングシステムからコールバックの方法を受信する段階を有する。
例43は例23〜42のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
例44は例23〜43のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、複数のACPI制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)デバイスを有する。
例45は、プロセッサと、プロセッサにより実行されると、コンピューティングデバイスに例23〜44のいずれかの方法を実行させる複数の命令を格納したメモリとを備えるコンピューティングデバイスを含む。
例46は、実行されることに応答して、例23〜44のいずれかの方法を実行するコンピューティングデバイスをもたらす、格納された複数の命令を備えた1または複数の機械可読ストレージ媒体を含む。
例47は、例23〜44のいずれかの方法を実行するための手段を備える、コンピューティングデバイスを含む。
例48は、汎用I/O(GPIO)をエミュレートするためのコンピューティングデバイスを含み、コンピューティングデバイスは、コンピューティングデバイスにおけるオペレーティングシステムの仮想GPIOコントローラドライバにより、GPIOピンによって実装されるべき動作を指定するGPIOコマンドを受信するための手段と、GPIOコマンドの受信に応答して、仮想GPIOコントローラドライバからコンピューティングデバイスの仮想GPIOコントローラファームウェアインターフェースへとGPIOコマンドを送信するための手段と、仮想GPIOコントローラファームウェアインターフェースにより仮想GPIOコントローラドライバからGPIOコマンドを受信するための手段と、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからのGPIOコマンドの受信に応答して、コンピューティングデバイスの仮想GPIOコントローラによりGPIOコマンドを実装するべく仮想GPIOピンをエミュレートするための手段とを備える。
例49は例48の主題を含み、GPIOコマンドを受信するための手段は、読み取りコマンドを受信するための手段を有し、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートするための手段は、仮想GPIOピンの仮想入力値を決定するための手段を有し、コンピューティングデバイスは、仮想GPIOピンをエミュレートすることに応答して仮想GPIOコントローラドライバからの仮想入力値をオペレーティングシステムに返すための手段を更に備える。
例50は例48および49のうちのいずれかの主題を含み、GPIOコマンドを受信するための手段は、書き込みコマンドを受信するための手段を有し、GPIOコマンド実装するべく仮想GPIOピンをエミュレートするための手段は、仮想GPIOピンの仮想出力値を判断するための手段と、基準期間中に仮想GPIOピンの仮想出力値を維持するための手段とを有する。
例51は例48〜50のいずれかの主題を含み、GPIOコマンドを受信するための手段は、制御コマンドを受信するための手段を有し、GPIOコマンドを実装するべく仮想GPIOピンをエミュレートするための手段は、仮想GPIOピンの状態を制御コマンドの機能として修正するための手段を有する。
例52は例48〜51のいずれかの主題を含み、仮想GPIOコントローラドライバにより、第2のGPIOピンによって実装されるべき動作を指定する第2のGPIOコマンドを受信するための手段と、仮想GPIOコントローラドライバから仮想GPIOコントローラファームウェアインターフェースへと第2のGPIOコマンドを送信するための手段と、仮想GPIOコントローラファームウェアインターフェースにより仮想GPIOコントローラドライバから第2のGPIOコマンドを受信するための手段と、仮想GPIOコントローラファームウェアインターフェースによる仮想GPIOコントローラドライバからの第2のGPIOコマンドの受信に応答して、コンピューティングデバイスの仮想GPIOコントローラにより第2のGPIOコマンドを実装するべく第2の仮想GPIOピンをエミュレートするための手段とを更に備える。
例53は例48〜52のいずれかの主題を含み、仮想GPIOピンをエミュレートするための手段は、コンピューティングデバイスのマイクロコントローラを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例54は例48〜53のいずれかの主題を含み、マイクロコントローラを用いて仮想GPIOピンをエミュレートするための手段は、コンピューティングデバイスのエンベデッドコントローラを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例55は例48〜54のいずれかの主題を含み、仮想GPIOピンをエミュレートするための手段は、更に、エンベデッドコントローラの物理GPIOピンを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例56は例48〜55のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて、コンピューティングデバイスの仮想GPIOコントローラにより第2の仮想GPIOピンをエミュレートするための手段を更に有する。
例57は例48〜56のいずれかの主題を含み、仮想GPIOピンをエミュレートするための手段は、コンピューティングデバイスの周辺機器へのインターフェースを仮想GPIOピンとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例58は例48〜57のいずれかの主題を含み、仮想GPIOコントローラにより用いられるメモリセグメントを予約するための手段を更に備え、仮想GPIOピンをエミュレートするための手段は、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例59は例48〜58のいずれかの主題を含み、仮想GPIOコントローラにより、仮想GPIOピンの状態に関連するGPIOイベントを受信するための手段と、仮想GPIOコントローラにより、仮想GPIOピンの状態をGPIOイベントの機能として修正するべく、仮想GPIOピンをエミュレートするための手段とを更に備える。
例60は例48〜59のいずれかの主題を含み、GPIOイベントを受信するための手段は、I/Oイベントをコンピューティングデバイスのマイクロコントローラから受信するための手段を有し、仮想GPIOピンをエミュレートするための手段は、仮想GPIOピンの状態をI/Oイベントの機能として修正するための手段を有する。
例61は例48〜60のいずれかの主題を含み、I/Oイベントを受信するための手段は、I/Oイベントをコンピューティングデバイスのエンベデッドコントローラから受信するための手段を有する。
例62は例48〜61のいずれかの主題を含み、コンピューティングデバイスのエンベデッドコントローラを第2の仮想GPIOピンとして用いて、仮想GPIOコントローラにより第2の仮想GPIOピンをエミュレートするための手段を更に備える。
例63は例48〜62のいずれかの主題を含み、GPIOイベントを受信するための手段は、I/Oイベントをコンピューティングデバイスの周辺機器から受信するための手段を有し、仮想GPIOピンをエミュレートするための手段は、仮想GPIOピンの状態をI/Oイベントの機能として修正するための手段を有する。
例64は例48〜63のいずれかの主題を含み、仮想GPIOコントローラにより用いられるメモリセグメントを予約するための手段を更に備え、GPIOイベントを受信するための手段は、予約したメモリセグメントへのメモリアクセスを検出する手段を有し、仮想GPIOピンをエミュレートするための手段は、予約したメモリセグメントを補助メモリとして用いて仮想GPIOピンをエミュレートするための手段を有する。
例65は例48〜64のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースにより、仮想GPIOピンの状態の修正に応答して、コンピューティングデバイスのI/Oサブシステムによりオペレーティングシステムに物理的割り込みをトリガするための手段を更に有する。
例66は例48〜65のいずれかの主題を含み、割り込みは、オペレーティングシステムにGPIOコマンドを仮想GPIOコントローラドライバに送信させる。
例67は例48〜66のいずれかの主題を含み、仮想GPIOコントローラドライバによりGPIOコマンドを受信する手段は、オペレーティングシステムからコールバックの方法を受信する手段を有する。
例68は例48〜67のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、仮想マシンの制御の方法を含み、制御の方法は、コンピューティングデバイスのバイトコードインタプリタにより変換される。
例69は例48〜68のいずれかの主題を含み、仮想GPIOコントローラファームウェアインターフェースは、複数のACPI制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)デバイスを有する。

Claims (25)

  1. 汎用I/O(GPIO)をエミュレートするためのコンピューティングデバイスであって、
    仮想GPIOコントローラドライバと、
    仮想GPIOコントローラファームウェアインターフェースと、
    仮想GPIOコントローラとを備え、
    前記仮想GPIOコントローラドライバは、(i)前記コンピューティングデバイスのオペレーティングシステムからGPIOピンにより実装されるべき動作を指定するGPIOコマンドを受信し、(ii)前記GPIOコマンドの受信に応答して、前記GPIOコマンドを前記仮想GPIOコントローラファームウェアインターフェースに送信し、
    前記仮想GPIOファームウェアインターフェースは、前記GPIOコマンドを前記仮想GPIOコントローラドライバから受信し、
    前記仮想GPIOコントローラは、前記仮想GPIOコントローラファームウェアインターフェースによる前記仮想GPIOコントローラドライバからの前記GPIOコマンドの受信に応答して前記GPIOコマンドを実装するべく、仮想GPIOピンをエミュレートする、コンピューティングデバイス。
  2. 前記GPIOコマンドは、読み取りコマンドを含み、
    前記GPIOコマンドを実装するべく前記仮想GPIOピンをエミュレートすることは、前記仮想GPIOピンの仮想入力値を判断することを含み、
    前記仮想GPIOコントローラドライバは、更に、前記仮想GPIOピンのエミュレーションに応答して前記仮想入力値を前記オペレーティングシステムに返す、請求項1に記載のコンピューティングデバイス。
  3. 前記GPIOコマンドは、書き込みコマンドを含み、
    前記GPIOコマンドを実装するべく前記仮想GPIOピンをエミュレートすることは、前記仮想GPIOピンの仮想出力値を判断することと、基準期間中に前記仮想GPIOピンの前記仮想出力値を維持することとを含む、
    請求項1に記載のコンピューティングデバイス。
  4. 前記GPIOコマンドは、制御コマンドを含み、
    前記GPIOコマンドを実装するべく前記仮想GPIOピンをエミュレートすることは、前記仮想GPIOピンの状態を前記制御コマンドの機能として修正することを含む、請求項1に記載のコンピューティングデバイス。
  5. 前記仮想GPIOコントローラドライバは、更に、(i)第2のGPIOピンにより実装されるべき動作を指定する第2のGPIOコマンドを受信し、(ii)前記第2のGPIOコマンドを前記仮想GPIOコントローラファームウェアインターフェースに送信し、
    前記仮想GPIOコントローラファームウェアインターフェースは、更に、前記第2のGPIOコマンドを前記仮想GPIOコントローラドライバから受信し、
    前記仮想GPIOコントローラは、更に、前記仮想GPIOコントローラファームウェアインターフェースによる前記仮想GPIOコントローラドライバからの前記第2のGPIOコマンドの受信に応答して、前記第2のGPIOコマンドを実装するべく第2の仮想GPIOピンをエミュレートする、請求項1に記載のコンピューティングデバイス。
  6. 前記仮想GPIOピンをエミュレートすることは、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想GPIOピンとして用いて前記仮想GPIOピンをエミュレートすることを含む、請求項1に記載のコンピューティングデバイス。
  7. 前記仮想GPIOピンをエミュレートすることは、更に、前記エンベデッドコントローラの物理GPIOピンを前記仮想GPIOピンとして用いて前記仮想GPIOピンをエミュレートすることを含む、請求項6に記載のコンピューティングデバイス。
  8. 前記仮想GPIOピンをエミュレートすることは、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想GPIOピンとして用いて前記仮想GPIOピンをエミュレートすることを含む、請求項1に記載のコンピューティングデバイス。
  9. 前記仮想GPIOコントローラは、更に、前記仮想GPIOコントローラにより用いるメモリセグメントを予約し、
    前記仮想GPIOピンをエミュレートすることは、予約した前記メモリセグメントを補助メモリとして用いて前記仮想GPIOピンをエミュレートすることを含む、請求項1に記載のコンピューティングデバイス。
  10. 前記仮想GPIOコントローラは、更に、
    前記仮想GPIOピンの状態に関連するGPIOイベントを受信し、
    前記仮想GPIOピンの前記状態を前記GPIOイベントの機能として修正するべく、前記仮想GPIOピンをエミュレートする、請求項1〜9のいずれか1項に記載のコンピューティングデバイス。
  11. 前記GPIOイベントは、前記コンピューティングデバイスのエンベデッドコントローラから受信されたI/Oイベントを含み、
    前記仮想GPIOピンをエミュレートすることは、前記仮想GPIOピンの前記状態を前記I/Oイベントの機能として修正することを含む、
    請求項10に記載のコンピューティングデバイス。
  12. 前記GPIOイベントは、前記コンピューティングデバイスの周辺機器から受信されたI/Oイベントを含み、
    前記仮想GPIOピンをエミュレートすることは、前記仮想GPIOピンの前記状態を前記I/Oイベントの機能として修正することを含む、請求項10に記載のコンピューティングデバイス。
  13. 前記仮想GPIOコントローラファームウェアインターフェースは、更に、前記仮想GPIOピンの前記状態の修正に応答して、前記コンピューティングデバイスのI/Oサブシステムにより前記オペレーティングシステムに物理的割り込みをトリガする、請求項10に記載のコンピューティングデバイス。
  14. 前記割り込みは、前記オペレーティングシステムに前記GPIOコマンドを前記仮想GPIOコントローラドライバに送信させる、請求項13に記載のコンピューティングデバイス。
  15. 前記仮想GPIOコントローラファームウェアインターフェースは、複数のACPI制御の方法を含むアドバンスト・コンフィギュレーション・アンド・パワー・インターフェース(ACPI)デバイスを有し、
    各ACPI制御の方法は、仮想マシンの制御の方法を含み、前記制御の方法は、前記コンピューティングデバイスのバイトコードインタプリタにより変換される、請求項1〜9のいずれか1項に記載のコンピューティングデバイス。
  16. コンピューティングデバイス上で汎用I/O(GPIO)をエミュレートするための方法であって、
    前記コンピューティングデバイスにおけるオペレーティングシステムの仮想GPIOコントローラドライバにより、GPIOピンによって実装されるべき動作を指定するGPIOコマンドを受信する段階と、
    前記GPIOコマンドの受信に応答して、前記仮想GPIOコントローラドライバから前記コンピューティングデバイスの仮想GPIOコントローラファームウェアインターフェースへと前記GPIOコマンドを送信する段階と、
    前記仮想GPIOコントローラファームウェアインターフェースにより前記仮想GPIOコントローラドライバから前記GPIOコマンドを受信する段階と、
    前記仮想GPIOコントローラファームウェアインターフェースによる前記仮想GPIOコントローラドライバからの前記GPIOコマンドの受信に応答して、前記コンピューティングデバイスの仮想GPIOコントローラにより前記GPIOコマンドを実装するべく仮想GPIOピンをエミュレートする段階とを備える、方法。
  17. 前記仮想GPIOコントローラドライバにより、第2のGPIOピンによって実装されるべき動作を指定する第2のGPIOコマンドを受信する段階と、
    前記仮想GPIOコントローラドライバから前記仮想GPIOコントローラファームウェアインターフェースへと前記第2のGPIOコマンドを送信する段階と、
    前記仮想GPIOコントローラファームウェアインターフェースにより前記仮想GPIOコントローラドライバから前記第2のGPIOコマンドを受信する段階と、
    前記仮想GPIOコントローラファームウェアインターフェースによる前記仮想GPIOコントローラドライバからの前記第2のGPIOコマンドの受信に応答して、前記コンピューティングデバイスの前記仮想GPIOコントローラにより前記第2のGPIOコマンドを実装するべく第2の仮想GPIOピンをエミュレートする段階とを更に備える、請求項16に記載の方法。
  18. 前記仮想GPIOピンをエミュレートする段階は、前記コンピューティングデバイスのエンベデッドコントローラを前記仮想GPIOピンとして用いて前記仮想GPIOピンをエミュレートする段階を有する、請求項16に記載の方法。
  19. 前記仮想GPIOピンをエミュレートする段階は、前記コンピューティングデバイスの周辺機器へのインターフェースを前記仮想GPIOピンとして用いて前記仮想GPIOピンをエミュレートする段階を有する、請求項16に記載の方法。
  20. 前記仮想GPIOコントローラにより、前記仮想GPIOピンの状態に関連するGPIOイベントを受信する段階と、
    前記仮想GPIOコントローラにより、前記仮想GPIOピンの前記状態を前記GPIOイベントの機能として修正するべく、前記仮想GPIOピンをエミュレートする段階とを更に備える、請求項16に記載の方法。
  21. 前記GPIOイベントを受信する段階は、I/Oイベントを前記コンピューティングデバイスのエンベデッドコントローラから受信する段階を有し、
    前記仮想GPIOピンをエミュレートする段階は、前記仮想GPIOピンの前記状態を前記I/Oイベントの機能として修正する段階を有する、請求項20に記載の方法。
  22. 前記GPIOイベントを受信する段階は、I/Oイベントを前記コンピューティングデバイスの周辺機器から受信する段階を有し、
    前記仮想GPIOピンをエミュレートする段階は、前記仮想GPIOピンの前記状態を前記I/Oイベントの機能として修正する段階を有する、請求項20に記載の方法。
  23. プロセッサと、
    前記プロセッサにより実行されると、コンピューティングデバイスに請求項16〜22のいずれか1項に記載の方法を実行させる複数の命令を格納したメモリとを備える、コンピューティングデバイス。
  24. 実行されることに応答して、請求項16〜22のいずれか1項に記載の方法を実行するコンピューティングデバイスをもたらす、格納された複数の命令を備える、1または複数の機械可読ストレージ媒体。
  25. 請求項16〜22のいずれか1項に記載の方法を実行するための手段を備える、コンピューティングデバイス。
JP2016552951A 2014-03-27 2015-03-05 コンピューティングデバイス、方法、コンピュータプログラム、および非一時的コンピュータ可読記録媒体 Active JP6319857B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/227,735 2014-03-27
US14/227,735 US9417801B2 (en) 2014-03-27 2014-03-27 Virtual general-purpose I/O controller
PCT/US2015/018914 WO2015148083A1 (en) 2014-03-27 2015-03-05 Virtual general-purpose i/o controller

Publications (2)

Publication Number Publication Date
JP2017509974A true JP2017509974A (ja) 2017-04-06
JP6319857B2 JP6319857B2 (ja) 2018-05-09

Family

ID=54190396

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016552951A Active JP6319857B2 (ja) 2014-03-27 2015-03-05 コンピューティングデバイス、方法、コンピュータプログラム、および非一時的コンピュータ可読記録媒体

Country Status (6)

Country Link
US (1) US9417801B2 (ja)
EP (1) EP3123322B1 (ja)
JP (1) JP6319857B2 (ja)
KR (1) KR101856891B1 (ja)
CN (1) CN106062714B (ja)
WO (1) WO2015148083A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014208177A1 (de) * 2014-04-30 2015-11-05 Robert Bosch Gmbh Bilden eines logischen Mikrocontrollers durch wenigstens zwei physikalische Mikrocontrollern auf einem gemeinsamen Halbleitersubstrat
US10146727B2 (en) * 2015-04-14 2018-12-04 Qualcomm Incorporated Enhanced virtual GPIO with multi-mode modulation
US10140242B2 (en) * 2015-09-10 2018-11-27 Qualcomm Incorporated General purpose input/output (GPIO) signal bridging with I3C bus interfaces and virtualization in a multi-node network
US10459735B2 (en) * 2015-11-04 2019-10-29 Texas Instruments Incorporated Scalable boot options for a processor/controller
US10891172B2 (en) * 2015-12-24 2021-01-12 Intel Corporation Modifying an operating system
NZ752277A (en) * 2016-09-05 2023-05-26 Iot Nxt Bv Software-defined device interface system and method
US10482055B2 (en) 2017-05-10 2019-11-19 Qualcomm Incorporated Hardware event priority sensitive programmable transmit wait-window for virtual GPIO finite state machine
US10733121B2 (en) * 2018-05-10 2020-08-04 Qualcomm Incorporated Latency optimized I3C virtual GPIO with configurable operating mode and device skip
CN110489212B (zh) * 2019-08-20 2022-08-02 东软集团股份有限公司 一种通用型输入输出口虚拟化的方法、装置及车机
CN110912840B (zh) * 2019-11-24 2021-06-29 苏州浪潮智能科技有限公司 基于交换机端口的统一接口装置及底层设备信息获取方法
KR102471426B1 (ko) 2020-03-16 2022-11-25 이광희 Ble 메쉬 그룹 설정이 가능한 스마트 조명 장치 및 이를 이용한 조명 제어 방법
CN112069102B (zh) * 2020-09-04 2022-08-26 龙芯中科技术股份有限公司 Gpio控制器配置方法和系统
CN112486142B (zh) * 2020-11-26 2022-01-28 北京经纬恒润科技股份有限公司 将虚拟化io架构和汽车应用集成在ecu的方法及系统
CN116089199B (zh) * 2023-03-30 2023-07-11 湖南华自信息技术有限公司 一种io端口测试方法及服务器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003523656A (ja) * 1999-12-30 2003-08-05 クゥアルコム・インコーポレイテッド 移動電話機用のバーチャルデバイスアーキテクチャ
JP2006309754A (ja) * 2005-04-28 2006-11-09 Hewlett-Packard Development Co Lp ファームウェアを介して仮想デバイスアクセスを提供する方法
JP2012009013A (ja) * 2010-06-21 2012-01-12 Intel Corp 部分仮想化マシンに基づく統一格納装置
JP2016500174A (ja) * 2012-10-15 2016-01-07 クアルコム,インコーポレイテッド 仮想gpio

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838987A (en) * 1995-10-06 1998-11-17 National Semiconductor Corporation Processor for eliminating external isochronous subsystems
US6825689B1 (en) * 2000-10-26 2004-11-30 Cypress Semiconductor Corporation Configurable input/output interface for a microcontroller
US8078970B1 (en) * 2001-11-09 2011-12-13 Cypress Semiconductor Corporation Graphical user interface with user-selectable list-box
US7484027B1 (en) * 2004-09-20 2009-01-27 Cypress Semiconductor Corporation Apparatus and method for configurable device pins
US7689747B2 (en) * 2005-03-28 2010-03-30 Microsoft Corporation Systems and methods for an augmented interrupt controller and synthetic interrupt sources
US8032353B1 (en) * 2007-03-30 2011-10-04 Teradici Corporation Method and apparatus for providing peripheral connection management in a remote computing environment
CN100573537C (zh) * 2007-05-23 2009-12-23 中兴通讯股份有限公司 一种soc芯片系统级验证系统及方法
US8269524B2 (en) * 2010-04-27 2012-09-18 Atmel Corporation General purpose input/output pin mapping
US9904646B2 (en) * 2011-09-27 2018-02-27 Microchip Technology Incorporated Virtual general purpose input/output for a microcontroller
CN103092810B (zh) * 2011-11-02 2017-03-01 飞思卡尔半导体公司 处理器、对处理器编程的方法以及电子设备
US8725916B2 (en) * 2012-01-07 2014-05-13 Microsoft Corporation Host side implementation for HID I2C data bus
US9348618B2 (en) * 2012-03-14 2016-05-24 Aclara Meters Llc Systems and methods for enhancing firmware

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003523656A (ja) * 1999-12-30 2003-08-05 クゥアルコム・インコーポレイテッド 移動電話機用のバーチャルデバイスアーキテクチャ
JP2006309754A (ja) * 2005-04-28 2006-11-09 Hewlett-Packard Development Co Lp ファームウェアを介して仮想デバイスアクセスを提供する方法
JP2012009013A (ja) * 2010-06-21 2012-01-12 Intel Corp 部分仮想化マシンに基づく統一格納装置
JP2016500174A (ja) * 2012-10-15 2016-01-07 クアルコム,インコーポレイテッド 仮想gpio

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
古俣学: "LEDとスイッチをLinuxから制御できる簡単で基本的なデバイス・ドライバを書いてみよう!", INTERFACE, vol. 第35巻,第10号, JPN6017040031, 1 October 2009 (2009-10-01), JP, pages 68 - 77, ISSN: 0003664650 *
横田匡史,中田宏: "QEMUへのFM3エミュレーションの実装(後編)", INTERFACE, vol. 第38巻,第8号, JPN6017040037, 1 August 2012 (2012-08-01), JP, pages 129 - 137, ISSN: 0003664652 *
落合秀也,江崎浩: "高級言語によるネットワーク汎用I/O制御とプロトコル翻訳機構", 情報処理学会論文誌, vol. 第49巻,第10号, JPN6017040034, 15 October 2008 (2008-10-15), JP, pages 3451 - 3461, ISSN: 0003664651 *

Also Published As

Publication number Publication date
CN106062714A (zh) 2016-10-26
US9417801B2 (en) 2016-08-16
KR20160113221A (ko) 2016-09-28
US20150277778A1 (en) 2015-10-01
EP3123322A4 (en) 2017-12-27
KR101856891B1 (ko) 2018-05-10
JP6319857B2 (ja) 2018-05-09
CN106062714B (zh) 2020-04-07
EP3123322A1 (en) 2017-02-01
EP3123322B1 (en) 2020-08-26
WO2015148083A1 (en) 2015-10-01

Similar Documents

Publication Publication Date Title
JP6319857B2 (ja) コンピューティングデバイス、方法、コンピュータプログラム、および非一時的コンピュータ可読記録媒体
US9141571B2 (en) PCI express switch with logical device capability
US20180121366A1 (en) Read/write request processing method and apparatus
US10592253B2 (en) Technologies for pre-memory phase initialization of a computing device
EP2711845B1 (en) PCI express switch with logical device capability
JP6458959B2 (ja) 協調設計されたプロセッサ用動的言語アクセラレータ
JP6262870B2 (ja) プラットフォーム固有の機能の選択的有効化
CN101777005B (zh) 重定向物理设备控制器的中断而提供多个虚拟设备控制器的装置和方法
US10275558B2 (en) Technologies for providing FPGA infrastructure-as-a-service computing capabilities
US20180239728A1 (en) Management controller including virtual usb host controller
US20170132164A1 (en) Unified Extensible Firmware Interface System Management Mode Initialization Protections with System Management Interrupt Transfer Monitor Sandboxing
CN112579508A (zh) 一种数据处理方法、数据处理装置、设备及存储介质
CN114417373A (zh) 一种NVMe-oF用户态客户端的数据访问方法和装置
KR20230025915A (ko) 시스템 및 인터럽트 처리 방법
US10877918B2 (en) System and method for I/O aware processor configuration
EP3633507B1 (en) Technologies for secure and efficient native code invocation for firmware services
US9361123B2 (en) Boot from logical volume spanning plurality of PCI devices
JP6050528B2 (ja) セキュリティ・コプロセッサ・ブート性能
US11093175B1 (en) Raid data storage device direct communication system
US10439934B2 (en) Systems and methods for addressing multiple physical and virtual functions in network controller-sideband interface
US10298447B2 (en) System and method for accessing real sensors for virtual service processor stack
US11100033B1 (en) Single-root input/output virtualization-based storage solution for software defined storage
US10579392B2 (en) System and method for mapping physical memory with mixed storage class memories
Ansari et al. Design and implementation of character device driver for customized kernel of ARM based platform
US10768942B1 (en) Option ROM dispatch policy configuration interface

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160927

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160927

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171024

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180124

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180306

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180330

R150 Certificate of patent or registration of utility model

Ref document number: 6319857

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250