⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipoib.h

📁 linux内核源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 2004, 2005 Topspin Communications.  All rights reserved. * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2004 Voltaire, Inc. All rights reserved. * * This software is available to you under a choice of one of two * licenses.  You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * *     Redistribution and use in source and binary forms, with or *     without modification, are permitted provided that the following *     conditions are met: * *      - Redistributions of source code must retain the above *        copyright notice, this list of conditions and the following *        disclaimer. * *      - Redistributions in binary form must reproduce the above *        copyright notice, this list of conditions and the following *        disclaimer in the documentation and/or other materials *        provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * $Id: ipoib.h 1358 2004-12-17 22:00:11Z roland $ */#ifndef _IPOIB_H#define _IPOIB_H#include <linux/list.h>#include <linux/skbuff.h>#include <linux/netdevice.h>#include <linux/workqueue.h>#include <linux/kref.h>#include <linux/if_infiniband.h>#include <linux/mutex.h>#include <net/neighbour.h>#include <asm/atomic.h>#include <rdma/ib_verbs.h>#include <rdma/ib_pack.h>#include <rdma/ib_sa.h>/* constants */enum {	IPOIB_PACKET_SIZE         = 2048,	IPOIB_BUF_SIZE 		  = IPOIB_PACKET_SIZE + IB_GRH_BYTES,	IPOIB_ENCAP_LEN 	  = 4,	IPOIB_CM_MTU              = 0x10000 - 0x10, /* padding to align header to 16 */	IPOIB_CM_BUF_SIZE         = IPOIB_CM_MTU  + IPOIB_ENCAP_LEN,	IPOIB_CM_HEAD_SIZE 	  = IPOIB_CM_BUF_SIZE % PAGE_SIZE,	IPOIB_CM_RX_SG            = ALIGN(IPOIB_CM_BUF_SIZE, PAGE_SIZE) / PAGE_SIZE,	IPOIB_RX_RING_SIZE 	  = 128,	IPOIB_TX_RING_SIZE 	  = 64,	IPOIB_MAX_QUEUE_SIZE	  = 8192,	IPOIB_MIN_QUEUE_SIZE	  = 2,	IPOIB_NUM_WC 		  = 4,	IPOIB_MAX_PATH_REC_QUEUE  = 3,	IPOIB_MAX_MCAST_QUEUE     = 3,	IPOIB_FLAG_OPER_UP 	  = 0,	IPOIB_FLAG_INITIALIZED    = 1,	IPOIB_FLAG_ADMIN_UP 	  = 2,	IPOIB_PKEY_ASSIGNED 	  = 3,	IPOIB_PKEY_STOP 	  = 4,	IPOIB_FLAG_SUBINTERFACE   = 5,	IPOIB_MCAST_RUN 	  = 6,	IPOIB_STOP_REAPER         = 7,	IPOIB_MCAST_STARTED       = 8,	IPOIB_FLAG_ADMIN_CM 	  = 9,	IPOIB_FLAG_UMCAST	  = 10,	IPOIB_MAX_BACKOFF_SECONDS = 16,	IPOIB_MCAST_FLAG_FOUND 	  = 0,	/* used in set_multicast_list */	IPOIB_MCAST_FLAG_SENDONLY = 1,	IPOIB_MCAST_FLAG_BUSY 	  = 2,	/* joining or already joined */	IPOIB_MCAST_FLAG_ATTACHED = 3,};#define	IPOIB_OP_RECV   (1ul << 31)#ifdef CONFIG_INFINIBAND_IPOIB_CM#define	IPOIB_OP_CM     (1ul << 30)#else#define	IPOIB_OP_CM     (0)#endif/* structs */struct ipoib_header {	__be16	proto;	u16	reserved;};struct ipoib_pseudoheader {	u8  hwaddr[INFINIBAND_ALEN];};/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */struct ipoib_mcast {	struct ib_sa_mcmember_rec mcmember;	struct ib_sa_multicast	 *mc;	struct ipoib_ah          *ah;	struct rb_node    rb_node;	struct list_head  list;	unsigned long created;	unsigned long backoff;	unsigned long flags;	unsigned char logcount;	struct list_head  neigh_list;	struct sk_buff_head pkt_queue;	struct net_device *dev;};struct ipoib_rx_buf {	struct sk_buff *skb;	u64		mapping;};struct ipoib_tx_buf {	struct sk_buff *skb;	u64		mapping;};struct ib_cm_id;struct ipoib_cm_data {	__be32 qpn; /* High byte MUST be ignored on receive */	__be32 mtu;};/* * Quoting 10.3.1 Queue Pair and EE Context States: * * Note, for QPs that are associated with an SRQ, the Consumer should take the * QP through the Error State before invoking a Destroy QP or a Modify QP to the * Reset State.  The Consumer may invoke the Destroy QP without first performing * a Modify QP to the Error State and waiting for the Affiliated Asynchronous * Last WQE Reached Event. However, if the Consumer does not wait for the * Affiliated Asynchronous Last WQE Reached Event, then WQE and Data Segment * leakage may occur. Therefore, it is good programming practice to tear down a * QP that is associated with an SRQ by using the following process: * * - Put the QP in the Error State * - Wait for the Affiliated Asynchronous Last WQE Reached Event; * - either: *       drain the CQ by invoking the Poll CQ verb and either wait for CQ *       to be empty or the number of Poll CQ operations has exceeded *       CQ capacity size; * - or *       post another WR that completes on the same CQ and wait for this *       WR to return as a WC; * - and then invoke a Destroy QP or Reset QP. * * We use the second option and wait for a completion on the * same CQ before destroying QPs attached to our SRQ. */enum ipoib_cm_state {	IPOIB_CM_RX_LIVE,	IPOIB_CM_RX_ERROR, /* Ignored by stale task */	IPOIB_CM_RX_FLUSH  /* Last WQE Reached event observed */};struct ipoib_cm_rx {	struct ib_cm_id     *id;	struct ib_qp        *qp;	struct list_head     list;	struct net_device   *dev;	unsigned long        jiffies;	enum ipoib_cm_state  state;};struct ipoib_cm_tx {	struct ib_cm_id     *id;	struct ib_qp        *qp;	struct list_head     list;	struct net_device   *dev;	struct ipoib_neigh  *neigh;	struct ipoib_path   *path;	struct ipoib_tx_buf *tx_ring;	unsigned             tx_head;	unsigned             tx_tail;	unsigned long        flags;	u32                  mtu;	struct ib_wc         ibwc[IPOIB_NUM_WC];};struct ipoib_cm_rx_buf {	struct sk_buff *skb;	u64 mapping[IPOIB_CM_RX_SG];};struct ipoib_cm_dev_priv {	struct ib_srq  	       *srq;	struct ipoib_cm_rx_buf *srq_ring;	struct ib_cm_id        *id;	struct list_head        passive_ids;   /* state: LIVE */	struct list_head        rx_error_list; /* state: ERROR */	struct list_head        rx_flush_list; /* state: FLUSH, drain not started */	struct list_head        rx_drain_list; /* state: FLUSH, drain started */	struct list_head        rx_reap_list;  /* state: FLUSH, drain done */	struct work_struct      start_task;	struct work_struct      reap_task;	struct work_struct      skb_task;	struct work_struct      rx_reap_task;	struct delayed_work     stale_task;	struct sk_buff_head     skb_queue;	struct list_head        start_list;	struct list_head        reap_list;	struct ib_wc            ibwc[IPOIB_NUM_WC];	struct ib_sge           rx_sge[IPOIB_CM_RX_SG];	struct ib_recv_wr       rx_wr;};/* * Device private locking: tx_lock protects members used in TX fast * path (and we use LLTX so upper layers don't do extra locking). * lock protects everything else.  lock nests inside of tx_lock (ie * tx_lock must be acquired first if needed). */struct ipoib_dev_priv {	spinlock_t lock;	struct net_device *dev;	struct napi_struct napi;	unsigned long flags;	struct mutex mcast_mutex;	struct mutex vlan_mutex;	struct rb_root  path_tree;	struct list_head path_list;	struct ipoib_mcast *broadcast;	struct list_head multicast_list;	struct rb_root multicast_tree;	struct delayed_work pkey_poll_task;	struct delayed_work mcast_task;	struct work_struct flush_task;	struct work_struct restart_task;	struct delayed_work ah_reap_task;	struct work_struct pkey_event_task;	struct ib_device *ca;	u8            	  port;	u16           	  pkey;	u16               pkey_index;	struct ib_pd  	 *pd;	struct ib_mr  	 *mr;	struct ib_cq  	 *cq;	struct ib_qp  	 *qp;	u32           	  qkey;	union ib_gid local_gid;	u16          local_lid;	unsigned int admin_mtu;	unsigned int mcast_mtu;	struct ipoib_rx_buf *rx_ring;	spinlock_t           tx_lock;	struct ipoib_tx_buf *tx_ring;	unsigned             tx_head;	unsigned             tx_tail;	struct ib_sge        tx_sge;	struct ib_send_wr    tx_wr;	unsigned             tx_outstanding;	struct ib_wc ibwc[IPOIB_NUM_WC];	struct list_head dead_ahs;	struct ib_event_handler event_handler;	struct net_device *parent;	struct list_head child_intfs;	struct list_head list;#ifdef CONFIG_INFINIBAND_IPOIB_CM	struct ipoib_cm_dev_priv cm;#endif#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG	struct list_head fs_list;	struct dentry *mcg_dentry;	struct dentry *path_dentry;#endif};struct ipoib_ah {	struct net_device *dev;	struct ib_ah      *ah;	struct list_head   list;	struct kref        ref;	unsigned           last_send;};struct ipoib_path {	struct net_device    *dev;	struct ib_sa_path_rec pathrec;	struct ipoib_ah      *ah;	struct sk_buff_head   queue;	struct list_head      neigh_list;	int                   query_id;	struct ib_sa_query   *query;	struct completion     done;	struct rb_node        rb_node;	struct list_head      list;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -