#!/bin/sh

case $1 in
  prereqs)
  echo "udev" 
  exit 0
  ;;
esac

case $ROOT in
  /dev/disk/by-path/*)
  enable="${ROOT#/dev/disk/by-path/}"
  ;;
esac

for x in $(cat /proc/cmdline); do
  case $x in
    enable=*)
    enable="$enable ${x#enable=}"
    ;;
  esac
done

SYSFS=/sys

for dev in $enable; do
  OLDIFS="$IFS"
  IFS="-"
  set -- $dev
  IFS="$OLDIFS"

  [ "$1" = ccw ] || exit 0

  ID="$2"
  DEVPATH="/bus/ccw/devices/$ID"

  read cutype < $SYSFS$DEVPATH/cutype
  read devtype < $SYSFS$DEVPATH/devtype

  case "$cutype" in
    1731/03)
    case "$devtype" in
      1732/03|1732/04)
      name="zfcp"
      ;;
    esac
    ;;
    3990/*|2105/*|9343/*|2107/*|1750/*)
    name="dasd-eckd"
    ;;
    6310/*)
    name="dasd-fba"
    ;;
    3880/*)
    case "$devtype" in
      3370/*)
      name="dasd-fba"
      ;;
      3380/*)
      name="dasd-eckd"
      ;;
    esac
    ;;
  esac

  if [ -z "$name" ]; then
    echo "Invalid device type (cu ${cutype} dev ${devtype}"
    exit 1
  fi

  read _online < $SYSFS$DEVPATH/online
  if [ "$_online" -ne "1" ]; then
    echo 1 > $SYSFS$DEVPATH/online
  fi

  if [ "$name" = zfcp ]; then
    _zfcp_dev="$4"
    _zfcp_wwpn=$(echo $_zfcp_dev | sed -e 's,:.*,,')
    _zfcp_lun=$(echo $_zfcp_dev | sed -e 's,.*:,,')

    if [ ! -d "$SYSFS$DEVPATH/$_zfcp_wwpn" ]; then
      echo "$_zfcp_wwpn" > $SYSFS$DEVPATH/port_add
    fi
    if [ ! -d "$SYSFS$DEVPATH/$_zfcp_wwpn/$_zfcp_lun" ] ; then
      echo "$_zfcp_lun" > $SYSFS$DEVPATH/$_zfcp_wwpn/unit_add
    fi
  fi
done

