(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイスにファームウェアモジュールをプロビジョニングする方法であって、
前記コンピューティングデバイスを第１の高電力消費状態から第２の低電力消費状態へと遷移させる場合、プレブート期間において利用可能な１以上のファームウェア機能を含むファームウェア環境を再インスタンス化する段階と、
ファームウェアボリューム上の暗号署名が承認されるか否かを、前記ファームウェア環境によって判断する段階と、
前記ファームウェアボリュームのマニフェストによって要求されている前記コンピューティングデバイスのハードウェアリソースが利用可能か否かを、前記ファームウェア環境によって判断する段階と、
前記ファームウェアボリュームの少なくとも１つのファームウェアモジュールが前記ファームウェア環境のインストールされたファームウェアに準拠しているか否かを、前記ファームウェア環境によって判断する段階と、
前記少なくとも１つのファームウェアモジュールによって利用されるリソースを収容するスペースをメモリ内に確保する段階と、
前記第２の低電力消費状態にある前記コンピューティングデバイスで、前記少なくとも１つのファームウェアモジュールを実行する段階と
を備える方法。
【請求項２】
前記コンピューティングデバイスが前記第１の高電力消費状態にある場合、前記コンピューティングデバイスに前記ファームウェアボリュームをダウンロードする段階をさらに備える請求項１に記載の方法。
【請求項３】
前記ファームウェアボリュームは、ヘッダと、前記ファームウェアボリュームの内容をカバーする暗号署名と、前記少なくとも１つのファームウェアモジュールによって利用されるべき前記コンピューティングデバイスのハードウェアリソースを宣言するマニフェストと、前記少なくとも１つのファームウェアモジュールとを含む請求項１または２に記載の方法。
【請求項４】
前記少なくとも１つのファームウェアモジュールは、１以上のＥＦＩ  Ｓ３  ＤＸＥ  ＩＰＬファームウェアドライバのためのバイナリコードを含む請求項３に記載の方法。
【請求項５】
前記ファームウェア環境は、前記コンピューティングデバイスの製造時に偽に設定されるＳ３  ＤＸＥ  ＩＰＬイネーブルフラグを含み、
前記方法はさらに、前記暗号署名が承認され、前記ハードウェアリソースが利用可能で、前記少なくとも１つのファームウェアモジュールが準拠している場合、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグを真に設定する段階を備える請求項４に記載の方法。
【請求項６】
続くＳ３レジュームにおいて、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグが真の場合、オペレーティングシステムレジュームベクトルに制御を渡す前に、Ｓ３  ＤＸＥ  ＩＰＬおよび対応付けられているファームウェアモジュールを前記ファームウェアボリュームから開始する段階をさらに備える請求項５に記載の方法。
【請求項７】
前記ファームウェアボリュームは、前記コンピューティングデバイスの製造者以外によって、提供されるとともに署名され、前記ファームウェアボリュームは、ユーザに出荷された後に、前記コンピューティングデバイスにインストールされる請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記少なくとも１つのファームウェアモジュールの実行に関するステータス値を、前記コンピューティングデバイスのオペレーティングシステムに戻すステータス構造を持つシステムテーブルエントリを作成する段階をさらに備える請求項１から７のいずれか一項に記載の方法。
【請求項９】
プロセッサと、
前記プロセッサによって操作されるファームウェア環境と
を備えるコンピューティングデバイスであって、
前記ファームウェア環境は、第１の電力レベルを消費する動作状態へと前記コンピューティングデバイスをブートさせるために用いられる複数のファームウェア機能を含み、
前記ファームウェア環境はさらに、前記コンピューティングデバイスが前記動作状態から前記第１の電力レベルよりも低い第２の電力レベルを消費するスリープ状態へと遷移する場合、前記コンピューティングデバイスをブートさせるために用いられる前記複数のファームウェア機能の少なくともサブセットを含むように再インスタンス化され、
前記ファームウェア環境は、再インスタンス化されると、
ファームウェアボリューム上の暗号署名が承認されるか否かを判断し、
前記ファームウェアボリュームのマニフェストによって要求されている前記コンピューティングデバイスのハードウェアリソースが利用可能か否かを判断し、
前記ファームウェアボリュームの少なくとも１つのファームウェアモジュールが前記ファームウェア環境のインストールされたファームウェアに準拠しているか否かを判断し、
前記少なくとも１つのファームウェアモジュールによって利用されるリソースを収容するスペースをメモリ内に確保し、
前記第２の電力レベルを消費するスリープ状態にある前記コンピューティングデバイスで、前記少なくとも１つのファームウェアモジュールを実行するコンピューティングデバイス。
【請求項１０】
前記プロセッサは、前記コンピューティングデバイスが前記第１の電力レベルを消費する動作状態にある場合、前記ファームウェアボリュームを前記コンピューティングデバイスにダウンロードする請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記ファームウェアボリュームは、ヘッダと、前記ファームウェアボリュームの内容をカバーする暗号署名と、前記少なくとも１つのファームウェアモジュールによって利用されるべき前記コンピューティングデバイスのハードウェアリソースを宣言するマニフェストと、前記少なくとも１つのファームウェアモジュールとを含む請求項９または１０に記載のコンピューティングデバイス。
【請求項１２】
前記少なくとも１つのファームウェアモジュールは、１以上のＥＦＩ  Ｓ３  ＤＸＥ  ＩＰＬファームウェアドライバのためのバイナリコードを含む請求項１１に記載のコンピューティングデバイス。
【請求項１３】
前記ファームウェア環境は、前記コンピューティングデバイスの製造時に偽に設定されるＳ３  ＤＸＥ  ＩＰＬイネーブルフラグを含み、
前記ファームウェア環境は、前記暗号署名が承認され、前記ハードウェアリソースが利用可能で、前記少なくとも１つのファームウェアモジュールが準拠している場合、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグを真に設定する請求項１２に記載のコンピューティングデバイス。
【請求項１４】
続くＳ３レジュームにおいて、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグが真の場合、前記ファームウェア環境は、オペレーティングシステムレジュームベクトルに制御を渡す前に、Ｓ３  ＤＸＥ  ＩＰＬおよび対応付けられているファームウェアモジュールを前記ファームウェアボリュームから開始する請求項１３に記載のコンピューティングデバイス。
【請求項１５】
前記ファームウェアボリュームは、前記コンピューティングデバイスの製造者以外によって、提供されると共に署名され、前記ファームウェアボリュームは、ユーザに出荷された後に、前記コンピューティングデバイスにインストールされる請求項９から１４のいずれか一項に記載のコンピューティングデバイス。
【請求項１６】
前記ファームウェア環境は、前記少なくとも１つのファームウェアモジュールの実行に関するステータス値を、前記コンピューティングデバイスのオペレーティングシステムに戻すステータス構造を持つシステムテーブルエントリを作成する請求項９から１５のいずれか一項に記載のコンピューティングデバイス。
【請求項１７】
コンピューティングデバイスに、
前記コンピューティングデバイスを第１の高電力消費状態から第２の低電力消費状態へと遷移させる場合、プレブート期間において利用可能な１以上のファームウェア機能を含むファームウェア環境を再インスタンス化する手順と、
ファームウェアボリューム上の暗号署名が承認されるか否かを前記ファームウェア環境によって判断する手順と、
前記ファームウェアボリュームのマニフェストによって要求されている前記コンピューティングデバイスのハードウェアリソースが利用可能か否かを前記ファームウェア環境によって判断する手順と、
前記ファームウェアボリュームの少なくとも１つのファームウェアモジュールが前記ファームウェア環境のインストールされたファームウェアに準拠しているか否かを前記ファームウェア環境によって判断する手順と、
前記少なくとも１つのファームウェアモジュールによって利用されるリソースを収容するスペースをメモリ内に確保する手順と、
前記第２の低電力消費状態にある前記コンピューティングデバイスで、前記少なくとも１つのファームウェアモジュールを実行する手順と
を実行させて、前記コンピューティングデバイスにファームウェアモジュールをプロビジョニングするためのプログラム。
【請求項１８】
前記コンピューティングデバイスが前記第１の高電力消費状態にある場合、前記コンピューティングデバイスに前記ファームウェアボリュームをダウンロードする手順を前記コンピューティングデバイスにさらに実行させる請求項１７に記載のプログラム。
【請求項１９】
前記ファームウェアボリュームは、ヘッダと、前記ファームウェアボリュームの内容をカバーする暗号署名と、前記少なくとも１つのファームウェアモジュールによって利用されるべき前記コンピューティングデバイスのハードウェアリソースを宣言するマニフェストと、前記少なくとも１つのファームウェアモジュールとを含む請求項１７または１８に記載のプログラム。
【請求項２０】
前記少なくとも１つのファームウェアモジュールは、１以上のＥＦＩ  Ｓ３  ＤＸＥ  ＩＰＬファームウェアドライバのためのバイナリコードを含む請求項１９に記載のプログラム。
【請求項２１】
前記ファームウェア環境は、前記コンピューティングデバイスの製造時に偽に設定されるＳ３  ＤＸＥ  ＩＰＬイネーブルフラグを含み、
前記暗号署名が承認され、前記ハードウェアリソースが利用可能で、前記少なくとも１つのファームウェアモジュールが準拠している場合、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグを真に設定する手順を前記コンピューティングデバイスにさらに実行させる請求項２０に記載のプログラム。
【請求項２２】
続くＳ３レジュームにおいて、前記Ｓ３  ＤＸＥ  ＩＰＬイネーブルフラグが真の場合、オペレーティングシステムレジュームベクトルに制御を渡す前に、Ｓ３  ＤＸＥ  ＩＰＬおよび対応付けられているファームウェアモジュールを前記ファームウェアボリュームから開始する手順を前記コンピューティングデバイスにさらに実行させる請求項２１に記載のプログラム。
【請求項２３】
前記少なくとも１つのファームウェアモジュールの実行に関するステータス値を、前記コンピューティングデバイスのオペレーティングシステムに戻すステータス構造を持つシステムテーブルエントリを作成する手順を前記コンピューティングデバイスにさらに実行させる請求項１７から２２のいずれか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してコンピューティングデバイスの管理に関し、具体的には、コンピューティングデバイスのファームウェア環境において、当該コンピューティングデバイスが低電力消費状態を維持している間に、当該コンピューティングデバイスのオペレーティングシステムに関係なく、ファームウェアをプロビジョニングすることに関する。
【背景技術】
【０００２】
コンピューティングデバイスの消費電力を低減するべくさまざまなメカニズムが考えられている。標準的な電力管理技術は、アドバンスド・コンフィグレーション・アンド・パワー・インターフェース（Ａｄｖａｎｃｅｄ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  ａｎｄ  Ｐｏｗｅｒ  Ｉｎｔｅｒｆａｃｅ：ＡＣＰＩ）バージョン４．０に仕様が説明されている。この文献は、ＵＲＬ：ｗｗｗ−ａｃｐｉ−ｉｎｆｏ（本文献では、意図せずハイパーリンクが組み込まれないように、ピリオドに代えてハイフンを使用している）で示す公共のインターネットで入手可能である。ＡＣＰＩは、大半のコンピュータシステムが電力管理のために現在利用している規格であり、オペレーティングシステム（ＯＳ）に対してコンピューティングシステムがどのように見えるかを説明している。電力管理機能によって、コンピューティングデバイスは、コンポーネントレベルおよびシステムレベルの両方において、高電力消費状態と低電力消費状態との間で動作状態を遷移させることができるようになっている。これらの動作モードは大抵、ウェイク状態またはウェイクモード、および、スリープ状態またはスリープモードと呼ばれる。ＡＣＰＩ仕様では、コンピューティングデバイスが通常遷移し得る状態として７個の状態が定義されている。例えば、ステートＳ３（「Ｓ３」）は、スタンドバイと通常は呼ばれ、スリープ（本明細書では「スリープモード」とも呼ぶ）またはＲＡＭサスペンド（一時休止）とも呼ばれるとしてよい。ステートＳ５（「Ｓ５」）は、シャットダウンまたは「オフ」と呼ばれるとしてよい。
【０００３】
複数のイベントによって、コンピューティングデバイスは、スリープモードとウェイクモードとの間を遷移する、つまり、ウェイク状態になるか、または、スリープ状態になるとしてよい。例えば、スリープイベントは、コンピューティングデバイスをスリープ状態に遷移させるトリガとなるが、ユーザがアクティブ状態でないこと、または、ユーザによる選択を含むとしてよい。コンピューティングデバイスがスリープ状態に遷移すると、コンピューティングデバイスの構成要素の多く（例えば、中央演算処理装置（ＣＰＵ）等のメインプロセッサ、揮発性メモリ、大容量ストレージ用のディスクドライブ等も）も同様にスリープ状態になるとしてよい。スリープ状態になると、コンピューティングデバイスは、ウェイクイベントの発生に伴いウェイク状態になるとしてよい。ウェイクイベントには、例えば、コンピューティングデバイスがマウスまたはキーボードからの入力を受信すること、電子メールメッセージ、または、リモートシステム管理者からのクエリ等があるとしてよい。
【０００４】
ウェイクイベントの処理が完了すると、ＯＳが再度実行される前に、コンピューティングデバイスのファームウェアが、ＯＳの関与無しに、有用な処理を実行する機会がある。
【図面の簡単な説明】
【０００５】
本発明の実施形態は、実施形態例として説明され、これらに限定されないが、添付図面に図示される。添付図面では、同様の参照番号は同様の構成要素を意味する。添付図面は以下の通りである。
【図１】さまざまな実施形態に係る、コンピューティングデバイスがウェイクモードからスリープモードへと遷移する時系列を説明する図である。
【図２Ａ】さまざまな実施形態に係る、オペレーティングシステム（ＯＳ）に関係なく、ファームウェアがウェイクイベントを処理する方法の一例を示すフローチャートである。
【図２Ｂ】さまざまな実施形態に係る、オペレーティングシステム（ＯＳ）に関係なく、ファームウェアがウェイクイベントを処理する方法の一例を示すフローチャートである。
【図３】さまざまな実施形態に係る、コンピューティングデバイスにおけるブート−ウェイクサイクルを説明するブロック図である。
【図４】さまざまな実施形態に係る、コンピューティングデバイスの一例を示すブロック図である。
【図５】さまざまな実施形態に係る、ハードウェアコンポーネントの上方のソフトウェアスタックを示す図である。
【図６】本発明の一実施形態に係るファームウェアボリュームを示す図である。
【図７】さまざまな実施形態に係るプロビジョニングプロセスを説明するためのフローチャートである。
【発明を実施するための形態】
【０００６】
本発明の実施形態例は、これらに限定されないが、コンピューティングデバイスのファームウェア環境において、当該コンピューティングデバイスが低電力消費状態であるスリープモードを維持している場合、当該コンピューティングデバイスのオペレーティングシステムとは別個に、ファームウェアモジュールをプロビジョニングする方法および装置を含む。
【０００７】
実施形態例のさまざまな側面は、当業者間で研究内容を伝達するべく一般的に利用している用語を用いて説明される。しかし、説明する側面のうち一部のみを利用して他の実施形態を実施し得ることは当業者には明らかであろう。説明の便宜上、具体的な数字、材料および構成を記載して、実施形態例を完全に理解されたい。しかし、具体的且つ詳細な内容を利用することなく別の実施形態を実施し得ることは当業者には明らかであろう。また、公知の特徴は、実施形態例をあいまいにすることを避けるべく、説明を省略しているか、または、簡潔に説明している。
【０００８】
さらに、さまざまな処理を、実施形態例を最も理解しやすい順序で、複数の独立した処理として、順次説明する。しかし、説明の順序は、これらの処理が必ず所定順序で行われなければならないことを意味するものと解釈されるべきではない。具体的には、これらの処理は、説明する順序で実行する必要はない。「一実施形態において」という表現を何度も用いる。この表現は概して、同じ実施形態を意味するものではない。しかし、同じ実施形態を意味している場合もある。「備える」、「有する」、「含む」といった用語は、文脈からそうでないことが分かる場合を除き、同義語である。
【０００９】
図１は、さまざまな実施形態に係る、コンピューティングデバイスがウェイクモードからスリープモードへと遷移する様子を時系列で説明する図である。本明細書で説明されるように、さまざまな実施形態において、コンピューティングデバイスのファームウェアは、コンピューティングデバイスがスリープモードである間に、処理を実行する構成を持つとしてよい。ファームウェアは、オペレーティングシステムとは別個にこの処理を実行することができる。この結果、機能が向上するとともに、コンピューティングデバイスの総消費電力が小さくなる。実施形態では、コンピューティングデバイスまたはシステムは、デスクトップコンピュータ、ラップトップコンピュータ、モバイルコンピューティングデバイス、ネットワークサーバ、シン・クライアント、または、ファームウェアを利用する他のコンピューティングデバイスであってよい。実施形態によると、ファームウェアは、レガシー・ベーシック・インプット／アウトプット・システム（ＢＩＯＳ）、ユニファイド・エクステンシブル・ファームウェア・インターフェース（例えば、ＵＥＦＩ仕様、バージョン２．０、２００６）に準拠しているか、エクステンシブル・ファームウェア・インターフェース（ＥＦＩ）に準拠しているか（例えば、ＥＦＩ仕様、バージョン１．１０、２００４）、または、その他のファームウェアであってよい。尚、ＥＦＩは、コンピューティングデバイスファームウェアと、オペレーティングシステムまたは他のアプリケーション環境との間の抽象的なプログラムインターフェースを説明する公共の産業仕様である。例えば、ＥＦＩによって、ファームウェアを、ファームウェアモジュールとして、さまざまなリソースから、または、コンピュータネットワークを介して１以上のコンピュータシステムから、ロードすることができるようになる。リソースとしては、フラッシュメモリデバイス、オプションのＲＯＭ（リードオンリーメモリ）、さまざまな持続的ストレージデバイス（例えば、ハードディスク、ＣＤ−ＲＯＭ（コンパクトディスクリードオンリーメモリ）等）がある。ユニファイドＥＦＩ（ＵＥＦＩ）アーキテクチャに関するさらなる情報については、公共のインターネットのｗｗｗ−ｕｅｆｉ−ｏｒｇ（本文献では、意図せずハイパーリンクが組み込まれないように、ピリオドに代えてハイフンを使用している）において入手可能であるとしてよい。このように、本明細書で説明するように、さまざまな実施形態において、スリープモードに遷移すると、コンピューティングデバイスは、ＵＥＦＩ、または、プレブート期間に利用可能な１以上のファームウェア機能を含む他のファームウェア環境を再インスタンス化するとしてよい。実施形態によると、再インスタンス化されたファームウェア環境によって、ファームウェア環境は、通常はコンピューティングデバイスのＯＳが実行する電力管理機能を実行できるようになるとしてよい。ある実施形態によると、再インスタンス化されたファームウェア環境は、新しいファームウェアモジュールのプロビジョニング、または、既存のファームウェアモジュールの更新等を、ＯＳの関与無しに実行可能とするとしてよい。ある実施形態によると、新しくインストールされたファームウェアまたは新しく更新されたファームウェアモジュールは、コンピューティングデバイスについての処理を実施するべく実行されるとしてよい。
【００１０】
図１を参照しつつ説明すると、図示している実施形態では、１１１において、コンピューティングデバイスがファームウェア環境（ファームウェアとも呼ぶ）によってプレブート期間に初期化されるとしてよい。さまざまな実施形態によると、以下でもさらに詳細に説明するが、１１２において、このプレブート期間において、ファームウェアは、メモリの一部分またはメールボックスを、そこからファームウェアが後にデータを収集するものとして、確保するとしてよい。プレブート初期化が完了すると、１１３において、ブート処理を継続して行うべく、コンピューティングデバイスのオペレーティングシステム（ＯＳ）に制御が引き渡されるとしてよい。ＯＳまたはシステムのブートの後、ＯＳは、１１５において、機能モードまたはウェイクモードでコンピューティングデバイスを実行または動作させるとしてよい。ウェイクモードには、通常動作に対応付けられる高電力消費状態が通常含まれる。コンピューティングデバイスは、１１７までウェイクモードで動作し続けるとしてよい。１１７において、スリープイベントによってコンピューティングデバイスはスリープモードＳ３に遷移する。スリープモードＳ３は、低電力消費状態を含む。上述したように、スリープイベントは、さまざまなイベントを含むとしてよく、例えば、ユーザによる選択またはユーザがアクティブでないことなどがある。
【００１１】
ある程度時間が経過した後、さまざまな実施形態において、コンピューティングデバイスはウェイクイベントを受信するとしてよい。一部の実施形態によると、ウェイクイベントは、電子メール、コンフィグレーションディレクティブ、または、その他のネットワーク送信等のネットワークイベントを含むとしてよい。他の実施形態では、ウェイクイベントは、入力デバイスでの入力を感知すること、コンピューティングデバイスのキーボードに触ること、特定の種類のネットワークパケットを受信すること等であってよい。ウェイクイベントの処理は、システム管理割り込み（ＳＭＩ）、制御ライン変更、レジスタフラグまたはその他の構造体によって開始されるとしてよい。また、ウェイクイベントの処理は、コンピューティングデバイスのチップセットによって開始されるとしてよい。さらに、一部のウェイクイベントは、ＯＳによる処理のために、コンピューティングデバイスの電源を入れる処理をトリガするとしてよい。他のウェイクイベントは、本開示の実施形態に関して後述するが、コンピューティングデバイスがスリープモードの間に、ファームウェアによって処理されるとしてよい。
【００１２】
したがって、さまざまな実施形態において、ファームウェアは、コンピューティングデバイスのＯＳとは別個に動作し、ウェイクイベントが、コンピューティングデバイス全体を第１の高電力消費状態に戻さなくても処理できるか否かを判断するとしてよい。ウェイクイベントをファームウェアで処理することが出来ず、ＯＳがウェイクイベントを処理する場合、１２１において、ディスクを回転させて、モニタをオンに制御して、コンピューティングデバイスを完全ウェイクモードに戻すとしてよい。処理フローはこの後、１１５に戻るとしてよい。１１５において、ＯＳはウェイクモードでコンピューティングデバイスを実行または動作させる。しかし、ＯＳに別個に、そして、コンピューティングデバイス全体を第１の高電力消費状態に戻すことなくウェイクイベントを処理可能であるとファームウェアが判断すると、ファームウェアはウェイクイベントの処理を実行することができる。コンピューティングデバイスはこうして、１１９において、スリープ状態を継続するとしてよい。一部の実施形態によると、ファームウェアは、ウェイクイベントに応じて、そして、コンピューティングデバイス全体をウェイク状態にすることなく、１以上のハードウェアコンポーネントまたはハードウェアデバイスをウェイク状態にして、ウェイクイベントに対応するタスクについて対処または完了させるとしてよい。さらに、ファームウェアは、イベントの処理が完了した後、ハードウェアコンポーネントを、第２の低電力消費状態を含むスリープモードに戻すとしてよい。
【００１３】
尚、実施形態において、１２３では、ＯＳが１以上のハードウェアコンポーネントをスリープモードに遷移させる方法に関するデータのモニタリングおよび収集を、例えば、フィルタドライバ等のファームウェアコンポーネントが開始するとしてよい。さまざまな実施形態において、フィルタドライバは、収集したデータを、１１２においてプレブート期間中にファームウェアが確保したにメールボックスまたはメモリの一部に保存するとしてよい。ファームウェアは後に独立して、収集したデータを利用して、ウェイクイベントに対処する必要がある１以上のハードウェアコンポーネントをスリープモードへ、および／または、スリープモードから遷移させるとしてよい。ある実施形態によると、ウェイクイベントが発生すると、エンドユーザに出荷された後にコンピューティングデバイスにプロビジョニングされたファームウェアモジュールを実行することができるとしてよい。
【００１４】
続いて、図２Ａおよび図２Ｂは、本開示のさまざまな実施形態に係る、ＯＳとは別個に、ウェイクイベントを処理する方法の一例を示すフローチャートである。図２Ａに示すブロックは、ある実施形態によると、ファームウェアによって実行されるとしてよい。図２Ｂに示すブロックは、ある実施形態によると、ＯＳによって実行される。「ファームウェアによって実行される」という表現は、より複雑なコンピューティングデバイスのやり取りを短くまとめたものであることは当業者には明らかであろう。シングルプロセッサシステムにおいて、例えば、命令の実行は、メインプロセッサ、つまり、中央演算処理装置（ＣＰＵ）によって実行されるとしてよい。尚、「ファームウェアによって実行される」という表現は、非オペレーティングシステム命令を、プロセッサに結合されている不揮発性メモリストア（ファームウェア）からフェッチして、プロセッサで実行することを意味するとしてもよい。プロセッサは、ＯＳをロードする前に、ファームウェアに対するアクセスを持つ。このため、ブート命令は通常、ファームウェアブートブロックに格納されているとしてよい。さらに、一部の実施形態では、完全ブートブロックはリモートに設けられているとしてよく、ローカルブートブロックが、完全ブートブロックのリモート位置に対するポインタを含むとしてよい。
【００１５】
図２Ａおよび図２Ｂの実施形態では、ブロック２０１において、コンピューティングデバイスまたはコンピューティングシステムの電源がオンになるとしてよい。コンピューティングプラットフォームは、ブロック２０３において、ブートブロックファームウェアによって予備的に初期化されるとしてよい。ファームウェアの他の部分は、ブートブロックの外部に設けられており、予備初期化において役割を持つとしてよい。尚、ブートブロックは通常、早期メモリ初期化および中央プロセッサ初期化等の初期化の早期段階を担当する。予備初期化はさらに、メモリの特定および再設定、コンピューティングデバイスに結合されているコンポーネントおよびデバイスの特定等を含むとしてよい。
【００１６】
図示している実施形態では、予備初期化または直後の処理の一環として、ファームウェアが複数のポリシークエスチョンを開始して、コンピューティングデバイスのステータスを決定するとしてよい。ブロック２０４において、ファームウェアは、スリープイネーブルアクティビティがイネーブルされているか否かを判断するとしてよい。スリープイネーブルアクティビティがイネーブルされている場合、ブロック２０６に進む。スリープイネーブルアクティビティがイネーブルされていない場合、ブロック２３０に進む。実施形態では、ファームウェアは、ブロック２０６において、コンピューティングデバイスが、ウェイクイベント（例えば、少なくとも１つの実施形態においてネットワークウェイクイベント）に起因して、ウェイク状態になるか、または、スリープモードから遷移するか否かについて質問するとしてよい。さまざまな実施形態において、コンピューティングデバイスがネットワークウェイクイベントに起因してウェイク状態にならずに単に起動処理を完了すると、プレブートプロセスはブロック２０８に続くとしてよい。ブロック２０８において、ファームウェアは、後に必要になる画像をキャッシュするとしてよい。例えば、スリープモード（例えば、Ｓ３）に必要なデータをキャッシュするとしてよい。続いて、ブロック２１０において、ファームウェアは、このプレブート期間において、コンピューティングデバイスの有形コンピュータ可読格納媒体においてメモリの一部を確保するとしてよい。ある実施形態によると、メモリの一部は、ファームウェアのメールボックスとして機能するとしてよい。尚、ファームウェアが能動的にこのようなリソースを自身で確保しない限り、コンピューティングデバイスのリソースは通常は、ＯＳの制御下にある。さらに、さまざまな実施形態において、以下で説明するが、ＯＳが１以上のハードウェアコンポーネントをスリープ状態に遷移させる方法に関する入出力（Ｉ／Ｏ）データは、（例えば、ＯＳのモニタ素子によって、）ファームウェアによって後にアクセスされるべくメールボックスに保存されるとしてよい。実施形態において、既にキャッシュした画像をファームウェアが再度初期化できるような十分なメモリが確保されているとしてよい。
【００１７】
図示した実施形態では、次のブロック２１２において、ファームウェアは通常のブートプロセスを継続し、ＯＳは制御を与えられて開始されるとしてよい。図２Ｂのブロック２１４において、ＯＳは、例えば、フィルタドライバ等のコンポーネントをインストールするとしてよい。以下で分かるが、フィルタドライバは、ハードウェアコンポーネントをスリープモードに遷移させることに関するＩ／Ｏデータを収集するモニタリングコンポーネントとして機能するとしてよい。通常のＯＳ処理をブロック２１６で継続して行うとしてよい。判断ブロック２１８において、入力が所定期間にわたって受信されていない場合、または、他のコンピューティングデバイスポリシーが指定する状態の場合、ＯＳはコンピューティングデバイスをスリープモードに遷移させるとしてよい。例えば、コンピューティングデバイスがスリープモードに遷移することをポリシーが指示していない場合、ＯＳ処理をブロック２１６で継続して実行する。別の場合、判断ブロック２１８に戻って、コンピューティングデバイスがスリープモードに遷移すると、ＯＳは判断ブロック２１８からブロック２２０へと下方に進むとしてよい。実施形態によると、ＯＳはこの後、全てまたは略全てのハードウェアコンポーネントまたはハードウェアデバイスドライバに、ハードウェアコンポーネントがスリープモードに遷移する旨を通知するメッセージを送信するとしてよい。フィルタドライバは、この通知をブロック２２２で受信または検出するとしてよく、１以上のハードウェアデバイスまたはコンポーネントがスリープモードに遷移する方法に関する入出力（Ｉ／Ｏ）データ、例えば、ハードウェアデバイスインターフェースとハードウェアデバイスドライバとの間のＩ／Ｏ信号を監視し始めるとしてよい。ブロック２２４において、フィルタドライバはこの後、Ｉ／Ｏデータを収集して、プレブート期間にファームウェア環境に確保したメールボックス（ブロック２１０で説明）に保存するとしてよい。最後に、ブロック２２６において、ＯＳはコンピューティングデバイスのスリープモードへの遷移を完了させる。
【００１８】
尚、ブロック２２４でメールボックスに保存されたＩ／Ｏデータは、前述したように、後に、ウェイクイベントの処理中および／または処理後に、ファームウェアに当該Ｉ／Ｏデータを利用させるべく利用されるとしてもよい。このように、例えば、判断ブロック２０６まで戻り、コンピューティングデバイスが、ネットワークウェイクイベント等のウェイクイベントによりウェイク状態に遷移する場合、ＹＥＳの矢印にしたがって進むとしてよい。ブロック２２８において、ファームウェアは、ＯＳがスリープモードである間に、ＯＳに別個に、コンピューティングデバイス全体をウェイク状態にすることなく、または、高電力消費状態に戻すことなく、ネットワークイベントがファームウェアによって処理可能か否かを判断するとしてよい。判断結果がＮＯである場合、コンピューティングデバイスは、ブロック２３０において、通常のＳ３コードパスで再開し、最終的に２１２において通常のブートプロセスを継続する。しかし、判断結果がＹＥＳである場合、ファームウェアは、ネットワークイベントをＯＳに別個に処理させるとしてよい。一部の実施形態によると、ブロック２３２において、ファームウェアは、１以上（しかし、全てではない）のハードウェアコンポーネントのみをウェイク状態または高電力消費状態に遷移させるか、および／または、ネットワークイベントの処理に利用されるソフトウェアを開始するとしてよい。ブロック２３５において、ファームウェアは、キャッシュされたデバイスＩ／Ｏを利用して、コンピューティングデバイスをＤ３ステートに戻すとしてよく、必要であれば、コマンドを適切なポートに書き込んで、Ｓ３へと遷移させるとしてよい。
【００１９】
このように、さまざまな実施形態によると、コンピューティングデバイスのファームウェア環境は、コンピューティングデバイスがスリープモードに遷移すると、再インスタンス化される。実施形態によっては、ファームウェア環境は、電力管理またはコンピューティングデバイスのＯＳによって通常実行される他の機能を実行できる構成を持つ。一部の実施形態によると、コンピューティングデバイスが特定のハードウェアコンポーネント、例えば、スリープモード中にコンピューティングデバイスが受信するネットワーク送信に対応付けられているハードウェアコンポーネントをスリープ状態に遷移させる機能を持つだけでなく、ファームウェア環境は、コンピューティングデバイスの複数のその他のハードウェアコンポーネントまたはその他のコンポーネントのウェイクモードへの遷移を開始する機能を持つ。さまざまな実施形態において、ファームウェア環境は、複数のハードウェアデバイスのうちいずれかがスリープモードに遷移する方法に関するＩ／Ｏデータを読み出す構成を持つ。このようなＩ／Ｏデータは、プレブート期間においてファームウェアによって確保されたメールボックスから読み出されるとしてよい。さまざまな実施形態によると、ファームウェア環境は、通常はＯＳによってのみ実施される電力管理機能であるが、ハードウェアコンポーネントをスリープモードに遷移させる構成を持つ。さまざまな実施形態によると、ファームウェア環境は、新規または更新後のファームウェアモジュールをプロビジョニングする構成を持つ。
【００２０】
図３を参照すると、実施形態は、例えば、ｗｗｗ−ｉｎｔｅｌ−ｃｏｍ／ｔｅｃｈｎｏｌｏｇｙ／ｆｒａｍｅｗｏｒｋ（本文献では、意図せずハイパーリンクが組み込まれないように、ピリオドに代えてハイフンを使用している）で入手可能なプラットフォーム・イノベーション・フレームワーク・フォー・エクステンシブル・ファームウェア・インターフェース（ＥＦＩ）（検討案、バージョン０．９、２００３年９月１６日）のモジュールＳ３レジュームアーキテクチャを結合させるとしてよい。通常、例えば、ＵＥＦＩプラットフォーム初期化（ＰＩ）仕様（バージョン２．３、公開日：２００９年５月８日）によると、ＰＩ  プレＥＦＩ（ＰＥＩ）モジュールおよびＰＩドライバ・エグゼキューション・エンバイロメント（ＤＸＥ）ドライバの完全な実装は、Ｓ５モード（オフ）からブート中に呼び出されるとしてよい。この結果、プレＯＳアプリケーションが利用し得るＵＥＦＩ環境、例えば、ＵＥＦＩシェル、第三者ＵＥＦＩドライバ／オプションＲＯＭ、および、ＵＥＦＩ  ＯＳローダが作成される。しかし、Ｓ３の間は、Ｓ３レジューム時間制約のために、コンピューティングデバイスは、ＤＸＥを含まずＰＥＩのサブセットのみを通常含む標準的なＰＩレジュームフローを実行するとしてよい。このため、Ｓ３レジュームモードでは、多くのＵＥＦＩドライバフィーチャを利用できない可能性がある。しかし、本開示のさまざまな実施形態では、コンピューティングデバイスは、Ｓ３の間にＤＸＥ３３０を実施し得る。このため、図３に示すように、Ｓ３は、ＯＳがスリープモードにある間に、ＵＥＦＩブートサービスアプリケーションを実行するべく、一部のプレＯＳ隔離ページ（または、ＯＳドライバ固定ページ）においてＵＥＦＩ環境を再形成するべくＤＸＥを含むとしてよい。
【００２１】
図３を参照すると、図示されている実施形態は、ＵＥＦＩアーキテクチャに応じて実装されるブート−ウェイクサイクルを説明するブロック図３００である。当該実施形態では、通常ブート３０１の間に、電源オンまたはリセットの後、プレメモリ初期化セキュリティ（ＳＥＣ）フェーズ３０２（「ＳＥＣ３０２」）が開始されるとしてよい。ＳＥＣ３０２は、コンピューティングデバイス上で実行される最初のオペレーティングコードのセキュリティチェックをサポートするとしてよい。続いて、当該実施形態では、ＳＥＣ３０２は、ＣＰＵ／メモリ初期化、プレＥＦＩ（ＰＥＩ）フェーズ３０４（「ＰＥＩ３０４」）に遷移するとしてよい。ＰＥＩ３０４は、例えば、プロセッサ、チップセットおよびマザーボード用の特定の初期（ＩＮＩＴ）コンフィグレーションルーチンをロードして呼び出す方法を提供するとしてよい。ＰＥＩ３０４は、メモリを発見して、後期初期化、ドライバ実行環境（ＤＸＥ）フェーズ３０６（「ＤＸＥ３０６」）にハンドオフされるリソースマップを用意するとしてよい。ＤＸＥ３０６は、プロセッサ、チップセットおよびプラットフォームコンポーネントの初期化を行うＤＸＥドライバを呼び出すことを含むとともに、コンソールおよびブートデバイスについてソフトウェア抽象化を提供することを含むとしてよい。３１０に図示しているように、ＤＸＥ３０６は、Ｉ／Ｏコントローラ設定を、ブートスクリプトテーブルの一部として不揮発性ストア（ＮＶＳ）等の未使用メモリに保存するとしてよい。ブートスクリプトは、スリープモードに遷移する前の状態にコンピューティングデバイスを戻すためにＳ３レジューム時に再生すべき一連の処理を含むとしてよい。通常のブートスクリプトは、Ｉ／ＯデバイスおよびＣＰＵステート情報を復元する。
【００２２】
３１９に見られるように、Ｓ３レジュームブートでは、ＳＥＣ３２０が実施されるとしてよい。続いて、３２５では、Ｓ３  ＰＥＩモジュールが、ＰＥＩフェーズコンフィグレーションを３１０のＮＶＳから復元するとしてよい。例えば、基本的なチップセット（ＣＳ）、ハードウェア（ＨＷ）およびビデオの設定の復元を行うとしてよい。このように、実施形態では、ＯＳがスリープ状態の間、更新されたＤＸＥ３３０がＳ３において実施されるとしてよい。ＤＸＥ３３０は、Ｓ３ＤＸＥ初期プログラムロード（ＩＰＬ）３３５、Ｓ３ＤＸＥコア３４０、Ｓ３ＤＸＥファームウェアボリューム（ＦＶ）３４５、Ｓ３ブートデバイス選択（ＢＤＳ）３５０、Ｓ３ネットワークプロキシアクション３５５、および、Ｓ３ＤＸＥターミネータ３６０を含む、幾つかのコンポーネントまたはフェーズによって円滑化されるとしてよい。上述したように、略完全に形成されたＵＥＦＩインターフェースのインスタンス化は、ＤＸＥ３３０をＳ３に含めることによって実施されるとしてよい。通常は、少数のＵＥＦＩドライバのみをプレブートフェーズで追加する。しかし、ある実施形態によると、ＯＳドライバは、追加のＵＥＦＩドライバをＵＥＦＩ環境に追加するとしてもよい。さまざまな実施形態によると、ＵＥＦＩドライバは、それぞれ別のソースから収集されるとしてよい。一部の実施形態では、これらの追加されるドライバは、ＵＥＦＩシステムパーティション上で、または、ＤＸＥ３３０の間に利用可能なＵＥＦＩドライバの数を大きくする他の方法を用いて、プロビジョニングされるとしてもよい。
【００２３】
図４は、本開示の実施形態を実現するコンピューティングデバイス４００の一例を示す図である。さまざまな実施形態において、コンピューティングデバイス４００は、バス４２０を介して結合されるさまざまな素子を備える。図示されているように、これらの素子には、プロセッサ４０１、メモリ４１０、チップセット４０３、ハードウェアデバイス４６０、フラッシュメモリ等の不揮発性ストレージ４３０、および、通信インターフェース４１５が含まれるとしてよい。チップセット４０３は、上述したファームウェアが設けられているとしてよい。メモリ４１０は、ＯＳ４２２、上述したメールボックス４３５およびデバイスドライバ４８０を含むとしてよい。プロセッサ４０１は、マイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ等、ソフトウェアを実行可能な任意の種類のプロセッサであってよい。図４に図示されているプロセッサ４０１は１つのみであるが、コンピューティングデバイス４００には１以上のプロセッサが設けられるとしてよく、プロセッサのうち１以上は、複数のスレッド、複数のコア等を含むとしてよい。さまざまな実施形態によると、ＢＩＯＳ４３３のファームウェアモジュールは、バス４２０上で１以上のハードウェアデバイス４６０のハードウェアインターフェースとデバイスドライバ４８０との間で通信されるＩ／Ｏ信号をモニタリングすることによって、第１の高電力消費状態と、第２の低電力消費状態との間での１以上のハードウェアデバイス４６０の遷移に関する情報を決定または収集するとしてよい。スリープモード中、ファームウェアは、上述したように、１以上のネットワークまたはウェイクイベントを処理するとしてよい。
【００２４】
通信インターフェース４１５は、ネットワークインターフェースカード（ＮＩＣ）等のネットワーク化インターフェースを含むとしてよい。ＮＩＣは、例えば、シリアル・オーバー・ローカル・エリア・ネットワーク（ＬＡＮ）インターフェースを介して、１以上のリモートサーバ４８２を含むインターネット／ネットワーク４７５に通信可能に結合されているとしてよい。通信インターフェースは、トランスファー・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）またはシンプル・オブジェクト・アクセス・プロトコル（ＳＯＡＰ）またはその他の通信プロトコルをサポートするとしてよい。ＮＩＣは、他の手段を用いて、ネットワークを介して通信を行うとしてもよい。例えば、インテグレーテッド・ドライブ・エレクトロニクス（ＩＤＥ）リダイレクション（不図示）またはその他の手段を用いるとしてよい。尚、実施形態によっては、ウェイクイベントの処理は、これに限定されないが、特定のパケットタイプに応答すること、ダイナミック・ホスト・コンフィグレーション・プロトコル（ＤＨＣＰ）リースを有効で維持すること、低電力バックグラウンドアクティビィティ、例えば、ウイルスに関してメモリをスキャンすること、および、リモートファイルバックアップ／復元等を維持することを含むとしてよい。図示した実施形態では、チップセット４０３はさらに、ベーシックインプットアウトプットシステム（ＢＩＯＳ）４０９用のソフトウェアインターフェースを含むとしてよい。
【００２５】
図５は、さまざまな実施形態に係る、ハードウェアコンポーネントの上方のソフトウェアスタックを示す図である。ある実施形態によると、ユーザＯＳ可視環境において、低電力更新／ダウンロード（ＬＰＵＤ）アプリケーション５００および対応するＬＰＵＤサービス・アプリケーション・プログラミング・インターフェース（ＡＰＩ）５０２は、独立ソフトウェアベンダ（ＩＳＶ）アプリケーション・プログラム５０４、５０６、５０８と、シリアル・アドバンスド・トランスポート・アーキテクチャ（ＳＡＴＡ）コントローラ５１２と通信するストレージ・ソフトウェア・スタック５１０との間に配置されているとしてよい。ＳＡＴＡコントローラは、ストレージデバイス（図５では不図示）と通信する。ＬＰＵＤアプリケーションは、さまざまなアクティビティをＯＳ不在状態で実行する。このようなアクティビティには、ウイルス署名に関してディスクをスキャンすること（例えば、ウイルス対策クライアント）、ディスクのコンテンツをコンピューティングクラウドバックアップサーバにリモートバックアップすること（例えば、バックアップクライアント）、または、ファイルサーバとして機能すること（例えば、ラップトップのメインＯＳが中断されており、ラップトップがＬＰＵＤ状態にある間に、ＭＰ３またはＭＰ４を車内インフォテインメントＰＣに提供すること）が含まれるとしてよい。ＬＰＵＤサービスＡＰＩは、ファイルシステムに悪影響を与えない方法で、例えば、読出処理等、ディスクへのアクセスを可能とする。このため、メインＯＳがウェイク状態になっても、ディスクは破損状態になっていない。ＬＰＵＤサービスＡＰＩはさらに、バックアップ（例えば、クライアントからのデータ送信）およびウイルス対策（ＡＶ）スキャン（例えば、署名ファイルの受信）をサポートするべく、送受信処理を実行するソケット・ライブラリを実現する。ユーザＯＳ側は、メインＯＳがウェイク状態になると、ステータス情報をＬＰＵＤから受信するとしてよい。または、ユーザＯＳは、ユーザＯＳがビジー状態でない場合に、ＬＰＵＤ状態への遷移を開始してよい。また、ユーザＯＳは、ＬＰＵＤアプリケーションの帯域内アクティブ化のためにコンソールを提供する。ＬＰＵＤアプリケーションは、これに限定されないが、オプトイン、および、ＬＰＵＤ用にどの程度メモリを分離するか判断すること（この物理メモリはユーザＯＳに対して失われ、性能に影響を与えるので）を含む。
【００２６】
ある実施形態によると、ファームウェア環境では、ＥＦＩ  ＢＩＯＳ５１４（図４ではＢＩＯＳ４３３としてＮＶＳ４３０に格納されている）は、少なくとも複数のコンポーネントを含む。ニュー・テクノロジ・ファイル・システム（ＮＴＦＳ）ドライバ５１６は、データを読み書きするべく、ハードドライブ５１８と通信を行う。ネットワークインターフェースコントローラ（ＮＩＣ）ドライバ５２０は、コンピューティングデバイスに結合されているネットワークを介してデータの読み書きを行うべく、ＮＩＣ５２２と通信を行う。ＷｉＦｉシム（Ｓｈｉｍ）５２４は、ＵＥＦＩ２．３仕様の付録（アペンディクス：Ａｐｐｅｎｄｉｘ）Ｅ．２に定義されているように、ＵＥＦＩ  ＵＮＤＩインターフェース、コンピューティングプラットフォームにおいてワイヤレスＮｉｃ（Ｗ−ＮＩＣ）へのローデータグラム読み書きを行うコマンドおよびデータブロック（ＣＤＢ）を実現する。これには、インテル・コーポレーション社製の市販のチップセットのホスト・エクステンデッド・コマンド・インターフェース（ＨＥＣＩ）を用いてＵＮＤＩ  ＣＤＢがプロキシされる第三者Ｗ−ＮＩＣまたは管理エンジン（ＭＥ）ベースのＷ−ＮＩＣが含まれるとしてよい。管理エンジン（ＭＥ）５２６は、アウトオブバンドチップセットネットワーク側管理機能を提供するべく含まれているとしてよい。ＥＦＩ  ＬＰＵＤエージェント５２８は、コンピューティングデバイスがスリープ状態にある間に、新しいファームウェアモジュールのプロビジョニングおよび／または既存のファームウェアモジュールの更新を調整する。ハイパー・テキスト・トランスポート・プロトコル（ＨＴＴＰ）／ＨＴＴＰセキュア（ＨＴＴＰＳ）プラグイン５３０は、ＬｉｂＳｏｃｋｅｔを利用するべく含まれているとしてよく、Ｌｉｂ  Ｃラッパ５３２は、ＰＯＳＩＸ同様のプログラミングＡＰＩを抽象化するべく含まれているとしてよい。ファームウェアモジュール５３４は、本明細書に開示しているように、ＩＳＶから取得されて、コンピューティングデバイスにインストールされる新規または更新後のファームウェアモジュールを含む。ある実施形態によると、ＥＦＩ  ＢＩＯＳ５１４はさらに、Ｓ３  ＤＸＥイネーブルフラグ５３６および公開認証鍵５３８（一実施形態によると、Ｋｐｕｂ＿ｓ３ｅｘｔｅｎｓｉｏｎ＿ｖｅｒｉｆｉｃａｔｉｏｎと呼ばれる）を含む。
【００２７】
ある実施形態によると、コンピューティングデバイスは、工場での製造時に、ＥＦＩ  ＢＩＯＳファームウェアおよび少なくとも１つのＳ３  ＤＸ  ＩＰＬファームウェアモジュールがシステムボードにインストールされるとしてよい。ＥＦＩ  ＢＩＯＳにおけるＳ３  ＤＸＥイネーブルフラグ５３６は、製造時には「偽」に設定されているとしてよい。コンピューティングデバイスはこの後、ユーザに出荷されるとしてよい。コンピューティングデバイスは、ユーザによって操作されている間、Ｓ４状態（ハイバネート）またはＳ５状態（全電力サイクル）を通って、ＯＳへブートされるとしてよい。ユーザは、ＯＳおよび従来のウェブブラウザを介して、選択されたウェブサイトを訪問してＳ３  ＤＸＥファームウェアボリュームをダウンロードするとしてよい。
【００２８】
図６は、本発明の実施形態に係る、Ｓ３  ＤＸＥファームウェアボリューム６００を示す図である。ファームウェアボリューム６００は、ファームウェアボリュームヘッダ６０８と、ファームウェアボリュームのコンテンツをカバーする暗号署名６０６とを含むバイナリファイルを有する。ファームウェアボリューム６００はさらに、１以上のファームウェアモジュール６０２を有する。ある実施形態によると、ファームウェアモジュールは、「．ｅｆｉ」ファイル拡張を含む。ある実施形態によると、ファームウェアモジュールは、ドライバを含む。ファームウェアモジュール６０２は、１以上のＳ３  ＤＸＥ  ＩＰＬファームウェアモジュール用のファームウェアバイナリコードを含む。本発明の実施形態によると、ファームウェアモジュールは、本明細書で説明しているように、ファームウェアボリュームから読み出されて、不揮発性ストレージ４３０にインストールされて、低電力消費状態の間に実行されるとしてよい。ファームウェアボリュームはさらに、マニフェスト６０４を有する。マニフェスト６０４は、実行されると、Ｓ３  ＤＸＥファームウェアボリュームがコンピューティングデバイスのハードウェアリソースのうちどれ（Ｉ／Ｏデバイス、メモリ等）を消費または利用するかを宣言している。Ｓ３  ＤＸＥファームウェアボリュームは、事前に第三者によって署名が成されている（例えば、対応する秘密鍵（Ｋｐｒｉｖ＿ｓ３ｅｘｔｅｎｓｉｏｎ＿ｖｅｒｉｆｉｃａｔｉｏｎ）を持つ署名サーバを利用する独立ソフトウェアベンダ（ＩＳＶ）、相手先商標製品製造（ＯＥＭ）、または、独立ＢＩＯＳベンダ（ＩＢＶ）等）。
【００２９】
ＯＳ存在アプリケーション・プログラムはこの後、ユーザがＳ３  ＤＸＥ拡張ファームウェアモジュールのインストールを希望しているか否かを質問するようにユーザを促すとしてよい。ユーザがファームウェアモジュールのインストールを希望している場合、ある実施形態では、ＯＳ存在アプリケーションが、不揮発性ストレージに格納されているＳ３  ＤＸＥファームウェアボリュームへのポインタを用いてＵｐｄａｔｅＣａｐｓｕｌｅ  ＵＥＦＩランタイムサービスを呼び出す。再開すると（ＥＦＩ  ＢＩＯＳファームウェアが、ユーザに対して不透明である必要があるＵｐｄａｔｅＣａｐｓｕｌｅランタイムサービスをどのように実施するかに応じて、ウォームスタートまたはＳ３状態）、ＥＦＩ  ＢＩＯＳファームウェアは、不揮発性ストレージにＳ３  ＤＸＥファームウェアボリュームの存在を検出する。
【００３０】
図７は、さまざまな実施形態に係るプロビジョニングプロセスを説明するためのフローチャートである。ある実施形態によると、このプロセスは、図３に示すように、コンピューティングデバイスがＳ３スリープ状態にある間に実行されるとしてよい。ブロック７００において、ＥＦＩ  ＢＩＯＳファームウェアは、公開認証鍵（Ｋｐｕｂ＿ｓ３ｅｘｔｅｎｓｉｏｎ＿ｖｅｒｉｆｉｃａｔｉｏｎ）を用いて、Ｓ３  ＤＸＥファームウェアボリューム上の暗号署名６０６が正しいか否かを判断する。認証している場合、ブロック７０２において、ＥＦＩ  ＢＩＯＳファームウェアは、ファームウェアボリュームマニフェストによって要求されたハードウェアリソースが利用可能か否かを判断するべく確認する。利用可能である場合、ブロック７０４において、ＥＦＩ  ＢＩＯＳは、ファームウェアボリューム内のファームウェアモジュールが、既にインストールされている既存のファームウェアに準拠している（例えば、依存関係が満たされている、正しい命令セットアーキテクチャが存在している等）か否かを判断する。準拠している場合、ブロック７０６において、ＥＦＩ  ＢＩＯＳは、不揮発性メモリにおいて、ファームウェアボリュームから得られる新規または更新後のファームウェアモジュールが利用するリソースをサポートするために必要な大きさのメモリスペースを確保する。ブロック７０８において、ＥＦＩ  ＢＩＯＳは、Ｓ３  ＤＸＥイネーブルフラグを「真」に設定する。ブロック７００、７０２、および７０４において、いずれかの判断結果が否定である場合、ブロック７１０に進む。ブロック７１０において、ＥＦＩ  ＢＩＯＳは、システムテーブルエントリを作成する。システムテーブルは、ＵＥＦＩ２．３仕様のセクション４．６に説明されているように、ＥＦＩコンフィグレーションテーブルを持つ。これによって、ベンダＧＵＩＤによって名前が割り当てられる一連の追加テーブルをインストールすることが可能になる。この場合、ＥＦＩ  ＢＩＯＳは、成功について「真」となり、失敗について「偽」となるブール値を持つテーブルを作成する。システムテーブルエントリは、ＵｐｄａｔｅＣａｐｓｕｌｅランタイムサービスコールに応じて、ファームウェアモジュールの実行に関するステータス値をＯＳに戻すステータス構造を持つ。これは、システムがＳ３から遷移してウェイク状態になった後、埋め込みＳ３処理環境からメインホストＯＳにステータス情報を戻すために実行される。ブロック７１２において、Ｓ３  ＤＸＥイネーブルフラグが真である場合、ブロック７１４において成功ステータスが返されて、ファームウェアモジュールが実行されるとしてよい。偽である場合、ブロック７１６において失敗ステータスが返されるとしてよい。
【００３１】
ある実施形態によると、利用されるハードウェアリソースのためにメモリを供給する別の方法として、ＯＳが、Ｓ３  ＤＸＥファームウェアモジュールが利用するＯＳページを「ピン」付けまたは確保して、（恐らくはバラバラの状態の）ページリストをＵｐｄａｔｅＣａｐｓｕｌｅランタイムサービスコールに渡す。このため、ファームウェアは、ＯＳメモリマップからメモリを盗むことに代えて、バラバラの状態のページリストをＯＳから受け取って、これらのページを「ファームウェア確保」として、Ｓ３  ＤＸＥファームウェアモジュールを開始するために利用する。
【００３２】
ある実施形態によると、ＯＳインストーラは、Ｓ３  ＤＸＥファームウェアボリュームを、ＵＥＦＩサービスパーティション上のディレクトリに入れることが出来、ファームウェアボリュームの位置をＵｐｄａｔｅＣａｐｓｕｌｅコールを介して通知する。別の実施形態では、ＥＦＩ  ＢＩＯＳは、ファームウェアボリュームについて、ＵＥＦＩシステムパーティションを調べるとしてよい。いずれの場合も、ＥＦＩ  ＢＩＯＳは、ファームウェアボリュームのコンテンツを、続くＳ３  ＤＸＥアクティブ化で利用するメモリへと複製する前に、当該コンテンツを暗号を利用して承認する。
【００３３】
ある実施形態によると、続くＳ３レジュームにおいて、Ｓ３  ＤＸＥイネーブルフラグが真である場合、ＥＦＩ  ＢＩＯＳは、スリープ状態に戻る前に、および／または、ＯＳレジュームベクトルに制御を渡す前に、Ｓ３  ＤＸＥ  ＩＰＬおよび対応するファームウェアモジュールをＳ３  ＤＸＥファームウェアボリュームから開始するとしてよい。
【００３４】
このように、低電力消費状態においてＯＳホストインストーラがファームウェアモジュールダウンロード機能をアクティブ化するワンタッチプロビジョニングモデルを説明した。この機能は、コンピューティングデバイスが、ユーザに出荷された後にアクティブ化されるとしてよい。これによって、Ｓ３  ＤＸＥ  ＩＰＬコードおよび証明鍵インフラストラクチャを、ＥＦＩ  ＢＩＯＳ内の小さい「フック」として、第三者に提供することが出来るようになるが、出荷後に、ＯＳが中断されたＳ３  ＤＸＥ環境において実行するべく、ファームウェアボリュームをコンピューティングデバイスに追加することができる。
【００３５】
本明細書で説明した方法は、任意の特定のハードウェア構成またはソフトウェア構成に限定されるものではない。任意のコンピューティング環境、家庭用電化製品または処理環境において適用され得るであろう。本明細書で説明した方法は、ハードウェア、ソフトウェア、または、これら２つの組み合わせで実現されるとしてよい。本明細書で説明した方法は、プログラミング可能なマシンで実行されるプログラムで実装されるとしてよい。このようなマシンには、モバイルコンピュータあるいは固定型コンピュータ、携帯情報端末（ＰＤＡ）、セットトップボックス、セルラー方式電話およびポケットベル（登録商標）、家庭用電化製品（ＤＶＤプレーヤ、パーソナルビデオレコーダ、パーソナルビデオプレーヤ、衛星受信機、ステレオ受信機、ケーブルテレビ受信機を含む）、および、その他の電子機器がある。このようなマシンは、プロセッサと、プロセッサがアクセス可能な格納媒体（揮発性メモリおよび不揮発性メモリおよび／または格納素子を含む）と、少なくとも１つの入力デバイスと、１以上の出力デバイスとを備えるとしてよい。当業者であれば、本開示はさまざまなシステム構成で実施可能であることに想到するであろう。例えば、マルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ、独立した家庭用電化製品等で実施可能であることに想到するであろう。本発明は、タスクまたはその一部は、通信ネットワークで結合されている、リモート処理デバイスで実行され得る分散型コンピューティング環境でも実施可能である。
【００３６】
プログラム命令は、当該命令がプログラミングされている汎用処理システムまたは特定用途向け処理システムに、本明細書で説明した処理のうち一部を実行させるために用いられるとしてよい。これに代えて、これらの処理は、当該処理を実行するためのハードワイヤードロジックを含む特定のハードウェアコンポーネントによって実行されるとしてもよい。または、プログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントを組み合わせることによって、実行されるとしてもよい。本明細書で説明した方法は、処理システムまたは他の電子デバイスに当該方法を実行させるべく当該処理システムまたは他の電子デバイスをプログラミングするために用いられる命令が格納されている機械アクセス可能媒体を含むコンピュータプログラム製品として供給されるとしてよい。本明細書で用いる「コンピュータ可読媒体」という用語は、コンピューティングデバイスで実行される命令列を格納または符号化することができ、コンピューティングデバイスに、本明細書で説明した方法のいずれか１つを実行させる任意の媒体を含むとしてよい。「コンピュータ可読媒体」という用語は、これらに限定されないが、ソリッドステートメモリおよび光ディスクおよび磁気ディスクを含むとする。さらに、一の形態または別の形態としての（例えば、プログラム、プロシージャ、プロセス、アプリケーション、モジュール、ロジック等）ソフトウェアといえば、関連技術分野では、動作を実行するもの、または、結果を発生させるものを意味することが普通である。このような表現は単に、処理システムによってソフトウェアが実行されると、プロセッサは、動作を実行するか、または、結果を発生させることを記述するための簡単な表現である。
【図１】
0005606633.tif 000002
【図２Ａ】
0005606633.tif 000003
【図２Ｂ】
0005606633.tif 000004
【図３】
0005606633.tif 000005
【図４】
0005606633.tif 000006
【図５】
0005606633.tif 000007
【図６】
0005606633.tif 000008
【図７】
0005606633.tif 000009