Skip to main content
Version: 1.10

Common Structures

SEFStatus

Members of SEFStatus

TypeNameDescription
int64_terrorStatus information
int64_tinfoAdditional context-based descriptive information

SEFVirtualDeviceID

Members of SEFVirtualDeviceID

TypeName
uint16_tid

SEFQoSDomainID

Members of SEFQoSDomainID

TypeName
uint16_tid

SEFPlacementID

Members of SEFPlacementID

TypeName
uint16_tid

SEFInfo

Members of SEFInfo

TypeNameDescription
char[8]vendorVendor field
char[20]serialNumberDevice serial number
char[8]FWVersionDevice firmware version
char[8]HWVersionDevice hardware version
uint16_tmaxQoSDomainsHardware version specific, may be less than 65535 defined by architecture
uint16_tmaxRootPointersFirmware version specific, may be less than 16 defined by architecture
uint64_tsupportedOptionsBitmap of supported features
uint16_tmaxPlacementIDsFirmware version specific, max number of open superblocks per QoS domain
uint16_tnumFlashMediaQueuesFirmware version specific, max number of scheduling queues per die
uint16_tnumVirtualDevicesNumber of currently defined virtual devices
uint16_tnumQoSDomainsNumber of currently defined QoS Domains
uint16_tAPIVersionAPI Version
uint16_tnumDiesNumber of dies per channel
uint16_tnumChannelsNumber of channels per SEF Unit
uint16_tnumPlanesNumber of planes per die
uint16_tnumADUSizesSize of ADUsize array that follows at end of structure
uint16_treserved_0
uint32_tnumBlocksNumber of blocks per die
uint32_tnumPagesNumber of pages per block
uint32_tpageSizePhysical page size
uint32_tmetaSizeMeta size per ADU
uint32_ttotalBandWidthTotal bandwidth corresponding to the underlying NAND component on this device
uint32_treadLatencyRead latency corresponding to the underlying NAND components on this device
uint32_twriteLatencyWrite latency corresponding to the underlying NAND components on this device
uint32_teraseLatencyErase latency corresponding to the underlying NAND components on this device
uint32_topenExpirationPeriodGranularity in seconds for entire block
uint32_t[0]ADUsizeArray of supported ADU sizes (in bytes)

SEFVirtualDeviceList

Members of SEFVirtualDeviceList

TypeNameDescription
uint16_tnumVirtualDevicesNumber of virtual devices
struct SEFVirtualDeviceID[0]virtualDeviceIDAn Array of all Virtual device IDs

SEFQoSDomainList

Members of SEFQoSDomainList

TypeNameDescription
uint16_tnumQoSDomainsNumber of QoS domains
struct SEFQoSDomainID[0]QoSDomainIDAn Array of all QoS Domain IDs

SEFUserAddress

Structure of SEFUserAddress may be redefined by user. The limitations for redefining the structure are: - size must be metaSize from SEFInfo struct, 8 bytes for foreseeable future

  • Value of 0xFFFFFFFFFFFFFFFF is reserved
  • multi-adu writes will auto increment the LBA value

For kSuperblock, the LBA is limited to 40 bits and the meta to 24. The bits member is in little endian format.

Members of SEFUserAddress

TypeName
uint64_tunformatted

SEFFlashAddress

Opaque flash address value parsable by SEFParseFlashAddress()

Members of SEFFlashAddress

TypeName
uint64_tbits

SEFDieMap

Members of SEFDieMap

TypeNameDescription
uint8_tstartChannelstarting channel number for rectangular region
uint8_tstartBankstarting bank number for rectangular region
uint8_tnumChannelswidth for rectangular region
uint8_tnumBanksheight for rectangular region

SEFWeights

Relative die time weights for basic operations.

Members of SEFWeights

TypeNameDescription
uint16_treadWeightDefault Weight for a Read operation by Read commands
uint16_teraseWeightDefault Weight for an Erase operation by SEFAllocateSuperBlock for user Nameless writes
uint16_tprogramWeightDefault Weight for a Program operation by Nameless Write commands
uint16_tread4CopyWeightDefault Weight for a Read operation by Nameless Copy commands
uint16_terase4CopyWeightDefault Weight for an Erase operation by SEFAllocateSuperBlock for Nameless Copy
uint16_tprogram4CopyWeightDefault Weight for a Program operation by Nameless Copy commands

SEFVirtualDeviceInfo

Members of SEFVirtualDeviceInfo

TypeNameDescription
uint64_tflashCapacityFlash capacity in ADUs
uint64_tflashAvailableAvailable flash capacity in ADUs
uint32_tsuperBlockCapacityTotal SuperBlock capacity in ADUs
uint32_teraseCountNumber of superblocks erased. Used to populate eraseOrder in SEFSuperBlockRecord
struct SEFDieMapdieMapDies allocated to this virtual device
struct SEFWeights[SEFMaxFMQueues]weightsWeights for each FMQ
uint8_tnumFMQueuesNumber of flash media queues per die
enum SEFDefectManagementMethoddefectStrategyDefect management strategy for the Virtual Device
uint8_taveragePEcountAverage program/erase count
uint8_tmaxPEcountMax program/erase count
uint16_tnumUnallocatedSuperBlocksNumber of unallocated super blocks
uint16_tnumSuperBlocksNumber of allocated super blocks
struct SEFQoSDomainListQoSDomainsList of domains

SEFFMQAssignments

Members of SEFFMQAssignments

TypeNameDescription
uint8_treadFMQDefault FMQ for user read commands
uint8_tprogramFMQDefault FMQ for user nameless write commands
uint8_tread4CopyFMQDefault FMQ for read by nameless copy commands
uint8_tprogram4CopyFMQDefault FMQ for write by nameless copy commands

SEFSuperBlockRecord

Members of SEFSuperBlockRecord

TypeNameDescription
struct SEFFlashAddressflashAddressFlash address where this superblock resides
uint32_teraseOrderIndication of when a superblock was erased. Can be used to determine the order blocks were allocated or to version a superblock. Values only increase over time and are unique at the virtual device level
uint32_twritableADUsIf superblock is closed, writableADUs and writtenADUs are equal; if they are not equal, the superblock must still be open
uint32_twrittenADUsThis field increments as ADUs in the superblock are written
struct SEFPlacementIDplacementIDWhen auto-allocated, indicates the placement id supplied to SEFWriteWithoutPhysicalAddress1(). Otherwise it will be 0xffff
uint8_tPEIndexThis is the block's erase count normalized to be between 0 and 255

SEFQoSDomainInfo

Members of SEFQoSDomainInfo

TypeNameDescription
struct SEFVirtualDeviceIDvirtualDeviceIDVirtual device ID
uint16_tnumPlacementIDsSpecifies the number of Placement IDs corresponding to this QoS domain
uint16_tnumRootPointersSpecifies the number of root pointers corresponding to this QoS domain
uint8_tencryption0 for disabled, non-zero for enabled
enum SEFAPIIdentifierapiSpecifies the API Identifier for this QoS domain
uint64_tcapacityReserved capacity of the QoS domain in ADUs
uint64_tquotaNumber of ADUs that can be allocated by the QoS domain
enum SEFErrorRecoveryModerecoveryModeSpecifies the recovery mode for this QoS domain
enum SEFDeadlineTypedeadlineDeadline type for the QoS domain
struct SEFFMQAssignmentsFMQDefaultsThe default die FMQ assignments for I/O commands
uint16_treserved_0
struct SEFFlashAddress[SEFMaxRootPointer]rootPointersList of root pointers
uint32_tADUsizeSize of ADU in bytes
uint32_tnumSuperBlocksNumber of superblocks in use by the QoS Domain
struct SEFSuperBlockRecord[0]superBlockRecordsList of superblock records

SEFWearInfo

Members of SEFWearInfo

TypeNameDescription
uint32_tnumSuperBlocksNumber of superblocks
uint32_treserved_0
struct SEFSuperBlockRecord[0]superBlockRecordsList of superblock records

SEFRefreshInfo

Members of SEFRefreshInfo

TypeNameDescription
uint32_tnumSuperBlocksNumber of superblocks
uint32_treserved_0
struct SEFSuperBlockRecord[0]superBlockRecordsList of superblock records

SEFCheckInfo

Super blocks returned by SEFGetCheckList()

Members of SEFCheckInfo

TypeNameDescription
uint32_tnumSuperBlocksNumber of superblocks
uint32_treserved_0
struct SEFSuperBlockRecord[0]superBlockRecordsList of superblock records

SEFUserAddressRecovery

Members of SEFUserAddressRecovery

TypeNameDescription
uint64_tserialMonotonically increasing generational counter that indicates the order in which blocks were written. For example, it can be used for replay for data recovery
struct SEFUserAddressuserAddressContains LBA information

SEFUserAddressRecord

Members of SEFUserAddressRecord

TypeNameDescription
uint32_tnumADUsNumber of ADUs
uint32_treserved_0
struct SEFUserAddressRecovery[0]userAddressesRecoveryUser address recovery scheme

SEFWriteOverrides

Supplied to override default write FMQ and weights. May be used when calling SEFWriteWithoutPhysicalAddress1() or SEFWriteWithoutPhysicalAddress1Async(). Any of these fields can be set to -1 to use the default

Members of SEFWriteOverrides

TypeNameDescription
uint16_teraseWeightWeight to use for erase instead of virtual device default
uint16_tprogramWeightWeight to use for program instead of virtual device default
uint8_tprogramFMQFlash Media Queue to use for erase & write instead of QoS Domain default

SEFReadOverrides

Supplied to override default read FMQ and weight. May be used when calling SEFReadWithPhysicalAddress1() or SEFReadWithPhysicalAddress1Async(). Any of these fields can be set to -1 to use the default

Members of SEFReadOverrides

TypeNameDescription
uint16_treadWeightWeight to use for read instead of virtual device default
uint8_treadFMQFlash Media Queue to use for read instead of QoS Domain default

SEFAllocateOverrides

Supplied to override default superblock allocation FMQ and weight. May be used when calling SEFAllocateSuperBlock() or SEFAllocateSuperBlockAsync(). Any of these fields can be set to -1 to use the default

Members of SEFAllocateOverrides

TypeNameDescription
uint16_teraseWeightWeight to use for erase instead of virtual device default
uint8_teraseFMQFlash Media Queue to use for erase instead of QoS Domain default

SEFCopySource

Source addresses for SEFNamelessCopy(). The Source addresses format controls if the validBitmap or list of flash addresses is used.SEFNamelessCopy()SEFUserAddressFilter

Members of SEFCopySource

TypeNameDescription
enum SEFCopySourceTypeformatSpecifies the format to use
uint8_t[3]reserved_0
uint32_tarraySizeNumber of items in bitmap array or Flash Address List (QWORD count)
struct SEFFlashAddresssrcFlashAddressflash address of source block. ADU & ~0x3f indicates the ADU of bit 0 of validBitmap and ADU & 0x3f is the starting bit in validBiMap
uint64_t *validBitmappointer to COPY of valid bitmap array (little endian), memory allocated by SEFPrepareBufferForNamelessCopy()
struct SEFFlashAddress *flashAddressListpointer to flash address list, memory allocated by SEFPrepareBufferForNamelessCopy()

SEFUserAddressFilter

Optional filtering on user address data during copy.

Members of SEFUserAddressFilter

TypeNameDescription
struct SEFUserAddressuserAddressStartStarting user address of filter
uint64_tuserAddressRangeLengthLength of filter range (0 indicates no filtering)
uint32_tuserAddressRangeTypeZero to copy data in range; non-zero to copy outside of range

SEFAddressChangeRequest

Address change records. This structure is used internally to implement SEFProcessChangeAddressRequest(). It may change in the future so it should be treated as opaque.

Members of SEFAddressChangeRequest

TypeName
uint32_tnumProcessedADUs
uint32_tnextADUOffset
uint32_tnumReadErrorADUs
uint16_tnumDefectivePlanes
uint16_treserved
struct SEFFlashAddressstartingDstFlashAddress
struct SEFUserAddress[0]userAddress

SEFCopyOverrides

Flash Media Queue overrides for SEFNamelessCopy() When any of these fields are set to ~0, the default weight is used as defined by SEFCreateVirtualDevice() and default FMQ as defined by SEFCreateQoSDomain().

Members of SEFCopyOverrides

TypeNameDescription
uint16_treadWeightWeight to use for read instead of virtual device default
uint16_teraseWeightWeight to use for erase instead of virtual device default
uint16_tprogramWeightWeight to use for program instead of virtual device default
uint8_treadFMQFlash Media Queue to use for read instead of QoS Domain default
uint8_tprogramFMQFlash Media Queue to use for erase & write instead of QoS Domain default