xref: /openbmc/openpower-pnor-code-mgmt/ubi/obmc-flash-bios (revision 10e915abf1bd31d8b1dae8d01c731ac8dd76c7c0)
1*10e915abSAdriana Kobylak#!/bin/sh
2*10e915abSAdriana Kobylak
3*10e915abSAdriana Kobylak# Get the mtd device number (mtdX)
4*10e915abSAdriana Kobylakfindmtd() {
5*10e915abSAdriana Kobylak  m="$(grep -xl "$1" /sys/class/mtd/*/name)"
6*10e915abSAdriana Kobylak  m="${m%/name}"
7*10e915abSAdriana Kobylak  m="${m##*/}"
8*10e915abSAdriana Kobylak  echo "${m}"
9*10e915abSAdriana Kobylak}
10*10e915abSAdriana Kobylak
11*10e915abSAdriana Kobylak# Get the ubi device number (ubiX_Y)
12*10e915abSAdriana Kobylakfindubi() {
13*10e915abSAdriana Kobylak  u="$(grep -xl "$1" /sys/class/ubi/ubi?/subsystem/ubi*/name)"
14*10e915abSAdriana Kobylak  u="${u%/name}"
15*10e915abSAdriana Kobylak  u="${u##*/}"
16*10e915abSAdriana Kobylak  echo "${u}"
17*10e915abSAdriana Kobylak}
18*10e915abSAdriana Kobylak
19*10e915abSAdriana Kobylak# Get the mount information
20*10e915abSAdriana Kobylakis_mounted() {
21*10e915abSAdriana Kobylak  grep -q "$1" /proc/mounts
22*10e915abSAdriana Kobylak  return $?
23*10e915abSAdriana Kobylak}
24*10e915abSAdriana Kobylak
25*10e915abSAdriana Kobylak# Attach the pnor mtd device to ubi.
26*10e915abSAdriana Kobylakattach_ubi() {
27*10e915abSAdriana Kobylak  pnormtd="$(findmtd pnor)"
28*10e915abSAdriana Kobylak  pnor="${pnormtd#mtd}"
29*10e915abSAdriana Kobylak  pnordev="/dev/mtd${pnor}"
30*10e915abSAdriana Kobylak
31*10e915abSAdriana Kobylak  if [ -d "/sys/class/ubi/ubi${pnor}" ]; then
32*10e915abSAdriana Kobylak    # Already attached
33*10e915abSAdriana Kobylak    return 0
34*10e915abSAdriana Kobylak  fi
35*10e915abSAdriana Kobylak
36*10e915abSAdriana Kobylak  ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}"
37*10e915abSAdriana Kobylak  rc=$?
38*10e915abSAdriana Kobylak  if [ ${rc} -ne 0 ]; then
39*10e915abSAdriana Kobylak    # Check the pnor mtd device is formatted as ubi by reading the first 3 byes,
40*10e915abSAdriana Kobylak    # which should be the ascii chars 'UBI'
41*10e915abSAdriana Kobylak    magic="$(hexdump -C -n 3 ${pnordev})"
42*10e915abSAdriana Kobylak    if [[ "${magic}" =~ "UBI" ]]; then
43*10e915abSAdriana Kobylak      # Device already formatted as ubi, ubiattach failed for some other reason
44*10e915abSAdriana Kobylak      return ${rc}
45*10e915abSAdriana Kobylak    else
46*10e915abSAdriana Kobylak      # Format device as ubi
47*10e915abSAdriana Kobylak      echo "Starting ubiformat ${pnordev}"
48*10e915abSAdriana Kobylak      ubiformat "${pnordev}" -y -q
49*10e915abSAdriana Kobylak      # Retry the ubiattach
50*10e915abSAdriana Kobylak      ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}"
51*10e915abSAdriana Kobylak    fi
52*10e915abSAdriana Kobylak  fi
53*10e915abSAdriana Kobylak}
54*10e915abSAdriana Kobylak
55*10e915abSAdriana Kobylakmount_squashfs() {
56*10e915abSAdriana Kobylak  pnormtd="$(findmtd pnor)"
57*10e915abSAdriana Kobylak  ubidev="/dev/ubi${pnormtd#mtd}"
58*10e915abSAdriana Kobylak  mountdir="/media/${name}"
59*10e915abSAdriana Kobylak  vol="$(findubi "${name}")"
60*10e915abSAdriana Kobylak  img="/tmp/images/${version}/pnor.xz.squashfs"
61*10e915abSAdriana Kobylak  filesize="$(ls -sh $img | awk -F " " {'print $1'})"
62*10e915abSAdriana Kobylak
63*10e915abSAdriana Kobylak  if is_mounted "${name}"; then
64*10e915abSAdriana Kobylak    echo "${name} is already mounted."
65*10e915abSAdriana Kobylak    return 0
66*10e915abSAdriana Kobylak  fi
67*10e915abSAdriana Kobylak
68*10e915abSAdriana Kobylak  if [ ! -z "${vol}" ]; then
69*10e915abSAdriana Kobylak    ubirmvol "${ubidev}" -N "${name}"
70*10e915abSAdriana Kobylak  fi
71*10e915abSAdriana Kobylak
72*10e915abSAdriana Kobylak  if [ ! -d "${mountdir}" ]; then
73*10e915abSAdriana Kobylak    mkdir "${mountdir}"
74*10e915abSAdriana Kobylak  fi
75*10e915abSAdriana Kobylak
76*10e915abSAdriana Kobylak  # Set size of read-only partition equal to pnor.xz.squashfs
77*10e915abSAdriana Kobylak  ubimkvol "${ubidev}" -N "${name}" -s "${filesize}"KiB --type=static
78*10e915abSAdriana Kobylak  vol="$(findubi "${name}")"
79*10e915abSAdriana Kobylak
80*10e915abSAdriana Kobylak  if [ $? != 0 ]; then
81*10e915abSAdriana Kobylak    echo "Unable to create RO volume!"
82*10e915abSAdriana Kobylak    return 1
83*10e915abSAdriana Kobylak  fi
84*10e915abSAdriana Kobylak
85*10e915abSAdriana Kobylak  ubidevid="${vol#ubi}"
86*10e915abSAdriana Kobylak  ubiupdatevol "/dev/ubi${ubidevid}" "${img}"
87*10e915abSAdriana Kobylak
88*10e915abSAdriana Kobylak  if [ $? != 0 ]; then
89*10e915abSAdriana Kobylak    echo "Unable to update RO volume!"
90*10e915abSAdriana Kobylak    return 1
91*10e915abSAdriana Kobylak  fi
92*10e915abSAdriana Kobylak
93*10e915abSAdriana Kobylak  ubiblock --create "/dev/ubi${ubidevid}"
94*10e915abSAdriana Kobylak
95*10e915abSAdriana Kobylak  if [ $? != 0 ]; then
96*10e915abSAdriana Kobylak    echo "Unable to create UBI block for RO volume!"
97*10e915abSAdriana Kobylak    return 1
98*10e915abSAdriana Kobylak  fi
99*10e915abSAdriana Kobylak
100*10e915abSAdriana Kobylak  mount -t squashfs -o ro "/dev/ubiblock${ubidevid}" "${mountdir}"
101*10e915abSAdriana Kobylak
102*10e915abSAdriana Kobylak  if [ $? != 0 ]; then
103*10e915abSAdriana Kobylak    echo "Unable to mount RO volume!"
104*10e915abSAdriana Kobylak    return 1
105*10e915abSAdriana Kobylak  fi
106*10e915abSAdriana Kobylak}
107*10e915abSAdriana Kobylak
108*10e915abSAdriana Kobylakmount_ubi() {
109*10e915abSAdriana Kobylak  pnormtd="$(findmtd pnor)"
110*10e915abSAdriana Kobylak  pnor="${pnormtd#mtd}"
111*10e915abSAdriana Kobylak  ubidev="/dev/ubi${pnor}"
112*10e915abSAdriana Kobylak  pnordev="/dev/mtd${pnor}"
113*10e915abSAdriana Kobylak
114*10e915abSAdriana Kobylak  if [[ "${name}" == "pnor-patch" ]]; then
115*10e915abSAdriana Kobylak    if [[ "$(fw_printenv fieldmode 2>/dev/null)" == "fieldmode=true" ]]; then
116*10e915abSAdriana Kobylak      return 0
117*10e915abSAdriana Kobylak    fi
118*10e915abSAdriana Kobylak    if [[ ! "$(hexdump -C -n 3 ${pnordev})" =~ "UBI" ]]; then
119*10e915abSAdriana Kobylak      return 0
120*10e915abSAdriana Kobylak    fi
121*10e915abSAdriana Kobylak    mountdir="/usr/local/share/pnor"
122*10e915abSAdriana Kobylak  else
123*10e915abSAdriana Kobylak    mountdir="/media/${name}"
124*10e915abSAdriana Kobylak  fi
125*10e915abSAdriana Kobylak
126*10e915abSAdriana Kobylak  if [[ "${name}" == "pnor-prsv" ]]; then
127*10e915abSAdriana Kobylak    size="2MiB"
128*10e915abSAdriana Kobylak  else
129*10e915abSAdriana Kobylak    size="16MiB"
130*10e915abSAdriana Kobylak  fi
131*10e915abSAdriana Kobylak
132*10e915abSAdriana Kobylak  if [ ! -d "${mountdir}" ]; then
133*10e915abSAdriana Kobylak    mkdir -p "${mountdir}"
134*10e915abSAdriana Kobylak  fi
135*10e915abSAdriana Kobylak
136*10e915abSAdriana Kobylak  vol="$(findubi "${name}")"
137*10e915abSAdriana Kobylak  if [ -z "${vol}" ]; then
138*10e915abSAdriana Kobylak    ubimkvol "${ubidev}" -N "${name}" -s "${size}"
139*10e915abSAdriana Kobylak  fi
140*10e915abSAdriana Kobylak
141*10e915abSAdriana Kobylak  if ! is_mounted "${name}"; then
142*10e915abSAdriana Kobylak    mountdev="ubi${pnor}:${name}"
143*10e915abSAdriana Kobylak    mount -t ubifs "${mountdev}" "${mountdir}"
144*10e915abSAdriana Kobylak  fi
145*10e915abSAdriana Kobylak}
146*10e915abSAdriana Kobylak
147*10e915abSAdriana Kobylakumount_ubi() {
148*10e915abSAdriana Kobylak  pnormtd="$(findmtd pnor)"
149*10e915abSAdriana Kobylak  pnor="${pnormtd#mtd}"
150*10e915abSAdriana Kobylak  ubidev="/dev/ubi${pnor}"
151*10e915abSAdriana Kobylak  mountdir="/media/${name}"
152*10e915abSAdriana Kobylak
153*10e915abSAdriana Kobylak  if is_mounted "${name}"; then
154*10e915abSAdriana Kobylak    umount "${mountdir}"
155*10e915abSAdriana Kobylak  fi
156*10e915abSAdriana Kobylak
157*10e915abSAdriana Kobylak  vol="$(findubi "${name}")"
158*10e915abSAdriana Kobylak  id="${vol##*_}"
159*10e915abSAdriana Kobylak  if [ -n "${id}" ]; then
160*10e915abSAdriana Kobylak    ubirmvol "${ubidev}" -n "${id}"
161*10e915abSAdriana Kobylak  fi
162*10e915abSAdriana Kobylak
163*10e915abSAdriana Kobylak  if [ -d "${mountdir}" ]; then
164*10e915abSAdriana Kobylak    rm -r "${mountdir}"
165*10e915abSAdriana Kobylak  fi
166*10e915abSAdriana Kobylak}
167*10e915abSAdriana Kobylak
168*10e915abSAdriana Kobylakremount_ubi() {
169*10e915abSAdriana Kobylak  pnormtd="$(findmtd pnor)"
170*10e915abSAdriana Kobylak  pnor="${pnormtd#mtd}"
171*10e915abSAdriana Kobylak  pnordev="/dev/mtd${pnor}"
172*10e915abSAdriana Kobylak
173*10e915abSAdriana Kobylak  # Re-Attach the pnor mtd device to ubi
174*10e915abSAdriana Kobylak  if [[ $(hexdump -C -n 3 ${pnordev}) =~ "UBI" ]]; then
175*10e915abSAdriana Kobylak    ubiattach /dev/ubi_ctrl -m "${pnor}" -d "${pnor}"
176*10e915abSAdriana Kobylak  else
177*10e915abSAdriana Kobylak    # Device not formatted as ubi.
178*10e915abSAdriana Kobylak    return 0
179*10e915abSAdriana Kobylak  fi
180*10e915abSAdriana Kobylak
181*10e915abSAdriana Kobylak  # Get information on all ubi volumes
182*10e915abSAdriana Kobylak  ubinfo=$(ubinfo -d ${pnor})
183*10e915abSAdriana Kobylak  presentVolumes=${ubinfo##*:}
184*10e915abSAdriana Kobylak  IFS=', ' read -r -a array <<< "$presentVolumes"
185*10e915abSAdriana Kobylak  for element in ${array[@]};
186*10e915abSAdriana Kobylak  do
187*10e915abSAdriana Kobylak    elementProperties=$(ubinfo -d $pnor -n $element)
188*10e915abSAdriana Kobylak    # Get ubi volume name by getting rid of additional properties
189*10e915abSAdriana Kobylak    name=${elementProperties#*Name:}
190*10e915abSAdriana Kobylak    name="${name%Character*}"
191*10e915abSAdriana Kobylak    name="$(echo -e "${name}" | tr -d '[:space:]')"
192*10e915abSAdriana Kobylak
193*10e915abSAdriana Kobylak    if [[ ${name} == pnor-prsv ]] || [[ ${name} == pnor-rw* ]] || [[ ${name} == pnor-ro* ]]; then
194*10e915abSAdriana Kobylak      mountdir="/media/${name}"
195*10e915abSAdriana Kobylak      if [ ! -d "${mountdir}" ]; then
196*10e915abSAdriana Kobylak        mkdir -p "${mountdir}"
197*10e915abSAdriana Kobylak      fi
198*10e915abSAdriana Kobylak
199*10e915abSAdriana Kobylak      if [[ ${name} == pnor-ro* ]]
200*10e915abSAdriana Kobylak      then
201*10e915abSAdriana Kobylak        ubiblock --create /dev/ubi${pnor}_${element}
202*10e915abSAdriana Kobylak        mount -t squashfs -o ro "/dev/ubiblock${pnor}_${element}" "${mountdir}"
203*10e915abSAdriana Kobylak      else
204*10e915abSAdriana Kobylak        mount -t ubifs "ubi${pnor}:${name}" "${mountdir}"
205*10e915abSAdriana Kobylak      fi
206*10e915abSAdriana Kobylak    fi
207*10e915abSAdriana Kobylak  done
208*10e915abSAdriana Kobylak}
209*10e915abSAdriana Kobylak
210*10e915abSAdriana Kobylakupdate_symlinks() {
211*10e915abSAdriana Kobylak  PNOR_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/"
212*10e915abSAdriana Kobylak  PNOR_RO_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/ro"
213*10e915abSAdriana Kobylak  PNOR_RO_PREFIX="/media/pnor-ro-"
214*10e915abSAdriana Kobylak  PNOR_RW_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/rw"
215*10e915abSAdriana Kobylak  PNOR_RW_PREFIX="/media/pnor-rw-"
216*10e915abSAdriana Kobylak  PNOR_PRSV_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/prsv"
217*10e915abSAdriana Kobylak  PNOR_PRSV="/media/pnor-prsv"
218*10e915abSAdriana Kobylak  PERSISTENCE_PATH="/var/lib/obmc/openpower-pnor-code-mgmt/"
219*10e915abSAdriana Kobylak  PNOR_PATCH_LOCATION="/usr/local/share/pnor/"
220*10e915abSAdriana Kobylak
221*10e915abSAdriana Kobylak  # Get a list of all active PNOR versions
222*10e915abSAdriana Kobylak  data="$(ls -d ${PNOR_RO_PREFIX}*)"
223*10e915abSAdriana Kobylak  IFS=$'\n'  array=(${data})
224*10e915abSAdriana Kobylak
225*10e915abSAdriana Kobylak  currentVersion=""
226*10e915abSAdriana Kobylak  lowestPriority=255
227*10e915abSAdriana Kobylak  for element in ${array[@]}; do
228*10e915abSAdriana Kobylak    #Remove the PNOR_RO_PREFIX from the path to get version ID.
229*10e915abSAdriana Kobylak    versionId="${element#${PNOR_RO_PREFIX}}"
230*10e915abSAdriana Kobylak
231*10e915abSAdriana Kobylak    # Get the priority of active versions from persistence files.
232*10e915abSAdriana Kobylak    if [[ -f "${PERSISTENCE_PATH}${versionId}" ]]; then
233*10e915abSAdriana Kobylak      data="$(grep -r "priority" ${PERSISTENCE_PATH}${versionId})"
234*10e915abSAdriana Kobylak      priority="${data: -1}"
235*10e915abSAdriana Kobylak      if [[ priority -le lowestPriority  ]]; then
236*10e915abSAdriana Kobylak        lowestPriority=${priority}
237*10e915abSAdriana Kobylak        currentVersion=${versionId}
238*10e915abSAdriana Kobylak      fi
239*10e915abSAdriana Kobylak    fi
240*10e915abSAdriana Kobylak  done
241*10e915abSAdriana Kobylak
242*10e915abSAdriana Kobylak  # Return if no active version found
243*10e915abSAdriana Kobylak  if [ -z $currentVersion ]; then
244*10e915abSAdriana Kobylak    return 0;
245*10e915abSAdriana Kobylak  fi
246*10e915abSAdriana Kobylak
247*10e915abSAdriana Kobylak  if [ ! -d "${PNOR_ACTIVE_PATH}" ]; then
248*10e915abSAdriana Kobylak        mkdir -p "${PNOR_ACTIVE_PATH}"
249*10e915abSAdriana Kobylak  fi
250*10e915abSAdriana Kobylak
251*10e915abSAdriana Kobylak  # If the RW or RO active links doesn't point to the version with
252*10e915abSAdriana Kobylak  # lowest priority, then remove the symlink and create new ones.
253*10e915abSAdriana Kobylak  if [[ $(readlink -f "${PNOR_RO_ACTIVE_PATH}") != ${PNOR_RO_PREFIX}${currentVersion}  ]]; then
254*10e915abSAdriana Kobylak    rm -f ${PNOR_RO_ACTIVE_PATH}
255*10e915abSAdriana Kobylak    rm -rf ${PNOR_PATCH_LOCATION}*
256*10e915abSAdriana Kobylak    ln -sfv ${PNOR_RO_PREFIX}${currentVersion} ${PNOR_RO_ACTIVE_PATH}
257*10e915abSAdriana Kobylak  fi
258*10e915abSAdriana Kobylak
259*10e915abSAdriana Kobylak  if [[ $(readlink -f "${PNOR_RW_ACTIVE_PATH}") != ${PNOR_RW_PREFIX}${currentVersion}  ]]; then
260*10e915abSAdriana Kobylak    rm -f ${PNOR_RW_ACTIVE_PATH}
261*10e915abSAdriana Kobylak    ln -sfv ${PNOR_RW_PREFIX}${currentVersion} ${PNOR_RW_ACTIVE_PATH}
262*10e915abSAdriana Kobylak  fi
263*10e915abSAdriana Kobylak
264*10e915abSAdriana Kobylak  if [[ ! -h ${PNOR_PRSV_ACTIVE_PATH}  ]]; then
265*10e915abSAdriana Kobylak    ln -sfv ${PNOR_PRSV} ${PNOR_PRSV_ACTIVE_PATH}
266*10e915abSAdriana Kobylak  fi
267*10e915abSAdriana Kobylak}
268*10e915abSAdriana Kobylak
269*10e915abSAdriana Kobylakubi_cleanup() {
270*10e915abSAdriana Kobylak    # When ubi_cleanup is run, it expects one or no active version.
271*10e915abSAdriana Kobylak    activeVersion=$(busctl --list --no-pager tree \
272*10e915abSAdriana Kobylak            org.open_power.Software.Host.Updater | \
273*10e915abSAdriana Kobylak            grep /xyz/openbmc_project/software/ | tail -c 9)
274*10e915abSAdriana Kobylak
275*10e915abSAdriana Kobylak    if [[ -z "$activeVersion" ]]; then
276*10e915abSAdriana Kobylak        vols=$(ubinfo -a | grep -e "pnor-ro-" -e "pnor-rw-" | cut -c 14-)
277*10e915abSAdriana Kobylak        vols=(${vols})
278*10e915abSAdriana Kobylak    else
279*10e915abSAdriana Kobylak        vols=$(ubinfo -a | grep -e "pnor-ro-" -e "pnor-rw-" | \
280*10e915abSAdriana Kobylak                grep -v "$activeVersion" | cut -c 14-)
281*10e915abSAdriana Kobylak        vols=(${vols})
282*10e915abSAdriana Kobylak    fi
283*10e915abSAdriana Kobylak
284*10e915abSAdriana Kobylak    for (( index=0; index<${#vols[@]}; index++ )); do
285*10e915abSAdriana Kobylak         name=${vols[index]}
286*10e915abSAdriana Kobylak         umount_ubi
287*10e915abSAdriana Kobylak    done
288*10e915abSAdriana Kobylak}
289*10e915abSAdriana Kobylak
290*10e915abSAdriana Kobylakclear_volatile() {
291*10e915abSAdriana Kobylak  service=$(mapper get-service /org/open_power/control/volatile)
292*10e915abSAdriana Kobylak  clearVolatileEnabled=$(busctl get-property $service /org/open_power/control/volatile xyz.openbmc_project.Object.Enable Enabled)
293*10e915abSAdriana Kobylak  if [[ "$clearVolatileEnabled" != "b true" ]]; then
294*10e915abSAdriana Kobylak    return 0
295*10e915abSAdriana Kobylak  fi
296*10e915abSAdriana Kobylak
297*10e915abSAdriana Kobylak  PNOR_TOC_FILE="pnor.toc"
298*10e915abSAdriana Kobylak  PNOR_RO_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/ro/"
299*10e915abSAdriana Kobylak  PNOR_RW_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/rw/"
300*10e915abSAdriana Kobylak  PNOR_PRSV_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/prsv/"
301*10e915abSAdriana Kobylak
302*10e915abSAdriana Kobylak  # toc partition string format:
303*10e915abSAdriana Kobylak  # partition27=HB_VOLATILE,0x02ba9000,0x02bae000,00,ECC,VOLATILE,READWRITE
304*10e915abSAdriana Kobylak  tocFilePath="${PNOR_RO_ACTIVE_PATH}${PNOR_TOC_FILE}"
305*10e915abSAdriana Kobylak  volatiles=($(grep VOLATILE "${tocFilePath}" | grep -Eo '^partition([0-9]+)=([A-Za-z0-9_]+)'))
306*10e915abSAdriana Kobylak  for (( index=0; index<${#volatiles[@]}; index++ )); do
307*10e915abSAdriana Kobylak    volatileName="$(echo ${volatiles[${index}]} | awk -F '=' '{print $2}')"
308*10e915abSAdriana Kobylak
309*10e915abSAdriana Kobylak    rwVolatile="${PNOR_RW_ACTIVE_PATH}${volatileName}"
310*10e915abSAdriana Kobylak    if [ -f "${rwVolatile}" ]; then
311*10e915abSAdriana Kobylak      echo "Clear $rwVolatile"
312*10e915abSAdriana Kobylak      rm "${rwVolatile}"
313*10e915abSAdriana Kobylak    fi
314*10e915abSAdriana Kobylak    prsvVolatile="${PNOR_PRSV_ACTIVE_PATH}${volatileName}"
315*10e915abSAdriana Kobylak    if [ -f "${prsvVolatile}" ]; then
316*10e915abSAdriana Kobylak      echo "Clear $prsvVolatile"
317*10e915abSAdriana Kobylak      rm "${prsvVolatile}"
318*10e915abSAdriana Kobylak    fi
319*10e915abSAdriana Kobylak  done
320*10e915abSAdriana Kobylak  # Always reset the sensor after clearing
321*10e915abSAdriana Kobylak  busctl set-property $service /org/open_power/control/volatile xyz.openbmc_project.Object.Enable Enabled b false
322*10e915abSAdriana Kobylak}
323*10e915abSAdriana Kobylak
324*10e915abSAdriana Kobylakcase "$1" in
325*10e915abSAdriana Kobylak  ubiattach)
326*10e915abSAdriana Kobylak    attach_ubi
327*10e915abSAdriana Kobylak    ;;
328*10e915abSAdriana Kobylak  squashfsmount)
329*10e915abSAdriana Kobylak    name="$2"
330*10e915abSAdriana Kobylak    version="$3"
331*10e915abSAdriana Kobylak    mount_squashfs
332*10e915abSAdriana Kobylak    ;;
333*10e915abSAdriana Kobylak  ubimount)
334*10e915abSAdriana Kobylak    name="$2"
335*10e915abSAdriana Kobylak    mount_ubi
336*10e915abSAdriana Kobylak    ;;
337*10e915abSAdriana Kobylak  ubiumount)
338*10e915abSAdriana Kobylak    name="$2"
339*10e915abSAdriana Kobylak    umount_ubi
340*10e915abSAdriana Kobylak    ;;
341*10e915abSAdriana Kobylak  ubiremount)
342*10e915abSAdriana Kobylak    remount_ubi
343*10e915abSAdriana Kobylak    ;;
344*10e915abSAdriana Kobylak  updatesymlinks)
345*10e915abSAdriana Kobylak    update_symlinks
346*10e915abSAdriana Kobylak    ;;
347*10e915abSAdriana Kobylak  ubicleanup)
348*10e915abSAdriana Kobylak    ubi_cleanup
349*10e915abSAdriana Kobylak    ;;
350*10e915abSAdriana Kobylak  clearvolatile)
351*10e915abSAdriana Kobylak    clear_volatile
352*10e915abSAdriana Kobylak    ;;
353*10e915abSAdriana Kobylak  *)
354*10e915abSAdriana Kobylak    echo "Invalid argument"
355*10e915abSAdriana Kobylak    exit 1
356*10e915abSAdriana Kobylak    ;;
357*10e915abSAdriana Kobylakesac
358*10e915abSAdriana Kobylakrc=$?
359*10e915abSAdriana Kobylakif [ ${rc} -ne 0 ]; then
360*10e915abSAdriana Kobylak  echo "$0: error ${rc}"
361*10e915abSAdriana Kobylak  exit ${rc}
362*10e915abSAdriana Kobylakfi
363