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
15enum nvme_rdma_cm_fmt {
16	NVME_RDMA_CM_FMT_1_0 = 0x0,
17};
18
19enum 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
30static 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 */
62struct 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 */
76struct 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 */
88struct nvme_rdma_cm_rej {
89	__le16		recfmt;
90	__le16		sts;
91};
92
93#endif /* _LINUX_NVME_RDMA_H */
94