#!/bin/sh

# Copyright (c) 2011 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.

# File to store firmware information derived from crossystem.
BIOS_INFO_FILE="/var/log/bios_info.txt"

# Set up bios information for chrome://system and userfeedback
# Need to do this before user can request in chrome
# moved here to keep out of critical boot path

# Function for showing switch info as reported by crossystem
#
# $1 - crossystem parameter
# $2 - string to return if the value is 0
# $3 - string to return if the value is 1
#
# if $(crossystem $1) reports something else - return 'failure'
swstate () {
  case "$(crossystem $1)" in
    (0) echo $2;;
    (1) echo $3;;
    (*) echo 'failure'
  esac
}

# Function for showing boot reason as reported by crossystem.
bootreason () {
  local reason=$(crossystem 'recovery_reason')

  echo -n "($reason): "
  case "$reason" in
    (0)   echo "$(crossystem 'mainfw_type')";;
    (1)   echo 'Legacy firmware recovery request';;
    (2)   echo 'User pressed recovery button';;
    (3)   echo 'Both RW firmware sections invalid';;
    (4)   echo 'S3 resume failed';;
    (5)   echo 'RO firmware reported TPM error';;
    (6)   echo 'Verified boot shared data initialization error';;
    (7)   echo 'S3Resume() test error';;
    (8)   echo 'LoadFirmwareSetup() test error';;
    (8)   echo 'LoadFirmware() test error';;
    (63)  echo 'Unknown RO firmware error';;
    (65)  echo 'User requested recovery at dev warning screen';;
    (66)  echo 'No valid kernel detected';;
    (67)  echo 'Kernel failed signature check';;
    (68)  echo 'RW firmware reported TPM error';;
    (69)  echo 'Developer RW firmware with the developer switch off';;
    (70)  echo 'RW firmware shared data error';;
    (71)  echo 'LoadKernel() test error';;
    (127) echo 'Unknown RW firmware error';;
    (129) echo 'DM verity failure';;
    (191) echo 'Unknown kernel error';;
    (193) echo 'Recovery mode test from user-mode';;
    (255) echo 'Unknown user mode error';;
  esac
}

cat <<END >"${BIOS_INFO_FILE}"
version              | $(crossystem fwid)
ro bios version      | $(crossystem ro_fwid)
Boot switch status:
  Recovery button: $(swstate 'recoverysw_boot' 'released' 'pressed')
  Developer mode:  $(swstate 'devsw_boot' 'not enabled' 'selected')
  RO firmware:     $(swstate 'wpsw_cur' 'writeable' 'protected')
Boot reason $(bootreason)
Boot firmware: $(crossystem 'mainfw_act')
Active EC code: $(crossystem 'ecfw_act')
Raw log:
$(crossystem --all)
END

