OpenSSD Cosmos+ Platform Firmware  0.0.2
The firmware of Cosmos+ OpenSSD Platform for TOSHIBA nand flash module.
Todo List
Global _IO_WRITE_COMMAND_DW13::AccessLatency
These two bits
Global _NVME_COMMAND::cmdDword [16]
Global _NVME_IO_COMMAND::dword10
For read and write commands, CDW[10, 11] were used for:
Global _NVME_IO_COMMAND::MPTR [2]
For write command:
Global AVAILABLE_OUNTSTANDING_REQ_COUNT
why 128?
Global CheckRowAddrDep (unsigned int reqSlotTag, unsigned int checkRowAddrDepOpt)
Why the address info of the specified request must be VSA.
Global EraseBlock (unsigned int dieNo, unsigned int blockNo)
programmedPageCnt
Global ExecuteNandReq (unsigned int chNo, unsigned int wayNo, unsigned int reqStatus)
bad block and ECC related handling
Global FindBadBlock (unsigned char dieState[], unsigned int tempBbtBufAddr[], unsigned int tempBbtBufEntrySize, unsigned int tempReadBufAddr[], unsigned int tempReadBufEntrySize)

why check these 4 bytes, why ECC and row addr dep off?

the update in the second for is redundant, it can be merged to next part

Global GetFromFbList (unsigned int dieNo, unsigned int getFreeBlockOption)
Difference between GET_FREE_BLOCK_NORMAL and GET_FREE_BLOCK_GC.
Global handle_nvme_io_read (unsigned int cmdSlotTag, NVME_IO_COMMAND *nvmeIOCmd)
the entry index of the given NVMe command.
Global InitAddressMap ()
To initialize the physical block map,
Global InitBlockMap ()
Check used (neither free nor bad) blocks without updating the BBT.
Global InitNandArray ()
Global InitReqScheduler ()
Global IO_WRITE_COMMAND_DW12
Global P_SSD_REQ_FORMAT
Global P_VIRTUAL_DIE_ENTRY
There are
Global ReadBadBlockTable (unsigned int tempBbtBufAddr[], unsigned int tempBbtBufEntrySize)
why ECC and row addr dependency can be turned off ??
Global RecoverBadBlockTable (unsigned int tempBufAddr)
Use bitmap and magic number to record bad blocks and identify BBT
Global RemapBadBlock ()
use array to simplify lun0 and lun1
Global REQ_OPT_BLOCK_SPACE_MAIN
Global ReqTransNvmeToSlice (unsigned int cmdSlotTag, unsigned int startLba, unsigned int nlb, unsigned int cmdCode)

generalize the three steps

//TODO