FEMU  原版 master 7e238cc
FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST'18)
oc20.c 文件参考
#include "./oc20.h"
oc20.c 的引用(Include)关系图:

函数

static bool is_oc20_admin_cmd (uint8_t opcode)
 
static uint16_t oc20_dma_read (FemuCtrl *n, uint8_t *ptr, uint32_t len, NvmeCmd *cmd)
 
static uint16_t oc20_dma_write (FemuCtrl *n, uint8_t *ptr, uint32_t len, NvmeCmd *cmd)
 
static uint16_t oc20_init_chunk_info (Oc20Namespace *lns)
 
static Oc20CSoc20_chunk_get_state (FemuCtrl *n, NvmeNamespace *ns, uint64_t lba)
 
static uint16_t oc20_advance_wp (FemuCtrl *n, NvmeNamespace *ns, uint64_t lba, uint16_t nlb, NvmeRequest *req)
 
static void oc20_parse_lba_list (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req, Oc20AddrBucket *bucket, int *nr)
 
static int oc20_advance_status (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t oc20_rw_check_chunk_write (FemuCtrl *n, NvmeCmd *cmd, uint64_t lba, uint32_t ws, NvmeRequest *req)
 
static uint16_t oc20_rw_check_write_req (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t oc20_rw_check_chunk_read (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req, uint64_t lba)
 
static uint16_t oc20_rw_check_read_req (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t oc20_rw_check_vector_req (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t oc20_chunk_set_free (FemuCtrl *n, NvmeNamespace *ns, uint64_t lba, hwaddr mptr, NvmeRequest *req)
 
static uint16_t oc20_rw_check_req (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req)
 
static unsigned get_unsigned (char *string, const char *key, unsigned int *value)
 
static int get_ch_lun_chk (char *chunkinfo, unsigned int *grp, unsigned int *lun, unsigned int *chk)
 
static int get_chunk_meta_index (FemuCtrl *n, NvmeNamespace *ns, unsigned int grp, unsigned int lun, unsigned int chk)
 
static int set_resetfail_chunk (FemuCtrl *n, NvmeNamespace *ns, char *chunkinfo)
 
static int set_writefail_sector (FemuCtrl *n, NvmeNamespace *ns, char *secinfo)
 
static int oc20_resetfail_load (FemuCtrl *n, NvmeNamespace *ns, Error **errp)
 
static int oc20_writefail_load (FemuCtrl *n, NvmeNamespace *ns, Error **errp)
 
static Oc20Namespacecmd_lns (FemuCtrl *n, NvmeCmd *cmd)
 
static NvmeNamespacecmd_ns (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t oc20_rw (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req, bool vector)
 
static uint16_t oc20_identify (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t oc20_erase (FemuCtrl *n, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t oc20_chunk_info (FemuCtrl *n, NvmeCmd *cmd, uint32_t buf_len, uint64_t off)
 
static uint16_t oc20_get_log (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t oc20_set_log (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t oc20_admin_cmd (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t oc20_io_cmd (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req)
 
static void oc20_free_namespace (FemuCtrl *n, NvmeNamespace *ns)
 
static void oc20_nvme_ns_init_identify (FemuCtrl *n, NvmeIdNs *id_ns)
 
static uint64_t nvme_ns_calc_blks (FemuCtrl *n, NvmeNamespace *ns)
 
static void nvme_ns_init_predef (FemuCtrl *n, NvmeNamespace *ns)
 
static void femu_oc20_init_id_ctrl (FemuCtrl *n, NvmeNamespace *ns, Oc20NamespaceGeometry *ln)
 
static int oc20_init_namespace (FemuCtrl *n, NvmeNamespace *ns, Error **errp)
 
static int oc20_init_namespaces (FemuCtrl *n, Error **errp)
 
static void oc20_set_ctrl_str (FemuCtrl *n)
 
static void oc20_release_locks (FemuCtrl *n)
 
static int oc20_init_misc (FemuCtrl *n)
 
static void oc20_init (FemuCtrl *n, Error **errp)
 
static void oc20_exit (FemuCtrl *n)
 
int nvme_register_ocssd20 (FemuCtrl *n)
 

函数说明

◆ cmd_lns()

static Oc20Namespace* cmd_lns ( FemuCtrl n,
NvmeCmd cmd 
)
inlinestatic

◆ cmd_ns()

static NvmeNamespace* cmd_ns ( FemuCtrl n,
NvmeCmd cmd 
)
inlinestatic
这是这个函数的调用关系图:

◆ femu_oc20_init_id_ctrl()

static void femu_oc20_init_id_ctrl ( FemuCtrl n,
NvmeNamespace ns,
Oc20NamespaceGeometry ln 
)
static
这是这个函数的调用关系图:

◆ get_ch_lun_chk()

static int get_ch_lun_chk ( char *  chunkinfo,
unsigned int *  grp,
unsigned int *  lun,
unsigned int *  chk 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ get_chunk_meta_index()

static int get_chunk_meta_index ( FemuCtrl n,
NvmeNamespace ns,
unsigned int  grp,
unsigned int  lun,
unsigned int  chk 
)
static
这是这个函数的调用关系图:

◆ get_unsigned()

static unsigned get_unsigned ( char *  string,
const char *  key,
unsigned int *  value 
)
static
这是这个函数的调用关系图:

◆ is_oc20_admin_cmd()

static bool is_oc20_admin_cmd ( uint8_t  opcode)
inlinestatic

◆ nvme_ns_calc_blks()

static uint64_t nvme_ns_calc_blks ( FemuCtrl n,
NvmeNamespace ns 
)
static
这是这个函数的调用关系图:

◆ nvme_ns_init_predef()

static void nvme_ns_init_predef ( FemuCtrl n,
NvmeNamespace ns 
)
static
这是这个函数的调用关系图:

◆ nvme_register_ocssd20()

int nvme_register_ocssd20 ( FemuCtrl n)
函数调用图:
这是这个函数的调用关系图:

◆ oc20_admin_cmd()

static uint16_t oc20_admin_cmd ( FemuCtrl n,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_advance_status()

static int oc20_advance_status ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_advance_wp()

static uint16_t oc20_advance_wp ( FemuCtrl n,
NvmeNamespace ns,
uint64_t  lba,
uint16_t  nlb,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_chunk_get_state()

static Oc20CS* oc20_chunk_get_state ( FemuCtrl n,
NvmeNamespace ns,
uint64_t  lba 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_chunk_info()

static uint16_t oc20_chunk_info ( FemuCtrl n,
NvmeCmd cmd,
uint32_t  buf_len,
uint64_t  off 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_chunk_set_free()

static uint16_t oc20_chunk_set_free ( FemuCtrl n,
NvmeNamespace ns,
uint64_t  lba,
hwaddr  mptr,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_dma_read()

static uint16_t oc20_dma_read ( FemuCtrl n,
uint8_t *  ptr,
uint32_t  len,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_dma_write()

static uint16_t oc20_dma_write ( FemuCtrl n,
uint8_t *  ptr,
uint32_t  len,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_erase()

static uint16_t oc20_erase ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_exit()

static void oc20_exit ( FemuCtrl n)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_free_namespace()

static void oc20_free_namespace ( FemuCtrl n,
NvmeNamespace ns 
)
static
这是这个函数的调用关系图:

◆ oc20_get_log()

static uint16_t oc20_get_log ( FemuCtrl n,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_identify()

static uint16_t oc20_identify ( FemuCtrl n,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_init()

static void oc20_init ( FemuCtrl n,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_init_chunk_info()

static uint16_t oc20_init_chunk_info ( Oc20Namespace lns)
static
这是这个函数的调用关系图:

◆ oc20_init_misc()

static int oc20_init_misc ( FemuCtrl n)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_init_namespace()

static int oc20_init_namespace ( FemuCtrl n,
NvmeNamespace ns,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_init_namespaces()

static int oc20_init_namespaces ( FemuCtrl n,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_io_cmd()

static uint16_t oc20_io_cmd ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_nvme_ns_init_identify()

static void oc20_nvme_ns_init_identify ( FemuCtrl n,
NvmeIdNs id_ns 
)
static
这是这个函数的调用关系图:

◆ oc20_parse_lba_list()

static void oc20_parse_lba_list ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req,
Oc20AddrBucket bucket,
int *  nr 
)
static
这是这个函数的调用关系图:

◆ oc20_release_locks()

static void oc20_release_locks ( FemuCtrl n)
static
这是这个函数的调用关系图:

◆ oc20_resetfail_load()

static int oc20_resetfail_load ( FemuCtrl n,
NvmeNamespace ns,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw()

static uint16_t oc20_rw ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req,
bool  vector 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_chunk_read()

static uint16_t oc20_rw_check_chunk_read ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req,
uint64_t  lba 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_chunk_write()

static uint16_t oc20_rw_check_chunk_write ( FemuCtrl n,
NvmeCmd cmd,
uint64_t  lba,
uint32_t  ws,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_read_req()

static uint16_t oc20_rw_check_read_req ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_req()

static uint16_t oc20_rw_check_req ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_vector_req()

static uint16_t oc20_rw_check_vector_req ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_rw_check_write_req()

static uint16_t oc20_rw_check_write_req ( FemuCtrl n,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_set_ctrl_str()

static void oc20_set_ctrl_str ( FemuCtrl n)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_set_log()

static uint16_t oc20_set_log ( FemuCtrl n,
NvmeCmd cmd 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ oc20_writefail_load()

static int oc20_writefail_load ( FemuCtrl n,
NvmeNamespace ns,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ set_resetfail_chunk()

static int set_resetfail_chunk ( FemuCtrl n,
NvmeNamespace ns,
char *  chunkinfo 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ set_writefail_sector()

static int set_writefail_sector ( FemuCtrl n,
NvmeNamespace ns,
char *  secinfo 
)
static
函数调用图:
这是这个函数的调用关系图: