Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
infiniband
core
uverbs.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 Topspin Communications. All rights reserved.
3
* Copyright (c) 2005, 2006 Cisco Systems. All rights reserved.
4
* Copyright (c) 2005 Mellanox Technologies. All rights reserved.
5
* Copyright (c) 2005 Voltaire, Inc. All rights reserved.
6
* Copyright (c) 2005 PathScale, Inc. All rights reserved.
7
*
8
* This software is available to you under a choice of one of two
9
* licenses. You may choose to be licensed under the terms of the GNU
10
* General Public License (GPL) Version 2, available from the file
11
* COPYING in the main directory of this source tree, or the
12
* OpenIB.org BSD license below:
13
*
14
* Redistribution and use in source and binary forms, with or
15
* without modification, are permitted provided that the following
16
* conditions are met:
17
*
18
* - Redistributions of source code must retain the above
19
* copyright notice, this list of conditions and the following
20
* disclaimer.
21
*
22
* - Redistributions in binary form must reproduce the above
23
* copyright notice, this list of conditions and the following
24
* disclaimer in the documentation and/or other materials
25
* provided with the distribution.
26
*
27
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
31
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
32
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
33
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
34
* SOFTWARE.
35
*/
36
37
#ifndef UVERBS_H
38
#define UVERBS_H
39
40
#include <
linux/kref.h
>
41
#include <
linux/idr.h
>
42
#include <
linux/mutex.h
>
43
#include <
linux/completion.h
>
44
#include <
linux/cdev.h
>
45
46
#include <
rdma/ib_verbs.h
>
47
#include <
rdma/ib_umem.h
>
48
#include <
rdma/ib_user_verbs.h
>
49
50
/*
51
* Our lifetime rules for these structs are the following:
52
*
53
* struct ib_uverbs_device: One reference is held by the module and
54
* released in ib_uverbs_remove_one(). Another reference is taken by
55
* ib_uverbs_open() each time the character special file is opened,
56
* and released in ib_uverbs_release_file() when the file is released.
57
*
58
* struct ib_uverbs_file: One reference is held by the VFS and
59
* released when the file is closed. Another reference is taken when
60
* an asynchronous event queue file is created and released when the
61
* event file is closed.
62
*
63
* struct ib_uverbs_event_file: One reference is held by the VFS and
64
* released when the file is closed. For asynchronous event files,
65
* another reference is held by the corresponding main context file
66
* and released when that file is closed. For completion event files,
67
* a reference is taken when a CQ is created that uses the file, and
68
* released when the CQ is destroyed.
69
*/
70
71
struct
ib_uverbs_device
{
72
struct
kref
ref
;
73
int
num_comp_vectors
;
74
struct
completion
comp
;
75
struct
device
*
dev
;
76
struct
ib_device
*
ib_dev
;
77
int
devnum
;
78
struct
cdev
cdev
;
79
struct
rb_root
xrcd_tree
;
80
struct
mutex
xrcd_tree_mutex
;
81
};
82
83
struct
ib_uverbs_event_file
{
84
struct
kref
ref
;
85
int
is_async
;
86
struct
ib_uverbs_file
*
uverbs_file
;
87
spinlock_t
lock
;
88
int
is_closed
;
89
wait_queue_head_t
poll_wait
;
90
struct
fasync_struct
*
async_queue
;
91
struct
list_head
event_list
;
92
};
93
94
struct
ib_uverbs_file
{
95
struct
kref
ref
;
96
struct
mutex
mutex
;
97
struct
ib_uverbs_device
*
device
;
98
struct
ib_ucontext
*
ucontext
;
99
struct
ib_event_handler
event_handler
;
100
struct
ib_uverbs_event_file
*
async_file
;
101
};
102
103
struct
ib_uverbs_event
{
104
union
{
105
struct
ib_uverbs_async_event_desc
async
;
106
struct
ib_uverbs_comp_event_desc
comp
;
107
}
desc
;
108
struct
list_head
list
;
109
struct
list_head
obj_list
;
110
u32
*
counter
;
111
};
112
113
struct
ib_uverbs_mcast_entry
{
114
struct
list_head
list
;
115
union
ib_gid
gid
;
116
u16
lid
;
117
};
118
119
struct
ib_uevent_object
{
120
struct
ib_uobject
uobject
;
121
struct
list_head
event_list
;
122
u32
events_reported
;
123
};
124
125
struct
ib_uxrcd_object
{
126
struct
ib_uobject
uobject
;
127
atomic_t
refcnt
;
128
};
129
130
struct
ib_usrq_object
{
131
struct
ib_uevent_object
uevent
;
132
struct
ib_uxrcd_object
*
uxrcd
;
133
};
134
135
struct
ib_uqp_object
{
136
struct
ib_uevent_object
uevent
;
137
struct
list_head
mcast_list
;
138
};
139
140
struct
ib_ucq_object
{
141
struct
ib_uobject
uobject
;
142
struct
ib_uverbs_file
*
uverbs_file
;
143
struct
list_head
comp_list
;
144
struct
list_head
async_list
;
145
u32
comp_events_reported
;
146
u32
async_events_reported
;
147
};
148
149
extern
spinlock_t
ib_uverbs_idr_lock
;
150
extern
struct
idr
ib_uverbs_pd_idr
;
151
extern
struct
idr
ib_uverbs_mr_idr
;
152
extern
struct
idr
ib_uverbs_mw_idr
;
153
extern
struct
idr
ib_uverbs_ah_idr
;
154
extern
struct
idr
ib_uverbs_cq_idr
;
155
extern
struct
idr
ib_uverbs_qp_idr
;
156
extern
struct
idr
ib_uverbs_srq_idr
;
157
extern
struct
idr
ib_uverbs_xrcd_idr
;
158
159
void
idr_remove_uobj
(
struct
idr
*idp,
struct
ib_uobject
*uobj);
160
161
struct
file
*
ib_uverbs_alloc_event_file
(
struct
ib_uverbs_file
*uverbs_file,
162
int
is_async);
163
struct
ib_uverbs_event_file
*
ib_uverbs_lookup_comp_file
(
int
fd
);
164
165
void
ib_uverbs_release_ucq
(
struct
ib_uverbs_file
*
file
,
166
struct
ib_uverbs_event_file
*ev_file,
167
struct
ib_ucq_object
*uobj);
168
void
ib_uverbs_release_uevent
(
struct
ib_uverbs_file
*
file
,
169
struct
ib_uevent_object
*uobj);
170
171
void
ib_uverbs_comp_handler
(
struct
ib_cq
*cq,
void
*
cq_context
);
172
void
ib_uverbs_cq_event_handler
(
struct
ib_event
*
event
,
void
*context_ptr);
173
void
ib_uverbs_qp_event_handler
(
struct
ib_event
*
event
,
void
*context_ptr);
174
void
ib_uverbs_srq_event_handler
(
struct
ib_event
*
event
,
void
*context_ptr);
175
void
ib_uverbs_event_handler
(
struct
ib_event_handler
*handler,
176
struct
ib_event
*
event
);
177
void
ib_uverbs_dealloc_xrcd
(
struct
ib_uverbs_device
*
dev
,
struct
ib_xrcd
*xrcd);
178
179
#define IB_UVERBS_DECLARE_CMD(name) \
180
ssize_t ib_uverbs_##name(struct ib_uverbs_file *file, \
181
const char __user *buf, int in_len, \
182
int out_len)
183
184
IB_UVERBS_DECLARE_CMD
(get_context);
185
IB_UVERBS_DECLARE_CMD
(query_device);
186
IB_UVERBS_DECLARE_CMD
(query_port);
187
IB_UVERBS_DECLARE_CMD
(alloc_pd);
188
IB_UVERBS_DECLARE_CMD
(dealloc_pd);
189
IB_UVERBS_DECLARE_CMD
(reg_mr);
190
IB_UVERBS_DECLARE_CMD
(dereg_mr);
191
IB_UVERBS_DECLARE_CMD
(create_comp_channel);
192
IB_UVERBS_DECLARE_CMD
(create_cq);
193
IB_UVERBS_DECLARE_CMD
(resize_cq);
194
IB_UVERBS_DECLARE_CMD
(poll_cq);
195
IB_UVERBS_DECLARE_CMD
(req_notify_cq);
196
IB_UVERBS_DECLARE_CMD
(destroy_cq);
197
IB_UVERBS_DECLARE_CMD
(create_qp);
198
IB_UVERBS_DECLARE_CMD
(open_qp);
199
IB_UVERBS_DECLARE_CMD
(query_qp);
200
IB_UVERBS_DECLARE_CMD
(modify_qp);
201
IB_UVERBS_DECLARE_CMD
(destroy_qp);
202
IB_UVERBS_DECLARE_CMD
(post_send);
203
IB_UVERBS_DECLARE_CMD
(post_recv);
204
IB_UVERBS_DECLARE_CMD
(post_srq_recv);
205
IB_UVERBS_DECLARE_CMD
(create_ah);
206
IB_UVERBS_DECLARE_CMD
(destroy_ah);
207
IB_UVERBS_DECLARE_CMD
(attach_mcast);
208
IB_UVERBS_DECLARE_CMD
(detach_mcast);
209
IB_UVERBS_DECLARE_CMD
(create_srq);
210
IB_UVERBS_DECLARE_CMD
(modify_srq);
211
IB_UVERBS_DECLARE_CMD
(query_srq);
212
IB_UVERBS_DECLARE_CMD
(destroy_srq);
213
IB_UVERBS_DECLARE_CMD
(create_xsrq);
214
IB_UVERBS_DECLARE_CMD
(open_xrcd);
215
IB_UVERBS_DECLARE_CMD
(close_xrcd);
216
217
#endif
/* UVERBS_H */
Generated on Thu Jan 10 2013 13:37:06 for Linux Kernel by
1.8.2