1*d6b92ffaSHans Petter Selasky /* 2*d6b92ffaSHans Petter Selasky * Copyright (c) 2005 Topspin Communications. All rights reserved. 3*d6b92ffaSHans Petter Selasky * 4*d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 5*d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 6*d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 7*d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 8*d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 9*d6b92ffaSHans Petter Selasky * 10*d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 11*d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 12*d6b92ffaSHans Petter Selasky * conditions are met: 13*d6b92ffaSHans Petter Selasky * 14*d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 15*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 16*d6b92ffaSHans Petter Selasky * disclaimer. 17*d6b92ffaSHans Petter Selasky * 18*d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 19*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 20*d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 21*d6b92ffaSHans Petter Selasky * provided with the distribution. 22*d6b92ffaSHans Petter Selasky * 23*d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24*d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25*d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26*d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27*d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28*d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29*d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30*d6b92ffaSHans Petter Selasky * SOFTWARE. 31*d6b92ffaSHans Petter Selasky */ 32*d6b92ffaSHans Petter Selasky 33*d6b92ffaSHans Petter Selasky #ifndef INFINIBAND_OPCODE_H 34*d6b92ffaSHans Petter Selasky #define INFINIBAND_OPCODE_H 35*d6b92ffaSHans Petter Selasky 36*d6b92ffaSHans Petter Selasky /* 37*d6b92ffaSHans Petter Selasky * This macro cleans up the definitions of constants for BTH opcodes. 38*d6b92ffaSHans Petter Selasky * It is used to define constants such as IBV_OPCODE_UD_SEND_ONLY, 39*d6b92ffaSHans Petter Selasky * which becomes IBV_OPCODE_UD + IBV_OPCODE_SEND_ONLY, and this gives 40*d6b92ffaSHans Petter Selasky * the correct value. 41*d6b92ffaSHans Petter Selasky * 42*d6b92ffaSHans Petter Selasky * In short, user code should use the constants defined using the 43*d6b92ffaSHans Petter Selasky * macro rather than worrying about adding together other constants. 44*d6b92ffaSHans Petter Selasky */ 45*d6b92ffaSHans Petter Selasky #define IBV_OPCODE(transport, op) \ 46*d6b92ffaSHans Petter Selasky IBV_OPCODE_ ## transport ## _ ## op = \ 47*d6b92ffaSHans Petter Selasky IBV_OPCODE_ ## transport + IBV_OPCODE_ ## op 48*d6b92ffaSHans Petter Selasky 49*d6b92ffaSHans Petter Selasky enum { 50*d6b92ffaSHans Petter Selasky /* transport types -- just used to define real constants */ 51*d6b92ffaSHans Petter Selasky IBV_OPCODE_RC = 0x00, 52*d6b92ffaSHans Petter Selasky IBV_OPCODE_UC = 0x20, 53*d6b92ffaSHans Petter Selasky IBV_OPCODE_RD = 0x40, 54*d6b92ffaSHans Petter Selasky IBV_OPCODE_UD = 0x60, 55*d6b92ffaSHans Petter Selasky 56*d6b92ffaSHans Petter Selasky /* operations -- just used to define real constants */ 57*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_FIRST = 0x00, 58*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_MIDDLE = 0x01, 59*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_LAST = 0x02, 60*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_LAST_WITH_IMMEDIATE = 0x03, 61*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_ONLY = 0x04, 62*d6b92ffaSHans Petter Selasky IBV_OPCODE_SEND_ONLY_WITH_IMMEDIATE = 0x05, 63*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_FIRST = 0x06, 64*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_MIDDLE = 0x07, 65*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_LAST = 0x08, 66*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_LAST_WITH_IMMEDIATE = 0x09, 67*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_ONLY = 0x0a, 68*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_WRITE_ONLY_WITH_IMMEDIATE = 0x0b, 69*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_READ_REQUEST = 0x0c, 70*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_READ_RESPONSE_FIRST = 0x0d, 71*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_READ_RESPONSE_MIDDLE = 0x0e, 72*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_READ_RESPONSE_LAST = 0x0f, 73*d6b92ffaSHans Petter Selasky IBV_OPCODE_RDMA_READ_RESPONSE_ONLY = 0x10, 74*d6b92ffaSHans Petter Selasky IBV_OPCODE_ACKNOWLEDGE = 0x11, 75*d6b92ffaSHans Petter Selasky IBV_OPCODE_ATOMIC_ACKNOWLEDGE = 0x12, 76*d6b92ffaSHans Petter Selasky IBV_OPCODE_COMPARE_SWAP = 0x13, 77*d6b92ffaSHans Petter Selasky IBV_OPCODE_FETCH_ADD = 0x14, 78*d6b92ffaSHans Petter Selasky 79*d6b92ffaSHans Petter Selasky /* real constants follow -- see comment about above IBV_OPCODE() 80*d6b92ffaSHans Petter Selasky macro for more details */ 81*d6b92ffaSHans Petter Selasky 82*d6b92ffaSHans Petter Selasky /* RC */ 83*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_FIRST), 84*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_MIDDLE), 85*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_LAST), 86*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_LAST_WITH_IMMEDIATE), 87*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_ONLY), 88*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, SEND_ONLY_WITH_IMMEDIATE), 89*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_FIRST), 90*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_MIDDLE), 91*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_LAST), 92*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE), 93*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_ONLY), 94*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE), 95*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_READ_REQUEST), 96*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_READ_RESPONSE_FIRST), 97*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_READ_RESPONSE_MIDDLE), 98*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_READ_RESPONSE_LAST), 99*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, RDMA_READ_RESPONSE_ONLY), 100*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, ACKNOWLEDGE), 101*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, ATOMIC_ACKNOWLEDGE), 102*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, COMPARE_SWAP), 103*d6b92ffaSHans Petter Selasky IBV_OPCODE(RC, FETCH_ADD), 104*d6b92ffaSHans Petter Selasky 105*d6b92ffaSHans Petter Selasky /* UC */ 106*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_FIRST), 107*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_MIDDLE), 108*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_LAST), 109*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_LAST_WITH_IMMEDIATE), 110*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_ONLY), 111*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, SEND_ONLY_WITH_IMMEDIATE), 112*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_FIRST), 113*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_MIDDLE), 114*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_LAST), 115*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE), 116*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_ONLY), 117*d6b92ffaSHans Petter Selasky IBV_OPCODE(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE), 118*d6b92ffaSHans Petter Selasky 119*d6b92ffaSHans Petter Selasky /* RD */ 120*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_FIRST), 121*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_MIDDLE), 122*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_LAST), 123*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_LAST_WITH_IMMEDIATE), 124*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_ONLY), 125*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, SEND_ONLY_WITH_IMMEDIATE), 126*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_FIRST), 127*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_MIDDLE), 128*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_LAST), 129*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_LAST_WITH_IMMEDIATE), 130*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_ONLY), 131*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_WRITE_ONLY_WITH_IMMEDIATE), 132*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_READ_REQUEST), 133*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_READ_RESPONSE_FIRST), 134*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_READ_RESPONSE_MIDDLE), 135*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_READ_RESPONSE_LAST), 136*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, RDMA_READ_RESPONSE_ONLY), 137*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, ACKNOWLEDGE), 138*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, ATOMIC_ACKNOWLEDGE), 139*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, COMPARE_SWAP), 140*d6b92ffaSHans Petter Selasky IBV_OPCODE(RD, FETCH_ADD), 141*d6b92ffaSHans Petter Selasky 142*d6b92ffaSHans Petter Selasky /* UD */ 143*d6b92ffaSHans Petter Selasky IBV_OPCODE(UD, SEND_ONLY), 144*d6b92ffaSHans Petter Selasky IBV_OPCODE(UD, SEND_ONLY_WITH_IMMEDIATE) 145*d6b92ffaSHans Petter Selasky }; 146*d6b92ffaSHans Petter Selasky 147*d6b92ffaSHans Petter Selasky #endif /* INFINIBAND_OPCODE_H */ 148