3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld/*
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * This file and its contents are supplied under the terms of the
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * Common Development and Distribution License ("CDDL"), version 1.0.
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * You may only use this file in accordance with the terms of version
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * 1.0 of the CDDL.
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld *
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * A full copy of the text of the CDDL should have accompanied this
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * source. A copy of the CDDL is also available via the Internet at
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * http://www.illumos.org/license/CDDL.
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld/*
e8ba2a389f6ca6999ca72dabbe2871e894bf6b67Hans Rosenfeld * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
8834f7ac63a18ac48dfacf20506346d82b04fc14Youzhong Yang * Copyright 2016 The MathWorks, Inc. All rights reserved.
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#ifndef _NVME_VAR_H
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define _NVME_VAR_H
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#include <sys/ddi.h>
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#include <sys/sunddi.h>
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#include <sys/blkdev.h>
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#include <sys/taskq_impl.h>
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld/*
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld * NVMe driver state
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#ifdef __cplusplus
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld/* extern "C" { */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#endif
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_FMA_INIT 0x1
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_REGS_MAPPED 0x2
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_ADMIN_QUEUE 0x4
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_CTRL_LIMITS 0x8
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_INTERRUPTS 0x10
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_MIN_ADMIN_QUEUE_LEN 16
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_MIN_IO_QUEUE_LEN 16
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_DEFAULT_ADMIN_QUEUE_LEN 256
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_DEFAULT_IO_QUEUE_LEN 1024
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_DEFAULT_ASYNC_EVENT_LIMIT 10
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#define NVME_MIN_ASYNC_EVENT_LIMIT 1
6801591e1fea06222c50622c468541c82c67cdb4Hans Rosenfeld#define NVME_DEFAULT_MIN_BLOCK_SIZE 512
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme nvme_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme_namespace nvme_namespace_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme_dma nvme_dma_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme_cmd nvme_cmd_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme_qpair nvme_qpair_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldtypedef struct nvme_task_arg nvme_task_arg_t;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme_dma {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_dma_handle_t nd_dmah;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_acc_handle_t nd_acch;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_dma_cookie_t nd_cookie;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nd_ncookie;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld caddr_t nd_memp;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t nd_len;
8834f7ac63a18ac48dfacf20506346d82b04fc14Youzhong Yang boolean_t nd_cached;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme_cmd {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_sqe_t nc_sqe;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_cqe_t nc_cqe;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld void (*nc_callback)(void *);
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld bd_xfer_t *nc_xfer;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld boolean_t nc_completed;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint16_t nc_sqid;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_dma_t *nc_dma;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld kmutex_t nc_mutex;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld kcondvar_t nc_cv;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld taskq_ent_t nc_tqent;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_t *nc_nvme;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme_qpair {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t nq_nentry;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_dma_t *nq_sqdma;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_sqe_t *nq_sq;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nq_sqhead;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nq_sqtail;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uintptr_t nq_sqtdbl;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_dma_t *nq_cqdma;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_cqe_t *nq_cq;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nq_cqhead;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nq_cqtail;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uintptr_t nq_cqhdbl;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_cmd_t **nq_cmd;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint16_t nq_next_cmd;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t nq_active_cmds;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int nq_phase;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld kmutex_t nq_mutex;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld dev_info_t *n_dip;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_progress;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld caddr_t n_regs;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_acc_handle_t n_regh;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld kmem_cache_t *n_cmd_cache;
8834f7ac63a18ac48dfacf20506346d82b04fc14Youzhong Yang kmem_cache_t *n_prp_cache;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t n_inth_sz;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_intr_handle_t *n_inth;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_intr_cnt;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint_t n_intr_pri;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_intr_cap;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_intr_type;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_intr_types;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
510a68476ba6e33759b7603130d76db4cec783d1Hans Rosenfeld char *n_product;
510a68476ba6e33759b7603130d76db4cec783d1Hans Rosenfeld char *n_vendor;
510a68476ba6e33759b7603130d76db4cec783d1Hans Rosenfeld
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld nvme_version_t n_version;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld boolean_t n_dead;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld boolean_t n_strict_version;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld boolean_t n_ignore_unknown_vendor_status;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_admin_queue_len;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_io_queue_len;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint16_t n_async_event_limit;
6801591e1fea06222c50622c468541c82c67cdb4Hans Rosenfeld uint_t n_min_block_size;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint16_t n_abort_command_limit;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint64_t n_max_data_transfer_size;
d148d46e69709052e6d92205c98874f3e7cfd4c0Hans Rosenfeld boolean_t n_write_cache_present;
d148d46e69709052e6d92205c98874f3e7cfd4c0Hans Rosenfeld boolean_t n_write_cache_enabled;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_error_log_len;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_nssr_supported;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_doorbell_stride;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_timeout;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_arbitration_mechanisms;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_cont_queues_reqd;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_max_queue_entries;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_pageshift;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_pagesize;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_namespace_count;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_ioq_count;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_identify_ctrl_t *n_idctl;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_qpair_t *n_adminq;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_qpair_t **n_ioq;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_namespace_t *n_ns;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_dma_attr_t n_queue_dma_attr;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_dma_attr_t n_prp_dma_attr;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_dma_attr_t n_sgl_dma_attr;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_device_acc_attr_t n_reg_acc_attr;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_iblock_cookie_t n_fm_ibc;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld int n_fm_cap;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ksema_t n_abort_sema;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld ddi_taskq_t *n_cmd_taskq;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_error_log_entry_t *n_error_log;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_health_log_t *n_health_log;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_fwslot_log_t *n_fwslot_log;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld /* errors detected by driver */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_dma_bind_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_abort_failed;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_cmd_timeout;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_cmd_aborted;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_async_resubmit_failed;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_wrong_logpage;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_unknown_logpage;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_too_many_cookies;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_admin_queue_full;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld /* errors detected by hardware */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_data_xfr_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_internal_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_abort_rq_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_abort_sq_del;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_nvm_cap_exc;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_nvm_ns_notrdy;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_cq_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_qid_err;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_max_qsz_exc;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_int_vect;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_log_page;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_format;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_q_del;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_cnfl_attr;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_inv_prot;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_readonly;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld /* errors reported by asynchronous events */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_diagfail_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_persistent_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_transient_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_fw_load_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_reliability_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_temperature_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_spare_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_vendor_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t n_unknown_event;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme_namespace {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_t *ns_nvme;
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld uint8_t ns_eui64[8];
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld bd_handle_t ns_bd_hdl;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld uint32_t ns_id;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t ns_block_count;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t ns_block_size;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld size_t ns_best_block_size;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld boolean_t ns_ignore;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_identify_nsid_t *ns_idns;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld /*
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld * If a namespace has no EUI64, we create a devid in
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld * nvme_prepare_devid().
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld */
24979ca36afa68d08e082148fcbf4c5dc73f7849Hans Rosenfeld char *ns_devid;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeldstruct nvme_task_arg {
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_t *nt_nvme;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld nvme_cmd_t *nt_cmd;
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld};
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#ifdef __cplusplus
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld/* } */
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#endif
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld
3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5Hans Rosenfeld#endif /* _NVME_VAR_H */