#!/usr/bin/env bash
#
# Copyright (C) 2007-2010 by coresystems GmbH
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

rm -rf out
mkdir out

# walk through all ACPI tables with their addresses
# example:
#    RSDT @ 0xcf6794ba
# we can not just dump the tables by their names because some
# machines have double ACPI tables

acpidump | grep "@ 0x" | while read line
do
  NAME=$( echo `echo $line|cut -f1 -d@` )
  FNAME=$( echo $NAME | sed s/\ /_/g |sed s/\!/b/g )
  ADDR=$( echo `echo $line|cut -f2 -d@` )
  if [ "${!FNAME}" == "" ]; then
    eval $FNAME=0
  else
    eval $FNAME=$(( ${!FNAME} + 1 ))
  fi
  printf "Processing table \"$NAME\" at $ADDR ... "
  printf "${!FNAME} tables of that kind found before.\n"

  # acpidump -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.txt
  acpidump -b -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.bin
  if [ "`file -b out/$FNAME-$ADDR-${!FNAME}.bin`" != "ASCII text" ]; then
    iasl -d out/$FNAME-$ADDR-${!FNAME}.bin &>/dev/null
  else
    printf "Skipping $NAME because it was not dumped correctly.\n\n"
  fi

done
