Linux 6.9-rc1
[linux-2.6-microblaze.git] / include / linux / nvme-rdma.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2015 Mellanox Technologies. All rights reserved.
4  */
5
6 #ifndef _LINUX_NVME_RDMA_H
7 #define _LINUX_NVME_RDMA_H
8
9 #define NVME_RDMA_IP_PORT               4420
10
11 #define NVME_RDMA_MAX_QUEUE_SIZE 256
12 #define NVME_RDMA_MAX_METADATA_QUEUE_SIZE 128
13 #define NVME_RDMA_DEFAULT_QUEUE_SIZE 128
14
15 enum nvme_rdma_cm_fmt {
16         NVME_RDMA_CM_FMT_1_0 = 0x0,
17 };
18
19 enum nvme_rdma_cm_status {
20         NVME_RDMA_CM_INVALID_LEN        = 0x01,
21         NVME_RDMA_CM_INVALID_RECFMT     = 0x02,
22         NVME_RDMA_CM_INVALID_QID        = 0x03,
23         NVME_RDMA_CM_INVALID_HSQSIZE    = 0x04,
24         NVME_RDMA_CM_INVALID_HRQSIZE    = 0x05,
25         NVME_RDMA_CM_NO_RSC             = 0x06,
26         NVME_RDMA_CM_INVALID_IRD        = 0x07,
27         NVME_RDMA_CM_INVALID_ORD        = 0x08,
28 };
29
30 static inline const char *nvme_rdma_cm_msg(enum nvme_rdma_cm_status status)
31 {
32         switch (status) {
33         case NVME_RDMA_CM_INVALID_LEN:
34                 return "invalid length";
35         case NVME_RDMA_CM_INVALID_RECFMT:
36                 return "invalid record format";
37         case NVME_RDMA_CM_INVALID_QID:
38                 return "invalid queue ID";
39         case NVME_RDMA_CM_INVALID_HSQSIZE:
40                 return "invalid host SQ size";
41         case NVME_RDMA_CM_INVALID_HRQSIZE:
42                 return "invalid host RQ size";
43         case NVME_RDMA_CM_NO_RSC:
44                 return "resource not found";
45         case NVME_RDMA_CM_INVALID_IRD:
46                 return "invalid IRD";
47         case NVME_RDMA_CM_INVALID_ORD:
48                 return "Invalid ORD";
49         default:
50                 return "unrecognized reason";
51         }
52 }
53
54 /**
55  * struct nvme_rdma_cm_req - rdma connect request
56  *
57  * @recfmt:        format of the RDMA Private Data
58  * @qid:           queue Identifier for the Admin or I/O Queue
59  * @hrqsize:       host receive queue size to be created
60  * @hsqsize:       host send queue size to be created
61  */
62 struct nvme_rdma_cm_req {
63         __le16          recfmt;
64         __le16          qid;
65         __le16          hrqsize;
66         __le16          hsqsize;
67         u8              rsvd[24];
68 };
69
70 /**
71  * struct nvme_rdma_cm_rep - rdma connect reply
72  *
73  * @recfmt:        format of the RDMA Private Data
74  * @crqsize:       controller receive queue size
75  */
76 struct nvme_rdma_cm_rep {
77         __le16          recfmt;
78         __le16          crqsize;
79         u8              rsvd[28];
80 };
81
82 /**
83  * struct nvme_rdma_cm_rej - rdma connect reject
84  *
85  * @recfmt:        format of the RDMA Private Data
86  * @sts:           error status for the associated connect request
87  */
88 struct nvme_rdma_cm_rej {
89         __le16          recfmt;
90         __le16          sts;
91 };
92
93 #endif /* _LINUX_NVME_RDMA_H */