Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _RDS_RDMA_H
  2 #define _RDS_RDMA_H
  3 
  4 #include <linux/rbtree.h>
  5 #include <linux/spinlock.h>
  6 #include <linux/scatterlist.h>
  7 
  8 #include "rds.h"
  9 
 10 struct rds_mr {
 11         struct rb_node          r_rb_node;
 12         atomic_t                r_refcount;
 13         u32                     r_key;
 14 
 15         /* A copy of the creation flags */
 16         unsigned int            r_use_once:1;
 17         unsigned int            r_invalidate:1;
 18         unsigned int            r_write:1;
 19 
 20         /* This is for RDS_MR_DEAD.
 21          * It would be nice & consistent to make this part of the above
 22          * bit field here, but we need to use test_and_set_bit.
 23          */
 24         unsigned long           r_state;
 25         struct rds_sock         *r_sock; /* back pointer to the socket that owns us */
 26         struct rds_transport    *r_trans;
 27         void                    *r_trans_private;
 28 };
 29 
 30 /* Flags for mr->r_state */
 31 #define RDS_MR_DEAD             0
 32 
 33 struct rds_rdma_op {
 34         u32                     r_key;
 35         u64                     r_remote_addr;
 36         unsigned int            r_write:1;
 37         unsigned int            r_fence:1;
 38         unsigned int            r_notify:1;
 39         unsigned int            r_recverr:1;
 40         unsigned int            r_mapped:1;
 41         struct rds_notifier     *r_notifier;
 42         unsigned int            r_bytes;
 43         unsigned int            r_nents;
 44         unsigned int            r_count;
 45         struct scatterlist      r_sg[0];
 46 };
 47 
 48 static inline rds_rdma_cookie_t rds_rdma_make_cookie(u32 r_key, u32 offset)
 49 {
 50         return r_key | (((u64) offset) << 32);
 51 }
 52 
 53 static inline u32 rds_rdma_cookie_key(rds_rdma_cookie_t cookie)
 54 {
 55         return cookie;
 56 }
 57 
 58 static inline u32 rds_rdma_cookie_offset(rds_rdma_cookie_t cookie)
 59 {
 60         return cookie >> 32;
 61 }
 62 
 63 int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen);
 64 int rds_free_mr(struct rds_sock *rs, char __user *optval, int optlen);
 65 void rds_rdma_drop_keys(struct rds_sock *rs);
 66 int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 67                           struct cmsghdr *cmsg);
 68 int rds_cmsg_rdma_dest(struct rds_sock *rs, struct rds_message *rm,
 69                           struct cmsghdr *cmsg);
 70 int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 71                           struct cmsghdr *cmsg);
 72 int rds_cmsg_rdma_map(struct rds_sock *rs, struct rds_message *rm,
 73                           struct cmsghdr *cmsg);
 74 void rds_rdma_free_op(struct rds_rdma_op *ro);
 75 void rds_rdma_send_complete(struct rds_message *rm, int);
 76 
 77 extern void __rds_put_mr_final(struct rds_mr *mr);
 78 static inline void rds_mr_put(struct rds_mr *mr)
 79 {
 80         if (atomic_dec_and_test(&mr->r_refcount))
 81                 __rds_put_mr_final(mr);
 82 }
 83 
 84 #endif
 85 
  This page was automatically generated by the LXR engine.