(57)【特許請求の範囲】
【請求項１】
プリブート環境においてファームウェアを更新するモバイル計算デバイスであって、
前記モバイル計算デバイスのオペレーティングシステムにより事前に生成されたカプセルからファームウェア更新を取り出すカプセル管理モジュールと、
パワーマネジメントモジュールであって、
前記ファームウェア更新に基づいて前記モバイル計算デバイスのハードウェアコンポーネントの消費電力設定を決定し、
前記消費電力設定に基づいて前記ハードウェアコンポーネントを設定するパワーマネジメントモジュールと、
前記消費電力設定に基づいて前記ハードウェアコンポーネントの設定に応じて前記ファームウェア更新を適用する更新モジュールと
を有し、
前記消費電力設定の決定は、
前記ファームウェア更新に基づく、前記モバイル計算デバイスのパワーポリシーであって、前記モバイル計算デバイスの複数のハードウェアコンポーネントのパワーレベルを規定するパワーポリシーの決定と、
前記パワーポリシーに基づく、前記ハードウェアコンポーネントと前記消費電力設定の決定とを含む、
モバイル計算デバイス。
【請求項２】
前記ファームウェア更新はファームウェアドライバを含み、
前記ファームウェア更新の適用は前記ファームウェアドライバのエントリーポイントの実行を含む、
請求項１に記載のモバイル計算デバイス。
【請求項３】
前記パワーポリシーの決定は、前記ファームウェア更新に関連するハードウェアコンポーネントの一意識別子に基づく前記パワーポリシーの決定を含む、請求項１に記載のモバイル計算デバイス。
【請求項４】
前記ハードウェアコンポーネントは前記モバイル計算デバイスのデバイスコントローラを有する、請求項１に記載のモバイル計算デバイス。
【請求項５】
前記デバイスコントローラは、シリアルペリフェラルインタフェース（ＳＰＩ）コントローラ、キーボード及びシステムコントローラ（ＫＳＣ）、ネットワークコントローラ、無線ネットワークコントローラ、ニアフィールド通信（ＮＦＣ）コントローラ、エクスプレスカード（ＥＣ）コントローラ、またはユニバーサルシリアルバス（ＵＳＢ）コントローラを含む、請求項４に記載のモバイル計算デバイス。
【請求項６】
前記消費電力設定に基づく前記ハードウェアコンポーネントの設定は、
前記ハードウェアコンポーネントの完全な動作状態に対する前記ハードウェアコンポーネントの消費電力の低減と、
前記ハードウェアコンポーネントの現在の消費電力に対する前記ハードウェアコンポーネントの消費電力の増加とを含む、
請求項１に記載のモバイル計算デバイス。
【請求項７】
前記ファームウェア更新の適用は、前記モバイル計算デバイスのマネージャビリティエンジンへの前記ファームウェア更新の適用を含む、
請求項１に記載のモバイル計算デバイス。
【請求項８】
前記ファームウェア更新の適用は、前記モバイル計算デバイスのデバイスコントローラへの前記ファームウェア更新の適用を含む、請求項１に記載のモバイル計算デバイス。
【請求項９】
前記消費電力設定に基づく前記ハードウェアコンポーネントの設定は、前記ハードウェアコンポーネントの完全動作状態に対する前記ハードウェアコンポーネントの消費電力の低減を含み、
前記ファームウェア更新の適用は、前記ハードウェアコンポーネントとは異なる前記モバイル計算デバイスの他のハードウェアコンポーネントへの前記ファームウェア更新の適用を含む、
請求項１に記載のモバイル計算デバイス。
【請求項１０】
前記カプセル管理モジュールは、さらに、前記カプセルから第２のファームウェア更新の取り出し、
前記パワーマネジメントモジュールは、さらに、
前記第２のファームウェア更新に基づき、前記モバイル計算デバイスの第２のハードウェアコンポーネントの第２の消費電力設定を決定し、
前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントを設定するし、
前記更新モジュールは、さらに、前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントの設定に応じて前記第２のファームウェア更新を適用する、
請求項１ないし９いずれか一項に記載のモバイル計算デバイス。
【請求項１１】
前記第２の消費電力設定の決定は、
前記第２のファームウェア更新に基づく、前記モバイル計算デバイスの第２のパワーポリシーの決定と、
前記第２のパワーポリシーに基づく、前記第２のハードウェアコンポーネントと前記第２の消費電力設定の決定とを含む、
請求項１０に記載のモバイル計算デバイス。
【請求項１２】
前記第２のハードウェアコンポーネントは前記ハードウェアコンポーネントを含み、前記第２の消費電力設定は前記消費電力設定とは異なる、
請求項１０に記載のモバイル計算デバイス。
【請求項１３】
前記更新モジュールはさらに前記ファームウェア更新の適用に応じて更新状態を示し、前記更新状態は前記オペレーティングシステムによりアクセス可能である、
請求項１ないし９いずれか一項に記載のモバイル計算デバイス。
【請求項１４】
前記プリブート環境は前記カプセル管理モジュールと、前記パワーマネジメントモジュールと、前記更新モジュールとを含む、
請求項１ないし９いずれか一項に記載のモバイル計算デバイス。
【請求項１５】
プリブート環境においてモバイル計算デバイスのファームウェアを更新する方法であって、
前記モバイル計算デバイスが、前記モバイル計算デバイスのオペレーティングシステムにより事前に生成されたカプセルからファームウェア更新を取り出すステップと、
前記モバイル計算デバイスが、前記ファームウェア更新に基づき、前記モバイル計算デバイスのハードウェアコンポーネントの消費電力設定を決定するステップと、
前記モバイル計算デバイスが、前記消費電力設定に基づいて前記ハードウェアコンポーネントを設定するステップと、
前記モバイル計算デバイスが、前記消費電力設定に基づく前記ハードウェアコンポーネントの設定に応じて前記ファームウェア更新を適用するステップとを有し、
前記消費電力設定を決定するステップは、
前記ファームウェア更新に基づき前記モバイル計算デバイスのパワーポリシーであって、前記モバイル計算デバイスの複数のハードウェアコンポーネントのパワーレベルを規定するパワーポリシーを決定するステップと、
前記パワーポリシーに基づき前記ハードウェアコンポーネントと前記消費電力設定を決定するステップとを含む、
方法。
【請求項１６】
前記消費電力設定に基づき前記ハードウェアコンポーネントを設定するステップは、前記ハードウェアコンポーネントの完全動作状態に対して前記ハードウェアコンポーネントの消費電力を低減するステップを含み、
前記ファームウェア更新を適用するステップは、前記ハードウェアコンポーネントとは異なる前記モバイル計算デバイスの他のハードウェアコンポーネントに前記ファームウェア更新を適用するステップを含む、
請求項１５に記載の方法。
【請求項１７】
前記モバイル計算デバイスが、前記カプセルから第２のファームウェア更新を取り出すステップと、
前記モバイル計算デバイスが、前記第２のファームウェア更新に基づき、前記モバイル計算デバイスの第２のハードウェアコンポーネントの第２の消費電力設定を決定するステップと、
前記モバイル計算デバイスが、前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントを設定するステップと、
前記モバイル計算デバイスが、前記第２の消費電力設定に基づく前記第２のハードウェアコンポーネントの設定に応じて前記第２のファームウェア更新を適用するステップとを有する方法。
請求項１５に記載の方法。
【請求項１８】
前記第２の消費電力設定を決定するステップは、
前記第２のファームウェア更新に基づき前記モバイル計算デバイスの第２のパワーポリシーを決定するステップと、
前記第２のパワーポリシーに基づき前記第２のハードウェアコンポーネントと前記第２の消費電力設定を決定するステップとを含む、
請求項１７に記載の方法。
【請求項１９】
前記第２のハードウェアコンポーネントは前記ハードウェアコンポーネントを含み、前記第２の消費電力設定は前記消費電力設定とは異なる、
請求項１７に記載の方法。
【請求項２０】
前記ファームウェア更新を取り出すステップ、前記消費電力設定を決定するステップ、前記ハードウェアコンポーネントを設定するステップ、及び前記ファームウェア更新を適用するステップはすべて前記プリブート環境で生じる、
請求項１５に記載の方法。
【請求項２１】
計算デバイスであって、
プロセッサと、
前記プロセッサにより実行されたとき、前記プロセッサに、請求項１５−２０いずれか一項に記載の方法を実行させる複数の命令を格納したメモリとを有する、計算デバイス。
【請求項２２】
実行されると、計算デバイスに請求項１５−２０いずれか一項に記載の方法を実行させるコンピュータプログラム。
【請求項２３】
請求項１５−２０いずれか一項に記載の方法を実行する手段を有する計算デバイス。
【請求項２４】
請求項２２に記載のコンピュータプログラムを格納した一以上の機械読み取り可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
計算デバイスは、一般的に、ハードウェア初期化、低レベルハードウェア管理、及びブートプロセス管理の役割を担うファームウェアを含む。計算デバイスのブートの役割を担うメインプラットフォームファームウェアは、Ｕｎｉｆｉｅｄ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ（“ＵＥＦＩ”）仕様により実装されてもよい。この仕様にはＵｎｉｆｉｅｄ  ＥＦＩ  Ｆｏｒｕｍにより発行された幾つかのバージョンがある。ＵＥＦＩ仕様は、計算デバイスのファームウェアと、計算デバイスのオペレーティングシステムとの間のインタフェースを規定する。プラットフォームファームウェアに加え、計算デバイスは、コントローラチップ、周辺デバイス、またはその他のコンポーネントの専用ファームウェアも含み得る。
【０００２】
ファームウェアは、一般的に、ランタイムとブート中には読み取り専用であり、特別なファームウェア更新プロセス中に更新され得る。更新されたファームウェアは、安定性とセキュリティの向上のみならず新しい機能（ａｄｄｉｔｉｏｎａｌ  ｆｅａｔｕｒｅｓ）も提供する。現代のオペレーティングシステムは、プリブートファームウェアにファームウェア更新プロセスを任せていることがある。しかし、典型的なプリブートファームウェアは、計算デバイスのすべてのコンポーネントが完全機能パワー状態（例えば、「Ｓ０」状態）にある時に実行する。それゆえ、プリブートファームウェア更新の適用には大きなエネルギーが必要であり、バッテリー駆動のモバイル計算デバイスには重要な検討事項である。
【図面の簡単な説明】
【０００３】
ここで説明するコンセプトを、添付した図面において、限定ではなく実施例により説明する。説明を単純かつ明確にするため、図に示した要素は必ずしもスケール通りには描いていない。適当であれば、対応または類似する要素を示すため、複数の図面で同じ参照レベルを用いた。
【図１】プリブートファームウェア更新中の選択的パワー管理のためのモバイル計算デバイスの少なくとも一実施形態を示す簡略化したブロック図である。
【図２】図１のモバイル計算デバイスの環境の少なくとも一実施形態を示す簡略化したブロック図である。
【図３】図１及び図２のモバイル計算デバイスにより実行され得るファームウェアの更新方法の少なくとも一実施形態を示す概略図である。
【図４】図１及び図２のモバイル計算デバイスにより実行され得るファームウェアの更新方法の少なくとも一実施形態を示す簡略化したフロー図である。
【図５】図１及び図２の計算デバイスにより実行され得るプリブートファームウェア更新中の選択的パワーマネジメントの方法の少なくとも一実施形態を示す簡略化したフロー図である。
【図面の詳細な説明】
【０００４】
本開示のコンセプトはいろいろな修正を施したり代替的形式を取ったりすることもできるが、その具体的な実施形態を図面において実施例で示し、ここに詳細に説明する。しかし、言うまでもなく、開示した具体的な形式に本開示を限定する意図ではなく、逆に、本発明は本開示と添付した特許請求の範囲に沿ったすべての修正、等価物及び代替物をカバーするものである。
【０００５】
本明細書において「ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ」、「ａｎ  ｅｍｂｏｄｉｍｅｎｔ」、「ａｎ  ｉｌｌｕｓｔｒａｔｉｖｅ  ｅｍｂｏｄｉｍｅｎｔ」などと言う場合、記載した実施形態が、ある機能、構造、または特徴を含むが、かならずしもすべての実施形態がその機能、構造、または特徴を含んでも含まなくてもよい。さらに、かかる文言は必ずしも同じ実施形態を参照しているとは限らない。さらに、ある機能、構造、または特徴をある実施形態について説明した場合、明示的に記載していようがいまいが、他の実施形態に関するそれらの機能、構造、または特徴に影響が及ぶことは、当業者には自明である。また、言うまでもなく、「少なくとも１つのＡ、Ｂ及びＣ」との形式のリストに含まれるアイテムは、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ、及びＣ）を意味し得る。同様に、「Ａ、Ｂ又はＣのうちの少なくとも１つ」との形式のリストに含まれるアイテムは、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ、及びＣ）を意味し得る。
【０００６】
開示した実施形態は、幾つかの場合には、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組み合わせで実装できる。開示の実施形態は、一時的又は非一時的な機械読み取り可能（例えば、コンピュータ読み取り可能）記憶媒体により担われ、又はそれに格納された（一以上のプロセッサにより読み取られ実行され得る）命令として実装することもできる。機械読み取り可能記憶媒体は、機械により読み取り可能な形式で情報を格納又は送信する任意のストレージデバイス、メカニズム、又はその他の物理的構造（例えば、揮発性又は不揮発性メモリ、メディアディスク、又はその他のメディアデバイス）として実施できる。
【０００７】
図中、幾つかの構造的又は方法フィーチャを具体的な構成及び／又は順序で示すかも知れない。しかし、言うまでもなく、かかる具体的な構成及び／又は順序は必須ではない場合がある。むしろ、幾つかの場合には、かかるフィーチャは、例示した図面に示したのとは異なる方法及び／又は順序で構成することもできる。また、ある図面に構造的又は方法フィーチャを含めることは、かかるフィーチャがすべての実施形態において必要であることを意味するのではなく、幾つかの実施形態では、含まれなくてもよいし、他のフィーチャと組み合わされてもよい。
【０００８】
ここで図１を参照して、例示のモバイル計算デバイス１００は、プリブートファームウェア更新プロセスにおいて、そのコンポーネントに選択的パワーマネジメントを適用する。使用時には、上記の通り、モバイル計算デバイス１００のオペレーティングシステムは、例えば、デバイスメーカーにより運営されているリモートサーバから、一以上のファームウェア更新を受信する。オペレーティングシステムは、次のブートサイクルでファームウェア更新が更新されるようにし（ｓｔａｇｅ）、システムをリセットする。リブート時、オペレーティングシステムローダが、更新されるようにされた（ｓｔａｇｅｄ）ファームウェア更新を検出し、カプセルとしてプラットフォームファームウェアにファームウェア更新を渡し、更新カプセルモードでシステムをリセットする。リブート時にさらに、プラットフォームファームウェアがカプセルからファームウェア更新を取り出し、ファームウェア更新を適用する。ファームウェア更新を適用するとき、プラットフォームファームウェアは、モバイル計算デバイス１００のコンポーネントを選択的にパワーマネジメントする。すなわち、プラットフォームファームウェアは、ファームウェア更新を適用する必要があるコンポーネントをパワーアップ又はイネーブルし、ファームウェア更新を適用する必要がないコンポーネントをパワーダウン又はディスエーブルする。ファームウェア更新を適用した後、プラットフォームファームウェアはシステムを再度リセットし、モバイル計算デバイス１００は新しく更新されたファームウェアでリブートする。
【０００９】
開示の技術により、ファームウェア更新における使用パワーが低減できる。これは、バッテリー駆動のデバイスや、高密度のデータセンターサーバなどの限定された電力バジェットで動作するその他のデバイスでは重要である。バッテリー駆動デバイスの場合、使用パワーを低減することにより、ファームウェア更新中にバッテリーが切れてしまうリスクが低減される。また、使用パワーを低減することにより、ファームウェアをもっと頻繁に更新でき、デバイスの安定性及び／又はセキュリティが向上するかも知れない。
【００１０】
モバイル計算デバイス１００は、ここに説明の機能を実行するあらゆるタイプのデバイスとして実施してもよい。例えば、モバイル計算デバイス１００は、つぎのものを含むが、これに限定されない：スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、モバイル計算デバイス、セルラフォン、ハンドセット、メッセージングデバイス、車両テレマティックスデバイス、分散計算システム、コンシューマエレクトロニクスデバイス、及び／又はここに説明の機能を実行するように構成されたその他の任意の計算デバイス。図１に示したように、例示のモバイル計算デバイス１００は、プロセッサ１２０、入出力サブシステム１２２、メモリ１２４、データストレージデバイス１２６及びファームウェアストレージ１２８を含む。もちろん、モバイル計算デバイス１００は、他の一実施形態では、ポータブルコンピュータに一般的に見つかるようなその他の又は追加的なコンポーネント（例えば、様々な入出力デバイスなど）を含み得る。また、幾つかの実施形態では、例示したコンポーネントのうち一以上は、他のコンポーネントに組み込まれていても良く、又はその一部を構成していても良い。例えば、メモリ１２４又はその部分は、幾つかの実施形態では、プロセッサ１２０に組み込まれていても良い。さらにまた、モバイル計算デバイス１００として例示したが、言うまでもなく、下記の開示は、デスクトップコンピュータ、ワークステーション、またはサーバコンピュータなど実質的に据え置き型の計算デバイスにも等しく適用してもよい。
【００１１】
プロセッサ１２０は、ここに説明する機能を実行できる任意のタイプのプロセッサとして実施できる。例えば、このプロセッサ１２０は、シングル又はマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、又はその他のプロセッサ又は処理／制御回路として実施できる。同様に、メモリ１２４は、ここに説明する機能を実行できる、任意のタイプの揮発性又は不揮発性メモリ又はデータストレージとして実施できる。動作中、メモリ１２４は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバなど、モバイル計算デバイス１００の動作中に用いられる様々なデータとソフトウェアを記憶できる。メモリ１２４は、Ｉ／Ｏサブシステム１２２を介してプロセッサ１２０に通信可能に結合している。Ｉ／Ｏサブシステム１１２は、プロセッサ１２０、メモリ１２４、及びモバイル計算デバイス１００のその他のコンポーネントとの入出力動作を容易にする回路及び／又はコンポーネントとして実施できる。例えば、Ｉ／Ｏサブシステム１２２は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク（すなわち、ポイント・ツー・ポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント回路板トレースなど）及び／又は入出力動作を容易にするその他のコンポーネント及びサブシステムとして、又はこれらを含むものとして実施できる。幾つかの実施形態では、Ｉ／Ｏサブシステム１２２は、システム・オン・チップ（ＳｏＣ）の一部を形成でき、単一の集積回路チップ上にプロセッサ１２０、メモリ１２４、及びモバイル計算デバイス１００のその他のコンポーネントとともに、組み込むことができる。
【００１２】
データストレージデバイス１２６は、例えば、メモリデバイスと回路、メモリカード、ハードディスクドライブ、固体ドライブ、その他の記憶デバイスなどの、データを短期又は長期にわたり格納するように構成された任意のタイプのデバイスとして実施できる。データストレージデバイス１２６は、モバイル計算デバイス１００のデータとファームウェアコードを記憶するシステムパーティションを含んでいてもよい。データストレージデバイス１２６は、モバイル計算デバイス１００のオペレーティングシステムのデータファイル及び実行ファイルを記憶するオペレーティングシステムパーティションを含んでいてもよい。
【００１３】
モバイル計算デバイス１００は、さらに、ファームウェアストレージ１２８を含む。ファームウェアストレージ１２８は、モバイル計算デバイス１００のプラットフォームファームウェアの永続記憶をするように構成された任意のデバイスとして実施されてもよい。プラットフォームファームウェアは、ハードウェアの初期化、基本的入出力の管理、プリブート実行環境のホスト、一以上のオペレーティングシステムの選択と実行をする低レベルの命令またはソフトウェアを含み得る。ファームウェアストレージ１２８は、例えば、フラッシュメモリチップとして、またはバッテリーバックアップと結合した小容量の相補的金属酸化物半導体（「ＣＭＯＳ」）メモリとして実施してもよい。幾つかの実施形態では、ファームウェアストレージ１２８の一部または全部は、データストレージデバイス１２６上に常駐したファームウェアボリュームとして実施してもよい。幾つかの実施形態では、ファームウェアストレージ１２８は、例えば、Ｉ／Ｏサブシステム１２２などの、モバイル計算デバイス１００の一以上の他のコンポーネントに組み込まれてもよい。
【００１４】
モバイル計算デバイス１００はさらに通信回路１３０を含む。これはモバイル計算デバイス１００とリモート計算デバイスとの間の通信を可能にする任意の通信回路、デバイスまたはそれらの集まりとして実施されてもよい。通信回路１３０は、一以上の任意の通信技術（例えば、無線または有線通信）と、かかる通信を行う関連プロトコル（例えば、イーサネット（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸなど）とを用いるように構成されていてもよい。通信回路１３０は、無線ネットワークアダプタを含むネットワークアダプタとして実施されてもよい。
【００１５】
幾つかの実施形態では、モバイル計算デバイス１００はマネージャビリティエンジン（ｍａｎａｇｅａｂｉｌｉｔｙ  ｅｎｇｉｎｅ）１３２を含んでいてもよい。マネージャビリティエンジン１３２は、モバイル計算デバイス１００の設定、制御または管理を支援するデバイスとして実施される。幾つかの実施形態では、マネージャビリティエンジン１３２は、モバイル計算デバイス１００がパワーオフされ、またはプリブート環境が実行される時を含め、モバイル計算デバイス１００の他の部分の状態に関わらず動作できてもよい。かかる独立した動作を支援するため、マネージャビリティエンジン１３２は、モバイル計算デバイス１００のメインプロセッサ１２０とは別の帯域外（ｏｕｔ−ｏｆ−ｂａｎｄ）プロセッサを含んでいてもよい。さらに、幾つかの実施形態では、マネージャビリティエンジン１３２は、モバイル計算デバイス１００の状態に関わらず（例えば、メインプロセッサ１２０の状態に関わらず）、通信回路１３０を用いて通信することもできる。これは「帯域外（ｏｕｔ−ｏｆ−ｂａｎｄ）」通信としても知られている。マネージャビリティエンジン１３２は、専用ファームウェア１３４を実行またはアクセスしてもよい。幾つかの実施形態では、ファームウェア１３４はマネージャビリティエンジン１３２に組み込まれても、それ専用のものであってもよい。追加的または代替的に、マネージャビリティエンジン１３２はファームウェアストレージ１２８に記憶されたファームウェアを実行しても、それにアクセスしてもよい。幾つかの実施形態では、マネージャビリティエンジン１３２は、Ｉ／Ｏサブシステム１２２に組み込まれてもよいし、Ｉ／Ｏサブシステム１２２の一部を構成してもよい。
【００１６】
モバイル計算デバイス１００は、さらに、複数のデバイスコントローラ１３６を含む。各デバイスコントローラ１３６は、モバイル計算デバイス１００のハードウェアコンポーネントとインタフェースし、及び／又はそれを制御するように構成されている。各デバイスコントローラ１３６は選択的にパワーマネジメントされてもよい。すなわち、モバイル計算デバイス１００は、各デバイスコントローラ１３６の消費電力レベルを設定してもよい。可能な消費電力レベルには、完全なパワーダウンと、完全なパワーオンと、サスペンドやスタンバイなどの中間パワーレベルとが含まれる。デバイスコントローラ１３６は、入出力コントローラ、ディスクコントローラ、ネットワークコントローラ、ディスプレイコントローラ、またはモバイル計算デバイス１００のその他の任意のハードウェアコンポーネントのためのコントローラを含んでいてもよい。入出力コントローラは、例えば、シリアルペリフェラルインタフェース（ＳＰＩ）コントローラ、キーボード及びシステムコントローラ（ＫＳＣ）、ＥｘｐｒｅｓｓＣａｒｄ（ＥＣ）コントローラ、またはユニバーサルシリアルバス（ＵＳＢ）コントローラである。デバイスコントローラ１３６は、ディスクリートチップとして実施してもよいし、Ｉ／Ｏサブシステム１２２などのモバイル計算デバイス１００の他のコンポーネントとともにパッケージされてもよい。各デバイスコントローラ１３６は専用ファームウェア１３８を含んでいてもよい。専用ファームウェア１３８は、フラッシュメモリ、電子的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、デバイスコントローラ１３６に組み込まれた又は結合されたその他の不揮発性メモリとして実施されてもよい。
【００１７】
モバイル計算デバイス１００は、さらに、複数のペリフェラルデバイス１４０を含む。かかるペリフェラルデバイス１４０は、別の入出力デバイス、インタフェースデバイス、及び／又はその他のペリフェラルデバイスをいくつ含んでいてもよい。例えば、幾つかの実施形態では、ペリフェラルデバイス１４０は、カメラ、サウンドカード、ディスプレイ、キーボード、スピーカシステム、及び／又はその他の入出力デバイス、インタフェースデバイス、及び／又はペリフェラルデバイスを含んでいてもよい。モバイル計算デバイス１００は、ペリフェラルデバイス１４０の一部または各々を選択的にパワーマネジメントしてもよい。幾つかの実施形態では、ペリフェラルデバイス１４０は、一以上のデバイスコントローラ１３６により、パワーマネジメントを含む制御をされてもよい。例えば、モバイル計算デバイス１００は、デバイスコントローラ１３６に、付随するすべてのペリフェラルデバイス１４０をパワーダウンするように命令してもよい。
【００１８】
ここで図２を参照して、例示の実施形態では、モバイル計算デバイス１００は、動作中に環境２００を確立する。例示の環境２００は、オペレーティングシステムローダ２０２、オペレーティングシステム２０４、及び更新モジュール２０８を含む。例示の実施形態２００は、１つのオペレーティングシステム２０４を含むが、他の実施形態では、環境２００はネイティブでまたは仮想的に実行された２つ以上のオペレーティングシステム２０４を含んでいてもよい。環境２００の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせとして実施されてもよい。
【００１９】
オペレーティングシステムローダ２０２は、プリブート環境からオペレーティングシステム２０４を起動するように構成されている。また、オペレーティングシステムローダ２０２は、オペレーティングシステム２０４が一以上のファームウェア更新をブート時に適用されるようにしたか（ｓｔａｇｅ）判断するように構成されている。適用されるようにしたとき、オペレーティングシステムローダ２０２は、適用されるようにされた（ｓｔａｇｅｄ）ファームウェア更新を更新モジュール２０８に渡す。
【００２０】
オペレーティングシステム２０４は、なかんずく、ファームウェア更新をブートプロセス中に適用されるようにする（ｓｔａｇｅ）ように構成されている。ファームウェア更新は、デバイスメーカ（図示せず）に関連するウェブサーバなどの外部サーバから受信してもよい。以下、さらに説明するように、ファームウェア更新は、ファームウェアストレージ１２８に記憶されたプラットフォームファームウェア、ファームウェア１３４に記憶されたマネージャビリティエンジンファームウェア、またはファームウェア１３８に記憶されたデバイスコントローラファームウェアに対してされてもよい。オペレーティングシステム２０４は、ファームウェア更新をするようにした後、リブートをトリガーする。幾つかの実施形態では、これらの機能は、サブモジュールにより、例えば、更新マネージャモジュール２０６により実行されてもよい。
【００２１】
更新モジュール２０８は、オペレーティングシステム２０４により生成される一以上のファームウェア更新を取り出し、そのファームウェア更新をプリブート環境で適用する。ファームウェア更新は、オペレーティングシステム２０４から更新モジュール２０８にカプセルとして転送されてもよい。カプセルはデータのインメモリブロック（ｉｎ−ｍｅｍｏｒｙ  ｂｌｏｃｋ）である。カプセルは、例えば、ＵＥＦＩ仕様で規定されたＵｐｄａｔｅＣａｐｓｕｌｅ（）を用いて転送されてもよい。ファームウェア更新を適用するとき、更新モジュール２０８は、モバイル計算デバイス１００のハードウェアコンポーネントの消費電力設定を、一組のプラットフォームパワーポリシー２１４に基づいて調整する。プラットフォームパワーポリシー２１４は、そのファームウェア更新に基づいて消費電力設定を確定する一組の規則である。一般的に、プラットフォームパワーポリシー２１４は、ファームウェア更新適用する必要があるハードウェアコンポーネントがパワーアップされ、一方、必要がないハードウェアコンポーネントはパワーダウンされることを規定する。プラットフォームパワーポリシー２１４は、スリープモードまたはスタンバイモードなどの中間消費電力（ｐｏｗｅｒ  ｃｏｎｓｕｍｐｔｉｏｎ）設定も規定していてもよい。更新モジュール２０８は、ファームウェア更新の状態（例えば、成功または失敗）をオペレーティングシステム２０４に示してもよい。幾つかの実施形態では、更新モジュール２０８の機能は、一以上のサブモジュールにより、例えば、カプセル管理モジュール２１０またはパワー管理モジュール２１２により実行されてもよい。
【００２２】
ここで図３を参照して、モバイル計算デバイス１００はデバイス１００のファームウェアを更新する方法３００を実行してもよい。図３に示した方法３００は図４を参照して説明する、より具体的な方法４００の概略である。図３に示したように、方法３００は、モバイル計算デバイス１００により、複数のリブートサイクルにわたり実行されてもよい。方法３００はブロック３０２で開始し、モバイル計算デバイス１００がオペレーティングシステム２０４を正常にブートし、オペレーティングシステム２０４がファームウェア更新を次のブートサイクルで更新するようにする（ｓｔａｇｅ）。ブロック３０４において、モバイル計算デバイス１００は正常に再起動する。再起動（ｒｅｓｔａｒｔ）後、ブロック３０６において、モバイル計算デバイス１００は、更新されるようにされた（ｓｔａｇｅｄ）ファームウェア更新に基づきカプセルを準備する。ブロック３０８において、モバイル計算デバイスは、ウォームリスタートして、特殊な更新カプセルモードに入る。更新カプセルモードでは、ブロック３１０において、モバイル計算デバイスは事前に準備されたカプセルに基づきファームウェアを更新する。ファームウェアを更新後、ブロック３１２において、モバイル計算デバイス１００は再度、正常に再起動する。
【００２３】
ここで図４を参照して、方法３００の一実施形態を方法４００として示した。方法４００は、ファームウェアを更新するため、モバイル計算デバイス１００により実行されてもよい。方法４００はブロック４０２で開始し、モバイル計算デバイス１００はプリブート環境でプラットフォームハードウェアを初期化する。例えば、モバイル計算デバイス１００は、プラットフォームファームウェアを実行するのに必要なコンポーネントを、例えば、メモリ１２４とＩ／Ｏサブシステム１２２を初期化してもよい。プラットフォームハードウェアは、以下に説明するように、モバイル計算デバイス１００の初期ブートの一部として、例えば、ユーザがデバイスをパワーオンした時に、またはプラットフォームリセットに応じて、初期化されてもよい。
【００２４】
ブロック４０４では、モバイル計算デバイス１００は、プラットフォームが更新カプセルモードでブートされたか判断する。以下にさらに説明するように、モバイル計算デバイス１００は、システムのリセットをプログラムでトリガーしてもよい。リセットをトリガーする時、モバイル計算デバイス１００はブートモードを指定してもよい。例えば、モバイル計算デバイス１００は、ＵＥＦＩ仕様で規定されたＲｅｓｅｔＳｙｓｔｅｍ（）関数に引数としてブートモードを指定してもよい。ブートモードを決定するため、モバイル計算デバイス１００は、所定の、または確立された揮発性または不揮発性メモリロケーションをチェックしてもよい。例えば、モバイル計算デバイス１００は、プラットフォーム不揮発性ストレージ（ｐｌａｔｆｏｒｍ  ｎｏｎ−ｖｏｌａｔｉｌｅ  ｓｔｏｒｅ）中の一以上のファームウェア変数の値をチェックしてもよい。モバイル計算デバイス１００は、ブートプロセスの初期に、メモリ１２４などのコンポーネントを完全に初期化する前に、ブートモードをチェックして、その後のブートプロセスで用いるかも知れない情報をクリアすることを回避してもよい。更新カプセルモードでブートされる場合、方法４００はブロック４２８に分岐し、下記の通りカプセルを処理する。更新カプセルモードでブートされていない場合（例えば、通常モードでブートされている場合）、方法４００はブロック４０６に進む。
【００２５】
ブロック４０６において、モバイル計算デバイス１００は、ファームウェアイメージをロードして起動する。ファームウェアイメージはファームウェアドライバ及び／又はファームウェアアプリケーションを含んでいてもよい。ファームウェアイメージは、モバイル計算デバイス１００の、プラットフォーム初期化を完了し、ファームウェアプロトコルインタフェースをインストールし、他のプリブートオペレーションを実行する。ファームウェアイメージは、ＵＥＦＩ仕様により詳細が規定されているように、データストレージデバイス１２６のシステムパーティションに記憶されたバイナリイメージとして実施されてもよい。ロードされるドライバとアプリケーションは、プラットフォーム依存であり、モバイル計算デバイス１００のファームウェア変数に列挙されてもよい。
【００２６】
ブロック４０８において、モバイル計算デバイス１００はブートデバイスを選択しロードする。ブートデバイスは、モバイル計算デバイス１００によりロードされ起動されるファームウェアアプリケーションであり、例示の実施形態では、オペレーティングシステムローダ２０２である。幾つかの実施形態では、ブートデバイスは、診断アプリケーション、メンテナンスアプリケーション、または管理アプリケーションを含んでいてもよい。選択されるブートデバイスは、モバイル計算デバイス１００のグローバル変数で指定されてもよい。幾つかの実施形態では、ブートデバイスは、モバイル計算デバイス１００により提示されるメニューその他の手段により、モバイル計算デバイス１００のユーザにより選択されてもよい。
【００２７】
ブロック４１０において、モバイル計算デバイス１００は、オペレーティングシステム２０４による更新に対して、カプセルが更新されるようにされているか（ｓｔａｇｅｄ）判断する。この決定はオペレーティングシステムローダ２０２により実行されてもよい。以下に説明するように、オペレーティングシステム２０４は、データストレージデバイス１２６の所定場所にファイルを格納することにより、カプセルを更新されるようにする（ｓｔａｇｅ  ａ  ｃａｐｓｕｌｅ  ｆｏｒ  ｕｐｄａｔｅ）こともできる。その場所は、例えば、オペレーティングシステム２０４のシステムルートディレクトリ中の、データストレージデバイス１２６のファームウェアボリュームの外であってもよい。このように、オペレーティングシステムローダ２０２は、データストレージデバイス１２６のその場所を検索して、カプセルが更新されるようにされているか（ｈａｓ  ｂｅｅｎ  ｓｔａｇｅｄ  ｆｏｒ  ｕｐｄａｔｅ）判断してもよい。ブロック４１２において、モバイル計算デバイス１００はカプセルが更新されるようにされているか判断する。カプセルが更新されるようにされている場合、下記の通り、方法４００はブロック４２４に分岐する。更新されるようにされていない場合、方法４００はブロック４１４に進む。
【００２８】
ブロック４１４において、モバイル計算デバイス１００はオペレーティングシステム２０４を通常通りブートする。オペレーティングシステムローダ２０２は、ファームウェアのプリブート環境からオペレーティングシステム２０４に、モバイル計算デバイス１００の制御を渡す。例えば、オペレーティングシステムローダ２０２は、ＵＥＦＩ仕様により規定されたＥｘｉｔＢｏｏｔＳｅｒｖｉｃｅｓ（）関数を呼んでも良い。
【００２９】
ブロック４１６において、モバイル計算デバイス１００は、ファームウェアを更新するか判断する。ファームウェア更新は、例えば、モバイル計算デバイス１００が通信回路１３０を用いてトラステッドソース（ｔｒｕｓｔｅｄ  ｓｏｕｒｃｅ）から更新ファームウェアをダウンロードする時に、自動的に開始されてもよい。幾つかの実施形態では、ファームウェア更新は、ユーザにより、例えばインターラクティブハードウェアマネージャビリティユーティリティにより開始され得る。ファームウェアを更新しない場合、方法４００はブロック４１８に分岐する。ブロック４１８において、モバイル計算デバイス１００は、ユーザアプリケーションの実行など、標準的動作を実行する。ブロック４１８の後、方法４００は、ブロック４１６にループバックし、ファームウェア更新のモニタリングを継続する。ブロック４１６に戻り、モバイル計算デバイス１００がファームウェアを更新すると判断すると、方法４００はブロック４２０に進む。
【００３０】
ブロック４２０において、モバイル計算デバイス１００は、カプセルを次のブートサイクルで更新するようにする（ｓｔａｇｅｓ  ａ  ｃａｐｓｕｌｅ  ｆｏｒ  ａｎ  ｕｐｄａｔｅ  ｉｎ  ｔｈｅ  ｎｅｘｔ  ｂｏｏｔ  ｃｙｃｌｅ）。上記の通り、カプセルを処理する（ｓｔａｇｅ）ため、オペレーティングシステム２０４は、データストレージデバイス１２６の明確に定義されたロケーションにカプセルを格納してもよい。カプセルは、ランタイムにオペレーティングシステムからプリブートファームウェア環境にデータを通信するのに用いられ得るデータ構造として実施してもよい。カプセルは、一般的に、ヘッダセグメントで始まり、コードセグメント及び／又はデータセグメントを含み得る任意のバイナリ情報が続く。このように、一以上のファームウェア更新は、エンコードされ、１つのカプセルにパッケージされ得る。幾つかの実施形態では、オペレーティングシステム２０４は、ランタイムにカプセルを完全にエンコードし、エンコードしたカプセルをデータストレージデバイス１２６に格納（ｓｔａｇｅ）しても良い。追加的にまたは代替的に、オペレーティングシステム２０４は、データストレージデバイス１２６にファームウェア更新を格納（ｓｔａｇｅ）し、下記のように、カプセルがオペレーティングシステムローダ２０２により生成されてもよい。カプセルは、ＵＥＦＩ仕様により規定されたＥＦＩ＿ＵＰＤＡＴＥ＿ＣＡＰＳＵＬＥとしてフォーマットされてもよい。
【００３１】
ブロック４２２において、モバイル計算デバイス１００は、通常モードでプラットフォームをリセットする。幾つかの実施形態では、モバイル計算デバイス１００は、適切なバッテリーパワーが残っていること（例えば、全容量の少なくとも２５％）、またはモバイル計算デバイス１００がＡＣパワーに接続されていることを確認してもよい。プラットフォームをリセットする前に、モバイル計算デバイス１００は、例えば、プラットフォームをリブートするかユーザにプロンプトすることにより、ユーザがファームウェア更新を実行することを望んでいることを確認してもよい。プラットフォームをリセットした後、方法４００は、ブロック４０２にループバックして、プラットフォームハードウェアを初期化する。
【００３２】
ブロック４１２に戻り、モバイル計算デバイス１００は、カプセルがファームウェア更新のため処理されたか（ｓｔａｇｅ）判断する。上記の通り、この決定はオペレーティングシステムローダ２０２により実行されてもよい。更新のため処理された場合、方法４００はブロック４２４に分岐する。ブロック４２４において、モバイル計算デバイス１００は、次のファームウェアブートサイクルのための更新カプセルを準備する。そうするため、モバイル計算デバイス１００は、カプセルをメモリ１２４にロードする。上記の通り、幾つかの実施形態では、オペレーティングシステムローダ２０２は、一以上のファームウェア更新をロードしてインメモリカプセル（ｉｎ−ｍｅｍｏｒｙ  ｃａｐｓｕｌｅ）にフォーマットする。幾つかの実施形態では、カプセルは仮想アドレッシングモードを用いてメモリ１２４に格納されてもよい。これらの実施形態では、モバイル計算デバイス１００は、仮想メモリアドレスをプリブートファームウェアにより使用可能な物理アドレスにマッピングするインメモリテーブルを準備してもよい。モバイル計算デバイス１００は、ＵＥＦＩ仕様で規定されたＵｐｄａｔｅＣａｐｓｕｌｅ（）関数を用いて、カプセルをファームウェアに渡す。カプセルは、フラグを付され、またはプラットフォームがリセットされても存続するように構成されてもよい。
【００３３】
ブロック４２６において、モバイル計算デバイス１００は、更新カプセルモードでプラットフォームをウォームリセット（ｗａｒｍ−ｒｅｓｅｔ）する。ウォームリセットにより、プラットフォームはリブートするが、メモリ１２４の内容はクリアされない。それゆえ、カプセルは、その後のリブート時にファームウェアが処理できるようになる。モバイル計算デバイス１００は、システムをリセットする時、カプセルに関連するリセットタイプを提供することにより、システムをウォームリセットしてもよい。例えば、モバイル計算デバイス１００は、ＵＥＦＩ仕様のＱｕｅｒｙＣａｐｓｕｌｅＣａｐａｂｉｌｉｔｉｅｓ（）関数を呼んでリセット値を取得してもよい。システムをウォームリセットした後、方法４００は、ブロック４０２にループバックして、プラットフォームハードウェアを初期化する。
【００３４】
ブロック４０４を参照して、モバイル計算デバイス１００は、モバイル計算デバイス１００が更新カプセルモードでブートされたか判断する。上記の通り、揮発性メモリまたは不揮発性メモリに記憶されたデータは、ブートモードを示しても良い。更新カプセルモードでブートされたとき、方法４００はブロック４２８に分岐する。ブロック４２８において、モバイル計算デバイス１００は、更新カプセルを処理し、プラットフォームパワーポリシー２１４を用いてファームウェアを更新する。プラットフォームパワーポリシー２１４を用いたファームウェアの更新は、図５を参照して以下にさらに詳しく説明する。
【００３５】
ブロック４３０において、モバイル計算デバイス１００は、ファームウェアの更新が成功したか判断する。この判断を行うため、モバイル計算デバイス１００は揮発性メモリまたは不揮発性メモリに記憶されたデータをチェックしてもよい。例えば、カプセル更新状態はＥＦＩシステムリソーステーブル（ＥＳＲＴ）に格納されてもよい。ファームウェア更新が成功したら、方法４００はブロック４３２に進んでもよく、そこでファームウェアが事前に記憶されたバックアップにロールバック（ｒｏｌｌｅｄ  ｂａｃｋ）される。ファームウェアをロールバックした後、方法４００はブロック４３４に進む。ブロック４３０に戻り、ファームウェア更新が成功すると、方法４００はブロック４３４に分岐する。
【００３６】
ブロック４３４において、モバイル計算デバイス１００は、通常モードでプラットフォームをリセットする。モバイル計算デバイス１００は、コールドリセット（ｃｏｌｄ  ｒｅｓｅｔ）を実行する。すなわち、モバイル計算デバイス１００は、メモリ１２４の内容をクリアし、プラットフォームハードウェアを完全に再初期化してもよい。リブートにおいて、モバイル計算デバイス１００は、新しく更新されたどのファームウェアも実行する。システムをリセットした後、方法４００は、ブロック４０２にループバックして、プラットフォームハードウェアを初期化する。
【００３７】
図５を参照して、使用において、モバイル計算デバイス１００は、ファームウェア更新中に選択的パワーマネジメントを行う方法５００を実行してもよい。図４のブロック４２８を参照して説明したように、方法５００は、プラットフォームが更新カプセルモードでブートされた時、プリブートファームウェア環境（ｐｒｅ−ｂｏｏｔ  ｆｉｒｍｗａｒｅ  ｅｎｖｉｒｏｎｍｅｎｔ）で実行されてもよい。方法５００はブロック５０２で始まり、そこではモバイル計算デバイス１００がカプセルに含まれるファームウェア更新を特定する。カプセルを処理する前に、モバイル計算デバイス１００は、カプセルの内容を物理的メモリの連続したセグメントにコピーしてもよい。上記の通り、カプセルは標準ヘッダで始まり、任意のバイナリ情報のブロック（バイナリブロブ）（ｂｉｎａｒｙ  ｂｌｏｂ）が続く。バイナリ情報はモバイル計算デバイス１００により利用可能な任意のフォーマットでフォーマットされてもよい。例えば、バイナリ情報はＵＥＦＩ仕様で規定されているように、ファームウェアボリュームとしてフォーマットされてもよい。モバイル計算デバイス１００は、カプセル内に収容されたすべてのファームウェア更新を列挙または解凍してもよい。
【００３８】
ブロック５０４において、モバイル計算デバイス１００は、カプセルから次のファームウェア更新を読み出す。各ファームウェア更新は、モバイル計算デバイス１００のファームウェアデバイスにインストールされるコード及び／又はデータを含んでいても良く、またファームウェア更新に適用する必要があるインストレーションまたは管理コードを含んでいてもよい。例えば、ファームウェア更新は、ファームウェアストレージ１２８に格納される更新されたプラットフォームファームウェアを含んでいてもよく、ファームウェア１３４に格納される更新されたマネージャビリティエンジンファームウェアを含んでいても良く、ファームウェア１３８に格納される更新されたデバイスコントローラファームウェアを含んでいてもよい。個別の各ファームウェア更新は、ファームウェアの更新に利用できる任意のフォーマットであってもよい。例えば、ファームウェア更新は、実行された時、適切なファームウェアデバイスを更新するコードを含むファームウェアドライバとして実施されてもよい。ファームウェアドライバは、エントリーポイントを含んでいてもよい。エントリーポイントは、ファームウェアドライバ内の明確に定義されたロケーションであって、モバイル計算デバイス１００がファームウェア更新を加えるコードの実行を開始してもよいロケーションである。幾つかの実施形態では、ファームウェア更新は、カプセルを参照し、ファームウェアデバイスに格納されるデータにアクセスする。
【００３９】
ブロック５０６において、モバイル計算デバイス１００は、プラットフォームパワーポリシー２１４に基づき、ファームウェア更新に必要なプラットフォームハードウェアコンポーネントを決定する。モバイル計算デバイス１００は、ファームウェア更新に適当なプラットフォームパワーポリシー２１４を決定してもよい。例えば、各ファームウェア更新は、グローバル一意識別子（ＧＵＩＤ）により特定されるハードウェアコンポーネントに関連したものであってもよい。決定されたプラットフォームパワーポリシー２１４は、必要な消費電力設定を含むファームウェア更新のために必要なハードウェアコンポーネントを特定してもよい。必要なハードウェアコンポーネントはプラットフォームに固有である。それゆえ、モバイル計算デバイス１００の生産者及び／又はプラットフォームファームウェアの開発者がプラットフォームパワーポリシー２１４を保持していてもよい。
【００４０】
ブロック５０８において、モバイル計算デバイス１００は、適当なプラットフォームパワーポリシー２１４に基づきプラットフォームハードウェアコンポーネントのパワーレベルを設定する。利用可能なパワーレベルはプラットフォーム及びコンポーネントに固有である。例えば、幾つかのハードウェアコンポーネントは、完全にパワーオフされてもよいし、完全にパワーオンされてもよい。他のハードウェアコンポーネントは、完全にオフ、スタンバイ、サスペンド、完全にパワーオンなどの複数の利用可能なパワーレベルを有していてもよく、クロックスピード及び／又は電圧などの調整可能パラメータを有していても良い。ブロック５１０において、幾つかの実施形態では、モバイル計算デバイス１００は、ファームウェア更新に必要なハードウェアコンポーネントの電源を入れてもよい。例えば、プラットフォームファームウェアを更新する時、モバイル計算デバイス１００は、プロセッサ１２０、ファームウェアストレージ１２８、及びＳＰＩバスのデバイスコントローラ１３６の電源を入れてもよい。他の一例として、マネージャビリティエンジン１３２のファームウェアを更新する時、モバイル計算デバイス１００は、プロセッサ１２０と、ＳＰＩバスのデバイスコントローラ１３６との電源を入れてもよい。第３の例として、ペリフェラルデバイス１４０のファームウェアを更新する時、モバイル計算デバイス１００はプロセッサ１２０とペリフェラルデバイス１４０との電源を入れても良い。ブロック５１２において、幾つかの実施形態では、モバイル計算デバイス１００は、ファームウェア更新に必要ないハードウェアコンポーネントの電源を切ってもよい。例えば、モバイル計算デバイス１００は、更新されないペリフェラルデバイス１４０の電源、または更新されないデバイスのデバイスコントローラ１３６の電源を切っても良い。
【００４１】
ブロック５１４において、モバイル計算デバイス１００は、ファームウェア更新を実行し、更新状態を示す。更新の実行により、新しいファームウェアが、例えばファームウェアストレージ１２８、マネージャビリティエンジンファームウェア１３４、またはデバイスコントローラファームウェア１３８が、適当なファームウェアデバイスに書き込まれる。ファームウェア更新がファームウェアドライバとして実施される実施形態では、モバイル計算デバイス１００は、ファームウェアドライバのエントリーポイントで実行を開始することにより、ファームウェア更新の実行をしてもよい。モバイル計算デバイス１００は、ＥＦＩシステムリソーステーブルを更新することにより、ファームウェア更新の状態（例えば、成功か失敗か）を示しても良い。モバイル計算デバイス１００は、状態情報をオペレーティングシステム２０４にエクスポートしてもよいし、オペレーティングシステム２０４が状態情報を利用できるようにしてもよい。幾つかの実施形態では、ブロック５１６において、モバイル計算デバイス１００は、前のファームウェアのバックアップを記憶しておいてもよい。このバックアップは、更新が失敗したときに、ファームウェアをロールバック（ｒｏｌｌ  ｂａｃｋ）するのに用いることができる。前のファームウェアは、例えば、データストレージデバイス１２６のシステムボリュームに格納されてもよい。
【００４２】
ブロック５１８において、モバイル計算デバイス１００は、別のファームウェア更新が残っているか判断する。モバイル計算デバイス１００は、上記の通り、カプセルの内容を調べても良い。別のファームウェア更新が残っていれば、方法５００はブロック５０４にループバックし、次の更新カプセルを読み出す。別のファームウェア更新が残っていなければ、方法５００は完了する。上記の通り、モバイル計算デバイス１００は、その後、新たに更新されたファームウェアを用いてリブートされる。
【００４３】
開示の技術はモバイル計算デバイスに関して説明したが、言うまでもなく、開示の技術は他の計算デバイスにも同様に適用可能である。例えば、開示の技術は、デスクトップコンピュータ、サーバ、またはその他の主に据え置き型の計算デバイスに組み込まれても良い。
【００４４】
実施例
実施例１は、プリブート環境においてファームウェアを更新するモバイル計算デバイスであって、前記モバイル計算デバイスのオペレーティングシステムにより事前に生成されたカプセルからファームウェア更新を取り出すカプセル管理モジュールと、パワーマネジメントモジュールであって、前記ファームウェア更新の関数として前記モバイル計算デバイスのハードウェアコンポーネントの消費電力設定を決定し、前記消費電力設定に基づいて前記ハードウェアコンポーネントを設定するパワーマネジメントモジュールと、前記消費電力設定に基づいて前記ハードウェアコンポーネントの設定に応じて前記ファームウェア更新を適用する更新モジュールとを有する。
【００４５】
実施例２は、実施例１に記載の主題であって、前記ファームウェア更新はファームウェアドライバを含み、前記ファームウェア更新の適用は前記ファームウェアドライバのエントリーポイントの実行を含む。
【００４６】
実施例３は、実施例１及び２のいずれかに記載の主題であって、前記消費電力設定の決定は、前記ファームウェア更新の関数として前記モバイル計算デバイスのパワーポリシーであって、前記モバイル計算デバイスの複数のハードウェアコンポーネントのパワーレベルを規定するパワーポリシーの決定と、前記パワーポリシーの関数として前記ハードウェアコンポーネントと前記消費電力設定の決定とを含む。
【００４７】
実施例４は実施例１−３のいずれかの主題を含み、前記パワーポリシーの決定は、前記ファームウェア更新の一意識別子に基づく前記パワーポリシーの決定を含む。
【００４８】
実施例５は実施例１−４のいずれかの主題を含み、前記ハードウェアコンポーネントは前記モバイル計算デバイスのペリフェラルデバイスを含む。
【００４９】
実施例６は実施例１−５のいずれかの主題を含み、前記ハードウェアコンポーネントは前記モバイル計算デバイスのデバイスコントローラを有する。
【００５０】
実施例７は実施例１−６のいずれかの主題を含み、前記デバイスコントローラは、シリアルペリフェラルインタフェース（ＳＰＩ）コントローラ、キーボード及びシステムコントローラ（ＫＳＣ）、ネットワークコントローラ、無線ネットワークコントローラ、ニアフィールド通信（ＮＦＣ）コントローラ、エクスプレスカード（ＥＣ）コントローラ、またはユニバーサルシリアルバス（ＵＳＢ）コントローラを含む。
【００５１】
実施例８は実施例１−７のいずれかの主題を含み、前記消費電力設定に基づく前記ハードウェアコンポーネントの設定は、前記ハードウェアコンポーネントの完全な動作状態に対する前記ハードウェアコンポーネントの消費電力の低減を含む。
【００５２】
実施例９は実施例１−８のいずれかの主題を含み、前記消費電力設定に基づく前記ハードウェアコンポーネントの設定は、前記ハードウェアコンポーネントの現在の消費電力に対する前記ハードウェアコンポーネントの消費電力の増加を含む。
【００５３】
実施例１０は実施例１−９のいずれかの主題を含み、前記ファームウェア更新の適用は、前記モバイル計算デバイスのマネージャビリティエンジンへの前記ファームウェア更新の適用を含む。
【００５４】
実施例１１は実施例１−１０のいずれかの主題を含み、前記ファームウェア更新の適用は、前記モバイル計算デバイスのデバイスコントローラへの前記ファームウェア更新の適用を含む。
【００５５】
実施例１２は実施例１−１１のいずれかの主題を含み、前記消費電力設定に基づく前記ハードウェアコンポーネントの設定は、前記ハードウェアコンポーネントの完全な動作状態に対する前記ハードウェアコンポーネントの消費電力の低減と、前記ファームウェア更新の適用は、前記ハードウェアコンポーネントとは異なる前記モバイル計算デバイスの他のハードウェアコンポーネントへの前記ファームウェア更新の適用を含む。
【００５６】
実施例１３は実施例１−１２のいずれかの主題を含み、前記カプセル管理モジュールは、さらに前記カプセルから第２のファームウェア更新の取り出し、前記パワーマネジメントモジュールは、さらに、前記第２のファームウェア更新の関数として前記モバイル計算デバイスの第２のハードウェアコンポーネントの第２の消費電力設定を決定し、前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントを設定し、前記更新モジュールは、さらに、前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントの設定に応じて前記第２のファームウェア更新を適用する。
【００５７】
実施例１４は実施例１−１３のいずれかの主題を含み、前記第２の消費電力設定の決定は、前記第２のファームウェア更新の関数としての前記モバイル計算デバイスの第２のパワーポリシーの決定と、前記第２のパワーポリシーの関数として前記第２のハードウェアコンポーネントと前記第２の消費電力設定の決定とを含む。
【００５８】
実施例１５は実施例１−１４のいずれかの主題を含み、前記第２のハードウェアコンポーネントは前記ハードウェアコンポーネントを含み、前記第２の消費電力設定は前記消費電力設定とは異なる。
【００５９】
実施例１６は実施例１−１５のいずれかの主題を含み、前記更新モジュールはさらに前記ファームウェア更新の適用に応じて更新状態を示し、前記更新状態は前記オペレーティングシステムによりアクセス可能である。
【００６０】
実施例１７は実施例１−１６のいずれかの主題を含み、前記プリブート環境は前記カプセル管理モジュールと、前記パワーマネジメントモジュールと、前記更新モジュールとを含む。
【００６１】
実施例１８は、プリブート環境においてモバイル計算デバイスのファームウェアを更新する方法であって、前記モバイル計算デバイスが、前記モバイル計算デバイスのオペレーティングシステムにより事前に生成されたカプセルからファームウェア更新を取り出すステップと、前記モバイル計算デバイスが、前記ファームウェア更新の関数として、前記モバイル計算デバイスのハードウェアコンポーネントの消費電力設定を決定するステップと、前記モバイル計算デバイスが、前記消費電力設定に基づいて前記ハードウェアコンポーネントを設定するステップと、前記モバイル計算デバイスが、前記消費電力設定に基づく前記ハードウェアコンポーネントの設定に応じて前記ファームウェア更新を適用するステップとを有する。
【００６２】
実施例１９は実施例１８の主題を含み、前記ファームウェア更新を取り出すはファームウェアドライバを取り出すステップを含み、前記ファームウェア更新を適用するステップは前記ファームウェアドライバのエントリーポイントを実行するステップを含む。
【００６３】
実施例２０は実施例１８−１９のいずれかの主題を含み、前記消費電力設定を決定するステップは、前記ファームウェア更新の関数として前記モバイル計算デバイスのパワーポリシーであって、前記モバイル計算デバイスの複数のハードウェアコンポーネントのパワーレベルを規定するパワーポリシーを決定するステップと、前記パワーポリシーの関数として前記ハードウェアコンポーネントと前記消費電力設定を決定するステップとを含む。
【００６４】
実施例２１は実施例１８−２０のいずれかの主題を含み、前記パワーポリシーを決定するステップは、前記ファームウェア更新の一意識別子に基づき前記パワーポリシーを決定するステップを含む。
【００６５】
実施例２２は実施例１８−２１のいずれかの主題を含み、前記ハードウェアコンポーネントは前記モバイル計算デバイスのペリフェラルデバイスを含む。
【００６６】
実施例２３は実施例１８−２２のいずれかの主題を含み、前記ハードウェアコンポーネントは前記モバイル計算デバイスのデバイスコントローラを有する。
【００６７】
実施例２４は実施例１８−２３のいずれかの主題を含み、前記デバイスコントローラは、シリアルペリフェラルインタフェース（ＳＰＩ）コントローラ、キーボード及びシステムコントローラ（ＫＳＣ）、ネットワークコントローラ、無線ネットワークコントローラ、ニアフィールド通信（ＮＦＣ）コントローラ、エクスプレスカード（ＥＣ）コントローラ、またはユニバーサルシリアルバス（ＵＳＢ）コントローラを含む。
【００６８】
実施例２５は実施例１８−２４のいずれかの主題を含み、前記消費電力設定に基づき前記ハードウェアコンポーネントを設定するステップは、前記ハードウェアコンポーネントの完全動作状態に対して前記ハードウェアコンポーネントの消費電力を低減するステップを含む。
【００６９】
実施例２６は実施例１８−２５のいずれかの主題を含み、前記消費電力設定に基づき前記ハードウェアコンポーネントを設定するステップは、前記ハードウェアコンポーネントの現在の消費電力に対して前記ハードウェアコンポーネントの消費電力を増加するステップを含む。
【００７０】
実施例２７は実施例１８−２６のいずれかの主題を含み、前記ファームウェア更新を適用するステップは、前記モバイル計算デバイスのマネージャビリティエンジンへの前記ファームウェア更新を適用するステップを含む。
【００７１】
実施例２８は実施例１８−２７のいずれかの主題を含み、前記ファームウェア更新を適用するステップは、前記モバイル計算デバイスのデバイスコントローラに前記ファームウェア更新を適用するステップを含む。
【００７２】
実施例２９は実施例１８−２８のいずれかの主題を含み、前記消費電力設定に基づき前記ハードウェアコンポーネントを設定するステップは、前記ハードウェアコンポーネントの完全動作状態に対して前記ハードウェアコンポーネントの消費電力を低減するステップを含む。前記ファームウェア更新を適用するステップは、前記ハードウェアコンポーネントとは異なる前記モバイル計算デバイスの他のハードウェアコンポーネントに前記ファームウェア更新を適用するステップを含む。
【００７３】
実施例３０は実施例１８−２９のいずれかの主題を含み、さらに、前記モバイル計算デバイスが、前記カプセルから第２のファームウェア更新を取り出すステップと、前記モバイル計算デバイスが、前記第２のファームウェア更新の関数として、前記モバイル計算デバイスの第２のハードウェアコンポーネントの第２の消費電力設定を決定するステップと、前記モバイル計算デバイスが、前記第２の消費電力設定に基づいて前記第２のハードウェアコンポーネントを設定するステップと、前記モバイル計算デバイスが、前記第２の消費電力設定に基づく前記第２のハードウェアコンポーネントの設定に応じて前記第２のファームウェア更新を適用するステップとを有する。
【００７４】
実施例３１は実施例１８−３０のいずれかの主題を含み、前記第２の消費電力設定を決定するステップは、前記第２のファームウェア更新の関数として前記モバイル計算デバイスの第２のパワーポリシーを決定するステップと、前記第２のパワーポリシーの関数として前記第２のハードウェアコンポーネントと前記第２の消費電力設定を決定するステップとを含む。
【００７５】
実施例３２は実施例１８−３１のいずれかの主題を含み、前記第２のハードウェアコンポーネントは前記ハードウェアコンポーネントを含み、前記第２の消費電力設定は前記消費電力設定とは異なる。
【００７６】
実施例３３は実施例１８−３２のいずれかの主題を含み、さらに、前記更新モジュールが、前記ファームウェア更新の適用に応じて更新状態を示し、前記更新状態は前記オペレーティングシステムによりアクセス可能である。
【００７７】
実施例３４は実施例１８−３３のいずれかの主題を含み、前記ファームウェア更新を取り出すステップ、前記消費電力設定を決定するステップ、前記ハードウェアコンポーネントを設定するステップ、及び前記ファームウェア更新を適用するステップはすべて前記プリブート環境で生じる。
【００７８】
実施例３５は、計算デバイスであって、プロセッサと、前記プロセッサにより実行されたとき、前記プロセッサに、実施例１８−３４いずれかに記載の方法を実行させる複数の命令を格納したメモリとを有する。
【００７９】
実施例３６は、実行されると、計算デバイスに実施例１８乃至３４いずれかに記載の方法を実行させる複数の命令を格納した一以上の機械読み取り可能記憶媒体を含む。
【００８０】
実施例３７は、実施例１８ないし３４のいずれかに記載の方法を実行する手段を有する計算デバイスを含む。
【図１】
0006272991.tif 000002
【図２】
0006272991.tif 000003
【図３】
0006272991.tif 000004
【図４】
0006272991.tif 000005
【図５】
0006272991.tif 000006