⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flioctl.c

📁 M-System DOC(Disk on a Chip) Flash芯片的诊断工具, 可以从Flash芯片中获取特定的数据信息, 用于判断芯片当前的状态.
💻 C
📖 第 1 页 / 共 2 页
字号:

      switch(inputRec->type)
      {
         case OTP_SIZE:
          outputRec->status = flOTPSize(&ioreq2);
       inputRec->lockedFlag = (FLByte)ioreq2.irFlags;
           inputRec->length     = ioreq2.irCount ;
       inputRec->usedSize   = ioreq2.irLength ;
           break;
         case OTP_READ:
           ioreq2.irData   = inputRec->buffer;    /* user buffer  */
       ioreq2.irCount  = inputRec->usedSize;  /* offset       */
           ioreq2.irLength = inputRec->length;    /* size to read */
           outputRec->status = flOTPRead(&ioreq2);
       break;
         case OTP_WRITE_LOCK:
           ioreq2.irData   = inputRec->buffer;    /* user buffer  */
           ioreq2.irLength = inputRec->length;    /* size to read */
           outputRec->status = flOTPWriteAndLock(&ioreq2);
       break;
         default:
       outputRec->status = flBadParameter;
           break;
      }
      return outputRec->status;
    }

    case FL_IOCTL_CUSTOMER_ID:
    {
      flCustomerIdOutput FAR1 *outputRec = (flCustomerIdOutput FAR1 *)outputRecord;

      ioreq2.irData = outputRec->id;
      outputRec->status = flGetCustomerID(&ioreq2);
      return outputRec->status;
    }

    case FL_IOCTL_UNIQUE_ID:
    {
      flUniqueIdOutput FAR1 *outputRec = (flUniqueIdOutput FAR1 *)outputRecord;

      ioreq2.irData = outputRec->id;
      outputRec->status = flGetUniqueID(&ioreq2);
      return outputRec->status;
    }
#endif /* HW_OTP */

    case FL_IOCTL_NUMBER_OF_PARTITIONS:
    {
      flCountPartitionsOutput FAR1 *outputRec = (flCountPartitionsOutput FAR1 *)outputRecord;

      outputRec->status = flCountVolumes(&ioreq2);
      outputRec->noOfPartitions = (FLByte) ioreq2.irFlags;
      return outputRec->status;
    }

#ifdef FL_LOW_LEVEL

    case FL_IOCTL_INQUIRE_CAPABILITIES:
    {
      flCapabilityInput FAR1 *inputRec = (flCapabilityInput FAR1 *)inputRecord;
      flCapabilityOutput FAR1 *outputRec = (flCapabilityOutput FAR1 *)outputRecord;

      ioreq2.irLength       = inputRec->capability;
      outputRec->status     = flInquireCapabilities(&ioreq2);
      outputRec->capability = (FLCapability)ioreq2.irLength;
      return outputRec->status;
    }

#endif /* FL_LOW_LEVEL */
#ifdef FL_LOW_LEVEL
#ifdef WRITE_EXB_IMAGE

    case FL_IOCTL_PLACE_EXB_BY_BUFFER:
    {
      flPlaceExbInput      FAR1 *inputRec  = (flPlaceExbInput      FAR1 *)inputRecord;
      flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
      ioreq2.irData       = inputRec->buf;
      ioreq2.irLength     = inputRec->bufLen;
      ioreq2.irWindowBase = inputRec->exbWindow;
      ioreq2.irFlags      = inputRec->exbFlags;
      outputRec->status   = flPlaceExbByBuffer(&ioreq2);
      return outputRec->status;
    }

#endif /* WRITE_EXB_IMAGE */

    case FL_IOCTL_DEEP_POWER_DOWN_MODE:
    {
      flPowerDownInput      FAR1 *inputRec  = (flPowerDownInput      FAR1 *)inputRecord;
      flOutputStatusRecord  FAR1 *outputRec = (flOutputStatusRecord  FAR1 *)outputRecord;
      ioreq2.irFlags    = inputRec->state;
      outputRec->status = flDeepPowerDownMode(&ioreq2);
      return outputRec->status;
    }

#endif /* FL_LOW_LEVEL */
#ifdef ABS_READ_WRITE
#ifndef FL_READ_ONLY
    case FL_IOCTL_DELETE_SECTORS:
    {
      flDeleteSectorsInput FAR1 *inputRec = (flDeleteSectorsInput FAR1 *)inputRecord;
      flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;

      ioreq2.irSectorNo = inputRec->firstSector;
      ioreq2.irSectorCount = inputRec->numberOfSectors;
      outputRec->status = flAbsDelete(&ioreq2);
      return outputRec->status;
    }
#endif  /* FL_READ_ONLY */

    case FL_IOCTL_READ_SECTORS:
    {
      flReadWriteInput FAR1 *inputRec = (flReadWriteInput FAR1 *)inputRecord;
      flReadWriteOutput FAR1 *outputRec = (flReadWriteOutput FAR1 *)outputRecord;

      ioreq2.irSectorNo = inputRec->firstSector;
      ioreq2.irSectorCount = inputRec->numberOfSectors;
      ioreq2.irData = inputRec->buf;
      outputRec->status = flAbsRead(&ioreq2);
      outputRec->numberOfSectors = ioreq2.irSectorCount;
      return outputRec->status;
    }
#ifndef FL_READ_ONLY

    case FL_IOCTL_WRITE_SECTORS:
    {
      flReadWriteInput FAR1 *inputRec = (flReadWriteInput FAR1 *)inputRecord;
      flReadWriteOutput FAR1 *outputRec = (flReadWriteOutput FAR1 *)outputRecord;

      ioreq2.irSectorNo = inputRec->firstSector;
      ioreq2.irSectorCount = inputRec->numberOfSectors;
      ioreq2.irData = inputRec->buf;
      outputRec->status = flAbsWrite(&ioreq2);
      outputRec->numberOfSectors = ioreq2.irSectorCount;
      return outputRec->status;
    }
#endif   /* FL_READ_ONLY */
#endif  /* ABS_READ_WRITE */

#ifdef ENVIRONMENT_VARS
    case FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES:
    {
       flExtendedEnvVarsInput  FAR1 *inputRec  = (flExtendedEnvVarsInput   FAR1 *)inputRecord;
       flExtendedEnvVarsOutput FAR1 *outputRec = (flExtendedEnvVarsOutput  FAR1 *)outputRecord;

       switch(inputRec->flags)
       {
          case FL_APPLY_TO_ALL:
             outputRec->status = flSetEnvAll(inputRec->varName,
                                 inputRec->varValue,&(outputRec->prevValue));
             break;
          case FL_APPLY_TO_SOCKET:
             outputRec->status = flSetEnvSocket(inputRec->varName,
                                 FL_GET_SOCKET_FROM_HANDLE((&ioreq2)),
                                 inputRec->varValue,&(outputRec->prevValue));
             break;
          case FL_APPLY_TO_VOLUME:
             outputRec->status = flSetEnvVolume(inputRec->varName,
                                 FL_GET_SOCKET_FROM_HANDLE((&ioreq2)),
                                 FL_GET_PARTITION_FROM_HANDLE((&ioreq2)),
                                 inputRec->varValue,&(outputRec->prevValue));
             break;
          default:
             DBG_PRINT_ERR(FLZONE_IOCTL,"ERROR - Unrecognized environment variable function flag.\r\n");
             outputRec->status = flFeatureNotSupported;
       }
       return outputRec->status;
    }
#endif /* ENVIRONMENT_VARS */

#ifndef FL_NO_USE_FUNC
    case FL_IOCTL_SET_ACCESS_ROUTINE:
    {
       flSetMemoryAccessInput FAR1 *inputRec = (flSetMemoryAccessInput FAR1 *)inputRecord;
       flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;

       outputRec->status = flSetDocBusRoutine(FL_GET_SOCKET_FROM_HANDLE((&ioreq2)),
                                              inputRec->structPtr);
       return outputRec->status;
    }
    case FL_IOCTL_GET_ACCESS_ROUTINE:
    {
       flGetMemoryAccessOutput FAR1 *outputRec = (flGetMemoryAccessOutput FAR1 *)outputRecord;

       outputRec->status = flGetDocBusRoutine(FL_GET_SOCKET_FROM_HANDLE((&ioreq2)),
                                              outputRec->structPtr);
       return outputRec->status;
    }
#endif /* FL_NO_USE_FUNC */

#ifdef VERIFY_VOLUME
    case FL_IOCTL_VERIFY_VOLUME:
    {
       flVerifyVolumeInput FAR1 *inputRec = (flVerifyVolumeInput FAR1 *)inputRecord;
       flVerifyVolumeOutput FAR1 *outputRec = (flVerifyVolumeOutput FAR1 *)outputRecord;     

       ioreq2.irLength   = (FLSDword)inputRec->flags;
       ioreq2.irData     = outputRec->callBack;
       outputRec->status = flVerifyVolume(&ioreq2);
       return outputRec->status;
    }
#endif /* VERIFY_VOLUME */

#ifndef NO_IPL_CODE
    case FL_IOCTL_EXTENDED_WRITE_IPL:
    {
      flIplInput           FAR1 *inputRec  = (flIplInput           FAR1 *)inputRecord;
      flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
      ioreq2.irData       = inputRec->buf;
      ioreq2.irLength     = inputRec->bufLen;
      ioreq2.irFlags      = inputRec->flags;
      outputRec->status   = flWriteIPL(&ioreq2);
      return outputRec->status;
    }
#endif /* NO_IPL_CODE */

#ifdef RUGGEDIZED
    case FL_IOCTL_OPEN_TRANSACTION:
    {
      flRuggedizeInput     FAR1 *inputRec = (flRuggedizeInput FAR1 *)     inputRecord;
      flRuggedizeOutput FAR1 *outputRec = (flRuggedizeOutput FAR1 *)outputRecord;
      ioreq2.irLength       = FL_OPEN_TRANSACTION;
      ioreq2.irCount        = inputRec->mode;
      outputRec->status     = flRuggedizeOperation(&ioreq2);
      outputRec->handle     = ioreq2.irFlags;
      return outputRec->status;
    }
    case FL_IOCTL_COMMIT_TRANSACTION:
    {
      flRuggedizeInput     FAR1 *inputRec = (flRuggedizeInput FAR1 *)     inputRecord;
      flRuggedizeOutput FAR1 *outputRec = (flRuggedizeOutput FAR1 *)outputRecord;
      ioreq2.irLength       = FL_COMMIT_TRANSACTION;
      ioreq2.irFlags        = inputRec->handle;
      outputRec->status     = flRuggedizeOperation(&ioreq2);
      outputRec->handle     = ioreq2.irFlags;
      return outputRec->status;
    }
#endif /*RUGGEDIZED*/

#ifndef FL_NO_QUICK_MOUNT_FEATURE
	case FL_IOCTL_IS_QUICK_MOUNT_VALID:
	{
	   flGetQuickMountOutput FAR1 *outputRec = (flGetQuickMountOutput FAR1 *)outputRecord;
       outputRec->status = flGetQuickMountStatus(&ioreq2);
       outputRec->mode   = (FLByte)ioreq2.irFlags;
       return outputRec->status;
	}
#ifndef FL_READ_ONLY
    case FL_IOCTL_WRITE_QUICK_MOUNT_INFO:
    {
       flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
       outputRec->status = flWriteQuickMountInfo(&ioreq2);
       return outputRec->status;
    }

    case FL_IOCTL_CLEAR_QUICK_MOUNT_INFO:
    {
       flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
       outputRec->status = flClearQuickMountInfo(&ioreq2);
       return outputRec->status;
    }
#endif /* FL_READ_ONLY */
#endif /* FL_NO_QUICK_MOUNT_FEATURE */

#ifndef FL_READ_ONLY
	case FL_IOCTL_COMPLETE_OPERATION:
    {
       flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
       outputRec->status = flCompleteOperation(&ioreq2);
       return outputRec->status;
    }
#endif /* FL_READ_ONLY */

    default:
      return flBadParameter;
  }
}

#endif /* IOCTL_INTERFACE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -