kvm/i386: Set proper nested state format for SVM
[qemu/ar7.git] / hw / block / nvme-ns.h
blob83734f4606e16312e2e975858c0ed0d35356c13c
1 /*
2 * QEMU NVM Express Virtual Namespace
4 * Copyright (c) 2019 CNEX Labs
5 * Copyright (c) 2020 Samsung Electronics
7 * Authors:
8 * Klaus Jensen <k.jensen@samsung.com>
10 * This work is licensed under the terms of the GNU GPL, version 2. See the
11 * COPYING file in the top-level directory.
15 #ifndef NVME_NS_H
16 #define NVME_NS_H
18 #define TYPE_NVME_NS "nvme-ns"
19 #define NVME_NS(obj) \
20 OBJECT_CHECK(NvmeNamespace, (obj), TYPE_NVME_NS)
22 typedef struct NvmeNamespaceParams {
23 uint32_t nsid;
24 } NvmeNamespaceParams;
26 typedef struct NvmeNamespace {
27 DeviceState parent_obj;
28 BlockConf blkconf;
29 int32_t bootindex;
30 int64_t size;
31 NvmeIdNs id_ns;
33 NvmeNamespaceParams params;
34 } NvmeNamespace;
36 static inline uint32_t nvme_nsid(NvmeNamespace *ns)
38 if (ns) {
39 return ns->params.nsid;
42 return -1;
45 static inline NvmeLBAF *nvme_ns_lbaf(NvmeNamespace *ns)
47 NvmeIdNs *id_ns = &ns->id_ns;
48 return &id_ns->lbaf[NVME_ID_NS_FLBAS_INDEX(id_ns->flbas)];
51 static inline uint8_t nvme_ns_lbads(NvmeNamespace *ns)
53 return nvme_ns_lbaf(ns)->ds;
56 /* calculate the number of LBAs that the namespace can accomodate */
57 static inline uint64_t nvme_ns_nlbas(NvmeNamespace *ns)
59 return ns->size >> nvme_ns_lbads(ns);
62 /* convert an LBA to the equivalent in bytes */
63 static inline size_t nvme_l2b(NvmeNamespace *ns, uint64_t lba)
65 return lba << nvme_ns_lbads(ns);
68 typedef struct NvmeCtrl NvmeCtrl;
70 int nvme_ns_setup(NvmeCtrl *n, NvmeNamespace *ns, Error **errp);
71 void nvme_ns_drain(NvmeNamespace *ns);
72 void nvme_ns_flush(NvmeNamespace *ns);
74 #endif /* NVME_NS_H */