Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lnet / include / lnet / types.h
1 #ifndef __LNET_TYPES_H__
2 #define __LNET_TYPES_H__
3
4 #include <libcfs/libcfs.h>
5
6 #define LNET_RESERVED_PORTAL      0             /* portals reserved for lnet's own use */
7
8 typedef __u64 lnet_nid_t;
9 typedef __u32 lnet_pid_t;
10
11 #define LNET_NID_ANY      ((lnet_nid_t) -1)
12 #define LNET_PID_ANY      ((lnet_pid_t) -1)
13
14 #ifdef CRAY_XT3
15 typedef __u32 lnet_uid_t;
16 #define LNET_UID_ANY      ((lnet_uid_t) -1)
17 #endif
18
19 #define LNET_PID_RESERVED 0xf0000000 /* reserved bits in PID */
20 #define LNET_PID_USERFLAG 0x80000000 /* set in userspace peers */
21
22 #define LNET_TIME_FOREVER    (-1)
23
24 typedef struct {
25         __u64         cookie;
26 } lnet_handle_any_t;
27
28 typedef lnet_handle_any_t lnet_handle_eq_t;
29 typedef lnet_handle_any_t lnet_handle_md_t;
30 typedef lnet_handle_any_t lnet_handle_me_t;
31
32 #define LNET_INVALID_HANDLE \
33     ((const lnet_handle_any_t){.cookie = -1})
34 #define LNET_EQ_NONE LNET_INVALID_HANDLE
35
36 static inline int LNetHandleIsEqual (lnet_handle_any_t h1, lnet_handle_any_t h2)
37 {
38         return (h1.cookie == h2.cookie);
39 }
40
41 typedef struct {
42         lnet_nid_t nid;
43         lnet_pid_t pid;   /* node id / process id */
44 } lnet_process_id_t;
45
46 typedef enum {
47         LNET_RETAIN = 0,
48         LNET_UNLINK
49 } lnet_unlink_t;
50
51 typedef enum {
52         LNET_INS_BEFORE,
53         LNET_INS_AFTER
54 } lnet_ins_pos_t;
55
56 typedef struct {
57         void            *start;
58         unsigned int     length;
59         int              threshold;
60         int              max_size;
61         unsigned int     options;
62         void            *user_ptr;
63         lnet_handle_eq_t eq_handle;
64 } lnet_md_t;
65
66 /* Max Transfer Unit (minimum supported everywhere) */
67 #define LNET_MTU_BITS   20
68 #define LNET_MTU        (1<<LNET_MTU_BITS)
69
70 /* limit on the number of entries in discontiguous MDs */
71 #define LNET_MAX_IOV    256
72
73 /* Max payload size */
74 #ifndef LNET_MAX_PAYLOAD
75 # error "LNET_MAX_PAYLOAD must be defined in config.h"
76 #else
77 # if (LNET_MAX_PAYLOAD < LNET_MTU)
78 #  error "LNET_MAX_PAYLOAD too small - error in configure --with-max-payload-mb"
79 # elif defined(__KERNEL__)
80 #  if (LNET_MAX_PAYLOAD > (PAGE_SIZE * LNET_MAX_IOV))
81 /*  PAGE_SIZE is a constant: check with cpp! */
82 #   error "LNET_MAX_PAYLOAD too large - error in configure --with-max-payload-mb"
83 #  endif
84 # endif
85 #endif
86
87 /* Options for the MD structure */
88 #define LNET_MD_OP_PUT               (1 << 0)
89 #define LNET_MD_OP_GET               (1 << 1)
90 #define LNET_MD_MANAGE_REMOTE        (1 << 2)
91 /* unused                            (1 << 3) */
92 #define LNET_MD_TRUNCATE             (1 << 4)
93 #define LNET_MD_ACK_DISABLE          (1 << 5)
94 #define LNET_MD_IOVEC                (1 << 6)
95 #define LNET_MD_MAX_SIZE             (1 << 7)
96 #define LNET_MD_KIOV                 (1 << 8)
97
98 /* For compatibility with Cray Portals */
99 #define LNET_MD_PHYS                         0
100
101 #define LNET_MD_THRESH_INF       (-1)
102
103 /* NB lustre portals uses struct iovec internally! */
104 typedef struct iovec lnet_md_iovec_t;
105
106 typedef struct {
107         cfs_page_t      *kiov_page;
108         unsigned int     kiov_len;
109         unsigned int     kiov_offset;
110 } lnet_kiov_t;
111
112 typedef enum {
113         LNET_EVENT_GET,
114         LNET_EVENT_PUT,
115         LNET_EVENT_REPLY,
116         LNET_EVENT_ACK,
117         LNET_EVENT_SEND,
118         LNET_EVENT_UNLINK,
119 } lnet_event_kind_t;
120
121 #define LNET_SEQ_BASETYPE       long
122 typedef unsigned LNET_SEQ_BASETYPE lnet_seq_t;
123 #define LNET_SEQ_GT(a,b)        (((signed LNET_SEQ_BASETYPE)((a) - (b))) > 0)
124
125 /* XXX
126  * cygwin need the pragma line, not clear if it's needed in other places.
127  * checking!!!
128  */
129 #ifdef __CYGWIN__
130 #pragma pack(push, 4)
131 #endif
132 typedef struct {
133         lnet_process_id_t   target;
134         lnet_process_id_t   initiator;
135         lnet_nid_t          sender;
136         lnet_event_kind_t   type;
137         unsigned int        pt_index;
138         __u64               match_bits;
139         unsigned int        rlength;
140         unsigned int        mlength;
141         lnet_handle_md_t    md_handle;
142         lnet_md_t           md;
143         __u64               hdr_data;
144         int                 status;
145         int                 unlinked;
146         unsigned int        offset;
147 #ifdef CRAY_XT3
148         lnet_uid_t          uid;
149 #endif
150
151         volatile lnet_seq_t sequence;
152 } lnet_event_t;
153 #ifdef __CYGWIN__
154 #pragma pop
155 #endif
156
157 typedef enum {
158         LNET_ACK_REQ,
159         LNET_NOACK_REQ
160 } lnet_ack_req_t;
161
162 typedef void (*lnet_eq_handler_t)(lnet_event_t *event);
163 #define LNET_EQ_HANDLER_NONE NULL
164
165 #endif