FEMU  原版 master 7e238cc
FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST'18)
nand.h 文件参考
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

结构体

struct  NandFlashTiming
 
struct  NandFlash
 

宏定义

#define MAX_SUPPORTED_PAGES_PER_BLOCK   (512)
 
#define SLC_PAGE_READ_LATENCY_NS   (40000)
 
#define SLC_PAGE_WRITE_LATENCY_NS   (800000)
 
#define SLC_BLOCK_ERASE_LATENCY_NS   (2000000)
 
#define SLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (20000)
 
#define MLC_LOWER_PAGE_READ_LATENCY_NS   (48000)
 
#define MLC_UPPER_PAGE_READ_LATENCY_NS   (64000)
 
#define MLC_LOWER_PAGE_WRITE_LATENCY_NS   (850000)
 
#define MLC_UPPER_PAGE_WRITE_LATENCY_NS   (2300000)
 
#define MLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)
 
#define MLC_BLOCK_ERASE_LATENCY_NS   (3000000)
 
#define TLC_LOWER_PAGE_READ_LATENCY_NS   (56500)
 
#define TLC_CENTER_PAGE_READ_LATENCY_NS   (77500)
 
#define TLC_UPPER_PAGE_READ_LATENCY_NS   (106000)
 
#define TLC_LOWER_PAGE_WRITE_LATENCY_NS   (820500)
 
#define TLC_CENTER_PAGE_WRITE_LATENCY_NS   (2225000)
 
#define TLC_UPPER_PAGE_WRITE_LATENCY_NS   (5734000)
 
#define TLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)
 
#define TLC_BLOCK_ERASE_LATENCY_NS   (3000000)
 
#define QLC_LOWER_PAGE_READ_LATENCY_NS   (TLC_LOWER_PAGE_READ_LATENCY_NS * 1.05)
 
#define QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS   (TLC_CENTER_PAGE_READ_LATENCY_NS * 1.1)
 
#define QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS   (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.2)
 
#define QLC_UPPER_PAGE_READ_LATENCY_NS   (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.6)
 
#define QLC_LOWER_PAGE_WRITE_LATENCY_NS   (TLC_LOWER_PAGE_WRITE_LATENCY_NS * 1.05)
 
#define QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS   (TLC_CENTER_PAGE_WRITE_LATENCY_NS * 1.1)
 
#define QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS   (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.2)
 
#define QLC_UPPER_PAGE_WRITE_LATENCY_NS   (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.6)
 
#define QLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)
 
#define QLC_BLOCK_ERASE_LATENCY_NS   (3000000)
 
#define PPA_CH(ln, ppa)   ((ppa & ln->ppaf.ch_mask) >> ln->ppaf.ch_offset)
 
#define PPA_LUN(ln, ppa)   ((ppa & ln->ppaf.lun_mask) >> ln->ppaf.lun_offset)
 
#define PPA_PLN(ln, ppa)   ((ppa & ln->ppaf.pln_mask) >> ln->ppaf.pln_offset)
 
#define PPA_BLK(ln, ppa)   ((ppa & ln->ppaf.blk_mask) >> ln->ppaf.blk_offset)
 
#define PPA_PG(ln, ppa)   ((ppa & ln->ppaf.pg_mask) >> ln->ppaf.pg_offset)
 
#define PPA_SEC(ln, ppa)   ((ppa & ln->ppaf.sec_mask) >> ln->ppaf.sec_offset)
 

类型定义

typedef enum FlashType FlashType
 
typedef struct NandFlashTiming NandFlashTiming
 

枚举

enum  {
  SLC_PAGE = 0, MLC_LOWER_PAGE = 0, MLC_UPPER_PAGE = 1, TLC_LOWER_PAGE = 0,
  TLC_CENTER_PAGE = 1, TLC_UPPER_PAGE = 2, QLC_LOWER_PAGE = 0, QLC_LOWER_CENTER_PAGE = 1,
  QLC_UPPER_CENTER_PAGE = 2, QLC_UPPER_PAGE = 3
}
 
enum  FlashType {
  SLC = 1, MLC = 2, TLC = 3, QLC = 4,
  PLC = 5, MAX_FLASH_TYPE = 6
}
 

函数

static uint8_t get_page_type (int flash_type, int pg)
 
static int64_t get_page_read_latency (int flash_type, int page_type)
 
static int64_t get_page_write_latency (int flash_type, int page_type)
 
static int64_t get_blk_erase_latency (int flash_type)
 
int init_nand_flash (void *opaque)
 

变量

static struct NandFlashTiming nand_flash_timing
 
static int slc_tbl [MAX_SUPPORTED_PAGES_PER_BLOCK]
 
static int mlc_tbl [MAX_SUPPORTED_PAGES_PER_BLOCK]
 
static int tlc_tbl [MAX_SUPPORTED_PAGES_PER_BLOCK]
 
static int qlc_tbl [MAX_SUPPORTED_PAGES_PER_BLOCK]
 

宏定义说明

◆ MAX_SUPPORTED_PAGES_PER_BLOCK

#define MAX_SUPPORTED_PAGES_PER_BLOCK   (512)

◆ MLC_BLOCK_ERASE_LATENCY_NS

#define MLC_BLOCK_ERASE_LATENCY_NS   (3000000)

◆ MLC_CHNL_PAGE_TRANSFER_LATENCY_NS

#define MLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)

◆ MLC_LOWER_PAGE_READ_LATENCY_NS

#define MLC_LOWER_PAGE_READ_LATENCY_NS   (48000)

◆ MLC_LOWER_PAGE_WRITE_LATENCY_NS

#define MLC_LOWER_PAGE_WRITE_LATENCY_NS   (850000)

◆ MLC_UPPER_PAGE_READ_LATENCY_NS

#define MLC_UPPER_PAGE_READ_LATENCY_NS   (64000)

◆ MLC_UPPER_PAGE_WRITE_LATENCY_NS

#define MLC_UPPER_PAGE_WRITE_LATENCY_NS   (2300000)

◆ PPA_BLK

#define PPA_BLK (   ln,
  ppa 
)    ((ppa & ln->ppaf.blk_mask) >> ln->ppaf.blk_offset)

◆ PPA_CH

#define PPA_CH (   ln,
  ppa 
)    ((ppa & ln->ppaf.ch_mask) >> ln->ppaf.ch_offset)

◆ PPA_LUN

#define PPA_LUN (   ln,
  ppa 
)    ((ppa & ln->ppaf.lun_mask) >> ln->ppaf.lun_offset)

◆ PPA_PG

#define PPA_PG (   ln,
  ppa 
)    ((ppa & ln->ppaf.pg_mask) >> ln->ppaf.pg_offset)

◆ PPA_PLN

#define PPA_PLN (   ln,
  ppa 
)    ((ppa & ln->ppaf.pln_mask) >> ln->ppaf.pln_offset)

◆ PPA_SEC

#define PPA_SEC (   ln,
  ppa 
)    ((ppa & ln->ppaf.sec_mask) >> ln->ppaf.sec_offset)

◆ QLC_BLOCK_ERASE_LATENCY_NS

#define QLC_BLOCK_ERASE_LATENCY_NS   (3000000)

◆ QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS

#define QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS   (TLC_CENTER_PAGE_READ_LATENCY_NS * 1.1)

◆ QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS

#define QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS   (TLC_CENTER_PAGE_WRITE_LATENCY_NS * 1.1)

◆ QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS

#define QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS   (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.2)

◆ QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS

#define QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS   (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.2)

◆ QLC_CHNL_PAGE_TRANSFER_LATENCY_NS

#define QLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)

◆ QLC_LOWER_PAGE_READ_LATENCY_NS

#define QLC_LOWER_PAGE_READ_LATENCY_NS   (TLC_LOWER_PAGE_READ_LATENCY_NS * 1.05)

◆ QLC_LOWER_PAGE_WRITE_LATENCY_NS

#define QLC_LOWER_PAGE_WRITE_LATENCY_NS   (TLC_LOWER_PAGE_WRITE_LATENCY_NS * 1.05)

◆ QLC_UPPER_PAGE_READ_LATENCY_NS

#define QLC_UPPER_PAGE_READ_LATENCY_NS   (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.6)

◆ QLC_UPPER_PAGE_WRITE_LATENCY_NS

#define QLC_UPPER_PAGE_WRITE_LATENCY_NS   (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.6)

◆ SLC_BLOCK_ERASE_LATENCY_NS

#define SLC_BLOCK_ERASE_LATENCY_NS   (2000000)

◆ SLC_CHNL_PAGE_TRANSFER_LATENCY_NS

#define SLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (20000)

◆ SLC_PAGE_READ_LATENCY_NS

#define SLC_PAGE_READ_LATENCY_NS   (40000)

◆ SLC_PAGE_WRITE_LATENCY_NS

#define SLC_PAGE_WRITE_LATENCY_NS   (800000)

◆ TLC_BLOCK_ERASE_LATENCY_NS

#define TLC_BLOCK_ERASE_LATENCY_NS   (3000000)

◆ TLC_CENTER_PAGE_READ_LATENCY_NS

#define TLC_CENTER_PAGE_READ_LATENCY_NS   (77500)

◆ TLC_CENTER_PAGE_WRITE_LATENCY_NS

#define TLC_CENTER_PAGE_WRITE_LATENCY_NS   (2225000)

◆ TLC_CHNL_PAGE_TRANSFER_LATENCY_NS

#define TLC_CHNL_PAGE_TRANSFER_LATENCY_NS   (52433)

◆ TLC_LOWER_PAGE_READ_LATENCY_NS

#define TLC_LOWER_PAGE_READ_LATENCY_NS   (56500)

◆ TLC_LOWER_PAGE_WRITE_LATENCY_NS

#define TLC_LOWER_PAGE_WRITE_LATENCY_NS   (820500)

◆ TLC_UPPER_PAGE_READ_LATENCY_NS

#define TLC_UPPER_PAGE_READ_LATENCY_NS   (106000)

◆ TLC_UPPER_PAGE_WRITE_LATENCY_NS

#define TLC_UPPER_PAGE_WRITE_LATENCY_NS   (5734000)

类型定义说明

◆ FlashType

typedef enum FlashType FlashType

◆ NandFlashTiming

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
SLC_PAGE 
MLC_LOWER_PAGE 
MLC_UPPER_PAGE 
TLC_LOWER_PAGE 
TLC_CENTER_PAGE 
TLC_UPPER_PAGE 
QLC_LOWER_PAGE 
QLC_LOWER_CENTER_PAGE 
QLC_UPPER_CENTER_PAGE 
QLC_UPPER_PAGE 

◆ FlashType

enum FlashType
枚举值
SLC 
MLC 
TLC 
QLC 
PLC 
MAX_FLASH_TYPE 

函数说明

◆ get_blk_erase_latency()

static int64_t get_blk_erase_latency ( int  flash_type)
inlinestatic
这是这个函数的调用关系图:

◆ get_page_read_latency()

static int64_t get_page_read_latency ( int  flash_type,
int  page_type 
)
inlinestatic
这是这个函数的调用关系图:

◆ get_page_type()

static uint8_t get_page_type ( int  flash_type,
int  pg 
)
inlinestatic
这是这个函数的调用关系图:

◆ get_page_write_latency()

static int64_t get_page_write_latency ( int  flash_type,
int  page_type 
)
inlinestatic
这是这个函数的调用关系图:

◆ init_nand_flash()

int init_nand_flash ( void *  opaque)
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ mlc_tbl

int mlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
static

◆ nand_flash_timing

struct NandFlashTiming nand_flash_timing
static

◆ qlc_tbl

int qlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
static

◆ slc_tbl

int slc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
static

◆ tlc_tbl

int tlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
static