]>
git.ipfire.org Git - thirdparty/dracut.git/blob - modules.d/80cms/cmssetup.sh
37fd84ee3275483715b73ddc630052cd6320f021
2 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3 # ex: ts=8 sw=4 sts=4 et filetype=sh
5 type getarg
>/dev
/null
2>&1 || .
/lib
/dracut-lib.sh
11 while [ $i -le 10 ] ; do
12 if [ ! -f "$file" ]; then
21 if [[ ! $status == $
* ]]; then
22 [ -f "$file" ] && echo $
* > "$file"
26 function dasd_settle
() {
27 local dasd_status
=/sys
/bus
/ccw
/devices
/$1/status
28 if [ ! -f $dasd_status ]; then
32 while [ $i -le 60 ] ; do
34 read status
< $dasd_status
46 function dasd_settle_all
() {
47 for dasdccw
in $
(while read line
; do echo ${line%%(*}; done < /proc
/dasd
/devices
) ; do
48 if ! dasd_settle
$dasdccw ; then
49 echo $
"Could not access DASD $dasdccw in time"
56 # prints a canonocalized device bus ID for a given devno of any format
57 function canonicalize_devno
()
60 3) echo "0.0.0${1}" ;;
67 # read file from CMS and write it to /tmp
68 function readcmsfile
() # $1=dasdport $2=filename
74 if [ $# -ne 2 ]; then return; fi
75 # precondition: udevd created dasda block device node
76 if ! dasd_cio_free
-d $1 ; then
77 echo $
"DASD $1 could not be cleared from device blacklist"
81 modprobe dasd_mod dasd
=$CMSDASD
82 modprobe dasd_eckd_mod
85 # precondition: dasd_eckd_mod driver incl. dependencies loaded,
86 # dasd_mod must be loaded without setting any DASD online
87 dev
=$
(canonicalize_devno
$1)
90 if strstr
"$line" "# processors"; then
97 if [ ${numcpus} -eq 1 ]; then
98 echo 1 > /sys
/bus
/ccw
/devices
/$dev/online
100 if ! sysecho
/sys
/bus
/ccw
/devices
/$dev/online
1; then
101 echo $
"DASD $dev could not be set online"
105 if ! dasd_settle
$dev ; then
106 echo $
"Could not access DASD $dev in time"
113 devname
=$
(cd /sys
/bus
/ccw
/devices
/$dev/block
; set -- *; [ -b /dev
/$1 ] && echo $1)
114 devname
=${devname:-dasda}
116 [[ -d /mnt
]] || mkdir
/mnt
117 if cmsfs-fuse
--to=UTF-8
-a /dev
/$devname /mnt
; then
118 cat /mnt
/$2 > /run
/initramfs
/$2
119 umount
/mnt || umount
-l /mnt
122 echo $
"Could not read conf file $2 on CMS DASD $1."
126 if ! sysecho
/sys
/bus
/ccw
/devices
/$dev/online
0; then
127 echo $
"DASD $dev could not be set offline again"
132 # unbind all dasds to unload the dasd modules for a clean start
133 ( cd /sys
/bus
/ccw
/drivers
/dasd-eckd
; for i
in *.
*; do echo $i > unbind
;done)
135 modprobe
-r dasd_eckd_mod
137 modprobe
-r dasd_diag_mod
148 if [[ $NETTYPE ]]; then
150 echo -n $NETTYPE,$SUBCHANNELS
151 [[ $PORTNAME ]] && echo -n ",portname=$PORTNAME"
152 [[ $LAYER2 ]] && echo -n ",layer2=$LAYER2"
153 [[ "$NETTYPE" = "ctc" ]] && [[ $CTCPROT ]] && echo -n ",protocol=$CTCPROT"
159 read -a subch_array
<<< "indexzero,$SUBCHANNELS"
161 devbusid
=${subch_array[1]}
162 if [ "$NETTYPE" = "ctc" ]; then
168 printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", KERNELS=="%s", ENV{INTERFACE}=="?*", RUN+="/sbin/initqueue --onetime --unique --name cmsifup-$env{INTERFACE} /sbin/cmsifup $env{INTERFACE}"\n' "$driver" "$devbusid" > /etc
/udev
/rules.d
/99-cms.rules
169 # remove the default net rules
170 rm -f /etc
/udev
/rules.d
/91-default-net.rules
171 [[ -f /etc
/udev
/rules.d
/90-net.rules
]] \
172 ||
printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$env{INTERFACE} source_hook initqueue/online"\n' >> /etc
/udev
/rules.d
/99-cms.rules
173 udevadm control
--reload
178 echo $DASD | normalize_dasd_arg
> /etc
/dasd.conf
179 echo "options dasd_mod dasd=$DASD" > /etc
/modprobe.d
/dasd_mod.conf
184 for i
in ${!FCP_*}; do
185 echo "${!i}" >> /etc
/zfcp.conf
188 [[ $_do_zfcp ]] && zfcp_cio_free
192 [[ $CMSDASD ]] || CMSDASD
=$
(getarg
"CMSDASD=")
193 [[ $CMSCONFFILE ]] || CMSCONFFILE
=$
(getarg
"CMSCONFFILE=")
195 # Parse configuration
196 if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then
197 if readcmsfile
$CMSDASD $CMSCONFFILE; then
198 ln -s /run
/initramfs
/$CMSCONFFILE /tmp
/$CMSCONFFILE
199 ln -s /run
/initramfs
/$CMSCONFFILE /tmp
/cms.conf