ipath_verbs.h
来自「LINUX 2.6.17.4的源码」· C头文件 代码 · 共 694 行 · 第 1/2 页
H
694 行
* Bit definitions for s_flags. */#define IPATH_S_BUSY 0#define IPATH_S_SIGNAL_REQ_WR 1/* * Since struct ipath_swqe is not a fixed size, we can't simply index into * struct ipath_qp.s_wq. This function does the array index computation. */static inline struct ipath_swqe *get_swqe_ptr(struct ipath_qp *qp, unsigned n){ return (struct ipath_swqe *)((char *)qp->s_wq + (sizeof(struct ipath_swqe) + qp->s_max_sge * sizeof(struct ipath_sge)) * n);}/* * Since struct ipath_rwqe is not a fixed size, we can't simply index into * struct ipath_rq.wq. This function does the array index computation. */static inline struct ipath_rwqe *get_rwqe_ptr(struct ipath_rq *rq, unsigned n){ return (struct ipath_rwqe *) ((char *) rq->wq + (sizeof(struct ipath_rwqe) + rq->max_sge * sizeof(struct ipath_sge)) * n);}/* * QPN-map pages start out as NULL, they get allocated upon * first use and are never deallocated. This way, * large bitmaps are not allocated unless large numbers of QPs are used. */struct qpn_map { atomic_t n_free; void *page;};struct ipath_qp_table { spinlock_t lock; u32 last; /* last QP number allocated */ u32 max; /* size of the hash table */ u32 nmaps; /* size of the map table */ struct ipath_qp **table; /* bit map of free numbers */ struct qpn_map map[QPNMAP_ENTRIES];};struct ipath_lkey_table { spinlock_t lock; u32 next; /* next unused index (speeds search) */ u32 gen; /* generation count */ u32 max; /* size of the table */ struct ipath_mregion **table;};struct ipath_opcode_stats { u64 n_packets; /* number of packets */ u64 n_bytes; /* total number of bytes */};struct ipath_ibdev { struct ib_device ibdev; struct list_head dev_list; struct ipath_devdata *dd; int ib_unit; /* This is the device number */ u16 sm_lid; /* in host order */ u8 sm_sl; u8 mkeyprot_resv_lmc; /* non-zero when timer is set */ unsigned long mkey_lease_timeout; /* The following fields are really per port. */ struct ipath_qp_table qp_table; struct ipath_lkey_table lk_table; struct list_head pending[3]; /* FIFO of QPs waiting for ACKs */ struct list_head piowait; /* list for wait PIO buf */ /* list of QPs waiting for RNR timer */ struct list_head rnrwait; spinlock_t pending_lock; __be64 sys_image_guid; /* in network order */ __be64 gid_prefix; /* in network order */ __be64 mkey; u64 ipath_sword; /* total dwords sent (sample result) */ u64 ipath_rword; /* total dwords received (sample result) */ u64 ipath_spkts; /* total packets sent (sample result) */ u64 ipath_rpkts; /* total packets received (sample result) */ /* # of ticks no data sent (sample result) */ u64 ipath_xmit_wait; u64 rcv_errors; /* # of packets with SW detected rcv errs */ u64 n_unicast_xmit; /* total unicast packets sent */ u64 n_unicast_rcv; /* total unicast packets received */ u64 n_multicast_xmit; /* total multicast packets sent */ u64 n_multicast_rcv; /* total multicast packets received */ u64 n_symbol_error_counter; /* starting count for PMA */ u64 n_link_error_recovery_counter; /* starting count for PMA */ u64 n_link_downed_counter; /* starting count for PMA */ u64 n_port_rcv_errors; /* starting count for PMA */ u64 n_port_rcv_remphys_errors; /* starting count for PMA */ u64 n_port_xmit_discards; /* starting count for PMA */ u64 n_port_xmit_data; /* starting count for PMA */ u64 n_port_rcv_data; /* starting count for PMA */ u64 n_port_xmit_packets; /* starting count for PMA */ u64 n_port_rcv_packets; /* starting count for PMA */ u32 n_pkey_violations; /* starting count for PMA */ u32 n_rc_resends; u32 n_rc_acks; u32 n_rc_qacks; u32 n_seq_naks; u32 n_rdma_seq; u32 n_rnr_naks; u32 n_other_naks; u32 n_timeouts; u32 n_pkt_drops; u32 n_wqe_errs; u32 n_rdma_dup_busy; u32 n_piowait; u32 n_no_piobuf; u32 port_cap_flags; u32 pma_sample_start; u32 pma_sample_interval; __be16 pma_counter_select[5]; u16 pma_tag; u16 qkey_violations; u16 mkey_violations; u16 mkey_lease_period; u16 pending_index; /* which pending queue is active */ u8 pma_sample_status; u8 subnet_timeout; u8 link_width_enabled; u8 vl_high_limit; struct ipath_opcode_stats opstats[128];};struct ipath_ucontext { struct ib_ucontext ibucontext;};static inline struct ipath_mr *to_imr(struct ib_mr *ibmr){ return container_of(ibmr, struct ipath_mr, ibmr);}static inline struct ipath_fmr *to_ifmr(struct ib_fmr *ibfmr){ return container_of(ibfmr, struct ipath_fmr, ibfmr);}static inline struct ipath_pd *to_ipd(struct ib_pd *ibpd){ return container_of(ibpd, struct ipath_pd, ibpd);}static inline struct ipath_ah *to_iah(struct ib_ah *ibah){ return container_of(ibah, struct ipath_ah, ibah);}static inline struct ipath_cq *to_icq(struct ib_cq *ibcq){ return container_of(ibcq, struct ipath_cq, ibcq);}static inline struct ipath_srq *to_isrq(struct ib_srq *ibsrq){ return container_of(ibsrq, struct ipath_srq, ibsrq);}static inline struct ipath_qp *to_iqp(struct ib_qp *ibqp){ return container_of(ibqp, struct ipath_qp, ibqp);}static inline struct ipath_ibdev *to_idev(struct ib_device *ibdev){ return container_of(ibdev, struct ipath_ibdev, ibdev);}int ipath_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, struct ib_wc *in_wc, struct ib_grh *in_grh, struct ib_mad *in_mad, struct ib_mad *out_mad);static inline struct ipath_ucontext *to_iucontext(struct ib_ucontext *ibucontext){ return container_of(ibucontext, struct ipath_ucontext, ibucontext);}/* * Compare the lower 24 bits of the two values. * Returns an integer <, ==, or > than zero. */static inline int ipath_cmp24(u32 a, u32 b){ return (((int) a) - ((int) b)) << 8;}struct ipath_mcast *ipath_mcast_find(union ib_gid *mgid);int ipath_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);int ipath_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);int ipath_mcast_tree_empty(void);__be32 ipath_compute_aeth(struct ipath_qp *qp);struct ipath_qp *ipath_lookup_qpn(struct ipath_qp_table *qpt, u32 qpn);struct ib_qp *ipath_create_qp(struct ib_pd *ibpd, struct ib_qp_init_attr *init_attr, struct ib_udata *udata);int ipath_destroy_qp(struct ib_qp *ibqp);int ipath_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask);int ipath_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask, struct ib_qp_init_attr *init_attr);void ipath_free_all_qps(struct ipath_qp_table *qpt);int ipath_init_qp_table(struct ipath_ibdev *idev, int size);void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc);void ipath_get_credit(struct ipath_qp *qp, u32 aeth);void ipath_do_rc_send(unsigned long data);void ipath_do_uc_send(unsigned long data);void ipath_cq_enter(struct ipath_cq *cq, struct ib_wc *entry, int sig);int ipath_rkey_ok(struct ipath_ibdev *dev, struct ipath_sge_state *ss, u32 len, u64 vaddr, u32 rkey, int acc);int ipath_lkey_ok(struct ipath_lkey_table *rkt, struct ipath_sge *isge, struct ib_sge *sge, int acc);void ipath_copy_sge(struct ipath_sge_state *ss, void *data, u32 length);void ipath_skip_sge(struct ipath_sge_state *ss, u32 length);int ipath_post_rc_send(struct ipath_qp *qp, struct ib_send_wr *wr);void ipath_uc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, int has_grh, void *data, u32 tlen, struct ipath_qp *qp);void ipath_rc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, int has_grh, void *data, u32 tlen, struct ipath_qp *qp);void ipath_restart_rc(struct ipath_qp *qp, u32 psn, struct ib_wc *wc);int ipath_post_ud_send(struct ipath_qp *qp, struct ib_send_wr *wr);void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, int has_grh, void *data, u32 tlen, struct ipath_qp *qp);int ipath_alloc_lkey(struct ipath_lkey_table *rkt, struct ipath_mregion *mr);void ipath_free_lkey(struct ipath_lkey_table *rkt, u32 lkey);int ipath_lkey_ok(struct ipath_lkey_table *rkt, struct ipath_sge *isge, struct ib_sge *sge, int acc);int ipath_rkey_ok(struct ipath_ibdev *dev, struct ipath_sge_state *ss, u32 len, u64 vaddr, u32 rkey, int acc);int ipath_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr, struct ib_recv_wr **bad_wr);struct ib_srq *ipath_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *srq_init_attr, struct ib_udata *udata);int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, enum ib_srq_attr_mask attr_mask);int ipath_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr);int ipath_destroy_srq(struct ib_srq *ibsrq);void ipath_cq_enter(struct ipath_cq *cq, struct ib_wc *entry, int sig);int ipath_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry);struct ib_cq *ipath_create_cq(struct ib_device *ibdev, int entries, struct ib_ucontext *context, struct ib_udata *udata);int ipath_destroy_cq(struct ib_cq *ibcq);int ipath_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify notify);int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata);struct ib_mr *ipath_get_dma_mr(struct ib_pd *pd, int acc);struct ib_mr *ipath_reg_phys_mr(struct ib_pd *pd, struct ib_phys_buf *buffer_list, int num_phys_buf, int acc, u64 *iova_start);struct ib_mr *ipath_reg_user_mr(struct ib_pd *pd, struct ib_umem *region, int mr_access_flags, struct ib_udata *udata);int ipath_dereg_mr(struct ib_mr *ibmr);struct ib_fmr *ipath_alloc_fmr(struct ib_pd *pd, int mr_access_flags, struct ib_fmr_attr *fmr_attr);int ipath_map_phys_fmr(struct ib_fmr *ibfmr, u64 * page_list, int list_len, u64 iova);int ipath_unmap_fmr(struct list_head *fmr_list);int ipath_dealloc_fmr(struct ib_fmr *ibfmr);void ipath_no_bufs_available(struct ipath_qp *qp, struct ipath_ibdev *dev);void ipath_insert_rnr_queue(struct ipath_qp *qp);int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only);void ipath_ruc_loopback(struct ipath_qp *sqp, struct ib_wc *wc);extern const enum ib_wc_opcode ib_ipath_wc_opcode[];extern const u8 ipath_cvt_physportstate[];extern const int ib_ipath_state_ops[];extern unsigned int ib_ipath_lkey_table_size;extern const u32 ib_ipath_rnr_table[];#endif /* IPATH_VERBS_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?