func: static uint32_t drc_isolate_physical(sPAPRDRConnector *drc)
  
  {
  
      switch (drc->state) {
  
      case SPAPR_DRC_STATE_PHYSICAL_POWERON:
  
          return RTAS_OUT_SUCCESS; /* Nothing to do */
  
      case SPAPR_DRC_STATE_PHYSICAL_CONFIGURED:
  
          break; /* see below */
  
      case SPAPR_DRC_STATE_PHYSICAL_UNISOLATE:
  
          return RTAS_OUT_PARAM_ERROR; /* not allowed */
  
      default:
  
          g_assert_not_reached();
  
      }
  
  
  
      /* if the guest is configuring a device attached to this DRC, we
  
       * should reset the configuration state at this point since it may
  
       * no longer be reliable (guest released device and needs to start
  
       * over, or unplug occurred so the FDT is no longer valid)
  
       */
  
      g_free(drc->ccs);
  
      drc->ccs = NULL;
  
  
  
      drc->state = SPAPR_DRC_STATE_PHYSICAL_POWERON;
  
  
  
      if (drc->unplug_requested) {
  
          uint32_t drc_index = spapr_drc_index(drc);
  
          trace_spapr_drc_set_isolation_state_finalizing(drc_index);
  
          spapr_drc_detach(drc);
  
      }
  
  
  
      return RTAS_OUT_SUCCESS;
  
  }
  