Common Structures
SEFStatus
Members of SEFStatus
Type | Name | Description |
---|
int64_t | error | Status information |
int64_t | info | Additional context-based descriptive information |
SEFVirtualDeviceID
Members of SEFVirtualDeviceID
SEFQoSDomainID
Members of SEFQoSDomainID
SEFPlacementID
Members of SEFPlacementID
SEFInfo
Members of SEFInfo
Type | Name | Description |
---|
char[8] | vendor | Vendor field |
char[20] | serialNumber | Device serial number |
char[8] | FWVersion | Device firmware version |
char[8] | HWVersion | Device hardware version |
uint16_t | maxQoSDomains | Hardware version specific, may be less than 65535 defined by architecture |
uint16_t | maxRootPointers | Firmware version specific, may be less than 16 defined by architecture |
uint64_t | supportedOptions | Bitmap of supported features |
uint16_t | maxPlacementIDs | Firmware version specific, max number of open superblocks per QoS domain |
uint16_t | numFlashMediaQueues | Firmware version specific, max number of scheduling queues per die |
uint16_t | numVirtualDevices | Number of currently defined virtual devices |
uint16_t | numQoSDomains | Number of currently defined QoS Domains |
uint16_t | APIVersion | API Version |
uint16_t | numDies | Number of dies per channel |
uint16_t | numChannels | Number of channels per SEF Unit |
uint16_t | numPlanes | Number of planes per die |
uint16_t | numADUSizes | Size of ADUsize array that follows at end of structure |
uint16_t | reserved_0 | |
uint32_t | numBlocks | Number of blocks per die |
uint32_t | numPages | Number of pages per block |
uint32_t | pageSize | Physical page size |
uint32_t | metaSize | Meta size per ADU |
uint32_t | totalBandWidth | Total bandwidth corresponding to the underlying NAND component on this device |
uint32_t | readLatency | Read latency corresponding to the underlying NAND components on this device |
uint32_t | writeLatency | Write latency corresponding to the underlying NAND components on this device |
uint32_t | eraseLatency | Erase latency corresponding to the underlying NAND components on this device |
uint32_t | openExpirationPeriod | Granularity in seconds for entire block |
uint32_t[0] | ADUsize | Array of supported ADU sizes (in bytes) |
SEFVirtualDeviceList
Members of SEFVirtualDeviceList
Type | Name | Description |
---|
uint16_t | numVirtualDevices | Number of virtual devices |
struct SEFVirtualDeviceID[0] | virtualDeviceID | An Array of all Virtual device IDs |
SEFQoSDomainList
Members of SEFQoSDomainList
Type | Name | Description |
---|
uint16_t | numQoSDomains | Number of QoS domains |
struct SEFQoSDomainID[0] | QoSDomainID | An 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
Type | Name |
---|
uint64_t | unformatted |
SEFFlashAddress
Opaque flash address value parsable by SEFParseFlashAddress()
Members of SEFFlashAddress
SEFDieMap
Members of SEFDieMap
Type | Name | Description |
---|
uint8_t | startChannel | starting channel number for rectangular region |
uint8_t | startBank | starting bank number for rectangular region |
uint8_t | numChannels | width for rectangular region |
uint8_t | numBanks | height for rectangular region |
SEFWeights
Relative die time weights for basic operations.
Members of SEFWeights
Type | Name | Description |
---|
uint16_t | readWeight | Default Weight for a Read operation by Read commands |
uint16_t | eraseWeight | Default Weight for an Erase operation by SEFAllocateSuperBlock for user Nameless writes |
uint16_t | programWeight | Default Weight for a Program operation by Nameless Write commands |
uint16_t | read4CopyWeight | Default Weight for a Read operation by Nameless Copy commands |
uint16_t | erase4CopyWeight | Default Weight for an Erase operation by SEFAllocateSuperBlock for Nameless Copy |
uint16_t | program4CopyWeight | Default Weight for a Program operation by Nameless Copy commands |
SEFVirtualDeviceInfo
Members of SEFVirtualDeviceInfo
Type | Name | Description |
---|
uint64_t | flashCapacity | Flash capacity in ADUs |
uint64_t | flashAvailable | Available flash capacity in ADUs |
uint32_t | superBlockCapacity | Total SuperBlock capacity in ADUs |
uint32_t | eraseCount | Number of superblocks erased. Used to populate eraseOrder in SEFSuperBlockRecord |
struct SEFDieMap | dieMap | Dies allocated to this virtual device |
struct SEFWeights[SEFMaxFMQueues] | weights | Weights for each FMQ |
uint8_t | numFMQueues | Number of flash media queues per die |
enum SEFDefectManagementMethod | defectStrategy | Defect management strategy for the Virtual Device |
uint8_t | averagePEcount | Average program/erase count |
uint8_t | maxPEcount | Max program/erase count |
uint16_t | numUnallocatedSuperBlocks | Number of unallocated super blocks |
uint16_t | numSuperBlocks | Number of allocated super blocks |
struct SEFQoSDomainList | QoSDomains | List of domains |
SEFFMQAssignments
Members of SEFFMQAssignments
Type | Name | Description |
---|
uint8_t | readFMQ | Default FMQ for user read commands |
uint8_t | programFMQ | Default FMQ for user nameless write commands |
uint8_t | read4CopyFMQ | Default FMQ for read by nameless copy commands |
uint8_t | program4CopyFMQ | Default FMQ for write by nameless copy commands |
SEFSuperBlockRecord
Members of SEFSuperBlockRecord
Type | Name | Description |
---|
struct SEFFlashAddress | flashAddress | Flash address where this superblock resides |
uint32_t | eraseOrder | Indication 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_t | writableADUs | If superblock is closed, writableADUs and writtenADUs are equal; if they are not equal, the superblock must still be open |
uint32_t | writtenADUs | This field increments as ADUs in the superblock are written |
struct SEFPlacementID | placementID | When auto-allocated, indicates the placement id supplied to SEFWriteWithoutPhysicalAddress1(). Otherwise it will be 0xffff |
uint8_t | PEIndex | This is the block's erase count normalized to be between 0 and 255 |
SEFQoSDomainInfo
Members of SEFQoSDomainInfo
Type | Name | Description |
---|
struct SEFVirtualDeviceID | virtualDeviceID | Virtual device ID |
uint16_t | numPlacementIDs | Specifies the number of Placement IDs corresponding to this QoS domain |
uint16_t | numRootPointers | Specifies the number of root pointers corresponding to this QoS domain |
uint8_t | encryption | 0 for disabled, non-zero for enabled |
enum SEFAPIIdentifier | api | Specifies the API Identifier for this QoS domain |
uint64_t | capacity | Reserved capacity of the QoS domain in ADUs |
uint64_t | quota | Number of ADUs that can be allocated by the QoS domain |
enum SEFErrorRecoveryMode | recoveryMode | Specifies the recovery mode for this QoS domain |
enum SEFDeadlineType | deadline | Deadline type for the QoS domain |
struct SEFFMQAssignments | FMQDefaults | The default die FMQ assignments for I/O commands |
uint16_t | reserved_0 | |
struct SEFFlashAddress[SEFMaxRootPointer] | rootPointers | List of root pointers |
uint32_t | ADUsize | Size of ADU in bytes |
uint32_t | numSuperBlocks | Number of superblocks in use by the QoS Domain |
struct SEFSuperBlockRecord[0] | superBlockRecords | List of superblock records |
SEFWearInfo
Members of SEFWearInfo
Type | Name | Description |
---|
uint32_t | numSuperBlocks | Number of superblocks |
uint32_t | reserved_0 | |
struct SEFSuperBlockRecord[0] | superBlockRecords | List of superblock records |
SEFRefreshInfo
Members of SEFRefreshInfo
Type | Name | Description |
---|
uint32_t | numSuperBlocks | Number of superblocks |
uint32_t | reserved_0 | |
struct SEFSuperBlockRecord[0] | superBlockRecords | List of superblock records |
SEFCheckInfo
Super blocks returned by SEFGetCheckList()
Members of SEFCheckInfo
Type | Name | Description |
---|
uint32_t | numSuperBlocks | Number of superblocks |
uint32_t | reserved_0 | |
struct SEFSuperBlockRecord[0] | superBlockRecords | List of superblock records |
SEFUserAddressRecovery
Members of SEFUserAddressRecovery
Type | Name | Description |
---|
uint64_t | serial | Monotonically increasing generational counter that indicates the order in which blocks were written. For example, it can be used for replay for data recovery |
struct SEFUserAddress | userAddress | Contains LBA information |
SEFUserAddressRecord
Members of SEFUserAddressRecord
Type | Name | Description |
---|
uint32_t | numADUs | Number of ADUs |
uint32_t | reserved_0 | |
struct SEFUserAddressRecovery[0] | userAddressesRecovery | User 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
Type | Name | Description |
---|
uint16_t | eraseWeight | Weight to use for erase instead of virtual device default |
uint16_t | programWeight | Weight to use for program instead of virtual device default |
uint8_t | programFMQ | Flash 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
Type | Name | Description |
---|
uint16_t | readWeight | Weight to use for read instead of virtual device default |
uint8_t | readFMQ | Flash 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
Type | Name | Description |
---|
uint16_t | eraseWeight | Weight to use for erase instead of virtual device default |
uint8_t | eraseFMQ | Flash 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
Type | Name | Description |
---|
enum SEFCopySourceType | format | Specifies the format to use |
uint8_t[3] | reserved_0 | |
uint32_t | arraySize | Number of items in bitmap array or Flash Address List (QWORD count) |
struct SEFFlashAddress | srcFlashAddress | flash 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 * | validBitmap | pointer to COPY of valid bitmap array (little endian), memory allocated by SEFPrepareBufferForNamelessCopy() |
struct SEFFlashAddress * | flashAddressList | pointer to flash address list, memory allocated by SEFPrepareBufferForNamelessCopy() |
SEFUserAddressFilter
Optional filtering on user address data during copy.
Members of SEFUserAddressFilter
Type | Name | Description |
---|
struct SEFUserAddress | userAddressStart | Starting user address of filter |
uint64_t | userAddressRangeLength | Length of filter range (0 indicates no filtering) |
uint32_t | userAddressRangeType | Zero 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
Type | Name |
---|
uint32_t | numProcessedADUs |
uint32_t | nextADUOffset |
uint32_t | numReadErrorADUs |
uint16_t | numDefectivePlanes |
uint16_t | reserved |
struct SEFFlashAddress | startingDstFlashAddress |
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
Type | Name | Description |
---|
uint16_t | readWeight | Weight to use for read instead of virtual device default |
uint16_t | eraseWeight | Weight to use for erase instead of virtual device default |
uint16_t | programWeight | Weight to use for program instead of virtual device default |
uint8_t | readFMQ | Flash Media Queue to use for read instead of QoS Domain default |
uint8_t | programFMQ | Flash Media Queue to use for erase & write instead of QoS Domain default |