1b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise/* 2b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * Copyright (c) 2006 Chelsio, Inc. All rights reserved. 3b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 4b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * This software is available to you under a choice of one of two 5b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * licenses. You may choose to be licensed under the terms of the GNU 6b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * General Public License (GPL) Version 2, available from the file 7b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * COPYING in the main directory of this source tree, or the 8b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * OpenIB.org BSD license below: 9b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 10b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * Redistribution and use in source and binary forms, with or 11b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * without modification, are permitted provided that the following 12b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * conditions are met: 13b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 14b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * - Redistributions of source code must retain the above 15b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * copyright notice, this list of conditions and the following 16b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * disclaimer. 17b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 18b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * - Redistributions in binary form must reproduce the above 19b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * copyright notice, this list of conditions and the following 20b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * disclaimer in the documentation and/or other materials 21b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * provided with the distribution. 22b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * 23b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise * SOFTWARE. 31b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise */ 32b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#ifndef _IWCH_CM_H_ 33b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define _IWCH_CM_H_ 34b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 35b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/inet.h> 36b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/wait.h> 37b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/spinlock.h> 38b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <linux/kref.h> 39b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 40b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <rdma/ib_verbs.h> 41b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include <rdma/iw_cm.h> 42b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 43b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include "cxgb3_offload.h" 44b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#include "iwch_provider.h" 45b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 46b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_KEY_REQ "MPA ID Req Frame" 47b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_KEY_REP "MPA ID Rep Frame" 48b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 49b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_MAX_PRIVATE_DATA 256 50b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_REV 0 /* XXX - amso1100 uses rev 0 ! */ 51b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_REJECT 0x20 52b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_CRC 0x40 53b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_MARKERS 0x80 54b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define MPA_FLAGS_MASK 0xE0 55b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 56b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define put_ep(ep) { \ 573371836383d63b627b228875f5ac63023cbf11d2Harvey Harrison PDBG("put_ep (via %s:%u) ep %p refcnt %d\n", __func__, __LINE__, \ 58b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise ep, atomic_read(&((ep)->kref.refcount))); \ 59989a1780698c65dfe093a6aa89ceeff84c31f528Steve Wise WARN_ON(atomic_read(&((ep)->kref.refcount)) < 1); \ 60b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise kref_put(&((ep)->kref), __free_ep); \ 61b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise} 62b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 63b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define get_ep(ep) { \ 643371836383d63b627b228875f5ac63023cbf11d2Harvey Harrison PDBG("get_ep (via %s:%u) ep %p, refcnt %d\n", __func__, __LINE__, \ 65b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise ep, atomic_read(&((ep)->kref.refcount))); \ 66b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise kref_get(&((ep)->kref)); \ 67b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise} 68b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 69b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestruct mpa_message { 70b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 key[16]; 71b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 flags; 72b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 revision; 73b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise __be16 private_data_size; 74b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 private_data[0]; 75b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 76b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 77b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestruct terminate_message { 78b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 layer_etype; 79b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 ecode; 80b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise __be16 hdrct_rsvd; 81b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 len_hdrs[0]; 82b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 83b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 84b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#define TERM_MAX_LENGTH (sizeof(struct terminate_message) + 2 + 18 + 28) 85b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 86b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseenum iwch_layers_types { 87b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise LAYER_RDMAP = 0x00, 88b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise LAYER_DDP = 0x10, 89b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise LAYER_MPA = 0x20, 90b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_LOCAL_CATA = 0x00, 91b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_REMOTE_PROT = 0x01, 92b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_REMOTE_OP = 0x02, 93b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDP_LOCAL_CATA = 0x00, 94b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDP_TAGGED_ERR = 0x01, 95b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDP_UNTAGGED_ERR = 0x02, 96b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDP_LLP = 0x03 97b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 98b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 99b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseenum iwch_rdma_ecodes { 100b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_INV_STAG = 0x00, 101b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_BASE_BOUNDS = 0x01, 102b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_ACC_VIOL = 0x02, 103b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_STAG_NOT_ASSOC = 0x03, 104b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_TO_WRAP = 0x04, 105b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_INV_VERS = 0x05, 106b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_INV_OPCODE = 0x06, 107b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_STREAM_CATA = 0x07, 108b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_GLOBAL_CATA = 0x08, 109b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_CANT_INV_STAG = 0x09, 110b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise RDMAP_UNSPECIFIED = 0xff 111b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 112b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 113b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseenum iwch_ddp_ecodes { 114b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPT_INV_STAG = 0x00, 115b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPT_BASE_BOUNDS = 0x01, 116b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPT_STAG_NOT_ASSOC = 0x02, 117b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPT_TO_WRAP = 0x03, 118b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPT_INV_VERS = 0x04, 119b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_INV_QN = 0x01, 120b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_INV_MSN_NOBUF = 0x02, 121b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_INV_MSN_RANGE = 0x03, 122b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_INV_MO = 0x04, 123b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_MSG_TOOBIG = 0x05, 124b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DDPU_INV_VERS = 0x06 125b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 126b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 127b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseenum iwch_mpa_ecodes { 128b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_CRC_ERR = 0x02, 129b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_MARKER_ERR = 0x03 130b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 131b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 132b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseenum iwch_ep_state { 133b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise IDLE = 0, 134b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise LISTEN, 135b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise CONNECTING, 136b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_REQ_WAIT, 137b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_REQ_SENT, 138b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_REQ_RCVD, 139b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MPA_REP_SENT, 140b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise FPDU_MODE, 141b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise ABORTING, 142b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise CLOSING, 143b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise MORIBUND, 144b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise DEAD, 145b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 146b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 147aff9e39d97585486764572ab2f3bf5dfce18c660Steve Wiseenum iwch_ep_flags { 1486e47fe43502ba6dfe86d556661795d9bb0361309Steve Wise PEER_ABORT_IN_PROGRESS = 0, 1496e47fe43502ba6dfe86d556661795d9bb0361309Steve Wise ABORT_REQ_IN_PROGRESS = 1, 1506e47fe43502ba6dfe86d556661795d9bb0361309Steve Wise RELEASE_RESOURCES = 2, 1516e47fe43502ba6dfe86d556661795d9bb0361309Steve Wise CLOSE_SENT = 3, 152aff9e39d97585486764572ab2f3bf5dfce18c660Steve Wise}; 153aff9e39d97585486764572ab2f3bf5dfce18c660Steve Wise 154b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestruct iwch_ep_common { 155b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iw_cm_id *cm_id; 156b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iwch_qp *qp; 157b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct t3cdev *tdev; 158b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise enum iwch_ep_state state; 159b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct kref kref; 160b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise spinlock_t lock; 161b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct sockaddr_in local_addr; 162b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct sockaddr_in remote_addr; 163b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise wait_queue_head_t waitq; 164b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise int rpl_done; 165b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise int rpl_err; 1666e47fe43502ba6dfe86d556661795d9bb0361309Steve Wise unsigned long flags; 167b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 168b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 169b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestruct iwch_listen_ep { 170b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iwch_ep_common com; 171b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise unsigned int stid; 172b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise int backlog; 173b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 174b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 175b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestruct iwch_ep { 176b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iwch_ep_common com; 177b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iwch_ep *parent_ep; 178b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct timer_list timer; 179b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise unsigned int atid; 180b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 hwtid; 181b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 snd_seq; 182de3d353072f9342f04112ba0504c3e294220cb8fSteve Wise u32 rcv_seq; 183b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct l2t_entry *l2t; 184b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct dst_entry *dst; 185b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct sk_buff *mpa_skb; 186b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise struct iwch_mpa_attributes mpa_attr; 187b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise unsigned int mpa_pkt_len; 188b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 mpa_pkt[sizeof(struct mpa_message) + MPA_MAX_PRIVATE_DATA]; 189b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u8 tos; 190b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u16 emss; 191b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u16 plen; 192b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 ird; 193b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise u32 ord; 194b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise}; 195b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 196b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestatic inline struct iwch_ep *to_ep(struct iw_cm_id *cm_id) 197b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise{ 198b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise return cm_id->provider_data; 199b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise} 200b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 201b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestatic inline struct iwch_listen_ep *to_listen_ep(struct iw_cm_id *cm_id) 202b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise{ 203b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise return cm_id->provider_data; 204b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise} 205b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 206b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisestatic inline int compute_wscale(int win) 207b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise{ 208b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise int wscale = 0; 209b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 210b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise while (wscale < 14 && (65535<<wscale) < win) 211b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise wscale++; 212b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise return wscale; 213b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise} 214b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 215b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise/* CM prototypes */ 216b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 217b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param); 218b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_create_listen(struct iw_cm_id *cm_id, int backlog); 219b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_destroy_listen(struct iw_cm_id *cm_id); 220b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_reject_cr(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len); 221b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param); 222b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_ep_disconnect(struct iwch_ep *ep, int abrupt, gfp_t gfp); 223b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_quiesce_tid(struct iwch_ep *ep); 224b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_resume_tid(struct iwch_ep *ep); 225b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisevoid __free_ep(struct kref *kref); 226b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisevoid iwch_rearp(struct iwch_ep *ep); 227b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint iwch_ep_redirect(void *ctx, struct dst_entry *old, struct dst_entry *new, struct l2t_entry *l2t); 228b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 229b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wiseint __init iwch_cm_init(void); 230b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wisevoid __exit iwch_cm_term(void); 231f8b0dfd15277974b5c9f3ff17f9e3ab6fdbe45eeSteve Wiseextern int peer2peer; 232b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise 233b038ced7b3705bf0ac9b30e118af0f56ab48b847Steve Wise#endif /* _IWCH_CM_H_ */ 234