OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [rdma/] [ib_pack.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
3
 *
4
 * This software is available to you under a choice of one of two
5
 * licenses.  You may choose to be licensed under the terms of the GNU
6
 * General Public License (GPL) Version 2, available from the file
7
 * COPYING in the main directory of this source tree, or the
8
 * OpenIB.org BSD license below:
9
 *
10
 *     Redistribution and use in source and binary forms, with or
11
 *     without modification, are permitted provided that the following
12
 *     conditions are met:
13
 *
14
 *      - Redistributions of source code must retain the above
15
 *        copyright notice, this list of conditions and the following
16
 *        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
21
 *        provided with the distribution.
22
 *
23
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
 * SOFTWARE.
31
 *
32
 * $Id: ib_pack.h 1349 2004-12-16 21:09:43Z roland $
33
 */
34
 
35
#ifndef IB_PACK_H
36
#define IB_PACK_H
37
 
38
#include <rdma/ib_verbs.h>
39
 
40
enum {
41
        IB_LRH_BYTES  = 8,
42
        IB_GRH_BYTES  = 40,
43
        IB_BTH_BYTES  = 12,
44
        IB_DETH_BYTES = 8
45
};
46
 
47
struct ib_field {
48
        size_t struct_offset_bytes;
49
        size_t struct_size_bytes;
50
        int    offset_words;
51
        int    offset_bits;
52
        int    size_bits;
53
        char  *field_name;
54
};
55
 
56
#define RESERVED \
57
        .field_name          = "reserved"
58
 
59
/*
60
 * This macro cleans up the definitions of constants for BTH opcodes.
61
 * It is used to define constants such as IB_OPCODE_UD_SEND_ONLY,
62
 * which becomes IB_OPCODE_UD + IB_OPCODE_SEND_ONLY, and this gives
63
 * the correct value.
64
 *
65
 * In short, user code should use the constants defined using the
66
 * macro rather than worrying about adding together other constants.
67
*/
68
#define IB_OPCODE(transport, op) \
69
        IB_OPCODE_ ## transport ## _ ## op = \
70
                IB_OPCODE_ ## transport + IB_OPCODE_ ## op
71
 
72
enum {
73
        /* transport types -- just used to define real constants */
74
        IB_OPCODE_RC                                = 0x00,
75
        IB_OPCODE_UC                                = 0x20,
76
        IB_OPCODE_RD                                = 0x40,
77
        IB_OPCODE_UD                                = 0x60,
78
 
79
        /* operations -- just used to define real constants */
80
        IB_OPCODE_SEND_FIRST                        = 0x00,
81
        IB_OPCODE_SEND_MIDDLE                       = 0x01,
82
        IB_OPCODE_SEND_LAST                         = 0x02,
83
        IB_OPCODE_SEND_LAST_WITH_IMMEDIATE          = 0x03,
84
        IB_OPCODE_SEND_ONLY                         = 0x04,
85
        IB_OPCODE_SEND_ONLY_WITH_IMMEDIATE          = 0x05,
86
        IB_OPCODE_RDMA_WRITE_FIRST                  = 0x06,
87
        IB_OPCODE_RDMA_WRITE_MIDDLE                 = 0x07,
88
        IB_OPCODE_RDMA_WRITE_LAST                   = 0x08,
89
        IB_OPCODE_RDMA_WRITE_LAST_WITH_IMMEDIATE    = 0x09,
90
        IB_OPCODE_RDMA_WRITE_ONLY                   = 0x0a,
91
        IB_OPCODE_RDMA_WRITE_ONLY_WITH_IMMEDIATE    = 0x0b,
92
        IB_OPCODE_RDMA_READ_REQUEST                 = 0x0c,
93
        IB_OPCODE_RDMA_READ_RESPONSE_FIRST          = 0x0d,
94
        IB_OPCODE_RDMA_READ_RESPONSE_MIDDLE         = 0x0e,
95
        IB_OPCODE_RDMA_READ_RESPONSE_LAST           = 0x0f,
96
        IB_OPCODE_RDMA_READ_RESPONSE_ONLY           = 0x10,
97
        IB_OPCODE_ACKNOWLEDGE                       = 0x11,
98
        IB_OPCODE_ATOMIC_ACKNOWLEDGE                = 0x12,
99
        IB_OPCODE_COMPARE_SWAP                      = 0x13,
100
        IB_OPCODE_FETCH_ADD                         = 0x14,
101
 
102
        /* real constants follow -- see comment about above IB_OPCODE()
103
           macro for more details */
104
 
105
        /* RC */
106
        IB_OPCODE(RC, SEND_FIRST),
107
        IB_OPCODE(RC, SEND_MIDDLE),
108
        IB_OPCODE(RC, SEND_LAST),
109
        IB_OPCODE(RC, SEND_LAST_WITH_IMMEDIATE),
110
        IB_OPCODE(RC, SEND_ONLY),
111
        IB_OPCODE(RC, SEND_ONLY_WITH_IMMEDIATE),
112
        IB_OPCODE(RC, RDMA_WRITE_FIRST),
113
        IB_OPCODE(RC, RDMA_WRITE_MIDDLE),
114
        IB_OPCODE(RC, RDMA_WRITE_LAST),
115
        IB_OPCODE(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
116
        IB_OPCODE(RC, RDMA_WRITE_ONLY),
117
        IB_OPCODE(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
118
        IB_OPCODE(RC, RDMA_READ_REQUEST),
119
        IB_OPCODE(RC, RDMA_READ_RESPONSE_FIRST),
120
        IB_OPCODE(RC, RDMA_READ_RESPONSE_MIDDLE),
121
        IB_OPCODE(RC, RDMA_READ_RESPONSE_LAST),
122
        IB_OPCODE(RC, RDMA_READ_RESPONSE_ONLY),
123
        IB_OPCODE(RC, ACKNOWLEDGE),
124
        IB_OPCODE(RC, ATOMIC_ACKNOWLEDGE),
125
        IB_OPCODE(RC, COMPARE_SWAP),
126
        IB_OPCODE(RC, FETCH_ADD),
127
 
128
        /* UC */
129
        IB_OPCODE(UC, SEND_FIRST),
130
        IB_OPCODE(UC, SEND_MIDDLE),
131
        IB_OPCODE(UC, SEND_LAST),
132
        IB_OPCODE(UC, SEND_LAST_WITH_IMMEDIATE),
133
        IB_OPCODE(UC, SEND_ONLY),
134
        IB_OPCODE(UC, SEND_ONLY_WITH_IMMEDIATE),
135
        IB_OPCODE(UC, RDMA_WRITE_FIRST),
136
        IB_OPCODE(UC, RDMA_WRITE_MIDDLE),
137
        IB_OPCODE(UC, RDMA_WRITE_LAST),
138
        IB_OPCODE(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
139
        IB_OPCODE(UC, RDMA_WRITE_ONLY),
140
        IB_OPCODE(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
141
 
142
        /* RD */
143
        IB_OPCODE(RD, SEND_FIRST),
144
        IB_OPCODE(RD, SEND_MIDDLE),
145
        IB_OPCODE(RD, SEND_LAST),
146
        IB_OPCODE(RD, SEND_LAST_WITH_IMMEDIATE),
147
        IB_OPCODE(RD, SEND_ONLY),
148
        IB_OPCODE(RD, SEND_ONLY_WITH_IMMEDIATE),
149
        IB_OPCODE(RD, RDMA_WRITE_FIRST),
150
        IB_OPCODE(RD, RDMA_WRITE_MIDDLE),
151
        IB_OPCODE(RD, RDMA_WRITE_LAST),
152
        IB_OPCODE(RD, RDMA_WRITE_LAST_WITH_IMMEDIATE),
153
        IB_OPCODE(RD, RDMA_WRITE_ONLY),
154
        IB_OPCODE(RD, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
155
        IB_OPCODE(RD, RDMA_READ_REQUEST),
156
        IB_OPCODE(RD, RDMA_READ_RESPONSE_FIRST),
157
        IB_OPCODE(RD, RDMA_READ_RESPONSE_MIDDLE),
158
        IB_OPCODE(RD, RDMA_READ_RESPONSE_LAST),
159
        IB_OPCODE(RD, RDMA_READ_RESPONSE_ONLY),
160
        IB_OPCODE(RD, ACKNOWLEDGE),
161
        IB_OPCODE(RD, ATOMIC_ACKNOWLEDGE),
162
        IB_OPCODE(RD, COMPARE_SWAP),
163
        IB_OPCODE(RD, FETCH_ADD),
164
 
165
        /* UD */
166
        IB_OPCODE(UD, SEND_ONLY),
167
        IB_OPCODE(UD, SEND_ONLY_WITH_IMMEDIATE)
168
};
169
 
170
enum {
171
        IB_LNH_RAW        = 0,
172
        IB_LNH_IP         = 1,
173
        IB_LNH_IBA_LOCAL  = 2,
174
        IB_LNH_IBA_GLOBAL = 3
175
};
176
 
177
struct ib_unpacked_lrh {
178
        u8        virtual_lane;
179
        u8        link_version;
180
        u8        service_level;
181
        u8        link_next_header;
182
        __be16    destination_lid;
183
        __be16    packet_length;
184
        __be16    source_lid;
185
};
186
 
187
struct ib_unpacked_grh {
188
        u8           ip_version;
189
        u8           traffic_class;
190
        __be32       flow_label;
191
        __be16       payload_length;
192
        u8           next_header;
193
        u8           hop_limit;
194
        union ib_gid source_gid;
195
        union ib_gid destination_gid;
196
};
197
 
198
struct ib_unpacked_bth {
199
        u8           opcode;
200
        u8           solicited_event;
201
        u8           mig_req;
202
        u8           pad_count;
203
        u8           transport_header_version;
204
        __be16       pkey;
205
        __be32       destination_qpn;
206
        u8           ack_req;
207
        __be32       psn;
208
};
209
 
210
struct ib_unpacked_deth {
211
        __be32       qkey;
212
        __be32       source_qpn;
213
};
214
 
215
struct ib_ud_header {
216
        struct ib_unpacked_lrh  lrh;
217
        int                     grh_present;
218
        struct ib_unpacked_grh  grh;
219
        struct ib_unpacked_bth  bth;
220
        struct ib_unpacked_deth deth;
221
        int                     immediate_present;
222
        __be32                  immediate_data;
223
};
224
 
225
void ib_pack(const struct ib_field        *desc,
226
             int                           desc_len,
227
             void                         *structure,
228
             void                         *buf);
229
 
230
void ib_unpack(const struct ib_field        *desc,
231
               int                           desc_len,
232
               void                         *buf,
233
               void                         *structure);
234
 
235
void ib_ud_header_init(int                 payload_bytes,
236
                       int                 grh_present,
237
                       struct ib_ud_header *header);
238
 
239
int ib_ud_header_pack(struct ib_ud_header *header,
240
                      void                *buf);
241
 
242
int ib_ud_header_unpack(void                *buf,
243
                        struct ib_ud_header *header);
244
 
245
#endif /* IB_PACK_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.