#!/bin/sh
#
# Copyright IBM Corp. 2016, 2017
#
# s390-tools is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
#
# hooks/s390-tools-zdev
#   This hook script adds files required to apply firmware-provided I/O
#   configuration data during boot.
#

# Needs to run after udev or resulting udev rules could be overwritten
PREREQ="udev"

prereqs()
{
	echo "$PREREQ"
}

case $1 in
	prereqs)
	prereqs
	exit 0
	;;
esac

. /usr/share/initramfs-tools/hook-functions

# Add modules for all device types supported by chzdev (required for
# auto-configuration)
zdev_modules="qeth qeth_l2 qeth_l3 dasd_mod dasd_eckd_mod dasd_fba_mod dasd_diag_mod zfcp"

for x in $zdev_modules ; do
	manual_add_modules ${x}
done

copy_exec /sbin/chzdev
copy_exec /sbin/lszdev
copy_exec /sbin/vmcp
copy_exec /lib/s390-tools/zdev_id

cp -p /usr/lib/udev/rules.d/81-dpm.rules "$DESTDIR/usr/lib/udev/rules.d/"

_tempfile=$(mktemp --tmpdir initramfs-zdev.XXXXXX)

# Obtain early + root device configuration
chzdev --export - --active --by-path / --quiet 2>/dev/null |
	sed -e 's/active/persistent/g' > "$_tempfile"
chzdev --export - --persistent --by-path / --by-attrib "zdev:early=1" \
	--quiet --type 2>/dev/null >>"$_tempfile"

# Apply via --import to prevent other devices from being configured.
# Rename the resulting cio-ignore rule to ensure that it does not override
# the one copied by the initramfs udev hook to /lib/udev.
chzdev --import "$_tempfile" --persistent \
       --base "/etc/udev/rules.d/41-cio-ignore.rules=$DESTDIR/etc/udev/rules.d/41-cio-ignore-root.rules" \
       --base "/etc=$DESTDIR/etc" --yes --quiet --no-root-update --force \
       >/dev/null

rm -f "$_tempfile"
