#!/bin/bash -f

# Copyright(c) 2017        Intel Deutschland GmbH
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the distribution.
# Neither the name Intel Corporation nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

if [ $? -ne 0 ]; then
  exit 2
fi

LOGDIR_BASE=/var/log

current_time="$(date +%s)"
timestamp_file="${LOGDIR_BASE}/last_iwlwifi_dump_time"
if [ -f "${timestamp_file}" ]; then
  last_time="$(cat ${timestamp_file})"
  time_since_last="$((${current_time} - ${last_time}))"
  if [ "${time_since_last}" -lt 300 ]; then
    # A dump started within the last five minutes.
    logger -t fwdump \
        "Dump occurred ${time_since_last} seconds ago, not starting another"
    exit 1
  fi
fi

echo "${current_time}" > "${timestamp_file}"
filename="${LOGDIR_BASE}/iwl-fw-error.dump"

logger -t fwdump "Saving debug dump to ${filename}"

cat "/sys/${DEVPATH}/data" > "${filename}"

start iwlwifi-dump-processor DUMP_FILE_PATH="${filename}"
