Whamcloud - gitweb
* Landed b_cray_portals_merge.
[fs/lustre-release.git] / lnet / include / lnet / types.h
1 #ifndef _P30_TYPES_H_
2 #define _P30_TYPES_H_
3
4 #include "build_check.h"
5
6 #ifdef __linux__
7 # include <asm/types.h>
8 # if defined(__powerpc__) && !defined(__KERNEL__)
9 #  define __KERNEL__
10 #  include <asm/timex.h>
11 #  undef __KERNEL__
12 # else
13 #  include <asm/timex.h>
14 # endif
15 #else
16 # include <sys/types.h>
17 typedef u_int32_t __u32;
18 typedef u_int64_t __u64;
19 #endif
20
21 #ifdef __KERNEL__
22 # include <linux/time.h>
23 #else
24 # include <sys/time.h>
25 # define do_gettimeofday(tv) gettimeofday(tv, NULL);
26 #endif
27
28 #include <portals/errno.h>
29
30 /* This implementation uses the same type for API function return codes and
31  * the completion status in an event  */
32 #define PTL_NI_OK  PTL_OK
33 typedef ptl_err_t ptl_ni_fail_t;
34
35 typedef __u64 ptl_nid_t;
36 typedef __u32 ptl_pid_t;
37 typedef __u32 ptl_pt_index_t;
38 typedef __u32 ptl_ac_index_t;
39 typedef __u64 ptl_match_bits_t;
40 typedef __u64 ptl_hdr_data_t;
41 typedef __u32 ptl_size_t;
42
43 #define PTL_TIME_FOREVER    (-1)
44
45 typedef struct {
46         unsigned long nal_idx;                  /* which network interface */
47         __u64         cookie;                   /* which thing on that interface */
48 } ptl_handle_any_t;
49
50 typedef ptl_handle_any_t ptl_handle_ni_t;
51 typedef ptl_handle_any_t ptl_handle_eq_t;
52 typedef ptl_handle_any_t ptl_handle_md_t;
53 typedef ptl_handle_any_t ptl_handle_me_t;
54
55 #define PTL_INVALID_HANDLE \
56     ((const ptl_handle_any_t){.nal_idx = -1, .cookie = -1})
57 #define PTL_EQ_NONE PTL_INVALID_HANDLE
58
59 static inline int PtlHandleIsEqual (ptl_handle_any_t h1, ptl_handle_any_t h2)
60 {
61         return (h1.nal_idx == h2.nal_idx && h1.cookie == h2.cookie);
62 }
63
64 #define PTL_NID_ANY      ((ptl_nid_t) -1)
65 #define PTL_PID_ANY      ((ptl_pid_t) -1)
66
67 typedef struct {
68         ptl_nid_t nid;
69         ptl_pid_t pid;   /* node id / process id */
70 } ptl_process_id_t;
71
72 typedef enum {
73         PTL_RETAIN = 0,
74         PTL_UNLINK
75 } ptl_unlink_t;
76
77 typedef enum {
78         PTL_INS_BEFORE,
79         PTL_INS_AFTER
80 } ptl_ins_pos_t;
81
82 typedef struct {
83         void            *start;
84         ptl_size_t       length;
85         int              threshold;
86         int              max_size;
87         unsigned int     options;
88         void            *user_ptr;
89         ptl_handle_eq_t  eventq;
90 } ptl_md_t;
91
92 /* Options for the MD structure */
93 #define PTL_MD_OP_PUT               (1 << 0)
94 #define PTL_MD_OP_GET               (1 << 1)
95 #define PTL_MD_MANAGE_REMOTE        (1 << 2)
96 /* unused                           (1 << 3) */
97 #define PTL_MD_TRUNCATE             (1 << 4)
98 #define PTL_MD_ACK_DISABLE          (1 << 5)
99 #define PTL_MD_IOVEC                (1 << 6)
100 #define PTL_MD_MAX_SIZE             (1 << 7)
101 #define PTL_MD_KIOV                 (1 << 8)
102 #define PTL_MD_EVENT_START_DISABLE  (1 << 9)
103 #define PTL_MD_EVENT_END_DISABLE    (1 << 10)
104
105 /* For compatibility with Cray Portals */
106 #define PTL_MD_LUSTRE_COMPLETION_SEMANTICS  0
107 #define PTL_MD_PHYS                         0
108
109 #define PTL_MD_THRESH_INF       (-1)
110
111 /* NB lustre portals uses struct iovec internally! */
112 typedef struct iovec ptl_md_iovec_t;
113
114 typedef struct {
115         struct page     *kiov_page;
116         unsigned int     kiov_len;
117         unsigned int     kiov_offset;
118 } ptl_kiov_t;
119
120 typedef enum {
121         PTL_EVENT_GET_START,
122         PTL_EVENT_GET_END,
123
124         PTL_EVENT_PUT_START,
125         PTL_EVENT_PUT_END,
126
127         PTL_EVENT_REPLY_START,
128         PTL_EVENT_REPLY_END,
129
130         PTL_EVENT_ACK,
131
132         PTL_EVENT_SEND_START,
133         PTL_EVENT_SEND_END,
134
135         PTL_EVENT_UNLINK,
136 } ptl_event_kind_t;
137
138 #define PTL_SEQ_BASETYPE        long
139 typedef unsigned PTL_SEQ_BASETYPE ptl_seq_t;
140 #define PTL_SEQ_GT(a,b) (((signed PTL_SEQ_BASETYPE)((a) - (b))) > 0)
141
142 /* XXX
143  * cygwin need the pragma line, not clear if it's needed in other places.
144  * checking!!!
145  */
146 #ifdef __CYGWIN__
147 #pragma pack(push, 4)
148 #endif
149 typedef struct {
150         ptl_event_kind_t   type;
151         ptl_process_id_t   initiator;
152         ptl_pt_index_t     portal;
153         ptl_match_bits_t   match_bits;
154         ptl_size_t         rlength;
155         ptl_size_t         mlength;
156         ptl_size_t         offset;
157         ptl_md_t           mem_desc;
158         ptl_hdr_data_t     hdr_data;
159         int                unlinked;
160         ptl_ni_fail_t      ni_fail_type;
161
162         volatile ptl_seq_t sequence;
163 } ptl_event_t;
164 #ifdef __CYGWIN__
165 #pragma pop
166 #endif
167
168 typedef enum {
169         PTL_ACK_REQ,
170         PTL_NOACK_REQ
171 } ptl_ack_req_t;
172
173 typedef void (*ptl_eq_handler_t)(ptl_event_t *event);
174 #define PTL_EQ_HANDLER_NONE NULL
175
176 typedef struct {
177         volatile ptl_seq_t sequence;
178         ptl_size_t size;
179         ptl_event_t *base;
180         ptl_handle_any_t cb_eq_handle;
181 } ptl_eq_t;
182
183 typedef struct {
184         ptl_eq_t *eq;
185 } ptl_ni_t;
186
187 typedef struct {
188         int max_mes;
189         int max_mds;
190         int max_eqs;
191         int max_ac_index;
192         int max_pt_index;
193         int max_md_iovecs;
194         int max_me_list;
195         int max_getput_md;
196 } ptl_ni_limits_t;
197
198 /*
199  * Status registers
200  */
201 typedef enum {
202         PTL_SR_DROP_COUNT,
203         PTL_SR_DROP_LENGTH,
204         PTL_SR_RECV_COUNT,
205         PTL_SR_RECV_LENGTH,
206         PTL_SR_SEND_COUNT,
207         PTL_SR_SEND_LENGTH,
208         PTL_SR_MSGS_MAX,
209 } ptl_sr_index_t;
210
211 typedef int ptl_sr_value_t;
212
213 typedef int ptl_interface_t;
214 #define PTL_IFACE_DEFAULT    (-1)
215
216 #endif