cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ipoib.h (23705B)


      1/*
      2 * Copyright (c) 2004, 2005 Topspin Communications.  All rights reserved.
      3 * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
      4 * Copyright (c) 2004 Voltaire, Inc. All rights reserved.
      5 *
      6 * This software is available to you under a choice of one of two
      7 * licenses.  You may choose to be licensed under the terms of the GNU
      8 * General Public License (GPL) Version 2, available from the file
      9 * COPYING in the main directory of this source tree, or the
     10 * OpenIB.org BSD license below:
     11 *
     12 *     Redistribution and use in source and binary forms, with or
     13 *     without modification, are permitted provided that the following
     14 *     conditions are met:
     15 *
     16 *      - Redistributions of source code must retain the above
     17 *        copyright notice, this list of conditions and the following
     18 *        disclaimer.
     19 *
     20 *      - Redistributions in binary form must reproduce the above
     21 *        copyright notice, this list of conditions and the following
     22 *        disclaimer in the documentation and/or other materials
     23 *        provided with the distribution.
     24 *
     25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     32 * SOFTWARE.
     33 */
     34
     35#ifndef _IPOIB_H
     36#define _IPOIB_H
     37
     38#include <linux/list.h>
     39#include <linux/skbuff.h>
     40#include <linux/netdevice.h>
     41#include <linux/workqueue.h>
     42#include <linux/kref.h>
     43#include <linux/if_infiniband.h>
     44#include <linux/mutex.h>
     45
     46#include <net/neighbour.h>
     47#include <net/sch_generic.h>
     48
     49#include <linux/atomic.h>
     50
     51#include <rdma/ib_verbs.h>
     52#include <rdma/ib_pack.h>
     53#include <rdma/ib_sa.h>
     54#include <linux/sched.h>
     55/* constants */
     56
     57enum ipoib_flush_level {
     58	IPOIB_FLUSH_LIGHT,
     59	IPOIB_FLUSH_NORMAL,
     60	IPOIB_FLUSH_HEAVY
     61};
     62
     63enum {
     64	IPOIB_ENCAP_LEN		  = 4,
     65	IPOIB_PSEUDO_LEN	  = 20,
     66	IPOIB_HARD_LEN		  = IPOIB_ENCAP_LEN + IPOIB_PSEUDO_LEN,
     67
     68	IPOIB_UD_HEAD_SIZE	  = IB_GRH_BYTES + IPOIB_ENCAP_LEN,
     69	IPOIB_UD_RX_SG		  = 2, /* max buffer needed for 4K mtu */
     70
     71	IPOIB_CM_MTU		  = 0x10000 - 0x10, /* padding to align header to 16 */
     72	IPOIB_CM_BUF_SIZE	  = IPOIB_CM_MTU  + IPOIB_ENCAP_LEN,
     73	IPOIB_CM_HEAD_SIZE	  = IPOIB_CM_BUF_SIZE % PAGE_SIZE,
     74	IPOIB_CM_RX_SG		  = ALIGN(IPOIB_CM_BUF_SIZE, PAGE_SIZE) / PAGE_SIZE,
     75	IPOIB_RX_RING_SIZE	  = 256,
     76	IPOIB_TX_RING_SIZE	  = 128,
     77	IPOIB_MAX_QUEUE_SIZE	  = 8192,
     78	IPOIB_MIN_QUEUE_SIZE	  = 2,
     79	IPOIB_CM_MAX_CONN_QP	  = 4096,
     80
     81	IPOIB_NUM_WC		  = 4,
     82
     83	IPOIB_MAX_PATH_REC_QUEUE  = 3,
     84	IPOIB_MAX_MCAST_QUEUE	  = 64,
     85
     86	IPOIB_FLAG_OPER_UP	  = 0,
     87	IPOIB_FLAG_INITIALIZED	  = 1,
     88	IPOIB_FLAG_ADMIN_UP	  = 2,
     89	IPOIB_PKEY_ASSIGNED	  = 3,
     90	IPOIB_FLAG_SUBINTERFACE	  = 5,
     91	IPOIB_STOP_REAPER	  = 7,
     92	IPOIB_FLAG_ADMIN_CM	  = 9,
     93	IPOIB_FLAG_UMCAST	  = 10,
     94	IPOIB_NEIGH_TBL_FLUSH	  = 12,
     95	IPOIB_FLAG_DEV_ADDR_SET	  = 13,
     96	IPOIB_FLAG_DEV_ADDR_CTRL  = 14,
     97
     98	IPOIB_MAX_BACKOFF_SECONDS = 16,
     99
    100	IPOIB_MCAST_FLAG_FOUND	  = 0,	/* used in set_multicast_list */
    101	IPOIB_MCAST_FLAG_SENDONLY = 1,
    102	/*
    103	 * For IPOIB_MCAST_FLAG_BUSY
    104	 * When set, in flight join and mcast->mc is unreliable
    105	 * When clear and mcast->mc IS_ERR_OR_NULL, need to restart or
    106	 *   haven't started yet
    107	 * When clear and mcast->mc is valid pointer, join was successful
    108	 */
    109	IPOIB_MCAST_FLAG_BUSY	  = 2,
    110	IPOIB_MCAST_FLAG_ATTACHED = 3,
    111
    112	MAX_SEND_CQE		  = 64,
    113	IPOIB_CM_COPYBREAK	  = 256,
    114
    115	IPOIB_NON_CHILD		  = 0,
    116	IPOIB_LEGACY_CHILD	  = 1,
    117	IPOIB_RTNL_CHILD	  = 2,
    118};
    119
    120#define	IPOIB_OP_RECV   (1ul << 31)
    121#ifdef CONFIG_INFINIBAND_IPOIB_CM
    122#define	IPOIB_OP_CM     (1ul << 30)
    123#else
    124#define	IPOIB_OP_CM     (0)
    125#endif
    126
    127#define IPOIB_QPN_MASK ((__force u32) cpu_to_be32(0xFFFFFF))
    128
    129/* structs */
    130
    131struct ipoib_header {
    132	__be16	proto;
    133	u16	reserved;
    134};
    135
    136struct ipoib_pseudo_header {
    137	u8	hwaddr[INFINIBAND_ALEN];
    138};
    139
    140static inline void skb_add_pseudo_hdr(struct sk_buff *skb)
    141{
    142	char *data = skb_push(skb, IPOIB_PSEUDO_LEN);
    143
    144	/*
    145	 * only the ipoib header is present now, make room for a dummy
    146	 * pseudo header and set skb field accordingly
    147	 */
    148	memset(data, 0, IPOIB_PSEUDO_LEN);
    149	skb_reset_mac_header(skb);
    150	skb_pull(skb, IPOIB_HARD_LEN);
    151}
    152
    153static inline struct ipoib_dev_priv *ipoib_priv(const struct net_device *dev)
    154{
    155	struct rdma_netdev *rn = netdev_priv(dev);
    156
    157	return rn->clnt_priv;
    158}
    159
    160/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */
    161struct ipoib_mcast {
    162	struct ib_sa_mcmember_rec mcmember;
    163	struct ib_sa_multicast	 *mc;
    164	struct ipoib_ah		 *ah;
    165
    166	struct rb_node    rb_node;
    167	struct list_head  list;
    168
    169	unsigned long created;
    170	unsigned long backoff;
    171	unsigned long delay_until;
    172
    173	unsigned long flags;
    174	unsigned char logcount;
    175
    176	struct list_head  neigh_list;
    177
    178	struct sk_buff_head pkt_queue;
    179
    180	struct net_device *dev;
    181	struct completion done;
    182};
    183
    184struct ipoib_rx_buf {
    185	struct sk_buff *skb;
    186	u64		mapping[IPOIB_UD_RX_SG];
    187};
    188
    189struct ipoib_tx_buf {
    190	struct sk_buff *skb;
    191	u64		mapping[MAX_SKB_FRAGS + 1];
    192};
    193
    194struct ib_cm_id;
    195
    196struct ipoib_cm_data {
    197	__be32 qpn; /* High byte MUST be ignored on receive */
    198	__be32 mtu;
    199};
    200
    201/*
    202 * Quoting 10.3.1 Queue Pair and EE Context States:
    203 *
    204 * Note, for QPs that are associated with an SRQ, the Consumer should take the
    205 * QP through the Error State before invoking a Destroy QP or a Modify QP to the
    206 * Reset State.  The Consumer may invoke the Destroy QP without first performing
    207 * a Modify QP to the Error State and waiting for the Affiliated Asynchronous
    208 * Last WQE Reached Event. However, if the Consumer does not wait for the
    209 * Affiliated Asynchronous Last WQE Reached Event, then WQE and Data Segment
    210 * leakage may occur. Therefore, it is good programming practice to tear down a
    211 * QP that is associated with an SRQ by using the following process:
    212 *
    213 * - Put the QP in the Error State
    214 * - Wait for the Affiliated Asynchronous Last WQE Reached Event;
    215 * - either:
    216 *       drain the CQ by invoking the Poll CQ verb and either wait for CQ
    217 *       to be empty or the number of Poll CQ operations has exceeded
    218 *       CQ capacity size;
    219 * - or
    220 *       post another WR that completes on the same CQ and wait for this
    221 *       WR to return as a WC;
    222 * - and then invoke a Destroy QP or Reset QP.
    223 *
    224 * We use the second option and wait for a completion on the
    225 * same CQ before destroying QPs attached to our SRQ.
    226 */
    227
    228enum ipoib_cm_state {
    229	IPOIB_CM_RX_LIVE,
    230	IPOIB_CM_RX_ERROR, /* Ignored by stale task */
    231	IPOIB_CM_RX_FLUSH  /* Last WQE Reached event observed */
    232};
    233
    234struct ipoib_cm_rx {
    235	struct ib_cm_id	       *id;
    236	struct ib_qp	       *qp;
    237	struct ipoib_cm_rx_buf *rx_ring;
    238	struct list_head	list;
    239	struct net_device      *dev;
    240	unsigned long		jiffies;
    241	enum ipoib_cm_state	state;
    242	int			recv_count;
    243};
    244
    245struct ipoib_cm_tx {
    246	struct ib_cm_id	    *id;
    247	struct ib_qp	    *qp;
    248	struct list_head     list;
    249	struct net_device   *dev;
    250	struct ipoib_neigh  *neigh;
    251	struct ipoib_tx_buf *tx_ring;
    252	unsigned int	     tx_head;
    253	unsigned int	     tx_tail;
    254	unsigned long	     flags;
    255	u32		     mtu;
    256	unsigned int         max_send_sge;
    257};
    258
    259struct ipoib_cm_rx_buf {
    260	struct sk_buff *skb;
    261	u64 mapping[IPOIB_CM_RX_SG];
    262};
    263
    264struct ipoib_cm_dev_priv {
    265	struct ib_srq	       *srq;
    266	struct ipoib_cm_rx_buf *srq_ring;
    267	struct ib_cm_id	       *id;
    268	struct list_head	passive_ids;   /* state: LIVE */
    269	struct list_head	rx_error_list; /* state: ERROR */
    270	struct list_head	rx_flush_list; /* state: FLUSH, drain not started */
    271	struct list_head	rx_drain_list; /* state: FLUSH, drain started */
    272	struct list_head	rx_reap_list;  /* state: FLUSH, drain done */
    273	struct work_struct      start_task;
    274	struct work_struct      reap_task;
    275	struct work_struct      skb_task;
    276	struct work_struct      rx_reap_task;
    277	struct delayed_work     stale_task;
    278	struct sk_buff_head     skb_queue;
    279	struct list_head	start_list;
    280	struct list_head	reap_list;
    281	struct ib_wc		ibwc[IPOIB_NUM_WC];
    282	struct ib_sge		rx_sge[IPOIB_CM_RX_SG];
    283	struct ib_recv_wr       rx_wr;
    284	int			nonsrq_conn_qp;
    285	int			max_cm_mtu;
    286	int			num_frags;
    287};
    288
    289struct ipoib_ethtool_st {
    290	u16     coalesce_usecs;
    291	u16     max_coalesced_frames;
    292};
    293
    294struct ipoib_neigh_table;
    295
    296struct ipoib_neigh_hash {
    297	struct ipoib_neigh_table       *ntbl;
    298	struct ipoib_neigh __rcu      **buckets;
    299	struct rcu_head			rcu;
    300	u32				mask;
    301	u32				size;
    302};
    303
    304struct ipoib_neigh_table {
    305	struct ipoib_neigh_hash __rcu  *htbl;
    306	atomic_t			entries;
    307	struct completion		flushed;
    308	struct completion		deleted;
    309};
    310
    311struct ipoib_qp_state_validate {
    312	struct work_struct work;
    313	struct ipoib_dev_priv   *priv;
    314};
    315
    316/*
    317 * Device private locking: network stack tx_lock protects members used
    318 * in TX fast path, lock protects everything else.  lock nests inside
    319 * of tx_lock (ie tx_lock must be acquired first if needed).
    320 */
    321struct ipoib_dev_priv {
    322	spinlock_t lock;
    323
    324	struct net_device *dev;
    325	void (*next_priv_destructor)(struct net_device *dev);
    326
    327	struct napi_struct send_napi;
    328	struct napi_struct recv_napi;
    329
    330	unsigned long flags;
    331
    332	/*
    333	 * This protects access to the child_intfs list.
    334	 * To READ from child_intfs the RTNL or vlan_rwsem read side must be
    335	 * held.  To WRITE RTNL and the vlan_rwsem write side must be held (in
    336	 * that order) This lock exists because we have a few contexts where
    337	 * we need the child_intfs, but do not want to grab the RTNL.
    338	 */
    339	struct rw_semaphore vlan_rwsem;
    340	struct mutex mcast_mutex;
    341
    342	struct rb_root  path_tree;
    343	struct list_head path_list;
    344
    345	struct ipoib_neigh_table ntbl;
    346
    347	struct ipoib_mcast *broadcast;
    348	struct list_head multicast_list;
    349	struct rb_root multicast_tree;
    350
    351	struct workqueue_struct *wq;
    352	struct delayed_work mcast_task;
    353	struct work_struct carrier_on_task;
    354	struct work_struct flush_light;
    355	struct work_struct flush_normal;
    356	struct work_struct flush_heavy;
    357	struct work_struct restart_task;
    358	struct delayed_work ah_reap_task;
    359	struct delayed_work neigh_reap_task;
    360	struct ib_device *ca;
    361	u8		  port;
    362	u16		  pkey;
    363	u16		  pkey_index;
    364	struct ib_pd	 *pd;
    365	struct ib_cq	 *recv_cq;
    366	struct ib_cq	 *send_cq;
    367	struct ib_qp	 *qp;
    368	u32		  qkey;
    369
    370	union ib_gid local_gid;
    371	u32	     local_lid;
    372
    373	unsigned int admin_mtu;
    374	unsigned int mcast_mtu;
    375	unsigned int max_ib_mtu;
    376
    377	struct ipoib_rx_buf *rx_ring;
    378
    379	struct ipoib_tx_buf *tx_ring;
    380	/* cyclic ring variables for managing tx_ring, for UD only */
    381	unsigned int	     tx_head;
    382	unsigned int	     tx_tail;
    383	/* cyclic ring variables for counting overall outstanding send WRs */
    384	unsigned int	     global_tx_head;
    385	unsigned int	     global_tx_tail;
    386	struct ib_sge	     tx_sge[MAX_SKB_FRAGS + 1];
    387	struct ib_ud_wr      tx_wr;
    388	struct ib_wc	     send_wc[MAX_SEND_CQE];
    389
    390	struct ib_recv_wr    rx_wr;
    391	struct ib_sge	     rx_sge[IPOIB_UD_RX_SG];
    392
    393	struct ib_wc ibwc[IPOIB_NUM_WC];
    394
    395	struct list_head dead_ahs;
    396
    397	struct ib_event_handler event_handler;
    398
    399	struct net_device *parent;
    400	struct list_head child_intfs;
    401	struct list_head list;
    402	int    child_type;
    403
    404#ifdef CONFIG_INFINIBAND_IPOIB_CM
    405	struct ipoib_cm_dev_priv cm;
    406#endif
    407
    408#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
    409	struct list_head fs_list;
    410	struct dentry *mcg_dentry;
    411	struct dentry *path_dentry;
    412#endif
    413	u64	hca_caps;
    414	u64	kernel_caps;
    415	struct ipoib_ethtool_st ethtool;
    416	unsigned int max_send_sge;
    417	const struct net_device_ops	*rn_ops;
    418};
    419
    420struct ipoib_ah {
    421	struct net_device *dev;
    422	struct ib_ah	  *ah;
    423	struct list_head   list;
    424	struct kref	   ref;
    425	unsigned int	   last_send;
    426	int  		   valid;
    427};
    428
    429struct ipoib_path {
    430	struct net_device    *dev;
    431	struct sa_path_rec pathrec;
    432	struct ipoib_ah      *ah;
    433	struct sk_buff_head   queue;
    434
    435	struct list_head      neigh_list;
    436
    437	int		      query_id;
    438	struct ib_sa_query   *query;
    439	struct completion     done;
    440
    441	struct rb_node	      rb_node;
    442	struct list_head      list;
    443};
    444
    445struct ipoib_neigh {
    446	struct ipoib_ah    *ah;
    447#ifdef CONFIG_INFINIBAND_IPOIB_CM
    448	struct ipoib_cm_tx *cm;
    449#endif
    450	u8     daddr[INFINIBAND_ALEN];
    451	struct sk_buff_head queue;
    452
    453	struct net_device *dev;
    454
    455	struct list_head    list;
    456	struct ipoib_neigh __rcu *hnext;
    457	struct rcu_head     rcu;
    458	refcount_t	    refcnt;
    459	unsigned long       alive;
    460};
    461
    462#define IPOIB_UD_MTU(ib_mtu)		(ib_mtu - IPOIB_ENCAP_LEN)
    463#define IPOIB_UD_BUF_SIZE(ib_mtu)	(ib_mtu + IB_GRH_BYTES)
    464
    465void ipoib_neigh_dtor(struct ipoib_neigh *neigh);
    466static inline void ipoib_neigh_put(struct ipoib_neigh *neigh)
    467{
    468	if (refcount_dec_and_test(&neigh->refcnt))
    469		ipoib_neigh_dtor(neigh);
    470}
    471struct ipoib_neigh *ipoib_neigh_get(struct net_device *dev, u8 *daddr);
    472struct ipoib_neigh *ipoib_neigh_alloc(u8 *daddr,
    473				      struct net_device *dev);
    474void ipoib_neigh_free(struct ipoib_neigh *neigh);
    475void ipoib_del_neighs_by_gid(struct net_device *dev, u8 *gid);
    476
    477extern struct workqueue_struct *ipoib_workqueue;
    478
    479/* functions */
    480
    481int ipoib_rx_poll(struct napi_struct *napi, int budget);
    482int ipoib_tx_poll(struct napi_struct *napi, int budget);
    483void ipoib_ib_rx_completion(struct ib_cq *cq, void *ctx_ptr);
    484void ipoib_ib_tx_completion(struct ib_cq *cq, void *ctx_ptr);
    485
    486struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
    487				 struct ib_pd *pd, struct rdma_ah_attr *attr);
    488void ipoib_free_ah(struct kref *kref);
    489static inline void ipoib_put_ah(struct ipoib_ah *ah)
    490{
    491	kref_put(&ah->ref, ipoib_free_ah);
    492}
    493int ipoib_open(struct net_device *dev);
    494void ipoib_intf_free(struct net_device *dev);
    495int ipoib_add_pkey_attr(struct net_device *dev);
    496int ipoib_add_umcast_attr(struct net_device *dev);
    497
    498int ipoib_send(struct net_device *dev, struct sk_buff *skb,
    499	       struct ib_ah *address, u32 dqpn);
    500void ipoib_reap_ah(struct work_struct *work);
    501
    502struct ipoib_path *__path_find(struct net_device *dev, void *gid);
    503void ipoib_mark_paths_invalid(struct net_device *dev);
    504void ipoib_flush_paths(struct net_device *dev);
    505struct net_device *ipoib_intf_alloc(struct ib_device *hca, u32 port,
    506				    const char *format);
    507int ipoib_intf_init(struct ib_device *hca, u32 port, const char *format,
    508		    struct net_device *dev);
    509void ipoib_ib_tx_timer_func(struct timer_list *t);
    510void ipoib_ib_dev_flush_light(struct work_struct *work);
    511void ipoib_ib_dev_flush_normal(struct work_struct *work);
    512void ipoib_ib_dev_flush_heavy(struct work_struct *work);
    513void ipoib_pkey_event(struct work_struct *work);
    514void ipoib_ib_dev_cleanup(struct net_device *dev);
    515
    516int ipoib_ib_dev_open_default(struct net_device *dev);
    517int ipoib_ib_dev_open(struct net_device *dev);
    518void ipoib_ib_dev_stop(struct net_device *dev);
    519void ipoib_ib_dev_up(struct net_device *dev);
    520void ipoib_ib_dev_down(struct net_device *dev);
    521int ipoib_ib_dev_stop_default(struct net_device *dev);
    522void ipoib_pkey_dev_check_presence(struct net_device *dev);
    523
    524void ipoib_mcast_join_task(struct work_struct *work);
    525void ipoib_mcast_carrier_on_task(struct work_struct *work);
    526void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb);
    527
    528void ipoib_mcast_restart_task(struct work_struct *work);
    529void ipoib_mcast_start_thread(struct net_device *dev);
    530void ipoib_mcast_stop_thread(struct net_device *dev);
    531
    532void ipoib_mcast_dev_down(struct net_device *dev);
    533void ipoib_mcast_dev_flush(struct net_device *dev);
    534
    535int ipoib_dma_map_tx(struct ib_device *ca, struct ipoib_tx_buf *tx_req);
    536void ipoib_dma_unmap_tx(struct ipoib_dev_priv *priv,
    537			struct ipoib_tx_buf *tx_req);
    538
    539struct rtnl_link_ops *ipoib_get_link_ops(void);
    540
    541static inline void ipoib_build_sge(struct ipoib_dev_priv *priv,
    542				   struct ipoib_tx_buf *tx_req)
    543{
    544	int i, off;
    545	struct sk_buff *skb = tx_req->skb;
    546	skb_frag_t *frags = skb_shinfo(skb)->frags;
    547	int nr_frags = skb_shinfo(skb)->nr_frags;
    548	u64 *mapping = tx_req->mapping;
    549
    550	if (skb_headlen(skb)) {
    551		priv->tx_sge[0].addr         = mapping[0];
    552		priv->tx_sge[0].length       = skb_headlen(skb);
    553		off = 1;
    554	} else
    555		off = 0;
    556
    557	for (i = 0; i < nr_frags; ++i) {
    558		priv->tx_sge[i + off].addr = mapping[i + off];
    559		priv->tx_sge[i + off].length = skb_frag_size(&frags[i]);
    560	}
    561	priv->tx_wr.wr.num_sge	     = nr_frags + off;
    562}
    563
    564#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
    565struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev);
    566int ipoib_mcast_iter_next(struct ipoib_mcast_iter *iter);
    567void ipoib_mcast_iter_read(struct ipoib_mcast_iter *iter,
    568				  union ib_gid *gid,
    569				  unsigned long *created,
    570				  unsigned int *queuelen,
    571				  unsigned int *complete,
    572				  unsigned int *send_only);
    573
    574struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev);
    575int ipoib_path_iter_next(struct ipoib_path_iter *iter);
    576void ipoib_path_iter_read(struct ipoib_path_iter *iter,
    577			  struct ipoib_path *path);
    578#endif
    579
    580int ipoib_mcast_attach(struct net_device *dev, struct ib_device *hca,
    581		       union ib_gid *mgid, u16 mlid, int set_qkey, u32 qkey);
    582int ipoib_mcast_detach(struct net_device *dev, struct ib_device *hca,
    583		       union ib_gid *mgid, u16 mlid);
    584void ipoib_mcast_remove_list(struct list_head *remove_list);
    585void ipoib_check_and_add_mcast_sendonly(struct ipoib_dev_priv *priv, u8 *mgid,
    586				struct list_head *remove_list);
    587
    588int ipoib_init_qp(struct net_device *dev);
    589int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca);
    590void ipoib_transport_dev_cleanup(struct net_device *dev);
    591
    592void ipoib_event(struct ib_event_handler *handler,
    593		 struct ib_event *record);
    594
    595int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey);
    596int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey);
    597
    598int __ipoib_vlan_add(struct ipoib_dev_priv *ppriv, struct ipoib_dev_priv *priv,
    599		     u16 pkey, int child_type);
    600
    601int  __init ipoib_netlink_init(void);
    602void __exit ipoib_netlink_fini(void);
    603
    604void ipoib_set_umcast(struct net_device *ndev, int umcast_val);
    605int  ipoib_set_mode(struct net_device *dev, const char *buf);
    606
    607void ipoib_setup_common(struct net_device *dev);
    608
    609void ipoib_pkey_open(struct ipoib_dev_priv *priv);
    610void ipoib_drain_cq(struct net_device *dev);
    611
    612void ipoib_set_ethtool_ops(struct net_device *dev);
    613
    614#define IPOIB_FLAGS_RC		0x80
    615#define IPOIB_FLAGS_UC		0x40
    616
    617/* We don't support UC connections at the moment */
    618#define IPOIB_CM_SUPPORTED(ha)   (ha[0] & (IPOIB_FLAGS_RC))
    619
    620#ifdef CONFIG_INFINIBAND_IPOIB_CM
    621
    622extern int ipoib_max_conn_qp;
    623
    624static inline int ipoib_cm_admin_enabled(struct net_device *dev)
    625{
    626	struct ipoib_dev_priv *priv = ipoib_priv(dev);
    627	return IPOIB_CM_SUPPORTED(dev->dev_addr) &&
    628		test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
    629}
    630
    631static inline int ipoib_cm_enabled(struct net_device *dev, u8 *hwaddr)
    632{
    633	struct ipoib_dev_priv *priv = ipoib_priv(dev);
    634	return IPOIB_CM_SUPPORTED(hwaddr) &&
    635		test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
    636}
    637
    638static inline int ipoib_cm_up(struct ipoib_neigh *neigh)
    639
    640{
    641	return test_bit(IPOIB_FLAG_OPER_UP, &neigh->cm->flags);
    642}
    643
    644static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh)
    645{
    646	return neigh->cm;
    647}
    648
    649static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx)
    650{
    651	neigh->cm = tx;
    652}
    653
    654static inline int ipoib_cm_has_srq(struct net_device *dev)
    655{
    656	struct ipoib_dev_priv *priv = ipoib_priv(dev);
    657	return !!priv->cm.srq;
    658}
    659
    660static inline unsigned int ipoib_cm_max_mtu(struct net_device *dev)
    661{
    662	struct ipoib_dev_priv *priv = ipoib_priv(dev);
    663	return priv->cm.max_cm_mtu;
    664}
    665
    666void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx);
    667int ipoib_cm_dev_open(struct net_device *dev);
    668void ipoib_cm_dev_stop(struct net_device *dev);
    669int ipoib_cm_dev_init(struct net_device *dev);
    670int ipoib_cm_add_mode_attr(struct net_device *dev);
    671void ipoib_cm_dev_cleanup(struct net_device *dev);
    672struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path,
    673				    struct ipoib_neigh *neigh);
    674void ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx);
    675void ipoib_cm_skb_too_long(struct net_device *dev, struct sk_buff *skb,
    676			   unsigned int mtu);
    677void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc);
    678void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc);
    679#else
    680
    681#define ipoib_max_conn_qp 0
    682
    683static inline int ipoib_cm_admin_enabled(struct net_device *dev)
    684{
    685	return 0;
    686}
    687static inline int ipoib_cm_enabled(struct net_device *dev, u8 *hwaddr)
    688
    689{
    690	return 0;
    691}
    692
    693static inline int ipoib_cm_up(struct ipoib_neigh *neigh)
    694
    695{
    696	return 0;
    697}
    698
    699static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh)
    700{
    701	return NULL;
    702}
    703
    704static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx)
    705{
    706}
    707
    708static inline int ipoib_cm_has_srq(struct net_device *dev)
    709{
    710	return 0;
    711}
    712
    713static inline unsigned int ipoib_cm_max_mtu(struct net_device *dev)
    714{
    715	return 0;
    716}
    717
    718static inline
    719void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx)
    720{
    721	return;
    722}
    723
    724static inline
    725int ipoib_cm_dev_open(struct net_device *dev)
    726{
    727	return 0;
    728}
    729
    730static inline
    731void ipoib_cm_dev_stop(struct net_device *dev)
    732{
    733	return;
    734}
    735
    736static inline
    737int ipoib_cm_dev_init(struct net_device *dev)
    738{
    739	return -EOPNOTSUPP;
    740}
    741
    742static inline
    743void ipoib_cm_dev_cleanup(struct net_device *dev)
    744{
    745	return;
    746}
    747
    748static inline
    749struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path,
    750				    struct ipoib_neigh *neigh)
    751{
    752	return NULL;
    753}
    754
    755static inline
    756void ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx)
    757{
    758	return;
    759}
    760
    761static inline
    762int ipoib_cm_add_mode_attr(struct net_device *dev)
    763{
    764	return 0;
    765}
    766
    767static inline void ipoib_cm_skb_too_long(struct net_device *dev, struct sk_buff *skb,
    768					 unsigned int mtu)
    769{
    770	dev_kfree_skb_any(skb);
    771}
    772
    773static inline void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
    774{
    775}
    776
    777static inline void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
    778{
    779}
    780#endif
    781
    782#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
    783void ipoib_create_debug_files(struct net_device *dev);
    784void ipoib_delete_debug_files(struct net_device *dev);
    785void ipoib_register_debugfs(void);
    786void ipoib_unregister_debugfs(void);
    787#else
    788static inline void ipoib_create_debug_files(struct net_device *dev) { }
    789static inline void ipoib_delete_debug_files(struct net_device *dev) { }
    790static inline void ipoib_register_debugfs(void) { }
    791static inline void ipoib_unregister_debugfs(void) { }
    792#endif
    793
    794#define ipoib_printk(level, priv, format, arg...)	\
    795	printk(level "%s: " format, ((struct ipoib_dev_priv *) priv)->dev->name , ## arg)
    796#define ipoib_warn(priv, format, arg...)		\
    797do {							\
    798	static DEFINE_RATELIMIT_STATE(_rs,		\
    799		10 * HZ /*10 seconds */,		\
    800		100);		\
    801	if (__ratelimit(&_rs))				\
    802		ipoib_printk(KERN_WARNING, priv, format , ## arg);\
    803} while (0)
    804
    805extern int ipoib_sendq_size;
    806extern int ipoib_recvq_size;
    807
    808extern struct ib_sa_client ipoib_sa_client;
    809
    810#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
    811extern int ipoib_debug_level;
    812
    813#define ipoib_dbg(priv, format, arg...)			\
    814	do {						\
    815		if (ipoib_debug_level > 0)			\
    816			ipoib_printk(KERN_DEBUG, priv, format , ## arg); \
    817	} while (0)
    818#define ipoib_dbg_mcast(priv, format, arg...)		\
    819	do {						\
    820		if (mcast_debug_level > 0)		\
    821			ipoib_printk(KERN_DEBUG, priv, format , ## arg); \
    822	} while (0)
    823#else /* CONFIG_INFINIBAND_IPOIB_DEBUG */
    824#define ipoib_dbg(priv, format, arg...)			\
    825	do { (void) (priv); } while (0)
    826#define ipoib_dbg_mcast(priv, format, arg...)		\
    827	do { (void) (priv); } while (0)
    828#endif /* CONFIG_INFINIBAND_IPOIB_DEBUG */
    829
    830#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA
    831#define ipoib_dbg_data(priv, format, arg...)		\
    832	do {						\
    833		if (data_debug_level > 0)		\
    834			ipoib_printk(KERN_DEBUG, priv, format , ## arg); \
    835	} while (0)
    836#else /* CONFIG_INFINIBAND_IPOIB_DEBUG_DATA */
    837#define ipoib_dbg_data(priv, format, arg...)		\
    838	do { (void) (priv); } while (0)
    839#endif /* CONFIG_INFINIBAND_IPOIB_DEBUG_DATA */
    840
    841#define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff)
    842
    843#endif /* _IPOIB_H */