FEMU  原版 master 7e238cc
FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST'18)
nand.h
浏览该文件的文档.
1 #ifndef __FEMU_NAND_H
2 #define __FEMU_NAND_H
3 
4 #define MAX_SUPPORTED_PAGES_PER_BLOCK (512)
5 
6 /*
7  * SLC NAND latency numbers in naoseconds
8  */
9 #define SLC_PAGE_READ_LATENCY_NS (40000)
10 #define SLC_PAGE_WRITE_LATENCY_NS (800000)
11 #define SLC_BLOCK_ERASE_LATENCY_NS (2000000)
12 #define SLC_CHNL_PAGE_TRANSFER_LATENCY_NS (20000)
13 
14 /*
15  * MLC NAND latency numbers in nanoseconds
16  *
17  * Profiled from Micron L95B MLC NAND Flash chips used in CNEX OCSSD
18  */
19 #define MLC_LOWER_PAGE_READ_LATENCY_NS (48000)
20 #define MLC_UPPER_PAGE_READ_LATENCY_NS (64000)
21 #define MLC_LOWER_PAGE_WRITE_LATENCY_NS (850000)
22 #define MLC_UPPER_PAGE_WRITE_LATENCY_NS (2300000)
23 #define MLC_CHNL_PAGE_TRANSFER_LATENCY_NS (52433)
24 #define MLC_BLOCK_ERASE_LATENCY_NS (3000000)
25 
26 /*
27  * TLC NAND latency numbers in nanoseconds
28  *
29  * Based on the paper: "SimpleSSD: Modeling Solid State Drives for Holistic
30  * System Simulation"
31  */
32 #define TLC_LOWER_PAGE_READ_LATENCY_NS (56500)
33 #define TLC_CENTER_PAGE_READ_LATENCY_NS (77500)
34 #define TLC_UPPER_PAGE_READ_LATENCY_NS (106000)
35 
36 #define TLC_LOWER_PAGE_WRITE_LATENCY_NS (820500)
37 #define TLC_CENTER_PAGE_WRITE_LATENCY_NS (2225000)
38 #define TLC_UPPER_PAGE_WRITE_LATENCY_NS (5734000)
39 
40 #define TLC_CHNL_PAGE_TRANSFER_LATENCY_NS (52433)
41 #define TLC_BLOCK_ERASE_LATENCY_NS (3000000)
42 
43 /*
44  * QLC NAND latency numbers in nanoseconds
45  *
46  * Read Latency is extrapolated from TLC drives based on Micron FMS'19
47  * presentation: "Component-Level Characterization of 3D TLC, QLC, and
48  * Low-Latency NAND"
49  *
50  * Write Latency is increased similar to read latencies, but may be higher in
51  * practice.
52  */
53 
54 #define QLC_LOWER_PAGE_READ_LATENCY_NS (TLC_LOWER_PAGE_READ_LATENCY_NS * 1.05)
55 #define QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS (TLC_CENTER_PAGE_READ_LATENCY_NS * 1.1)
56 #define QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.2)
57 #define QLC_UPPER_PAGE_READ_LATENCY_NS (TLC_UPPER_PAGE_READ_LATENCY_NS * 1.6)
58 
59 #define QLC_LOWER_PAGE_WRITE_LATENCY_NS (TLC_LOWER_PAGE_WRITE_LATENCY_NS * 1.05)
60 #define QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS (TLC_CENTER_PAGE_WRITE_LATENCY_NS * 1.1)
61 #define QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.2)
62 #define QLC_UPPER_PAGE_WRITE_LATENCY_NS (TLC_UPPER_PAGE_WRITE_LATENCY_NS * 1.6)
63 
64 #define QLC_CHNL_PAGE_TRANSFER_LATENCY_NS (52433)
65 #define QLC_BLOCK_ERASE_LATENCY_NS (3000000)
66 
67 enum {
68  SLC_PAGE = 0,
69 
72 
76 
81 };
82 
83 typedef enum FlashType {
84  SLC = 1,
85  MLC = 2,
86  TLC = 3,
87  QLC = 4,
88  PLC = 5,
90 } FlashType;
91 
92 /*
93  * This is a cheat sheet of the timing parameters for all the supported NAND
94  * flash types: SLC/MLC/TLC/QLC/PLC
95  */
96 typedef struct NandFlashTiming {
102 
104 
105 struct NandFlash {
106  uint8_t flash_type;
109  int64_t blk_er_lat;
111 };
112 
113 #define PPA_CH(ln, ppa) ((ppa & ln->ppaf.ch_mask) >> ln->ppaf.ch_offset)
114 #define PPA_LUN(ln, ppa) ((ppa & ln->ppaf.lun_mask) >> ln->ppaf.lun_offset)
115 #define PPA_PLN(ln, ppa) ((ppa & ln->ppaf.pln_mask) >> ln->ppaf.pln_offset)
116 #define PPA_BLK(ln, ppa) ((ppa & ln->ppaf.blk_mask) >> ln->ppaf.blk_offset)
117 #define PPA_PG(ln, ppa) ((ppa & ln->ppaf.pg_mask) >> ln->ppaf.pg_offset)
118 #define PPA_SEC(ln, ppa) ((ppa & ln->ppaf.sec_mask) >> ln->ppaf.sec_offset)
119 
120 /* Lower/Upper page format within one block */
125 
126 static inline uint8_t get_page_type(int flash_type, int pg)
127 {
128  switch (flash_type) {
129  case SLC:
130  return slc_tbl[pg];
131  case MLC:
132  return mlc_tbl[pg];
133  case TLC:
134  return tlc_tbl[pg];
135  case QLC:
136  return qlc_tbl[pg];
137  default:
138  abort();
139  }
140 }
141 
142 static inline int64_t get_page_read_latency(int flash_type, int page_type)
143 {
144  return nand_flash_timing.pg_rd_lat[flash_type][page_type];
145 }
146 
147 static inline int64_t get_page_write_latency(int flash_type, int page_type)
148 {
149  return nand_flash_timing.pg_wr_lat[flash_type][page_type];
150 }
151 
152 static inline int64_t get_blk_erase_latency(int flash_type)
153 {
154  return nand_flash_timing.blk_er_lat[flash_type];
155 }
156 
157 int init_nand_flash(void *opaque);
158 
159 #endif
160 
NvmeCQueue
Definition: nvme.h:1034
MLC_UPPER_PAGE_READ_LATENCY_NS
#define MLC_UPPER_PAGE_READ_LATENCY_NS
Definition: nand.h:20
MAX_FLASH_TYPE
@ MAX_FLASH_TYPE
Definition: nand.h:89
nvme_isr_notify_io
void nvme_isr_notify_io(void *opaque)
中断通知上层取cq
Definition: intr.c:202
NandFlash::page_wr_lat
int64_t page_wr_lat[MAX_FLASH_TYPE]
Definition: nand.h:108
pqueue_cmp_pri_f
int(* pqueue_cmp_pri_f)(pqueue_pri_t next, pqueue_pri_t curr)
Definition: pqueue.h:44
__IS_MC
#define __IS_MC
Definition: rte_ring.h:164
nvme_set_guest_notifier
static int nvme_set_guest_notifier(FemuCtrl *n, EventNotifier *notifier, uint32_t qid)
Definition: intr.c:46
POWEROF2
#define POWEROF2(x)
Definition: rte_ring.c:84
FEMU_RING_TYPE_MP_MC
@ FEMU_RING_TYPE_MP_MC
Definition: rte_ring.h:1124
NandFlashTiming::chnl_pg_xfer_lat
int64_t chnl_pg_xfer_lat[MAX_FLASH_TYPE]
Definition: nand.h:100
FemuCtrl
femu相关控制参数和数据成员
Definition: nvme.h:1184
set_pri
static void set_pri(void *d, pqueue_pri_t pri)
Definition: pqueue.c:216
RTE_RING_SZ_MASK
#define RTE_RING_SZ_MASK
Definition: rte_ring.h:158
NandFlashTiming
Definition: nand.h:96
NvmeCQueue::vector
uint32_t vector
Definition: nvme.h:1043
NandFlash::blk_er_lat
int64_t blk_er_lat
Definition: nand.h:109
nvme_setup_virq
int nvme_setup_virq(FemuCtrl *n, NvmeCQueue *cq)
Definition: intr.c:216
__IS_SP
#define __IS_SP
Definition: rte_ring.h:161
MAX_SUPPORTED_PAGES_PER_BLOCK
#define MAX_SUPPORTED_PAGES_PER_BLOCK
Definition: nand.h:4
NvmeCQueue::cqid
uint16_t cqid
Definition: nvme.h:1038
TLC_CENTER_PAGE
@ TLC_CENTER_PAGE
Definition: nand.h:74
init_tlc_page_pairing
static void init_tlc_page_pairing(FemuCtrl *n)
Definition: nand.c:30
pqueue_size
size_t pqueue_size(pqueue_t *q)
Definition: pqueue.c:68
QLC
@ QLC
Definition: nand.h:87
SLC_PAGE_WRITE_LATENCY_NS
#define SLC_PAGE_WRITE_LATENCY_NS
Definition: nand.h:10
femu_ring_create
struct rte_ring * femu_ring_create(enum femu_ring_type type, size_t count)
Definition: rte_ring.c:187
subtree_is_valid
static int subtree_is_valid(pqueue_t *q, int pos)
Definition: pqueue.c:239
pqueue_t::step
size_t step
Definition: pqueue.h:58
rte_ring::name
char name[RTE_NAMESIZE]
Definition: rte_ring.h:133
SLC
@ SLC
Definition: nand.h:84
rte_ring_count
static unsigned rte_ring_count(const struct rte_ring *r)
Definition: rte_ring.h:862
femu_debug
#define femu_debug(fmt,...)
Definition: nvme.h:1507
get_page_type
static uint8_t get_page_type(int flash_type, int pg)
Definition: nand.h:126
QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS
#define QLC_CENTER_LOWER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:60
FemuCtrl::bar
NvmeBar bar
Definition: nvme.h:1188
pqueue_is_valid
int pqueue_is_valid(pqueue_t *q)
Definition: pqueue.c:258
get_blk_erase_latency
static int64_t get_blk_erase_latency(int flash_type)
Definition: nand.h:152
pqueue_pri_t
unsigned long long pqueue_pri_t
Definition: pqueue.h:39
femu_ring_enqueue
size_t femu_ring_enqueue(struct rte_ring *ring, void **objs, size_t count)
Definition: rte_ring.c:223
init_mlc_page_pairing
static void init_mlc_page_pairing(FemuCtrl *n)
Definition: nand.c:7
rte_ring_enqueue_bulk
static __rte_always_inline unsigned int rte_ring_enqueue_bulk(struct rte_ring *r, void *const *obj_table, unsigned int n, unsigned int *free_space)
Definition: rte_ring.h:650
get_page_read_latency
static int64_t get_page_read_latency(int flash_type, int page_type)
Definition: nand.h:142
NandFlash
Definition: nand.h:105
rte_ring_free
void rte_ring_free(struct rte_ring *r)
Definition: rte_ring.c:164
slc_tbl
static int slc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
Definition: nand.h:121
pqueue_t::size
size_t size
Definition: pqueue.h:56
nvme_vector_poll
static void nvme_vector_poll(PCIDevice *dev, unsigned int vector_start, unsigned int vector_end)
Definition: intr.c:133
nvme_clear_virq
int nvme_clear_virq(FemuCtrl *n)
Definition: intr.c:246
FEMU_RING_TYPE_MP_SC
@ FEMU_RING_TYPE_MP_SC
Definition: rte_ring.h:1123
TLC_UPPER_PAGE_WRITE_LATENCY_NS
#define TLC_UPPER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:38
rte_ring_dump
void rte_ring_dump(FILE *f, const struct rte_ring *r)
Definition: rte_ring.c:173
FlashType
FlashType
Definition: nand.h:83
NvmeBar::intms
uint32_t intms
Definition: nvme.h:42
pqueue_free
void pqueue_free(pqueue_t *q)
Definition: pqueue.c:62
rte_ring_init
int rte_ring_init(struct rte_ring *r, const char *name, unsigned count, unsigned flags)
Definition: rte_ring.c:99
pqueue_print
void pqueue_print(pqueue_t *q, FILE *out, pqueue_print_entry_f print)
Definition: pqueue.c:221
pqueue_set_pos_f
void(* pqueue_set_pos_f)(void *a, size_t pos)
Definition: pqueue.h:48
pqueue_peek
void * pqueue_peek(pqueue_t *q)
Definition: pqueue.c:186
NandFlashTiming::pg_rd_lat
int64_t pg_rd_lat[MAX_FLASH_TYPE][MAX_FLASH_TYPE]
Definition: nand.h:97
rte_ring::size
uint32_t size
Definition: rte_ring.h:136
QLC_UPPER_PAGE_WRITE_LATENCY_NS
#define QLC_UPPER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:62
pqueue_t::getpos
pqueue_get_pos_f getpos
Definition: pqueue.h:62
NandFlash::flash_type
uint8_t flash_type
Definition: nand.h:106
rte_ring_dequeue_burst
static __rte_always_inline unsigned rte_ring_dequeue_burst(struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available)
Definition: rte_ring.h:1113
pqueue_t::avail
size_t avail
Definition: pqueue.h:57
left
#define left(i)
Definition: pqueue.c:33
pqueue_t::cmppri
pqueue_cmp_pri_f cmppri
Definition: pqueue.h:59
rte_ring_create
struct rte_ring * rte_ring_create(const char *name, unsigned count, unsigned flags)
Definition: rte_ring.c:132
nvme_vector_unmask
static int nvme_vector_unmask(PCIDevice *dev, unsigned vector, MSIMessage msg)
Definition: intr.c:73
nvme_isr_notify_legacy
static void nvme_isr_notify_legacy(void *opaque)
传统的中断通知方式
Definition: intr.c:166
MLC_BLOCK_ERASE_LATENCY_NS
#define MLC_BLOCK_ERASE_LATENCY_NS
Definition: nand.h:24
RTE_RING_MZ_PREFIX
#define RTE_RING_MZ_PREFIX
Definition: rte_ring.h:104
QLC_LOWER_CENTER_PAGE
@ QLC_LOWER_CENTER_PAGE
Definition: nand.h:78
maxchild
static size_t maxchild(pqueue_t *q, size_t i)
Definition: pqueue.c:91
QLC_LOWER_PAGE_READ_LATENCY_NS
#define QLC_LOWER_PAGE_READ_LATENCY_NS
Definition: nand.h:54
TLC_UPPER_PAGE_READ_LATENCY_NS
#define TLC_UPPER_PAGE_READ_LATENCY_NS
Definition: nand.h:34
TLC_CHNL_PAGE_TRANSFER_LATENCY_NS
#define TLC_CHNL_PAGE_TRANSFER_LATENCY_NS
Definition: nand.h:40
rte_ring
Definition: rte_ring.h:127
mlc_tbl
static int mlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
Definition: nand.h:122
QLC_LOWER_PAGE
@ QLC_LOWER_PAGE
Definition: nand.h:77
set_pos
static void set_pos(void *d, size_t val)
Definition: pqueue.c:211
MLC_LOWER_PAGE_READ_LATENCY_NS
#define MLC_LOWER_PAGE_READ_LATENCY_NS
Definition: nand.h:19
femu_ring_free
void femu_ring_free(struct rte_ring *ring)
Definition: rte_ring.c:213
SLC_PAGE
@ SLC_PAGE
Definition: nand.h:68
QLC_BLOCK_ERASE_LATENCY_NS
#define QLC_BLOCK_ERASE_LATENCY_NS
Definition: nand.h:65
femu_ring_count
size_t femu_ring_count(struct rte_ring *ring)
Definition: rte_ring.c:218
rte_ring_headtail::head
volatile uint32_t head
Definition: rte_ring.h:112
percolate_down
static void percolate_down(pqueue_t *q, size_t i)
Definition: pqueue.c:105
tlc_tbl
static int tlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
Definition: nand.h:123
FEMU_RING_TYPE_SP_SC
@ FEMU_RING_TYPE_SP_SC
Definition: rte_ring.h:1122
SLC_PAGE_READ_LATENCY_NS
#define SLC_PAGE_READ_LATENCY_NS
Definition: nand.h:9
init_qlc_page_pairing
static void init_qlc_page_pairing(FemuCtrl *n)
Definition: nand.c:56
FemuCtrl::vector_poll_started
bool vector_poll_started
Definition: nvme.h:1274
NandFlashTiming::pg_wr_lat
int64_t pg_wr_lat[MAX_FLASH_TYPE][MAX_FLASH_TYPE]
Definition: nand.h:98
MLC_UPPER_PAGE
@ MLC_UPPER_PAGE
Definition: nand.h:71
NandFlashTiming
struct NandFlashTiming NandFlashTiming
FemuCtrl::num_io_queues
uint32_t num_io_queues
sq(cq)个数
Definition: nvme.h:1233
__IS_MP
#define __IS_MP
Definition: rte_ring.h:162
rte_ring::cons
struct rte_ring_headtail cons
Definition: rte_ring.h:144
RING_F_SC_DEQ
#define RING_F_SC_DEQ
Definition: rte_ring.h:148
init_nand_flash
int init_nand_flash(void *opaque)
Definition: nand.c:148
QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS
#define QLC_CENTER_UPPER_PAGE_READ_LATENCY_NS
Definition: nand.h:56
pqueue_change_priority
void pqueue_change_priority(pqueue_t *q, pqueue_pri_t new_pri, void *d)
Definition: pqueue.c:147
pqueue_remove
int pqueue_remove(pqueue_t *q, void *d)
Definition: pqueue.c:160
rte_ring_get_memsize
ssize_t rte_ring_get_memsize(unsigned count)
Definition: rte_ring.c:87
__IS_SC
#define __IS_SC
Definition: rte_ring.h:163
NvmeCQueue::virq
int32_t virq
Definition: nvme.h:1042
pqueue_t
Definition: pqueue.h:54
pqueue_init
pqueue_t * pqueue_init(size_t n, pqueue_cmp_pri_f cmppri, pqueue_get_pri_f getpri, pqueue_set_pri_f setpri, pqueue_get_pos_f getpos, pqueue_set_pos_f setpos)
Definition: pqueue.c:37
pqueue_set_pri_f
void(* pqueue_set_pri_f)(void *a, pqueue_pri_t pri)
Definition: pqueue.h:43
RTE_NAMESIZE
#define RTE_NAMESIZE
Definition: rte_ring.h:116
SLC_BLOCK_ERASE_LATENCY_NS
#define SLC_BLOCK_ERASE_LATENCY_NS
Definition: nand.h:11
init_nand_flash
int init_nand_flash(void *opaque)
Definition: nand.c:148
nvme_isr_notify_admin
void nvme_isr_notify_admin(void *opaque)
通知上层admin命令已完成
Definition: intr.c:192
QLC_CHNL_PAGE_TRANSFER_LATENCY_NS
#define QLC_CHNL_PAGE_TRANSFER_LATENCY_NS
Definition: nand.h:64
QLC_UPPER_PAGE_READ_LATENCY_NS
#define QLC_UPPER_PAGE_READ_LATENCY_NS
Definition: nand.h:57
rte_ring_free_count
static unsigned rte_ring_free_count(const struct rte_ring *r)
Definition: rte_ring.h:879
init_nand_flash_timing
static void init_nand_flash_timing(FemuCtrl *n)
Definition: nand.c:85
pqueue_t::d
void ** d
Definition: pqueue.h:64
parent
#define parent(i)
Definition: pqueue.c:35
pqueue_get_pri_f
pqueue_pri_t(* pqueue_get_pri_f)(void *a)
Definition: pqueue.h:42
pqueue_dump
void pqueue_dump(pqueue_t *q, FILE *out, pqueue_print_entry_f print)
Definition: pqueue.c:196
TLC_LOWER_PAGE_WRITE_LATENCY_NS
#define TLC_LOWER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:36
FemuCtrl::cq
NvmeCQueue ** cq
cq队列列表(io)
Definition: nvme.h:1281
TLC_UPPER_PAGE
@ TLC_UPPER_PAGE
Definition: nand.h:75
nvme_clear_guest_notifier
static void nvme_clear_guest_notifier(FemuCtrl *n)
Definition: intr.c:52
MLC_LOWER_PAGE_WRITE_LATENCY_NS
#define MLC_LOWER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:21
TLC_LOWER_PAGE
@ TLC_LOWER_PAGE
Definition: nand.h:73
NvmeCQueue::irq_enabled
uint16_t irq_enabled
irq 中断用
Definition: nvme.h:1039
rte_ring::capacity
uint32_t capacity
Definition: rte_ring.h:138
QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS
#define QLC_CENTER_LOWER_PAGE_READ_LATENCY_NS
Definition: nand.h:55
rte_ring::flags
int flags
Definition: rte_ring.h:134
QLC_LOWER_PAGE_WRITE_LATENCY_NS
#define QLC_LOWER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:59
pqueue_get_pos_f
size_t(* pqueue_get_pos_f)(void *a)
Definition: pqueue.h:47
NvmeCQueue::guest_notifier
EventNotifier guest_notifier
Definition: nvme.h:1048
NandFlashTiming::blk_er_lat
int64_t blk_er_lat[MAX_FLASH_TYPE]
Definition: nand.h:99
nvme.h
nvme相关数据声明
nvme_remove_kvm_msi_virq
static void nvme_remove_kvm_msi_virq(NvmeCQueue *cq)
Definition: intr.c:39
femu_ring_dequeue
size_t femu_ring_dequeue(struct rte_ring *ring, void **objs, size_t count)
Definition: rte_ring.c:228
NvmeCQueue::ctrl
struct FemuCtrl * ctrl
Definition: nvme.h:1035
MLC
@ MLC
Definition: nand.h:85
nvme_add_kvm_msi_virq
static int nvme_add_kvm_msi_virq(FemuCtrl *n, NvmeCQueue *cq)
Definition: intr.c:9
RING_F_SP_ENQ
#define RING_F_SP_ENQ
Definition: rte_ring.h:147
get_page_write_latency
static int64_t get_page_write_latency(int flash_type, int page_type)
Definition: nand.h:147
NandFlash::page_rd_lat
int64_t page_rd_lat[MAX_FLASH_TYPE]
Definition: nand.h:107
right
#define right(i)
Definition: pqueue.c:34
femu_ring_type
femu_ring_type
Definition: rte_ring.h:1121
NandFlash::chnl_pg_xfer_lat
int64_t chnl_pg_xfer_lat
Definition: nand.h:110
MLC_LOWER_PAGE
@ MLC_LOWER_PAGE
Definition: nand.h:70
TLC
@ TLC
Definition: nand.h:86
TLC_BLOCK_ERASE_LATENCY_NS
#define TLC_BLOCK_ERASE_LATENCY_NS
Definition: nand.h:41
TLC_LOWER_PAGE_READ_LATENCY_NS
#define TLC_LOWER_PAGE_READ_LATENCY_NS
Definition: nand.h:32
pqueue_t::setpri
pqueue_set_pri_f setpri
Definition: pqueue.h:61
MLC_CHNL_PAGE_TRANSFER_LATENCY_NS
#define MLC_CHNL_PAGE_TRANSFER_LATENCY_NS
Definition: nand.h:23
pqueue_pop
void * pqueue_pop(pqueue_t *q)
Definition: pqueue.c:172
QLC_UPPER_CENTER_PAGE
@ QLC_UPPER_CENTER_PAGE
Definition: nand.h:79
pqueue_insert
int pqueue_insert(pqueue_t *q, void *d)
Definition: pqueue.c:122
rte_ring_headtail::tail
volatile uint32_t tail
Definition: rte_ring.h:113
FemuCtrl::parent_obj
PCIDevice parent_obj
Definition: nvme.h:1185
SLC_CHNL_PAGE_TRANSFER_LATENCY_NS
#define SLC_CHNL_PAGE_TRANSFER_LATENCY_NS
Definition: nand.h:12
RING_F_EXACT_SZ
#define RING_F_EXACT_SZ
Definition: rte_ring.h:157
pqueue_t::setpos
pqueue_set_pos_f setpos
Definition: pqueue.h:63
rte_ring::mask
uint32_t mask
Definition: rte_ring.h:137
MLC_UPPER_PAGE_WRITE_LATENCY_NS
#define MLC_UPPER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:22
nand_flash_timing
static struct NandFlashTiming nand_flash_timing
Definition: nand.h:103
QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS
#define QLC_CENTER_UPPER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:61
rte_align32pow2
static uint32_t rte_align32pow2(uint32_t x)
Definition: rte_ring.h:167
rte_ring::prod
struct rte_ring_headtail prod
Definition: rte_ring.h:141
pqueue_t::getpri
pqueue_get_pri_f getpri
Definition: pqueue.h:60
PLC
@ PLC
Definition: nand.h:88
nvme_vector_mask
static void nvme_vector_mask(PCIDevice *dev, unsigned vector)
Definition: intr.c:109
qlc_tbl
static int qlc_tbl[MAX_SUPPORTED_PAGES_PER_BLOCK]
Definition: nand.h:124
QLC_UPPER_PAGE
@ QLC_UPPER_PAGE
Definition: nand.h:80
rte_ring_headtail::single
uint32_t single
Definition: rte_ring.h:114
TLC_CENTER_PAGE_READ_LATENCY_NS
#define TLC_CENTER_PAGE_READ_LATENCY_NS
Definition: nand.h:33
TLC_CENTER_PAGE_WRITE_LATENCY_NS
#define TLC_CENTER_PAGE_WRITE_LATENCY_NS
Definition: nand.h:37
bubble_up
static void bubble_up(pqueue_t *q, size_t i)
Definition: pqueue.c:74
femu_err
#define femu_err(fmt,...)
Definition: nvme.h:1511
pqueue_print_entry_f
void(* pqueue_print_entry_f)(FILE *out, void *a)
Definition: pqueue.h:51