File s390-tools-sles11sp3-lscss_add_eadm_support.patch of Package s390-tools

Subject: [PATCH] [FEAT LS1004] s390: Allow SCM access via EADM subchannels
From: Sebastian Ott <sebott@linux.vnet.ibm.com>

Summary:     s390: Allow SCM access via EADM subchannels
Description: With this feature, Linux can access Storage Class
             Memory as a block device.
Upstream-ID: -
Problem-ID:  LS1004

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
---
 zconf/lscss   |   45 +++++++++++++++++++++++++++++++++++++++++----
 zconf/lscss.8 |    4 ++++
 2 files changed, 45 insertions(+), 4 deletions(-)

--- a/zconf/lscss
+++ b/zconf/lscss
@@ -62,6 +62,8 @@ function print_usage() {
 		 		Show IO subchannels. (default)
 		 	--chsc
 		 		Show CHSC subchannels.
+		 	--eadm
+		 		Show EADM subchannels.
 		 	-a|--all
 		 		Show subchannels of all types.
 	EOD
@@ -76,10 +78,11 @@ function print_version()
 
 SUBCHANNEL_TYPE_IO=0
 SUBCHANNEL_TYPE_CHSC=1
+SUBCHANNEL_TYPE_EADM=3
 
 IDFORMAT=[[:xdigit:]]*.[0-3].[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]
 
-unset SCH_IO SCH_CHSC SHOW_AVAIL UPPERCASE SHORTID DEVTYPES DEVRANGE RANGE
+unset SCH_IO SCH_CHSC SCH_EADM SHOW_AVAIL UPPERCASE SHORTID DEVTYPES DEVRANGE RANGE
 shopt -s nocasematch
 shopt -s nullglob
 
@@ -179,9 +182,13 @@ while [ $# -gt 0 ]; do
 	--chsc)
 	    SCH_CHSC=true
 	    ;;
+	--eadm)
+	    SCH_EADM=true
+	    ;;
 	-a|--all)
 	    SCH_IO=true
 	    SCH_CHSC=true
+	    SCH_EADM=true
 	    ;;
 	--avail)
 	    SHOW_AVAIL=true
@@ -209,7 +216,7 @@ if [ $RANGE ] ;then
     parse_ranges $RANGE
 fi
 
-if [ ! \( "$SCH_IO" -o "$SCH_CHSC" \) ] ;then
+if [ ! \( "$SCH_IO" -o "$SCH_CHSC" -o "$SCH_EADM" \) ] ;then
     SCH_IO=true
 fi
 
@@ -343,8 +350,24 @@ function print_chsc()
     done
 }
 
+function print_eadm()
+{
+    list_sch_of_type $SUBCHANNEL_TYPE_EADM |
+    while read DEV ;do
+	SCH=${DEV%/*}
+	SCH=${SCH##*/}
+	if [ $SHORTID ] ;then
+	    if [ ${SCH:0:4} != "0.0." ] ;then
+		continue
+	    fi
+	    SCH=${SCH#0.0.}
+	fi
+	printf "%-8.8s %-8.8s\n" "n/a" $SCH
+    done
+}
+
 if [ $SCH_IO ] ;then
-    if [ "$SCH_CHSC" ] ;then
+    if [ \( "$SCH_CHSC" -o "$SCH_EADM" \) ] ;then
 	echo "IO Subchannels and Devices:"
     fi
     if [ $SHOW_AVAIL ] ;then
@@ -362,7 +385,7 @@ if [ $SCH_IO ] ;then
 fi
 
 if [ $SCH_CHSC ] ;then
-    if [ "$SCH_IO" ] ;then
+    if [ \( "$SCH_IO" -o "$SCH_EADM" \) ] ;then
 	echo
 	echo "CHSC Subchannels:"
     fi
@@ -372,5 +395,19 @@ if [ $SCH_CHSC ] ;then
 	tr "[:lower:]" "[:upper:]"
     else
 	cat -
+    fi
+fi
+
+if [ $SCH_EADM ] ;then
+    if [ \( "$SCH_IO" -o "$SCH_CHSC" \) ] ;then
+	echo
+	echo "EADM Subchannels:"
+    fi
+    echo "Device   Subchan."
+    echo "-----------------"
+    print_eadm | if [ $UPPERCASE ] ;then
+	tr "[:lower:]" "[:upper:]"
+    else
+	cat -
     fi
 fi
--- a/zconf/lscss.8
+++ b/zconf/lscss.8
@@ -61,6 +61,10 @@ Show IO subchannels. (default)
 Show CHSC subchannels.
 
 .TP 8
+.BR --eadm
+Show EADM subchannels.
+
+.TP 8
 .BR -a | --all
 Show subchannels of all types.
 
openSUSE Build Service is sponsored by