docs: def addLOADDEV(rh):
      """
      Sets the LOADDEV statement in the virtual machine's directory entry.
  
      Input:
         Request Handle with the following properties:
            function    - 'CHANGEVM'
            subfunction - 'ADDLOADDEV'
            userid      - userid of the virtual machine
            parms['boot']       - Boot program number
            parms['addr']       - Logical block address of the boot record
            parms['lun']        - One to eight-byte logical unit number
                                  of the FCP-I/O device.
            parms['wwpn']       - World-Wide Port Number
            parms['scpDataType'] - SCP data type
            parms['scpData']    - Designates information to be passed to the
                                  program is loaded during guest IPL.
  
            Note that any of the parms may be left blank, in which case
            we will not update them.
  
  
      Output:
         Request Handle updated with the results.
         Return code - 0: ok, non-zero: error
      """
      rh.printSysLog("Enter changeVM.addLOADDEV")
  
      # scpDataType and scpData must appear or disappear concurrently
      if ('scpData' in rh.parms and 'scpDataType' not in rh.parms):
          msg = msgs.msg['0014'][1] % (modId, "scpData", "scpDataType")
          rh.printLn("ES", msg)
          rh.updateResults(msgs.msg['0014'][0])
          return
      if ('scpDataType' in rh.parms and 'scpData' not in rh.parms):
          if rh.parms['scpDataType'].lower() == "delete":
              scpDataType = 1
          else:
              # scpDataType and scpData must appear or disappear
              # concurrently unless we're deleting data
              msg = msgs.msg['0014'][1] % (modId, "scpDataType", "scpData")
              rh.printLn("ES", msg)
              rh.updateResults(msgs.msg['0014'][0])
              return
  
      scpData = ""
      if 'scpDataType' in rh.parms:
          if rh.parms['scpDataType'].lower() == "hex":
              scpData = rh.parms['scpData']
              scpDataType = 3
          elif rh.parms['scpDataType'].lower() == "ebcdic":
              scpData = rh.parms['scpData']
              scpDataType = 2
          # scpDataType not hex, ebcdic or delete
          elif rh.parms['scpDataType'].lower() != "delete":
              msg = msgs.msg['0016'][1] % (modId, rh.parms['scpDataType'])
              rh.printLn("ES", msg)
              rh.updateResults(msgs.msg['0016'][0])
              return
      else:
          # Not specified, 0 for do nothing
          scpDataType = 0
          scpData = ""
  
      if 'boot' not in rh.parms:
          boot = ""
      else:
          boot = rh.parms['boot']
      if 'addr' not in rh.parms:
          block = ""
      else:
          block = rh.parms['addr']
      if 'lun' not in rh.parms:
          lun = ""
      else:
          lun = rh.parms['lun']
          # Make sure it doesn't have the 0x prefix
          lun.replace("0x", "")
      if 'wwpn' not in rh.parms:
          wwpn = ""
      else:
          wwpn = rh.parms['wwpn']
          # Make sure it doesn't have the 0x prefix
          wwpn.replace("0x", "")
  
      parms = [
          "-T", rh.userid,
          "-b", boot,
          "-k", block,
          "-l", lun,
          "-p", wwpn,
          "-s", str(scpDataType)]
  
      if scpData != "":
          parms.extend(["-d", scpData])
  
      results = invokeSMCLI(rh, "Image_SCSI_Characteristics_Define_DM", parms)
  
      # SMAPI API failed.
      if results['overallRC'] != 0:
          rh.printLn("ES", results['response'])
          rh.updateResults(results)
  
      rh.printSysLog("Exit changeVM.addLOADDEV, rc: " +
                     str(rh.results['overallRC']))
      return rh.results['overallRC']