Whamcloud - gitweb
land portals part of b_hd_sec on HEAD.
[fs/lustre-release.git] / lnet / include / lnet / types.h
index d4038b6..f07534b 100644 (file)
@@ -1,18 +1,20 @@
 #ifndef _P30_TYPES_H_
 #define _P30_TYPES_H_
 
-#ifdef __linux__
-#include <asm/types.h>
-#include <asm/timex.h>
-#else
-#include <sys/types.h>
-typedef u_int32_t __u32;
-typedef u_int64_t __u64;
-typedef unsigned long long cycles_t;
-static inline cycles_t get_cycles(void) { return 0; }
-#endif
+#include "build_check.h"
+
+#include <libcfs/libcfs.h>
+#include <portals/errno.h>
 
+/* This implementation uses the same type for API function return codes and
+ * the completion status in an event  */
+#define PTL_NI_OK  PTL_OK
+typedef ptl_err_t ptl_ni_fail_t;
+
+typedef __u32 ptl_uid_t;
+typedef __u32 ptl_jid_t;
 typedef __u64 ptl_nid_t;
+typedef __u32 ptl_netid_t;
 typedef __u32 ptl_pid_t;
 typedef __u32 ptl_pt_index_t;
 typedef __u32 ptl_ac_index_t;
@@ -20,6 +22,8 @@ typedef __u64 ptl_match_bits_t;
 typedef __u64 ptl_hdr_data_t;
 typedef __u32 ptl_size_t;
 
+#define PTL_TIME_FOREVER    (-1)
+
 typedef struct {
         unsigned long nal_idx;                 /* which network interface */
         __u64         cookie;                  /* which thing on that interface */
@@ -30,15 +34,17 @@ typedef ptl_handle_any_t ptl_handle_eq_t;
 typedef ptl_handle_any_t ptl_handle_md_t;
 typedef ptl_handle_any_t ptl_handle_me_t;
 
-#define PTL_HANDLE_NONE \
-((const ptl_handle_any_t){.nal_idx = -1, .cookie = -1})
-#define PTL_EQ_NONE PTL_HANDLE_NONE
+#define PTL_INVALID_HANDLE \
+    ((const ptl_handle_any_t){.nal_idx = -1, .cookie = -1})
+#define PTL_EQ_NONE PTL_INVALID_HANDLE
 
-static inline int PtlHandleEqual (ptl_handle_any_t h1, ptl_handle_any_t h2)
+static inline int PtlHandleIsEqual (ptl_handle_any_t h1, ptl_handle_any_t h2)
 {
        return (h1.nal_idx == h2.nal_idx && h1.cookie == h2.cookie);
 }
 
+#define PTL_UID_ANY      ((ptl_uid_t) -1)
+#define PTL_JID_ANY      ((ptl_jid_t) -1)
 #define PTL_NID_ANY      ((ptl_nid_t) -1)
 #define PTL_PID_ANY      ((ptl_pid_t) -1)
 
@@ -58,85 +64,113 @@ typedef enum {
 } ptl_ins_pos_t;
 
 typedef struct {
-       struct page     *kiov_page;
-       unsigned int     kiov_len;
-       unsigned int     kiov_offset;
-} ptl_kiov_t;
-
-typedef struct {
         void            *start;
         ptl_size_t       length;
         int              threshold;
         int              max_size;
         unsigned int     options;
         void            *user_ptr;
-        ptl_handle_eq_t  eventq;
-       unsigned int     niov;
+        ptl_handle_eq_t  eq_handle;
 } ptl_md_t;
 
 /* Options for the MD structure */
-#define PTL_MD_OP_PUT           (1 << 0)
-#define PTL_MD_OP_GET           (1 << 1)
-#define PTL_MD_MANAGE_REMOTE    (1 << 2)
-#define PTL_MD_AUTO_UNLINK      (1 << 3)
-#define PTL_MD_TRUNCATE         (1 << 4)
-#define PTL_MD_ACK_DISABLE      (1 << 5)
-#define PTL_MD_IOV             (1 << 6)
-#define PTL_MD_MAX_SIZE                (1 << 7)
-#define PTL_MD_KIOV             (1 << 8)
+#define PTL_MD_OP_PUT               (1 << 0)
+#define PTL_MD_OP_GET               (1 << 1)
+#define PTL_MD_MANAGE_REMOTE        (1 << 2)
+/* unused                           (1 << 3) */
+#define PTL_MD_TRUNCATE             (1 << 4)
+#define PTL_MD_ACK_DISABLE          (1 << 5)
+#define PTL_MD_IOVEC               (1 << 6)
+#define PTL_MD_MAX_SIZE                    (1 << 7)
+#define PTL_MD_KIOV                 (1 << 8)
+#define PTL_MD_EVENT_START_DISABLE  (1 << 9)
+#define PTL_MD_EVENT_END_DISABLE    (1 << 10)
+
+/* For compatibility with Cray Portals */
+#define PTL_MD_LUSTRE_COMPLETION_SEMANTICS  0
+#define PTL_MD_PHYS                         0
 
 #define PTL_MD_THRESH_INF       (-1)
 
+/* NB lustre portals uses struct iovec internally! */
+typedef struct iovec ptl_md_iovec_t;
+
+typedef struct {
+       cfs_page_t      *kiov_page;
+       unsigned int     kiov_len;
+       unsigned int     kiov_offset;
+} ptl_kiov_t;
+
 typedef enum {
-        PTL_EVENT_GET,
-        PTL_EVENT_PUT,
-        PTL_EVENT_REPLY,
+        PTL_EVENT_GET_START,
+        PTL_EVENT_GET_END,
+
+        PTL_EVENT_PUT_START,
+        PTL_EVENT_PUT_END,
+
+        PTL_EVENT_REPLY_START,
+        PTL_EVENT_REPLY_END,
+
         PTL_EVENT_ACK,
-        PTL_EVENT_SENT
+
+        PTL_EVENT_SEND_START,
+       PTL_EVENT_SEND_END,
+
+       PTL_EVENT_UNLINK,
 } ptl_event_kind_t;
 
 #define PTL_SEQ_BASETYPE       long
 typedef unsigned PTL_SEQ_BASETYPE ptl_seq_t;
 #define PTL_SEQ_GT(a,b)        (((signed PTL_SEQ_BASETYPE)((a) - (b))) > 0)
 
+/* XXX
+ * cygwin need the pragma line, not clear if it's needed in other places.
+ * checking!!!
+ */
+#ifdef __CYGWIN__
+#pragma pack(push, 4)
+#endif
 typedef struct {
-        ptl_event_kind_t type;
-        ptl_process_id_t initiator;
-        ptl_pt_index_t portal;
-        ptl_match_bits_t match_bits;
-        ptl_size_t rlength, mlength, offset;
-        ptl_handle_me_t unlinked_me;
-        ptl_md_t mem_desc;
-        ptl_hdr_data_t hdr_data;
-        cycles_t  arrival_time;
+        ptl_event_kind_t   type;
+        ptl_process_id_t   initiator;
+        ptl_uid_t          uid;
+        ptl_jid_t          jid;
+        ptl_pt_index_t     pt_index;
+        ptl_match_bits_t   match_bits;
+        ptl_size_t         rlength;
+        ptl_size_t         mlength;
+        ptl_size_t         offset;
+        ptl_handle_md_t    md_handle;
+        ptl_md_t           md;
+        ptl_hdr_data_t     hdr_data;
+        ptl_seq_t          link;
+        ptl_ni_fail_t      ni_fail_type;
+
+        int                unlinked;
+
         volatile ptl_seq_t sequence;
 } ptl_event_t;
-
+#ifdef __CYGWIN__
+#pragma pop
+#endif
 
 typedef enum {
         PTL_ACK_REQ,
         PTL_NOACK_REQ
 } ptl_ack_req_t;
 
+typedef void (*ptl_eq_handler_t)(ptl_event_t *event);
+#define PTL_EQ_HANDLER_NONE NULL
 
 typedef struct {
-        volatile ptl_seq_t sequence;
-        ptl_size_t size;
-        ptl_event_t *base;
-        ptl_handle_any_t cb_eq_handle;
-} ptl_eq_t;
-
-typedef struct {
-        ptl_eq_t *eq;
-} ptl_ni_t;
-
-
-typedef struct {
-        int max_match_entries;    /* max number of match entries */
-        int max_mem_descriptors;  /* max number of memory descriptors */
-        int max_event_queues;     /* max number of event queues */
-        int max_atable_index;     /* maximum access control list table index */
-        int max_ptable_index;     /* maximum portals table index */
+       int max_mes;
+       int max_mds;
+       int max_eqs;
+       int max_ac_index;
+       int max_pt_index;
+       int max_md_iovecs;
+       int max_me_list;
+       int max_getput_md;
 } ptl_ni_limits_t;
 
 /*
@@ -154,4 +188,7 @@ typedef enum {
 
 typedef int ptl_sr_value_t;
 
+typedef int ptl_interface_t;
+#define PTL_IFACE_DEFAULT    (-1)
+
 #endif