#!/bin/sh

# 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.

# This script prints the hardware class (e.g., the hardware
# qualification ID) of this device, or "unknown" if it can't determine
# the hardware class.

# 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
  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() {
  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
}

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 $@
