📄 flioctl.c
字号:
break;
case PROTECTION_REMOVE_KEY:
outputRec->status = flIplRemoveProtectionKey(&ioreq2);
break;
case PROTECTION_GET_TYPE:
outputRec->status = flIplIdentifyProtection(&ioreq2);
outputRec->protectionType = (FLWord)ioreq2.irFlags;
break;
case PROTECTION_CHANGE_KEY:
ioreq2.irData = inputRec->key;
outputRec->status = flIplChangeProtectionKey(&ioreq2);
break;
case PROTECTION_CHANGE_TYPE:
ioreq2.irFlags = inputRec->protectionType;
outputRec->status = flIplChangeProtectionType(&ioreq2);
break;
default:
outputRec->status = flBadParameter;
break;
}
return outputRec->status;
}
#endif /* HW_PROTECTION */
#ifdef HW_OTP
case FL_IOCTL_OTP:
{
flOtpInput FAR1 *inputRec = (flOtpInput FAR1 *)inputRecord;
flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
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_MCOTP:
{
flMCOtpInput FAR1 *inputRec = (flMCOtpInput FAR1 *)inputRecord;
flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
switch(inputRec->type)
{
case MCOTP_SIZE:
outputRec->status = flMCOTPSize(&ioreq2);
inputRec->lockedFlag = (FLByte)ioreq2.irFlags;
inputRec->length = ioreq2.irCount ;
inputRec->usedSize = ioreq2.irLength ;
break;
case MCOTP_READ:
ioreq2.irData = inputRec->buffer; /* user buffer */
ioreq2.irCount = inputRec->wPageNo; /* offset */
outputRec->status = flMCOTPRead(&ioreq2);
break;
case MCOTP_WRITE_LOCK:
ioreq2.irData = inputRec->buffer; /* user buffer */
ioreq2.irCount = inputRec->wPageNo; /* offset */
outputRec->status = flMCOTPWriteAndLock(&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_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 FL_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 /* FL_ABS_READ_WRITE */
#ifdef FL_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_FLASH_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 /* FL_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_WRITE_IPL:
{
flIPLInput FAR1 *inputRec = (flIPLInput FAR1 *)inputRecord;
flOutputStatusRecord FAR1 *outputRec = (flOutputStatusRecord FAR1 *)outputRecord;
ioreq2.irData = inputRec->bBufPtr;
ioreq2.irLength = inputRec->sdwLength;
ioreq2.irCount = inputRec->sdwOffset;
ioreq2.irFlags = inputRec->dwFlags;
outputRec->status = flWriteIPL(&ioreq2);
return outputRec->status;
}
#endif /* NO_IPL_CODE */
#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 */
case FL_IOCTL_PASS_THROUGH:
{
flAtaPassthroughInput* ptIN = (flAtaPassthroughInput*)inputRecord;
flAtaPassthroughOutput* ptOUT = (flAtaPassthroughOutput*)outputRecord;
ioreq2.irData = ptIN->userBuff;
ioreq2.irLength = ptIN->secNum;
ioreq2.irCount = (
(ptIN->passThruOP) |
(ptIN->useInterrupt<<2) |
(ptIN->multSectorFrame<<4) );
ioreq2.irPath = ptIN->in_regs;
ptOUT->status = flDochPassThrough(&ioreq2);
tffscpy(ptOUT->out_regs, ptIN->in_regs, sizeof(DOCH_Registers));
return ptOUT->status;
}
default:
return flBadParameter;
}
}
#endif /* FL_IOCTL_INTERFACE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -