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