627 lines
23 KiB
C
627 lines
23 KiB
C
|
/*
|
||
|
* $Log: V:/Flite/archives/TrueFFS5/Src/FLIOCTL.H_V $
|
||
|
*
|
||
|
* Rev 1.7 May 09 2001 00:45:48 oris
|
||
|
* Changed protection ioctl interface to prevent the use of input buffer as an output buffer.
|
||
|
*
|
||
|
* Rev 1.6 Apr 16 2001 13:45:10 oris
|
||
|
* Removed warrnings by changing some of the fields types to standart flite types.
|
||
|
*
|
||
|
* Rev 1.5 Apr 09 2001 15:02:22 oris
|
||
|
* Added comment to ifdef statment.
|
||
|
* End with an empty line.
|
||
|
*
|
||
|
* Rev 1.4 Apr 01 2001 15:16:38 oris
|
||
|
* Updated inquire capability ioctl - diffrent input and output records.
|
||
|
*
|
||
|
* Rev 1.3 Apr 01 2001 07:58:44 oris
|
||
|
* Moved the following defines to blockdev.h:
|
||
|
* FL_PROTECT 0
|
||
|
* FL_UNPROTECT 1
|
||
|
* FL_UNLOCK 2
|
||
|
*
|
||
|
* Rev 1.2 Feb 14 2001 02:16:16 oris
|
||
|
* Updated inquire capabilities ioctl.
|
||
|
*
|
||
|
* Rev 1.1 Feb 13 2001 01:49:06 oris
|
||
|
* Added the following new IO Controls:
|
||
|
* FL_IOCTL_FORMAT_VOLUME2,
|
||
|
* FL_IOCTL_FORMAT_PARTITION,
|
||
|
* FL_IOCTL_BDTL_HW_PROTECTION,
|
||
|
* FL_IOCTL_BINARY_HW_PROTECTION,
|
||
|
* FL_IOCTL_OTP,
|
||
|
* FL_IOCTL_CUSTOMER_ID,
|
||
|
* FL_IOCTL_UNIQUE_ID,
|
||
|
* FL_IOCTL_NUMBER_OF_PARTITIONS,
|
||
|
* FL_IOCTL_SUPPORTED_FEATURES,
|
||
|
* FL_IOCTL_SET_ENVIRONMENT_VARIABLES,
|
||
|
* FL_IOCTL_PLACE_EXB_BY_BUFFER,
|
||
|
* FL_IOCTL_WRITE_IPL,
|
||
|
* FL_IOCTL_DEEP_POWER_DOWN_MODE,
|
||
|
* and BDK_GET_INFO type in FL_IOCTL_BDK_OPERATION
|
||
|
*
|
||
|
* Rev 1.0 Feb 04 2001 11:38:18 oris
|
||
|
* Initial revision.
|
||
|
*
|
||
|
*/
|
||
|
/***********************************************************************************/
|
||
|
/* M-Systems Confidential */
|
||
|
/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */
|
||
|
/* All Rights Reserved */
|
||
|
/***********************************************************************************/
|
||
|
/* NOTICE OF M-SYSTEMS OEM */
|
||
|
/* SOFTWARE LICENSE AGREEMENT */
|
||
|
/* */
|
||
|
/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */
|
||
|
/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */
|
||
|
/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */
|
||
|
/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */
|
||
|
/* E-MAIL = info@m-sys.com */
|
||
|
/***********************************************************************************/
|
||
|
|
||
|
#include "flbase.h"
|
||
|
#include "dosformt.h"
|
||
|
#include "blockdev.h"
|
||
|
#ifdef BDK_ACCESS
|
||
|
#include "docbdk.h"
|
||
|
#endif
|
||
|
|
||
|
#ifndef FLIOCTL_H
|
||
|
#define FLIOCTL_H
|
||
|
|
||
|
#define NT5PORT
|
||
|
#ifdef IOCTL_INTERFACE
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
#ifdef WRITE_EXB_IMAGE
|
||
|
#define EXB_BUFFER_SIZE 0x200
|
||
|
#endif /*WRITE_EXB_IMAGE*/
|
||
|
#endif /*NT5PORT*/
|
||
|
|
||
|
/* In every call to flIOctl function, the irFlags field in the structure
|
||
|
IOreq should hold one of the following: */
|
||
|
typedef enum{FL_IOCTL_GET_INFO = FL_IOCTL_START,
|
||
|
FL_IOCTL_DEFRAGMENT,
|
||
|
FL_IOCTL_WRITE_PROTECT,
|
||
|
FL_IOCTL_MOUNT_VOLUME,
|
||
|
FL_IOCTL_FORMAT_VOLUME,
|
||
|
FL_IOCTL_BDK_OPERATION,
|
||
|
FL_IOCTL_DELETE_SECTORS,
|
||
|
FL_IOCTL_READ_SECTORS,
|
||
|
FL_IOCTL_WRITE_SECTORS,
|
||
|
FL_IOCTL_FORMAT_PHYSICAL_DRIVE,
|
||
|
FL_IOCTL_FORMAT_LOGICAL_DRIVE,
|
||
|
FL_IOCTL_BDTL_HW_PROTECTION,
|
||
|
FL_IOCTL_BINARY_HW_PROTECTION,
|
||
|
FL_IOCTL_OTP,
|
||
|
FL_IOCTL_CUSTOMER_ID,
|
||
|
FL_IOCTL_UNIQUE_ID,
|
||
|
FL_IOCTL_NUMBER_OF_PARTITIONS,
|
||
|
FL_IOCTL_INQUIRE_CAPABILITIES,
|
||
|
FL_IOCTL_SET_ENVIRONMENT_VARIABLES,
|
||
|
FL_IOCTL_PLACE_EXB_BY_BUFFER,
|
||
|
FL_IOCTL_EXTENDED_WRITE_IPL,
|
||
|
FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES,
|
||
|
FL_IOCTL_VERIFY_VOLUME,
|
||
|
FL_IOCTL_DEEP_POWER_DOWN_MODE
|
||
|
} flIOctlFunctionNo;
|
||
|
|
||
|
|
||
|
FLStatus flIOctl(IOreq FAR2 *);
|
||
|
|
||
|
|
||
|
/* In every call to flIOctl function, the irData field in the structure
|
||
|
IOreq should point to the structure defined below. The fields
|
||
|
inputRecord and outputRecord should point to structures which are
|
||
|
specific to each IOctl function as defined in this file. */
|
||
|
typedef struct {
|
||
|
void FAR1 *inputRecord;
|
||
|
void FAR1 *outputRecord;
|
||
|
} flIOctlRecord;
|
||
|
|
||
|
|
||
|
/* General output record that returns only status. */
|
||
|
typedef struct {
|
||
|
FLStatus status;
|
||
|
} flOutputStatusRecord;
|
||
|
|
||
|
|
||
|
|
||
|
/* Input and output records for the different IOCTL functions: */
|
||
|
/* =========================================================== */
|
||
|
|
||
|
/* Get disk information (FL_IOCTL_GET_INFO) */
|
||
|
/* Input record: NULL */
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
VolumeInfoRecord info; /* VolumeInfoRecord is defined in blockdev.h */
|
||
|
FLStatus status;
|
||
|
} flDiskInfoOutput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
|
||
|
/******************************************************************************/
|
||
|
/* Check partition for power failures symptoms (FL_IOCTL_VERIFY_VOLUME) */
|
||
|
#ifdef VERIFY_VOLUME
|
||
|
/* Input record: NULL */
|
||
|
typedef struct {
|
||
|
dword flags; /* Must be set to 0 */
|
||
|
} flVerifyVolumeInput;
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
void FAR1* callBack; /* Must be set to null */
|
||
|
FLStatus status;
|
||
|
} flVerifyVolumeOutput;
|
||
|
#endif /* VERIFY_VOLUME */
|
||
|
/******************************************************************************/
|
||
|
|
||
|
/*************************************************************************/
|
||
|
#ifdef DEFRAGMENT_VOLUME
|
||
|
/* Defragment volume (FL_IOCTL_DEFRAGMENT) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
long requiredNoOfSectors; /* Minimum number of sectors to make available.
|
||
|
if -1 then a quick garbage collection operation
|
||
|
is invoked. */
|
||
|
} flDefragInput;
|
||
|
/* Outout record: */
|
||
|
typedef struct {
|
||
|
long actualNoOfSectors; /* Actual number of sectors available */
|
||
|
FLStatus status;
|
||
|
} flDefragOutput;
|
||
|
#endif
|
||
|
/*************************************************************************/
|
||
|
#ifdef WRITE_PROTECTION
|
||
|
/* Write protection (FL_IOCTL_WRITE_PROTECT) */
|
||
|
|
||
|
//type
|
||
|
//---------
|
||
|
#define FL_PROTECT 0
|
||
|
#define FL_UNPROTECT 1
|
||
|
#define FL_UNLOCK 2
|
||
|
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte type; /* type of operation: FL_PROTECT\FL_UNPROTECT */
|
||
|
long password[2]; /* password */
|
||
|
} flWriteProtectInput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
#endif /* WRITE_PROTECTION */
|
||
|
/*************************************************************************/
|
||
|
/* Mount volume (FL_IOCTL_MOUNT_VOLUME) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte type; /* type of operation: FL_MOUNT\FL_DISMOUNT */
|
||
|
} flMountInput;
|
||
|
#define FL_MOUNT 0
|
||
|
#define FL_DISMOUNT 1
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
|
||
|
#ifdef FORMAT_VOLUME
|
||
|
/* Format volume (FL_IOCTL_FORMAT_VOLUME) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte formatType; /* type of format as defined in blockdev.h */
|
||
|
FormatParams fp; /* Format parameters structure (defined in flformat.h) */
|
||
|
} flFormatInput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
/* Format volume (FL_IOCTL_FORMAT_LOGICAL_DRIVE) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
BDTLPartitionFormatParams fp; /* Format parameters structure (defined in flformat.h) */
|
||
|
} flFormatLogicalInput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
#ifdef LOW_LEVEL
|
||
|
/* Format volume (FL_IOCTL_FORMAT_PHYSICAL_DRIVE) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte formatType; /* type of format as defined in blockdev.h */
|
||
|
FormatParams2 fp; /* Format parameters structure (defined in flformat.h) */
|
||
|
} flFormatPhysicalInput;
|
||
|
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
typedef struct {
|
||
|
|
||
|
/*****************************/
|
||
|
/* Device formatting section */
|
||
|
/*****************************/
|
||
|
|
||
|
byte percentUse;
|
||
|
/* BDTL performance depends on how full the flash media is,
|
||
|
becoming slower as the media becomes closer to 100% full.
|
||
|
It is possible to avoid the worst-case performance
|
||
|
(at 100% full) by formatting the media to less than 100%
|
||
|
capacity, thus guaranteeing free space at all times. This
|
||
|
of course sacrifices some capacity. The standard value
|
||
|
used is 98 */
|
||
|
|
||
|
byte noOfBDTLPartitions;
|
||
|
/* Indicates the number of BDTL partitions (1 to 4). 0 will
|
||
|
cause a single STD_BDTL_PARAMS BDTL partition */
|
||
|
|
||
|
byte noOfBinaryPartitions;
|
||
|
/* Indicates the number of binary partitions (up to 3). 0 will
|
||
|
cause formatting with no binary partition. This value is ignored
|
||
|
unless the TL_BINARY_FORMAT flag is set in the irFlags f the ioreq */
|
||
|
|
||
|
BDTLPartitionFormatParams BDTLPartitionInfo[4];
|
||
|
/* BDTL partition information array */
|
||
|
|
||
|
BinaryPartitionFormatParams binaryPartitionInfo[3];
|
||
|
|
||
|
/* Binary partition information array*/
|
||
|
|
||
|
/***********************************/
|
||
|
/* Special format features section */
|
||
|
/***********************************/
|
||
|
|
||
|
#ifdef WRITE_EXB_IMAGE
|
||
|
|
||
|
|
||
|
byte exbBuffer[EXB_BUFFER_SIZE];
|
||
|
/* A buffer containing the EXB file. Optionaly this file can
|
||
|
contain only the first 512 bytes of the file while the rest
|
||
|
will be sent using consequitive calls to flPlaceExbByBuffer */
|
||
|
|
||
|
dword exbBufferLen; /* Size of the given EXB buffer */
|
||
|
|
||
|
dword exbLen; /* The specific size to leave for the EXB */
|
||
|
|
||
|
word exbWindow; /* Set explicit DiskOnChip window base */
|
||
|
|
||
|
byte exbFlags; /* For the flags list see doc2exb.h */
|
||
|
|
||
|
#endif /* WRITE_EXB_IMAGE */
|
||
|
|
||
|
byte cascadedDeviceNo;
|
||
|
/* Reserved for individual cascaded device formatting 0..n. For
|
||
|
this value to have any affect the TL_SINGLE_CHIP_FORMATTING flag
|
||
|
should be set in the flags field.*/
|
||
|
|
||
|
byte noOfCascadedDevices;
|
||
|
/* This field must be supplied in order to perform a format of
|
||
|
a single chip that will be eventualy assembeled as a cascaded
|
||
|
device. The field should specify the number of DiskOnChips
|
||
|
that will be eventualy cascaded on the targe plaform */
|
||
|
|
||
|
FLStatus (*progressCallback)(int totalUnitsToFormat,
|
||
|
int totalUnitsFormattedSoFar);
|
||
|
/* Progress callback routine, will be called if not NULL.
|
||
|
The callback routine is called after erasing each unit,
|
||
|
and its parameters are the total number of erase units
|
||
|
to format and the number erased so far.
|
||
|
The callback routine returns a Status value. A value of
|
||
|
OK (0) allows formatting to continue. Any other value
|
||
|
will abort the formatting with the returned status code. */
|
||
|
|
||
|
/* Note the following section is not used by for DiskOnChips */
|
||
|
/*************************************************************/
|
||
|
|
||
|
dword vmAddressingLimit;
|
||
|
/* A part of the FTL Virtual Map always resides in RAM. The
|
||
|
RAM part is the one that is used to address the part of
|
||
|
the media below the VM addressing limit. Reading and
|
||
|
writing to this part is usually faster to some degree.
|
||
|
The downside is that the bigger the limit, the more RAM
|
||
|
size is required.
|
||
|
To get the extra RAM requirement in bytes, divide the
|
||
|
limit by 128 or by 256, depending on whether you
|
||
|
specified in #2.9 more than 32 or not, respectively.
|
||
|
The minimum VM limit is 0.
|
||
|
The standard value to use is 0x10000 (first 64 KBytes) */
|
||
|
|
||
|
word embeddedCISlength;
|
||
|
/* Length in bytes of CIS to embed after the unit header */
|
||
|
|
||
|
byte embeddedCIS[0x100];
|
||
|
/* The unit header is structured as a beginning of a PCMCIA
|
||
|
'tuple' chain (a CIS). The unit header contains a
|
||
|
data-organization tuple, which points past the end of the
|
||
|
unit header to a location which usually just contains
|
||
|
hex FF's which mark an 'end-of-tuple-chain'. Optionally,
|
||
|
it is possible to embed an entire CIS chain at this
|
||
|
location. If so, 'embeddedCISlength' marks the length in
|
||
|
bytes */
|
||
|
} UserFormatParams2;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
byte formatType; /* type of format as defined in blockdev.h */
|
||
|
UserFormatParams2 fp; /* Format parameters structure (defined in flformat.h) */
|
||
|
} flUserFormatPhysicalInput;
|
||
|
#endif //NT5PORT
|
||
|
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
#endif /* LOW_LEVEL */
|
||
|
#endif /* FORMAT_VOLUME */
|
||
|
/*************************************************************************/
|
||
|
#ifdef BDK_ACCESS
|
||
|
/* BDK operations read\write\erase\create (FL_IOCTL_BDK_OPERATION) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte type; /* type of operation: BDK_INIT_READ\BDK_READ\BDK_INIT_WRITE\ */
|
||
|
/* BDK_WRITE\BDK_ERASE\BDK_CREATE\BDK_GET_INFO */
|
||
|
BDKStruct bdkStruct; /* parameters for BDK operations (defined in docbdk.h) */
|
||
|
} flBDKOperationInput;
|
||
|
#define BDK_INIT_READ 0
|
||
|
#define BDK_READ 1
|
||
|
#define BDK_INIT_WRITE 2
|
||
|
#define BDK_WRITE 3
|
||
|
#define BDK_ERASE 4
|
||
|
#define BDK_CREATE 5
|
||
|
#define BDK_GET_INFO 6
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
#define BDK_MAX_BUFFER 0x400
|
||
|
typedef struct {
|
||
|
byte oldSign[BDK_SIGNATURE_NAME];
|
||
|
byte newSign[BDK_SIGNATURE_NAME];
|
||
|
byte signOffset;
|
||
|
dword startingBlock;
|
||
|
dword length;
|
||
|
byte flags;
|
||
|
byte bdkBuffer[BDK_MAX_BUFFER];
|
||
|
} UserBDKStruct;
|
||
|
|
||
|
typedef struct {
|
||
|
byte partitionNumber;
|
||
|
byte type; /* type of operation: BDK_INIT_READ\BDK_READ\BDK_INIT_WRITE\ */
|
||
|
/* BDK_WRITE\BDK_ERASE\BDK_CREATE\BDK_GET_INFO */
|
||
|
UserBDKStruct bdkStruct; /* parameters for BDK operations (defined in docbdk.h) */
|
||
|
} flUserBDKOperationInput;
|
||
|
|
||
|
typedef struct {
|
||
|
flOutputStatusRecord statusRec; /* The status of the operation*/
|
||
|
UserBDKStruct bdkStruct; /* parameters for BDK operations (defined in docbdk.h) */
|
||
|
} flUserBDKOperationOutput;
|
||
|
#endif /*NT5PORT*/
|
||
|
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
#endif /* BDK_ACCESS */
|
||
|
/*************************************************************************/
|
||
|
#ifdef HW_PROTECTION
|
||
|
/* BDK and BDTL protection operations: (FL_IOCTL_BINARY_HW_PROTECTION) */
|
||
|
/* (FL_IOCTL_BDTL_HW_PROTECTION) */
|
||
|
/* insert key \ remove key \ identify \ change key \ */
|
||
|
/* change protection type \ change lock status */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte protectionType; /* see flflash.h for the protection attributes */
|
||
|
byte key[8]; /* The new key to the change Key call */
|
||
|
byte type; /* Operation type see list bellow */
|
||
|
} flProtectionInput;
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
typedef struct {
|
||
|
byte partitionNumber;
|
||
|
byte protectionType; /* see flflash.h for the protection attributes */
|
||
|
byte key[8]; /* The new key to the change Key call */
|
||
|
byte type; /* Operation type see list bellow */
|
||
|
} flBDKProtectionInput;
|
||
|
#endif /*NT5PORT*/
|
||
|
/*Type*/
|
||
|
/*--------------*/
|
||
|
#define PROTECTION_INSERT_KEY 0
|
||
|
#define PROTECTION_REMOVE_KEY 1
|
||
|
#define PROTECTION_GET_TYPE 2
|
||
|
#define PROTECTION_DISABLE_LOCK 3
|
||
|
#define PROTECTION_ENABLE_LOCK 4
|
||
|
#define PROTECTION_CHANGE_KEY 5
|
||
|
#define PROTECTION_CHANGE_TYPE 6
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
/*protectionType*/
|
||
|
/*--------------*/
|
||
|
#define PROTECTABLE 1 /* partition can recieve protection */
|
||
|
#define READ_PROTECTED 2 /* partition is read protected */
|
||
|
#define WRITE_PROTECTED 4 /* partition is write protected */
|
||
|
#define LOCK_ENABLED 8 /* HW lock signal is enabled */
|
||
|
#define LOCK_ASSERTED 16 /* HW lock signal is asserted */
|
||
|
#define KEY_INSERTED 32 /* key is inserted (not currently */
|
||
|
#define CHANGEABLE_PROTECTION 64 /* changeable protection area type */
|
||
|
#endif /*NT5PORT*/
|
||
|
|
||
|
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
byte protectionType; /* see flflash.h for the protection attributes */
|
||
|
FLStatus status;
|
||
|
} flProtectionOutput;
|
||
|
|
||
|
#endif /* HW_PROTECTION */
|
||
|
/*************************************************************************/
|
||
|
#ifdef HW_OTP
|
||
|
/* One Time Programing operations: (FL_IOCTL_OTP */
|
||
|
/* OTP size \ OTP read \ OTP write and lock */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
dword length; /* Length to read\write\size */
|
||
|
dword usedSize; /* The written size of the area \ Area offset */
|
||
|
byte lockedFlag; /* The area condition LOCKED_OTP (flflash.h) */
|
||
|
byte FAR1* buffer; /* pointer to user buffer */
|
||
|
word type; /* defined bellow */
|
||
|
} flOtpInput;
|
||
|
#define OTP_SIZE 1
|
||
|
#define OTP_READ 2
|
||
|
#define OTP_WRITE_LOCK 3
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
typedef struct {
|
||
|
unsigned long length; /* Length to read\write\size */
|
||
|
unsigned long usedSize; /* The written size of the area \ Area offset */
|
||
|
byte lockedFlag; /* The area condition LOCKED_OTP (flflash.h) */
|
||
|
byte buffer[0x1800]; /* pointer to user buffer */
|
||
|
word type; /* defined bellow */
|
||
|
} UserOtpInput;
|
||
|
|
||
|
typedef struct {
|
||
|
long length; /* Length to read\write\size */
|
||
|
long usedSize; /* The written size of the area \ Area offset */
|
||
|
byte lockedFlag; /* The area condition LOCKED_OTP (flflash.h) */
|
||
|
byte buffer[0x1800]; /* pointer to user buffer */
|
||
|
flOutputStatusRecord statusRec; /* defined bellow */
|
||
|
} UserOtpOutput;
|
||
|
#endif /*NT5PORT*/
|
||
|
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
/* Read customer ID (FL_IOCTL_CUSTOMER_ID) */
|
||
|
/* Input record: NULL */
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
byte id[4];
|
||
|
FLStatus status;
|
||
|
} flCustomerIdOutput;
|
||
|
/*************************************************************************/
|
||
|
/* Read unique ID (FL_IOCTL_UNIQUE_ID) */
|
||
|
/* Input record: NULL */
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
byte id[16];
|
||
|
FLStatus status;
|
||
|
} flUniqueIdOutput;
|
||
|
#endif /* HW_OTP */
|
||
|
/*************************************************************************/
|
||
|
/* Read unique ID (FL_IOCTL_NUMBER_OF_PARTITIONS) */
|
||
|
/* Input record: NULL */
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
byte noOfPartitions;
|
||
|
FLStatus status;
|
||
|
} flCountPartitionsOutput;
|
||
|
/*************************************************************************/
|
||
|
/* Quary the device h/w and s/w capabilities (FL_IOCTL_INQUIRE_CAPABILITIES) */
|
||
|
#ifdef LOW_LEVEL
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
FLCapability capability; /* defined in blockdev.h */
|
||
|
} flCapabilityInput;
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
FLCapability capability; /* defined in blockdev.h */
|
||
|
FLStatus status;
|
||
|
} flCapabilityOutput;
|
||
|
#endif /*LOW_LEVEL */
|
||
|
|
||
|
|
||
|
/******************************************************************************/
|
||
|
/* Set environment variables values (FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES) */
|
||
|
#ifdef ENVIRONMENT_VARS
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
FLEnvVars varName; /* Enum describing the variable */
|
||
|
dword varValue; /* New variable value */
|
||
|
dword flags; /* FL_APPLY_TO_ALL - All socket and partitions */
|
||
|
/* FL_APPLY_TO_SOCKET - All socket and partitions */
|
||
|
/* FL_APPLY_TO_VOLUME - All socket and partitions */
|
||
|
} flExtendedEnvVarsInput;
|
||
|
#define FL_APPLY_TO_ALL 1
|
||
|
#define FL_APPLY_TO_SOCKET 2
|
||
|
#define FL_APPLY_TO_VOLUME 3
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
dword prevValue; /* The previous value of the variable */
|
||
|
FLStatus status;
|
||
|
} flExtendedEnvVarsOutput;
|
||
|
#endif /* ENVIRONMENT_VARS */
|
||
|
/******************************************************************************/
|
||
|
|
||
|
/* Set environment variables values (FL_IOCTL_SET_ENVIRONMENT_VARIABLES) */
|
||
|
//#ifdef ENVIRONMENT_VARS
|
||
|
/* Input record: */
|
||
|
//typedef struct {
|
||
|
// FLEnvVars varName; /* Enum describing the variable */
|
||
|
// int varValue; /* New variable value */
|
||
|
//} flEnvVarsInput;
|
||
|
/* Output record: */
|
||
|
//typedef struct {
|
||
|
// int prevValue; /* The previous value of the variable */
|
||
|
// FLStatus status;
|
||
|
//} flEnvVarsOutput;
|
||
|
//#endif /* ENVIRONMENT_VARS */
|
||
|
|
||
|
|
||
|
/*************************************************************************/
|
||
|
/* Place EXB file by buffers (FL_IOCTL_PLACE_EXB_BY_BUFFER) */
|
||
|
#ifdef LOW_LEVEL
|
||
|
#ifdef WRITE_EXB_IMAGE
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
byte FAR1* buf; /* buffer of EXB file */
|
||
|
dword bufLen; /* buffer length */
|
||
|
byte exbFlags; /* a combination of EXB flags see flPlaceExbByBuffer routine */
|
||
|
/* The list of flags is defined in doc2exb.h */
|
||
|
word exbWindow; /* explicitly set device window. 0 will automatcly set window */
|
||
|
} flPlaceExbInput;
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
typedef struct {
|
||
|
byte buf[EXB_BUFFER_SIZE]; /* buffer of EXB file */
|
||
|
dword bufLen; /* buffer length */
|
||
|
byte exbFlags; /* a combination of EXB flags see flPlaceExbByBuffer routine */
|
||
|
/* The list of flags is defined in doc2exb.h */
|
||
|
word exbWindow; /* explicitly set device window. 0 will automatcly set window */
|
||
|
} flUserPlaceExbInput;
|
||
|
|
||
|
#endif /* NT5PORT */
|
||
|
|
||
|
#endif /* WRITE_EXB_IMAGE */
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
/* Write IPL area for docPlus family (FL_IOCTL_WRITE_IPL) */
|
||
|
/* Input record: */
|
||
|
|
||
|
#ifdef NT5PORT
|
||
|
#define IPL_MAX_SIZE 0x1000L
|
||
|
typedef struct {
|
||
|
byte buf[IPL_MAX_SIZE]; /* IPL data buffer */
|
||
|
word flags; /* IPL flags (see flflash.h) */
|
||
|
word bufLen; /* IPL data buffer length */
|
||
|
} flUserIplInput;
|
||
|
#endif /*NT5PORT*/
|
||
|
|
||
|
typedef struct {
|
||
|
byte FAR1* buf; /* IPL data buffer */
|
||
|
word flags; /* IPL flags (see flflash.h) */
|
||
|
word bufLen; /* IPL data buffer length */
|
||
|
} flIplInput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
/* Place the device into and out of the power down mode (FL_IOCTL_DEEP_POWER_DOWN_MODE) */
|
||
|
typedef struct {
|
||
|
byte state; /* DEEP_POWER_DOWN - low power consumption */
|
||
|
/* otherwise - regular power consumption */
|
||
|
} flPowerDownInput;
|
||
|
/* DEEP_POWER_DOWN is defined in flflash.h */
|
||
|
#endif /* LOW_LEVEL */
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
#ifdef ABS_READ_WRITE
|
||
|
/* Delete logical sectors (FL_IOCTL_DELETE_SECTORS) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
long firstSector; /* First logical sector to delete */
|
||
|
long numberOfSectors; /* Number of sectors to delete */
|
||
|
} flDeleteSectorsInput;
|
||
|
/* Output record: flOutputStatusRecord */
|
||
|
/*************************************************************************/
|
||
|
/* read & write logical sectors (FL_IOCTL_READ_SECTORS & FL_IOCTL_WRITE_SECTORS) */
|
||
|
/* Input record: */
|
||
|
typedef struct {
|
||
|
long firstSector; /* first logical sector */
|
||
|
long numberOfSectors; /* Number of sectors to read\write */
|
||
|
byte FAR1 *buf; /* Data to read\write */
|
||
|
} flReadWriteInput;
|
||
|
/* Output record: */
|
||
|
typedef struct {
|
||
|
long numberOfSectors; /* Actual Number of sectors read\written */
|
||
|
FLStatus status;
|
||
|
} flReadWriteOutput;
|
||
|
#endif /* ABS_READ_WRITE */
|
||
|
#endif
|
||
|
#endif
|
||
|
|