Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c2b4c81 authored by Darin Petkov's avatar Darin Petkov
Browse files

Use the HWID from the firmware as the hardware class, if available.

BUG=3089
TEST=gmerge'd on device, ran with and without an hwid file.

Review URL: http://codereview.chromium.org/2824039
parent d2f284bf
Loading
Loading
Loading
Loading
+44 −24
Original line number Diff line number Diff line
@@ -8,49 +8,69 @@
# qualification ID) of this device, or "unknown" if it can't determine
# the hardware class.

# TODO(petkov): The hardware qualification ID is not available on
# systems yet, so the script uses alternative ways to identify
# different system classes (e.g., the WiFi adapter PCI vendor and
# device IDs). Switch the script to use real hardware qualification ID
# when that becomes available.
# TODO(petkov): If the hardware qualification ID is not available on
# the systems, the script uses alternative ways to identify different
# system classes (e.g., the WiFi adapter PCI vendor and device
# IDs). Switch the script to use only real hardware qualification ID
# when that becomes available on all systems.

HARDWARE_CLASS=
readonly HWID_PATH=/sys/bus/platform/devices/chromeos_acpi/HWID

# Appends a new component ID to the hardware class. Separates IDs with
# dashes.
append_class() {
  [ -n "$1" ] || return
  [ -n "$HARDWARE_CLASS" ] && HARDWARE_CLASS="${HARDWARE_CLASS}-"
  HARDWARE_CLASS="${HARDWARE_CLASS}$1"
}

hwid() {
  [ -r  "$HWID_PATH" ] || return
  local acpihwid
  acpihwid=$(cat "$HWID_PATH")
  [ -n "$acpihwid" ] || return
  append_class "$acpihwid"
}

# Adds the CPU family, model and stepping info, if available, to the
# class.
cpu() {
  [ -r /proc/cpuinfo ] || return
  FAMILY=`grep -m1 '^cpu family' /proc/cpuinfo \
            | sed 's/cpu family\s\+:\s\+\([0-9]\+\)$/\1/'`
  MODEL=`grep -m1 '^model' /proc/cpuinfo \
           | sed 's/model\s\+:\s\+\([0-9]\+\)$/\1/'`
  STEPPING=`grep -m1 '^stepping' /proc/cpuinfo \
              | sed 's/stepping\s\+:\s\+\([0-9]\+\)$/\1/'`
  if [ -n "$FAMILY" ] && [ -n "$MODEL" ] && [ -n "$STEPPING" ]; then
    append_class "cpu/$FAMILY:$MODEL:$STEPPING"
  local family
  family=$(grep -m1 '^cpu family' /proc/cpuinfo \
    | sed 's/cpu family\s\+:\s\+\([0-9]\+\)$/\1/')
  local model
  model=$(grep -m1 '^model' /proc/cpuinfo \
    | sed 's/model\s\+:\s\+\([0-9]\+\)$/\1/')
  local stepping
  stepping=$(grep -m1 '^stepping' /proc/cpuinfo \
    | sed 's/stepping\s\+:\s\+\([0-9]\+\)$/\1/')
  if [ -n "$family" ] && [ -n "$model" ] && [ -n "$stepping" ]; then
    append_class "cpu/$family:$model:$stepping"
  fi
}

# Adds the wlan0 PCI vendor and device ID, if available, to the class.
wlan() {
  WLAN_DEV=/sys/class/net/wlan0/device
  if [ -r $WLAN_DEV/vendor ] && [ -r $WLAN_DEV/device ]; then
    WLAN_ID=`paste -d ':' $WLAN_DEV/vendor $WLAN_DEV/device | sed s/0x//g`
    append_class "wlan0/$WLAN_ID"
  local dev=/sys/class/net/wlan0/device
  if [ -r $dev/vendor ] && [ -r $dev/device ]; then
    local id
    id=$(paste -d ':' $dev/vendor $dev/device | sed s/0x//g)
    append_class "wlan0/$id"
  fi
}


HARDWARE_CLASS=

main() {
  hwid
  # If the HWID is not available, use system component IDs.
  if [ -z "$HARDWARE_CLASS" ]; then
    cpu
    wlan

    [ -z "$HARDWARE_CLASS" ] && HARDWARE_CLASS=unknown
  fi

  echo $HARDWARE_CLASS
}

main $@