target/mips/tx79: Salvage instructions description comment
[qemu/ar7.git] / hw / block / nvme-subsys.h
blobfb66ae752ad515200976aff6a59dda061c9a3e83
1 /*
2 * QEMU NVM Express Subsystem: nvme-subsys
4 * Copyright (c) 2021 Minwoo Im <minwoo.im.dev@gmail.com>
6 * This code is licensed under the GNU GPL v2. Refer COPYING.
7 */
9 #ifndef NVME_SUBSYS_H
10 #define NVME_SUBSYS_H
12 #define TYPE_NVME_SUBSYS "nvme-subsys"
13 #define NVME_SUBSYS(obj) \
14 OBJECT_CHECK(NvmeSubsystem, (obj), TYPE_NVME_SUBSYS)
16 #define NVME_SUBSYS_MAX_CTRLS 32
17 #define NVME_SUBSYS_MAX_NAMESPACES 256
19 typedef struct NvmeCtrl NvmeCtrl;
20 typedef struct NvmeNamespace NvmeNamespace;
21 typedef struct NvmeSubsystem {
22 DeviceState parent_obj;
23 uint8_t subnqn[256];
25 NvmeCtrl *ctrls[NVME_SUBSYS_MAX_CTRLS];
26 /* Allocated namespaces for this subsystem */
27 NvmeNamespace *namespaces[NVME_SUBSYS_MAX_NAMESPACES + 1];
29 struct {
30 char *nqn;
31 } params;
32 } NvmeSubsystem;
34 int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp);
35 int nvme_subsys_register_ns(NvmeNamespace *ns, Error **errp);
37 static inline NvmeCtrl *nvme_subsys_ctrl(NvmeSubsystem *subsys,
38 uint32_t cntlid)
40 if (!subsys) {
41 return NULL;
44 return subsys->ctrls[cntlid];
48 * Return allocated namespace of the specified nsid in the subsystem.
50 static inline NvmeNamespace *nvme_subsys_ns(NvmeSubsystem *subsys,
51 uint32_t nsid)
53 if (!subsys) {
54 return NULL;
57 return subsys->namespaces[nsid];
60 #endif /* NVME_SUBSYS_H */