]> git.proxmox.com Git - mirror_qemu.git/blame - hw/block/nvme.h
virtio-blk: Increase in_flight for request restart BH
[mirror_qemu.git] / hw / block / nvme.h
CommitLineData
f3c507ad
KB
1#ifndef HW_NVME_H
2#define HW_NVME_H
a3d9a352 3#include "block/nvme.h"
f3c507ad
KB
4
5typedef struct NvmeAsyncEvent {
6 QSIMPLEQ_ENTRY(NvmeAsyncEvent) entry;
7 NvmeAerResult result;
8} NvmeAsyncEvent;
9
10typedef struct NvmeRequest {
11 struct NvmeSQueue *sq;
7c84b1b8 12 BlockAIOCB *aiocb;
f3c507ad 13 uint16_t status;
8b9d74e0 14 bool has_sg;
f3c507ad
KB
15 NvmeCqe cqe;
16 BlockAcctCookie acct;
17 QEMUSGList qsg;
b2b2b67a 18 QEMUIOVector iov;
f3c507ad
KB
19 QTAILQ_ENTRY(NvmeRequest)entry;
20} NvmeRequest;
21
22typedef struct NvmeSQueue {
23 struct NvmeCtrl *ctrl;
24 uint16_t sqid;
25 uint16_t cqid;
26 uint32_t head;
27 uint32_t tail;
28 uint32_t size;
29 uint64_t dma_addr;
30 QEMUTimer *timer;
31 NvmeRequest *io_req;
b58deb34
PB
32 QTAILQ_HEAD(, NvmeRequest) req_list;
33 QTAILQ_HEAD(, NvmeRequest) out_req_list;
f3c507ad
KB
34 QTAILQ_ENTRY(NvmeSQueue) entry;
35} NvmeSQueue;
36
37typedef struct NvmeCQueue {
38 struct NvmeCtrl *ctrl;
39 uint8_t phase;
40 uint16_t cqid;
41 uint16_t irq_enabled;
42 uint32_t head;
43 uint32_t tail;
44 uint32_t vector;
45 uint32_t size;
46 uint64_t dma_addr;
47 QEMUTimer *timer;
b58deb34
PB
48 QTAILQ_HEAD(, NvmeSQueue) sq_list;
49 QTAILQ_HEAD(, NvmeRequest) req_list;
f3c507ad
KB
50} NvmeCQueue;
51
52typedef struct NvmeNamespace {
53 NvmeIdNs id_ns;
54} NvmeNamespace;
55
56#define TYPE_NVME "nvme"
57#define NVME(obj) \
58 OBJECT_CHECK(NvmeCtrl, (obj), TYPE_NVME)
59
60typedef struct NvmeCtrl {
61 PCIDevice parent_obj;
62 MemoryRegion iomem;
a896f7f2 63 MemoryRegion ctrl_mem;
f3c507ad
KB
64 NvmeBar bar;
65 BlockConf conf;
66
be0677a9 67 uint32_t page_size;
f3c507ad
KB
68 uint16_t page_bits;
69 uint16_t max_prp_ents;
70 uint16_t cqe_size;
71 uint16_t sqe_size;
72 uint32_t reg_size;
73 uint32_t num_namespaces;
74 uint32_t num_queues;
75 uint32_t max_q_ents;
76 uint64_t ns_size;
a896f7f2
SB
77 uint32_t cmb_size_mb;
78 uint32_t cmbsz;
79 uint32_t cmbloc;
80 uint8_t *cmbuf;
5e9aa92e 81 uint64_t irq_status;
f3c507ad
KB
82
83 char *serial;
84 NvmeNamespace *namespaces;
85 NvmeSQueue **sq;
86 NvmeCQueue **cq;
87 NvmeSQueue admin_sq;
88 NvmeCQueue admin_cq;
89 NvmeIdCtrl id_ctrl;
90} NvmeCtrl;
91
92#endif /* HW_NVME_H */