nVME
struct nvme_command { uint8_t opc; uint8_t fuse; uint16_t cid; uint32_t nsid; uint64_t rsvd2; uint64_t mptr; uint64_t prp1; uint64_t prp2; uint32_t cdw10; uint32_t cdw11; uint32_t cdw12; uint32_t cdw13; uint32_t cdw14; uint32_t cdw15;};struct nvme_completion { uint32_t result; uint32_t rsvd; uint16_t sq_head; uint16_t sq_id; uint16_t cid; uint16_t status;};struct nvme_cc { union { uint32_t raw; struct { uint32_t en; uint32_t __reserved0; uint32_t css; uint32_t mps; uint32_t ams; uint32_t shn; uint32_t iosqes; uint32_t iocqes; uint32_t __reserved1; }; };};struct nvme_regs { uint32_t cap_lo; uint32_t cap_hi; uint32_t version; uint32_t intms; uint32_t intmc; struct nvme_cc cc; uint32_t nssr; uint32_t csts; uint32_t reserved1; uint32_t aqa; uint32_t asq_lo; uint32_t asq_hi; uint32_t acq_lo; uint32_t acq_hi; uint32_t reserved4[1018];};struct nvme_regs referenced types:
struct nvme_bio_data { uint64_t *prps; uint64_t prp_count;};struct nvme_request { uint32_t qid; uint64_t lba; void *buffer; uint64_t size; uint64_t sector_count; bool write; bool done; uint16_t status; int32_t remaining_parts; void (*on_complete)(struct nvme_request *); struct nvme_bio_data *bio_data; struct thread *waiter; void *user_data; struct list_head list_node;};struct nvme_request referenced types:
struct nvme_waiting_requests { struct spinlock lock; struct list_head list;};struct nvme_waiting_requests referenced types:
struct nvme_queue { struct nvme_command *sq; struct nvme_completion *cq; uint64_t sq_phys; uint64_t cq_phys; uint16_t sq_tail; uint16_t cq_head; uint16_t sq_depth; uint16_t cq_depth; uint8_t cq_phase; uint32_t *sq_db; uint32_t *cq_db; struct nvme_request **sq_requests; uint16_t outstanding; struct spinlock lock;};struct nvme_queue referenced types:
struct nvme_device { struct nvme_regs *regs; uint64_t cap; uint32_t version; uint32_t doorbell_stride; uint32_t page_size; uint32_t *admin_sq_db; uint32_t *admin_cq_db; struct nvme_command *admin_sq; struct nvme_completion *admin_cq; uint64_t admin_sq_phys; uint64_t admin_cq_phys; uint16_t admin_sq_tail; uint16_t admin_cq_head; uint16_t admin_q_depth; uint8_t admin_cq_phase; struct nvme_queue **io_queues; struct nvme_waiting_requests waiting_requests; struct nvme_waiting_requests finished_requests; struct work work; atomic_bool on_sem; struct semaphore sem; uint8_t *isr_index; uint32_t queue_count; uint32_t sector_size; uint64_t max_transfer_size; struct generic_disk *generic_disk; uint64_t total_outstanding; struct workqueue *workqueue;};struct nvme_device referenced types:
struct nvme_regsstruct nvme_commandstruct nvme_completionstruct nvme_queuestruct nvme_waiting_requestsstruct workstruct semaphorestruct generic_diskstruct workqueue
struct nvme_identify { uint8_t data[PAGE_SIZE];};struct nvme_lbaf { uint16_t ms; uint8_t lbads; uint8_t rp; uint8_t reserved;};struct nvme_identify_namespace { uint64_t nsze; uint64_t ncap; uint64_t nuse; uint8_t nsfeat; uint8_t nlbaf; uint8_t flbas; uint8_t mc; uint8_t dpc; uint8_t dps; uint8_t nmic; uint8_t rescap; uint8_t fpi; uint8_t dlfeat; uint16_t nawun; uint16_t nawupf; uint16_t nacwu; uint16_t nabsn; uint16_t nabo; uint16_t nabspf; uint16_t noiob; uint64_t nvmcap[2]; uint16_t npwg; uint16_t npwa; uint16_t npdg; uint16_t npda; uint16_t nows; uint16_t mssrl; uint32_t mcl; uint8_t msrc; uint8_t reserved0[11]; uint32_t adagrpid; uint8_t reserved1[3]; uint8_t nsattr; uint16_t nvmsetid; uint16_t endgid; uint64_t nguid[2]; uint64_t eui64; struct nvme_lbaf lbaf[64]; uint8_t vendor_specific[3712];};struct nvme_identify_namespace referenced types:
struct nvme_identify_controller { uint16_t vid; uint16_t ssvid; char sn[20]; char mn[40]; char fr[8]; uint8_t rab; uint8_t ieee[3]; uint8_t mic; uint8_t mdts; uint16_t cntlid; uint32_t ver; uint32_t rtd3r; uint32_t rtd3e; uint32_t oaes; uint32_t ctratt; uint8_t rsvd96[156]; uint16_t oacs; uint8_t acl; uint8_t aerl; uint8_t frmw; uint8_t lpa; uint8_t elpe; uint8_t npss; uint8_t avscc; uint8_t apsta; uint16_t wctemp; uint16_t cctemp; uint16_t mtfa; uint32_t hmpre; uint32_t hmmin; uint64_t tnvmcap[2]; uint64_t unvmcap[2]; uint32_t rpmbs; uint16_t edstt; uint8_t dsto; uint8_t fwug; uint16_t kas; uint16_t hctma; uint16_t mntmt; uint16_t mxtmt; uint32_t sanicap; uint8_t rsvd228[180]; uint8_t sqes; uint8_t cqes;};