home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / etc / sysconfig / hardware / scripts / hwup-ccw < prev    next >
Text File  |  2006-11-29  |  7KB  |  272 lines

  1. #!/bin/bash
  2. #
  3. # Configures a ccw interface.
  4. # $Id: hwup-ccw 1415 2006-02-16 09:16:36Z hare $
  5. #
  6. # Detects all ccw devices as per modules.ccwmap
  7. # (current as of 2.6.5)
  8. #
  9. # Should be called from /sbin/hwup with the
  10. # hardware configuration as argument
  11. #
  12. # The hardware configuration should look like
  13. # <type>-bus-<bus>-<id>
  14. # e.g.
  15. # 'hwup-ccw dasd-bus-ccw-0.0.0190'
  16. # Programs called from this script:
  17. #  echo
  18. #  test
  19. #
  20.  
  21. SCRIPTNAME=${0##*/}
  22. CONFIG=$1
  23. HWDESC=$2
  24.  
  25. # Read in common functions
  26. . ./scripts/functions
  27. test -r ./config && . ./config
  28.  
  29. if test -z "$SYSFS"; then
  30.     message "sysfs not mounted, aborting."
  31.     exit 1
  32. fi
  33.  
  34. # Read in the configuration file
  35. . ./hwcfg-${CONFIG}
  36.  
  37. # Set defaults
  38. if [ -z "$HWD_DEVICEPATH" ]; then
  39.     HWD_DEVICEPATH=${SYSFS}/bus/ccw/devices/${HWD_BUSID}
  40. fi
  41.  
  42. if [ ! -d "$HWD_DEVICEPATH" ]; then
  43.     message "No hardware devicepath given, cannot configure"
  44.     exit 1
  45. fi
  46.  
  47. # Check for the attached control unit and device type
  48. read _cu_type < $HWD_DEVICEPATH/cutype
  49. read _dev_type < $HWD_DEVICEPATH/devtype
  50.  
  51. #
  52. # This checks for all known control units and device types.
  53. # Information is from /lib/modules/<kversion>/modules.ccwmap
  54. #
  55. if [ -z "$CCW_CHAN_NAME" ] ; then
  56.     CCW_CHAN_GROUP=
  57.     CCW_CHAN_NUM=
  58.     case "$_cu_type" in
  59.     3088/01)
  60.         # P/390 network adapter
  61.         CCW_CHAN_NAME="cu3088"
  62.         CCW_CHAN_GROUP="lcs"
  63.         CCW_CHAN_NUM=2
  64.         ;;
  65.     3088/08)
  66.         # Channel To Channel
  67.         CCW_CHAN_NAME="cu3088"
  68.         CCW_CHAN_GROUP="ctc"
  69.         CCW_CHAN_NUM=2
  70.         ;;
  71.     3088/1e)
  72.         # FICON adapter
  73.         CCW_CHAN_NAME="cu3088"
  74.         CCW_CHAN_GROUP="ctc"
  75.         CCW_CHAN_NUM=2
  76.         ;;
  77.     3088/1f)
  78.         # ESCON adapter (I.e. hardware CTC device)
  79.         CCW_CHAN_NAME="cu3088"
  80.         CCW_CHAN_GROUP="ctc"
  81.         CCW_CHAN_NUM=2
  82.         ;;
  83.     3088/60)
  84.         # Lan Control Station
  85.         CCW_CHAN_NAME="cu3088"
  86.         CCW_CHAN_GROUP="lcs"
  87.         CCW_CHAN_NUM=2
  88.         ;;
  89.     1731/01|1731/05|1731/06)
  90.         # OSA/Express or Guest LAN
  91.         CCW_CHAN_NAME="qeth"
  92.         CCW_CHAN_NUM=3
  93.         ;;
  94.     1731/03)
  95.         # zFCP adapter
  96.         if [ "$_dev_type" == "1732/03" -o "$_dev_type" == "1732/04" ]; then
  97.         CCW_CHAN_NAME="zfcp"
  98.         else
  99.         CCW_CHAN_NAME=
  100.         fi
  101.         ;;
  102.     3480/*|3490/*)
  103.         # IBM 3480/3490 tape driver
  104.         if [ "$_dev_type" == "$_cu_type" ]; then
  105.         CCW_CHAN_NAME="tape-34xx"
  106.         else
  107.         CCW_CHAN_NAME=
  108.         fi
  109.         ;;
  110.     3990/*|2105/*|9343/*|2107/*|1750/*)
  111.         # DASD (ECKD mode)
  112.         CCW_CHAN_NAME="dasd-eckd"
  113.         ;;
  114.     6310/*)
  115.         # DASD (FBA mode)
  116.         CCW_CHAN_NAME="dasd-fba"
  117.         ;;
  118.     3880/*)
  119.         case "$_dev_type" in
  120.         3390/*)
  121.                 # DASD (ECKD mode)
  122.             CCW_CHAN_NAME="dasd-eckd"
  123.             ;;
  124.         3370/*)
  125.                 # DASD (FBA mode)
  126.             CCW_CHAN_NAME="dasd-fba"
  127.             ;;
  128.         *)
  129.             CCW_CHAN_NAME=
  130.             ;;
  131.         esac
  132.         ;;
  133.     *)
  134.         CCW_CHAN_NAME=
  135.         ;;
  136.     esac
  137. fi
  138.  
  139. # Unknown device
  140. if [ -z "$CCW_CHAN_NAME" ]; then
  141.     message "Invalid device type (cu ${_cu_type} dev ${_dev_type}"
  142.     exit 1
  143. fi
  144.  
  145. # Set defaults
  146. if test -z "$CCW_CHAN_GROUP"; then
  147.     CCW_CHAN_GROUP="$CCW_CHAN_NAME"
  148. fi
  149. if test -z "$CCW_CHAN_NUM"; then
  150.     CCW_CHAN_NUM="1"
  151. fi
  152. if test -z "$CCW_CHAN_IDS"; then
  153.     CCW_CHAN_IDS="$HWD_BUSID"
  154. fi
  155. CCW_USE_DIAG=0
  156. if test "$CCW_CHAN_NAME" = "dasd-eckd" -o "$CCW_CHAN_NAME" = "dasd-fba"; then
  157.     if test "$DASD_USE_DIAG" && test "$DASD_USE_DIAG" -eq 1 ; then
  158.     CCW_USE_DIAG=1
  159.     fi
  160. fi
  161.  
  162. # Set sysfs paths
  163. _ccw_dir=${SYSFS}/bus/ccw/drivers/${CCW_CHAN_NAME}
  164. _ccwgroup_dir=${SYSFS}/bus/ccwgroup/drivers/${CCW_CHAN_GROUP}
  165.  
  166. if [ -z "$CCW_CHAN_IDS" ] ; then
  167.     message "no channel IDs given"
  168.     exit 1
  169. fi
  170.  
  171. # Checking channel availability
  172.  
  173. # Check whether we need to configure the channel group
  174. if test "$CCW_CHAN_NUM" -gt 1 ; then
  175.     set -- $CCW_CHAN_IDS
  176.     CCW_CHAN_GROUPID=$1
  177.     
  178.     if test -d "$_ccwgroup_dir/$CCW_CHAN_GROUPID" ; then
  179.     # Device group already configured
  180.     debug "Device group $CCW_CHAN_GROUPID already configured!"
  181.     else
  182.     debug "Checking group ${CCW_CHAN_GROUPID}"
  183.     
  184.         # Check whether all channels for this device are accessible
  185.     num=0
  186.     for _ccw_file in $CCW_CHAN_IDS; do
  187.         if test ! -d "${_ccw_dir}/${_ccw_file}" ; then
  188.         _ccw_group_lst=
  189.         break;
  190.         fi
  191.         _ccw_group_lst="${_ccw_group_lst:-${_ccw_file}}${_ccw_group_lst:+,${_ccw_file}}"
  192.         num=$(($num + 1))
  193.     done
  194.     
  195.         # Configure the channel group
  196.     # Note that the non-existence of channels is not a failure;
  197.     # if we were called during start-up it might well be that
  198.     # not all channels are available yet.
  199.     if test "$num" -lt "$CCW_CHAN_NUM" ; then 
  200.         if test -z "$_ccw_group_lst" ; then
  201.         message "Device group ${CCW_CHAN_GROUPID} not (yet) available!"
  202.         else
  203.         message "Not enough channels for this device!"
  204.         fi
  205.     else
  206.         message "Configuring group ${CCW_CHAN_GROUPID}"
  207.         echo $_ccw_group_lst > $_ccwgroup_dir/group
  208.     fi
  209.     fi
  210. else
  211.     message_n "Configuring device ${CCW_CHAN_IDS}: "
  212.     _ccw_status_dir="$_ccw_dir/$CCW_CHAN_IDS"
  213.     # Set the device online
  214.     if test -d "$_ccw_status_dir" ; then
  215.     read _ccw_dev_online < $_ccw_status_dir/online
  216.     if [ "$_ccw_dev_online" -eq 0 ]; then
  217.         if [ "$CCW_USE_DIAG" -eq 1 ]; then
  218.                 # DIAG access for DASDs
  219.                 # Need to be done prior to activation
  220.         debug "Activating DIAG access mode"
  221.         echo 1 > $_ccw_status_dir/use_diag
  222.         fi
  223.         # Set the device online
  224.         debug "Setting device online"
  225.         echo "1" > $_ccw_status_dir/online
  226.  
  227.             # Re-read device status
  228.         read _ccw_dev_status < $_ccw_status_dir/online
  229.  
  230.         if [ "$CCW_USE_DIAG" -eq 1 ]; then
  231.         # Special handling for DIAG devices:
  232.         # The availability of DIAG access can only be
  233.         # established if the device could be activated.
  234.         # If this fails, we fall back to normal access
  235.         # and ignore any DIAG parameter.
  236.         if [ "$_ccw_dev_status" -eq 0 ]; then
  237.             # Failed to activate device
  238.             message_n "(DIAG not available) "
  239.             echo 0 > $_ccw_status_dir/use_diag
  240.                  # Set the device online
  241.             debug "Setting device online w/o DIAG access"
  242.             echo "1" > $_ccw_status_dir/online
  243.                     # Re-read device status
  244.             read _ccw_dev_status < $_ccw_status_dir/online
  245.         else
  246.             message_n "(DIAG) "
  247.         fi
  248.         fi
  249.         # Special handling for zfcp: might be online but 
  250.         # status might indicate that something went wrong
  251.         if [ -r $_ccw_status_dir/failed ]; then
  252.         read _ccw_dev_status < $_ccw_status_dir/failed
  253.         # Invert the sense
  254.         let _ccw_dev_status^=1
  255.         fi
  256.  
  257.         # Check for success
  258.         if [ "$_ccw_dev_status" -eq 0 ]; then
  259.         # Failed to activate device
  260.         message "failed."
  261.         else
  262.         message "ok."
  263.         fi
  264.     else
  265.         debug "Device already activated"
  266.     fi
  267.     else
  268.     message "not available."
  269.     fi
  270. fi
  271.