Index: boot_mode.h |
diff --git a/boot_mode.h b/boot_mode.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dfd49782c647d3d0d67bceb30f2980cb0dc1b285 |
--- /dev/null |
+++ b/boot_mode.h |
@@ -0,0 +1,76 @@ |
+// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// |
+// boot_mode uses BINF.0, BINF.1, and CHSW to provide a confident guess as |
+// to the current boot state. |
+#ifndef CROS_BOOT_MODE_BOOT_MODE_H_ |
+#define CROS_BOOT_MODE_BOOT_MODE_H_ |
+ |
+#include <stdio.h> |
+ |
+#include "active_main_firmware.h" |
+#include "bootloader_type.h" |
+#include "developer_switch.h" |
+ |
+namespace cros_boot_mode { |
+ |
+class BootMode { |
+ public: |
+ BootMode(); |
+ virtual ~BootMode(); |
+ |
+ enum Mode { |
+ kUnsupported = -1, |
+ kNormal = 0, |
+ kDeveloper, |
+ // Recovery modes below this line. |
+ kNormalRecovery, |
+ kDeveloperRecovery, |
+ }; |
+ |
+ // Initializes the class by reading from the platform-specific |
+ // implementation. Even if something fails, the class will be in |
+ // a valid state, but the system will appear to be unsupported. |
+ virtual void Initialize(bool unsupported_is_developer, bool use_bootloader); |
+ // Returns a string of [mode][space][modifier(s)] |
+ virtual const char *mode_text() const { |
+ return (mode() >= 0 ? kBootModeText[mode()] : "unsupported"); |
+ } |
+ virtual Mode mode() const { |
+ return mode_; |
+ } |
+ virtual bool recovery() const { |
+ return (mode() >= kNormalRecovery); |
+ } |
+ |
+ // Overrides for swapping out dependencies |
+ // Pointer ownership is not taken in any case. |
+ virtual void set_developer_switch(DeveloperSwitch *ds); |
+ virtual void set_active_main_firmware(ActiveMainFirmware *amf); |
+ virtual void set_bootloader_type(BootloaderType *bt); |
+ virtual const DeveloperSwitch *developer_switch() const { |
+ return developer_switch_; |
+ } |
+ virtual const ActiveMainFirmware *active_main_firmware() const { |
+ return active_main_firmware_; |
+ } |
+ virtual const BootloaderType *bootloader_type() const { |
+ return bootloader_type_; |
+ } |
+ |
+ private: |
+ static const char *kBootModeText[]; |
+ static const size_t kBootModeCount; |
+ DeveloperSwitch default_developer_switch_; |
+ ActiveMainFirmware default_active_main_firmware_; |
+ BootloaderType default_bootloader_type_; |
+ Mode mode_; |
+ DeveloperSwitch *developer_switch_; |
+ ActiveMainFirmware *active_main_firmware_; |
+ BootloaderType *bootloader_type_; |
+}; |
+ |
+} // namespace cros_boot_mode |
+ |
+#endif // CROS_BOOT_MODE_BOOT_MODE_H_ |