xref: /linux/include/linux/nvme-rdma.h (revision ae22a94997b8a03dcb3c922857c203246711f9d4)
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 */
94