1/* 2 * Copyright (c) 2015-2017 Oracle. All rights reserved. 3 * Copyright (c) 2003-2007 Network Appliance, Inc. All rights reserved. 4 * 5 * This software is available to you under a choice of one of two 6 * licenses. You may choose to be licensed under the terms of the GNU 7 * General Public License (GPL) Version 2, available from the file 8 * COPYING in the main directory of this source tree, or the BSD-type 9 * license below: 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 15 * Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 18 * Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials provided 21 * with the distribution. 22 * 23 * Neither the name of the Network Appliance, Inc. nor the names of 24 * its contributors may be used to endorse or promote products 25 * derived from this software without specific prior written 26 * permission. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 39 */ 40 41#ifndef _LINUX_SUNRPC_RPC_RDMA_H 42#define _LINUX_SUNRPC_RPC_RDMA_H 43 44#include <linux/types.h> 45#include <linux/bitops.h> 46 47#define RPCRDMA_VERSION 1 48#define rpcrdma_version cpu_to_be32(RPCRDMA_VERSION) 49 50enum { 51 RPCRDMA_V1_DEF_INLINE_SIZE = 1024, 52}; 53 54/* 55 * XDR sizes, in quads 56 */ 57enum { 58 rpcrdma_fixed_maxsz = 4, 59 rpcrdma_segment_maxsz = 4, 60 rpcrdma_readchunk_maxsz = 2 + rpcrdma_segment_maxsz, 61}; 62 63/* 64 * Smallest RPC/RDMA header: rm_xid through rm_type, then rm_nochunks 65 */ 66#define RPCRDMA_HDRLEN_MIN (sizeof(__be32) * 7) 67#define RPCRDMA_HDRLEN_ERR (sizeof(__be32) * 5) 68 69enum rpcrdma_errcode { 70 ERR_VERS = 1, 71 ERR_CHUNK = 2 72}; 73 74enum rpcrdma_proc { 75 RDMA_MSG = 0, /* An RPC call or reply msg */ 76 RDMA_NOMSG = 1, /* An RPC call or reply msg - separate body */ 77 RDMA_MSGP = 2, /* An RPC call or reply msg with padding */ 78 RDMA_DONE = 3, /* Client signals reply completion */ 79 RDMA_ERROR = 4 /* An RPC RDMA encoding error */ 80}; 81 82#define rdma_msg cpu_to_be32(RDMA_MSG) 83#define rdma_nomsg cpu_to_be32(RDMA_NOMSG) 84#define rdma_msgp cpu_to_be32(RDMA_MSGP) 85#define rdma_done cpu_to_be32(RDMA_DONE) 86#define rdma_error cpu_to_be32(RDMA_ERROR) 87 88#define err_vers cpu_to_be32(ERR_VERS) 89#define err_chunk cpu_to_be32(ERR_CHUNK) 90 91/* 92 * Private extension to RPC-over-RDMA Version One. 93 * Message passed during RDMA-CM connection set-up. 94 * 95 * Add new fields at the end, and don't permute existing 96 * fields. 97 */ 98struct rpcrdma_connect_private { 99 __be32 cp_magic; 100 u8 cp_version; 101 u8 cp_flags; 102 u8 cp_send_size; 103 u8 cp_recv_size; 104} __packed; 105 106#define rpcrdma_cmp_magic __cpu_to_be32(0xf6ab0e18) 107 108enum { 109 RPCRDMA_CMP_VERSION = 1, 110 RPCRDMA_CMP_F_SND_W_INV_OK = BIT(0), 111}; 112 113static inline u8 114rpcrdma_encode_buffer_size(unsigned int size) 115{ 116 return (size >> 10) - 1; 117} 118 119static inline unsigned int 120rpcrdma_decode_buffer_size(u8 val) 121{ 122 return ((unsigned int)val + 1) << 10; 123} 124 125#endif /* _LINUX_SUNRPC_RPC_RDMA_H */ 126