| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2005 Ammasso, Inc. All rights reserved. | 
					
						
							|  |  |  |  * Copyright (c) 2005 Open Grid Computing, 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef _C2_WR_H_
 | 
					
						
							|  |  |  | #define _C2_WR_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CCDEBUG
 | 
					
						
							|  |  |  | #define CCWR_MAGIC		0xb07700b0
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define C2_QP_NO_ATTR_CHANGE 0xFFFFFFFF
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Maximum allowed size in bytes of private_data exchange
 | 
					
						
							|  |  |  |  * on connect. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define C2_MAX_PRIVATE_DATA_SIZE 200
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * These types are shared among the adapter, host, and CCIL consumer. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_cq_notification_type { | 
					
						
							|  |  |  | 	C2_CQ_NOTIFICATION_TYPE_NONE = 1, | 
					
						
							|  |  |  | 	C2_CQ_NOTIFICATION_TYPE_NEXT, | 
					
						
							|  |  |  | 	C2_CQ_NOTIFICATION_TYPE_NEXT_SE | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum c2_setconfig_cmd { | 
					
						
							|  |  |  | 	C2_CFG_ADD_ADDR = 1, | 
					
						
							|  |  |  | 	C2_CFG_DEL_ADDR = 2, | 
					
						
							|  |  |  | 	C2_CFG_ADD_ROUTE = 3, | 
					
						
							|  |  |  | 	C2_CFG_DEL_ROUTE = 4 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum c2_getconfig_cmd { | 
					
						
							|  |  |  | 	C2_GETCONFIG_ROUTES = 1, | 
					
						
							|  |  |  | 	C2_GETCONFIG_ADDRS | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *  CCIL Work Request Identifiers | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2wr_ids { | 
					
						
							|  |  |  | 	CCWR_RNIC_OPEN = 1, | 
					
						
							|  |  |  | 	CCWR_RNIC_QUERY, | 
					
						
							|  |  |  | 	CCWR_RNIC_SETCONFIG, | 
					
						
							|  |  |  | 	CCWR_RNIC_GETCONFIG, | 
					
						
							|  |  |  | 	CCWR_RNIC_CLOSE, | 
					
						
							|  |  |  | 	CCWR_CQ_CREATE, | 
					
						
							|  |  |  | 	CCWR_CQ_QUERY, | 
					
						
							|  |  |  | 	CCWR_CQ_MODIFY, | 
					
						
							|  |  |  | 	CCWR_CQ_DESTROY, | 
					
						
							|  |  |  | 	CCWR_QP_CONNECT, | 
					
						
							|  |  |  | 	CCWR_PD_ALLOC, | 
					
						
							|  |  |  | 	CCWR_PD_DEALLOC, | 
					
						
							|  |  |  | 	CCWR_SRQ_CREATE, | 
					
						
							|  |  |  | 	CCWR_SRQ_QUERY, | 
					
						
							|  |  |  | 	CCWR_SRQ_MODIFY, | 
					
						
							|  |  |  | 	CCWR_SRQ_DESTROY, | 
					
						
							|  |  |  | 	CCWR_QP_CREATE, | 
					
						
							|  |  |  | 	CCWR_QP_QUERY, | 
					
						
							|  |  |  | 	CCWR_QP_MODIFY, | 
					
						
							|  |  |  | 	CCWR_QP_DESTROY, | 
					
						
							|  |  |  | 	CCWR_NSMR_STAG_ALLOC, | 
					
						
							|  |  |  | 	CCWR_NSMR_REGISTER, | 
					
						
							|  |  |  | 	CCWR_NSMR_PBL, | 
					
						
							|  |  |  | 	CCWR_STAG_DEALLOC, | 
					
						
							|  |  |  | 	CCWR_NSMR_REREGISTER, | 
					
						
							|  |  |  | 	CCWR_SMR_REGISTER, | 
					
						
							|  |  |  | 	CCWR_MR_QUERY, | 
					
						
							|  |  |  | 	CCWR_MW_ALLOC, | 
					
						
							|  |  |  | 	CCWR_MW_QUERY, | 
					
						
							|  |  |  | 	CCWR_EP_CREATE, | 
					
						
							|  |  |  | 	CCWR_EP_GETOPT, | 
					
						
							|  |  |  | 	CCWR_EP_SETOPT, | 
					
						
							|  |  |  | 	CCWR_EP_DESTROY, | 
					
						
							|  |  |  | 	CCWR_EP_BIND, | 
					
						
							|  |  |  | 	CCWR_EP_CONNECT, | 
					
						
							|  |  |  | 	CCWR_EP_LISTEN, | 
					
						
							|  |  |  | 	CCWR_EP_SHUTDOWN, | 
					
						
							|  |  |  | 	CCWR_EP_LISTEN_CREATE, | 
					
						
							|  |  |  | 	CCWR_EP_LISTEN_DESTROY, | 
					
						
							|  |  |  | 	CCWR_EP_QUERY, | 
					
						
							|  |  |  | 	CCWR_CR_ACCEPT, | 
					
						
							|  |  |  | 	CCWR_CR_REJECT, | 
					
						
							|  |  |  | 	CCWR_CONSOLE, | 
					
						
							|  |  |  | 	CCWR_TERM, | 
					
						
							|  |  |  | 	CCWR_FLASH_INIT, | 
					
						
							|  |  |  | 	CCWR_FLASH, | 
					
						
							|  |  |  | 	CCWR_BUF_ALLOC, | 
					
						
							|  |  |  | 	CCWR_BUF_FREE, | 
					
						
							|  |  |  | 	CCWR_FLASH_WRITE, | 
					
						
							|  |  |  | 	CCWR_INIT,		/* WARNING: Don't move this ever again! */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Add new IDs here */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * WARNING: CCWR_LAST must always be the last verbs id defined! | 
					
						
							|  |  |  | 	 *          All the preceding IDs are fixed, and must not change. | 
					
						
							|  |  |  | 	 *          You can add new IDs, but must not remove or reorder | 
					
						
							|  |  |  | 	 *          any IDs. If you do, YOU will ruin any hope of | 
					
						
							|  |  |  | 	 *          compatability between versions. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	CCWR_LAST, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * Start over at 1 so that arrays indexed by user wr id's | 
					
						
							|  |  |  | 	 * begin at 1.  This is OK since the verbs and user wr id's | 
					
						
							|  |  |  | 	 * are always used on disjoint sets of queues. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * The order of the CCWR_SEND_XX verbs must | 
					
						
							|  |  |  | 	 * match the order of the RDMA_OPs | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	CCWR_SEND = 1, | 
					
						
							|  |  |  | 	CCWR_SEND_INV, | 
					
						
							|  |  |  | 	CCWR_SEND_SE, | 
					
						
							|  |  |  | 	CCWR_SEND_SE_INV, | 
					
						
							|  |  |  | 	CCWR_RDMA_WRITE, | 
					
						
							|  |  |  | 	CCWR_RDMA_READ, | 
					
						
							|  |  |  | 	CCWR_RDMA_READ_INV, | 
					
						
							|  |  |  | 	CCWR_MW_BIND, | 
					
						
							|  |  |  | 	CCWR_NSMR_FASTREG, | 
					
						
							|  |  |  | 	CCWR_STAG_INVALIDATE, | 
					
						
							|  |  |  | 	CCWR_RECV, | 
					
						
							|  |  |  | 	CCWR_NOP, | 
					
						
							|  |  |  | 	CCWR_UNIMPL, | 
					
						
							|  |  |  | /* WARNING: This must always be the last user wr id defined! */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #define RDMA_SEND_OPCODE_FROM_WR_ID(x)   (x+2)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * SQ/RQ Work Request Types | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_wr_type { | 
					
						
							|  |  |  | 	C2_WR_TYPE_SEND = CCWR_SEND, | 
					
						
							|  |  |  | 	C2_WR_TYPE_SEND_SE = CCWR_SEND_SE, | 
					
						
							|  |  |  | 	C2_WR_TYPE_SEND_INV = CCWR_SEND_INV, | 
					
						
							|  |  |  | 	C2_WR_TYPE_SEND_SE_INV = CCWR_SEND_SE_INV, | 
					
						
							|  |  |  | 	C2_WR_TYPE_RDMA_WRITE = CCWR_RDMA_WRITE, | 
					
						
							|  |  |  | 	C2_WR_TYPE_RDMA_READ = CCWR_RDMA_READ, | 
					
						
							|  |  |  | 	C2_WR_TYPE_RDMA_READ_INV_STAG = CCWR_RDMA_READ_INV, | 
					
						
							|  |  |  | 	C2_WR_TYPE_BIND_MW = CCWR_MW_BIND, | 
					
						
							|  |  |  | 	C2_WR_TYPE_FASTREG_NSMR = CCWR_NSMR_FASTREG, | 
					
						
							|  |  |  | 	C2_WR_TYPE_INV_STAG = CCWR_STAG_INVALIDATE, | 
					
						
							|  |  |  | 	C2_WR_TYPE_RECV = CCWR_RECV, | 
					
						
							|  |  |  | 	C2_WR_TYPE_NOP = CCWR_NOP, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2_netaddr { | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 ip_addr; | 
					
						
							|  |  |  | 	__be32 netmask; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 mtu; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2_route { | 
					
						
							|  |  |  | 	u32 ip_addr;		/* 0 indicates the default route */ | 
					
						
							|  |  |  | 	u32 netmask;		/* netmask associated with dst */ | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | 	union { | 
					
						
							|  |  |  | 		u32 ipaddr;	/* address of the nexthop interface */ | 
					
						
							|  |  |  | 		u8 enaddr[6]; | 
					
						
							|  |  |  | 	} nexthop; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * A Scatter Gather Entry. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2_data_addr { | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 stag; | 
					
						
							|  |  |  | 	__be32 length; | 
					
						
							|  |  |  | 	__be64 to; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * MR and MW flags used by the consumer, RI, and RNIC. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_mm_flags { | 
					
						
							|  |  |  | 	MEM_REMOTE = 0x0001,	/* allow mw binds with remote access. */ | 
					
						
							|  |  |  | 	MEM_VA_BASED = 0x0002,	/* Not Zero-based */ | 
					
						
							|  |  |  | 	MEM_PBL_COMPLETE = 0x0004,	/* PBL array is complete in this msg */ | 
					
						
							|  |  |  | 	MEM_LOCAL_READ = 0x0008,	/* allow local reads */ | 
					
						
							|  |  |  | 	MEM_LOCAL_WRITE = 0x0010,	/* allow local writes */ | 
					
						
							|  |  |  | 	MEM_REMOTE_READ = 0x0020,	/* allow remote reads */ | 
					
						
							|  |  |  | 	MEM_REMOTE_WRITE = 0x0040,	/* allow remote writes */ | 
					
						
							|  |  |  | 	MEM_WINDOW_BIND = 0x0080,	/* binds allowed */ | 
					
						
							|  |  |  | 	MEM_SHARED = 0x0100,	/* set if MR is shared */ | 
					
						
							|  |  |  | 	MEM_STAG_VALID = 0x0200	/* set if STAG is in valid state */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * CCIL API ACF flags defined in terms of the low level mem flags. | 
					
						
							|  |  |  |  * This minimizes translation needed in the user API | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_acf { | 
					
						
							|  |  |  | 	C2_ACF_LOCAL_READ = MEM_LOCAL_READ, | 
					
						
							|  |  |  | 	C2_ACF_LOCAL_WRITE = MEM_LOCAL_WRITE, | 
					
						
							|  |  |  | 	C2_ACF_REMOTE_READ = MEM_REMOTE_READ, | 
					
						
							|  |  |  | 	C2_ACF_REMOTE_WRITE = MEM_REMOTE_WRITE, | 
					
						
							|  |  |  | 	C2_ACF_WINDOW_BIND = MEM_WINDOW_BIND | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Image types of objects written to flash | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define C2_FLASH_IMG_BITFILE 1
 | 
					
						
							|  |  |  | #define C2_FLASH_IMG_OPTION_ROM 2
 | 
					
						
							|  |  |  | #define C2_FLASH_IMG_VPD 3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *  to fix bug 1815 we define the max size allowable of the | 
					
						
							|  |  |  |  *  terminate message (per the IETF spec).Refer to the IETF | 
					
						
							|  |  |  |  *  protocal specification, section 12.1.6, page 64) | 
					
						
							|  |  |  |  *  The message is prefixed by 20 types of DDP info. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Then the message has 6 bytes for the terminate control | 
					
						
							|  |  |  |  *  and DDP segment length info plus a DDP header (either | 
					
						
							|  |  |  |  *  14 or 18 byts) plus 28 bytes for the RDMA header. | 
					
						
							|  |  |  |  *  Thus the max size in: | 
					
						
							|  |  |  |  *  20 + (6 + 18 + 28) = 72 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define C2_MAX_TERMINATE_MESSAGE_SIZE (72)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Build String Length.  It must be the same as C2_BUILD_STR_LEN in ccil_api.h | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define WR_BUILD_STR_LEN 64
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WARNING:  All of these structs need to align any 64bit types on | 
					
						
							|  |  |  |  * 64 bit boundaries!  64bit types include u64 and u64. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Clustercore Work Request Header.  Be sensitive to field layout | 
					
						
							|  |  |  |  * and alignment. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_hdr { | 
					
						
							|  |  |  | 	/* wqe_count is part of the cqe.  It is put here so the
 | 
					
						
							|  |  |  | 	 * adapter can write to it while the wr is pending without | 
					
						
							|  |  |  | 	 * clobbering part of the wr.  This word need not be dma'd | 
					
						
							|  |  |  | 	 * from the host to adapter by libccil, but we copy it anyway | 
					
						
							|  |  |  | 	 * to make the memcpy to the adapter better aligned. | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 wqe_count; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Put these fields next so that later 32- and 64-bit
 | 
					
						
							|  |  |  | 	 * quantities are naturally aligned. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	u8 id; | 
					
						
							|  |  |  | 	u8 result;		/* adapter -> host */ | 
					
						
							|  |  |  | 	u8 sge_count;		/* host -> adapter */ | 
					
						
							|  |  |  | 	u8 flags;		/* host -> adapter */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u64 context; | 
					
						
							|  |  |  | #ifdef CCMSGMAGIC
 | 
					
						
							|  |  |  | 	u32 magic; | 
					
						
							|  |  |  | 	u32 pad; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ RNIC ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WR_RNIC_OPEN | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Flags for the RNIC WRs | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_rnic_flags { | 
					
						
							|  |  |  | 	RNIC_IRD_STATIC = 0x0001, | 
					
						
							|  |  |  | 	RNIC_ORD_STATIC = 0x0002, | 
					
						
							|  |  |  | 	RNIC_QP_STATIC = 0x0004, | 
					
						
							|  |  |  | 	RNIC_SRQ_SUPPORTED = 0x0008, | 
					
						
							|  |  |  | 	RNIC_PBL_BLOCK_MODE = 0x0010, | 
					
						
							|  |  |  | 	RNIC_SRQ_MODEL_ARRIVAL = 0x0020, | 
					
						
							|  |  |  | 	RNIC_CQ_OVF_DETECTED = 0x0040, | 
					
						
							|  |  |  | 	RNIC_PRIV_MODE = 0x0080 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_open_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 user_context; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be16 flags;		/* See enum c2_rnic_flags */ | 
					
						
							|  |  |  | 	__be16 port_num; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_open_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rnic_open { | 
					
						
							|  |  |  | 	struct c2wr_rnic_open_req req; | 
					
						
							|  |  |  | 	struct c2wr_rnic_open_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_query_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WR_RNIC_QUERY | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_rnic_query_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 user_context; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 vendor_id; | 
					
						
							|  |  |  | 	__be32 part_number; | 
					
						
							|  |  |  | 	__be32 hw_version; | 
					
						
							|  |  |  | 	__be32 fw_ver_major; | 
					
						
							|  |  |  | 	__be32 fw_ver_minor; | 
					
						
							|  |  |  | 	__be32 fw_ver_patch; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	char fw_ver_build_str[WR_BUILD_STR_LEN]; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_qps; | 
					
						
							|  |  |  | 	__be32 max_qp_depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 max_srq_depth; | 
					
						
							|  |  |  | 	u32 max_send_sgl_depth; | 
					
						
							|  |  |  | 	u32 max_rdma_sgl_depth; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_cqs; | 
					
						
							|  |  |  | 	__be32 max_cq_depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 max_cq_event_handlers; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_mrs; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 max_pbl_depth; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_pds; | 
					
						
							|  |  |  | 	__be32 max_global_ird; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 max_global_ord; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_qp_ird; | 
					
						
							|  |  |  | 	__be32 max_qp_ord; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 flags; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 max_mws; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 pbe_range_low; | 
					
						
							|  |  |  | 	u32 pbe_range_high; | 
					
						
							|  |  |  | 	u32 max_srqs; | 
					
						
							|  |  |  | 	u32 page_size; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rnic_query { | 
					
						
							|  |  |  | 	struct c2wr_rnic_query_req req; | 
					
						
							|  |  |  | 	struct c2wr_rnic_query_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WR_RNIC_GETCONFIG | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_getconfig_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 option;		/* see c2_getconfig_cmd_t */ | 
					
						
							|  |  |  | 	u64 reply_buf; | 
					
						
							|  |  |  | 	u32 reply_buf_len; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_getconfig_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 option;		/* see c2_getconfig_cmd_t */ | 
					
						
							|  |  |  | 	u32 count_len;		/* length of the number of addresses configured */ | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rnic_getconfig { | 
					
						
							|  |  |  | 	struct c2wr_rnic_getconfig_req req; | 
					
						
							|  |  |  | 	struct c2wr_rnic_getconfig_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WR_RNIC_SETCONFIG | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_rnic_setconfig_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 option;		/* See c2_setconfig_cmd_t */ | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	/* variable data and pad. See c2_netaddr and c2_route */ | 
					
						
							|  |  |  | 	u8 data[0]; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_setconfig_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rnic_setconfig { | 
					
						
							|  |  |  | 	struct c2wr_rnic_setconfig_req req; | 
					
						
							|  |  |  | 	struct c2wr_rnic_setconfig_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * WR_RNIC_CLOSE | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_rnic_close_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rnic_close_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rnic_close { | 
					
						
							|  |  |  | 	struct c2wr_rnic_close_req req; | 
					
						
							|  |  |  | 	struct c2wr_rnic_close_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ CQ ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_cq_create_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 shared_ht; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u64 user_context; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 msg_pool; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 msg_size; | 
					
						
							|  |  |  | 	__be32 depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_cq_create_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 mq_index; | 
					
						
							|  |  |  | 	__be32 adapter_shared; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 cq_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_cq_create { | 
					
						
							|  |  |  | 	struct c2wr_cq_create_req req; | 
					
						
							|  |  |  | 	struct c2wr_cq_create_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_cq_modify_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 cq_handle; | 
					
						
							|  |  |  | 	u32 new_depth; | 
					
						
							|  |  |  | 	u64 new_msg_pool; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_cq_modify_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_cq_modify { | 
					
						
							|  |  |  | 	struct c2wr_cq_modify_req req; | 
					
						
							|  |  |  | 	struct c2wr_cq_modify_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_cq_destroy_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 cq_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_cq_destroy_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_cq_destroy { | 
					
						
							|  |  |  | 	struct c2wr_cq_destroy_req req; | 
					
						
							|  |  |  | 	struct c2wr_cq_destroy_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ PD ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_pd_alloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_pd_alloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_pd_alloc { | 
					
						
							|  |  |  | 	struct c2wr_pd_alloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_pd_alloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_pd_dealloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_pd_dealloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_pd_dealloc { | 
					
						
							|  |  |  | 	struct c2wr_pd_dealloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_pd_dealloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ SRQ ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_srq_create_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 shared_ht; | 
					
						
							|  |  |  | 	u64 user_context; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 srq_depth; | 
					
						
							|  |  |  | 	u32 srq_limit; | 
					
						
							|  |  |  | 	u32 sgl_depth; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_srq_create_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 srq_depth; | 
					
						
							|  |  |  | 	u32 sgl_depth; | 
					
						
							|  |  |  | 	u32 msg_size; | 
					
						
							|  |  |  | 	u32 mq_index; | 
					
						
							|  |  |  | 	u32 mq_start; | 
					
						
							|  |  |  | 	u32 srq_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_srq_create { | 
					
						
							|  |  |  | 	struct c2wr_srq_create_req req; | 
					
						
							|  |  |  | 	struct c2wr_srq_create_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_srq_destroy_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 srq_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_srq_destroy_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_srq_destroy { | 
					
						
							|  |  |  | 	struct c2wr_srq_destroy_req req; | 
					
						
							|  |  |  | 	struct c2wr_srq_destroy_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ QP ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2wr_qp_flags { | 
					
						
							|  |  |  | 	QP_RDMA_READ = 0x00000001,	/* RDMA read enabled? */ | 
					
						
							|  |  |  | 	QP_RDMA_WRITE = 0x00000002,	/* RDMA write enabled? */ | 
					
						
							|  |  |  | 	QP_MW_BIND = 0x00000004,	/* MWs enabled */ | 
					
						
							|  |  |  | 	QP_ZERO_STAG = 0x00000008,	/* enabled? */ | 
					
						
							|  |  |  | 	QP_REMOTE_TERMINATION = 0x00000010,	/* remote end terminated */ | 
					
						
							|  |  |  | 	QP_RDMA_READ_RESPONSE = 0x00000020	/* Remote RDMA read  */ | 
					
						
							|  |  |  | 	    /* enabled? */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_create_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 shared_sq_ht; | 
					
						
							|  |  |  | 	__be64 shared_rq_ht; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u64 user_context; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 sq_cq_handle; | 
					
						
							|  |  |  | 	u32 rq_cq_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 sq_depth; | 
					
						
							|  |  |  | 	__be32 rq_depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 srq_handle; | 
					
						
							|  |  |  | 	u32 srq_limit; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 flags;		/* see enum c2wr_qp_flags */ | 
					
						
							|  |  |  | 	__be32 send_sgl_depth; | 
					
						
							|  |  |  | 	__be32 recv_sgl_depth; | 
					
						
							|  |  |  | 	__be32 rdma_write_sgl_depth; | 
					
						
							|  |  |  | 	__be32 ord; | 
					
						
							|  |  |  | 	__be32 ird; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_create_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 sq_depth; | 
					
						
							|  |  |  | 	__be32 rq_depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 send_sgl_depth; | 
					
						
							|  |  |  | 	u32 recv_sgl_depth; | 
					
						
							|  |  |  | 	u32 rdma_write_sgl_depth; | 
					
						
							|  |  |  | 	u32 ord; | 
					
						
							|  |  |  | 	u32 ird; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 sq_msg_size; | 
					
						
							|  |  |  | 	__be32 sq_mq_index; | 
					
						
							|  |  |  | 	__be32 sq_mq_start; | 
					
						
							|  |  |  | 	__be32 rq_msg_size; | 
					
						
							|  |  |  | 	__be32 rq_mq_index; | 
					
						
							|  |  |  | 	__be32 rq_mq_start; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 qp_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_qp_create { | 
					
						
							|  |  |  | 	struct c2wr_qp_create_req req; | 
					
						
							|  |  |  | 	struct c2wr_qp_create_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_query_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 qp_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_query_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 user_context; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 sq_depth; | 
					
						
							|  |  |  | 	u32 rq_depth; | 
					
						
							|  |  |  | 	u32 send_sgl_depth; | 
					
						
							|  |  |  | 	u32 rdma_write_sgl_depth; | 
					
						
							|  |  |  | 	u32 recv_sgl_depth; | 
					
						
							|  |  |  | 	u32 ord; | 
					
						
							|  |  |  | 	u32 ird; | 
					
						
							|  |  |  | 	u16 qp_state; | 
					
						
							|  |  |  | 	u16 flags;		/* see c2wr_qp_flags_t */ | 
					
						
							|  |  |  | 	u32 qp_id; | 
					
						
							|  |  |  | 	u32 local_addr; | 
					
						
							|  |  |  | 	u32 remote_addr; | 
					
						
							|  |  |  | 	u16 local_port; | 
					
						
							|  |  |  | 	u16 remote_port; | 
					
						
							|  |  |  | 	u32 terminate_msg_length;	/* 0 if not present */ | 
					
						
							|  |  |  | 	u8 data[0]; | 
					
						
							|  |  |  | 	/* Terminate Message in-line here. */ | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_qp_query { | 
					
						
							|  |  |  | 	struct c2wr_qp_query_req req; | 
					
						
							|  |  |  | 	struct c2wr_qp_query_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_modify_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 stream_msg; | 
					
						
							|  |  |  | 	u32 stream_msg_length; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 qp_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 next_qp_state; | 
					
						
							|  |  |  | 	__be32 ord; | 
					
						
							|  |  |  | 	__be32 ird; | 
					
						
							|  |  |  | 	__be32 sq_depth; | 
					
						
							|  |  |  | 	__be32 rq_depth; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 llp_ep_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_modify_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 ord; | 
					
						
							|  |  |  | 	u32 ird; | 
					
						
							|  |  |  | 	u32 sq_depth; | 
					
						
							|  |  |  | 	u32 rq_depth; | 
					
						
							|  |  |  | 	u32 sq_msg_size; | 
					
						
							|  |  |  | 	u32 sq_mq_index; | 
					
						
							|  |  |  | 	u32 sq_mq_start; | 
					
						
							|  |  |  | 	u32 rq_msg_size; | 
					
						
							|  |  |  | 	u32 rq_mq_index; | 
					
						
							|  |  |  | 	u32 rq_mq_start; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_qp_modify { | 
					
						
							|  |  |  | 	struct c2wr_qp_modify_req req; | 
					
						
							|  |  |  | 	struct c2wr_qp_modify_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_destroy_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 qp_handle; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_destroy_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_qp_destroy { | 
					
						
							|  |  |  | 	struct c2wr_qp_destroy_req req; | 
					
						
							|  |  |  | 	struct c2wr_qp_destroy_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The CCWR_QP_CONNECT msg is posted on the verbs request queue.  It can | 
					
						
							|  |  |  |  * only be posted when a QP is in IDLE state.  After the connect request is | 
					
						
							|  |  |  |  * submitted to the LLP, the adapter moves the QP to CONNECT_PENDING state. | 
					
						
							|  |  |  |  * No synchronous reply from adapter to this WR.  The results of | 
					
						
							|  |  |  |  * connection are passed back in an async event CCAE_ACTIVE_CONNECT_RESULTS | 
					
						
							|  |  |  |  * See c2wr_ae_active_connect_results_t | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_qp_connect_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 qp_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 remote_addr; | 
					
						
							|  |  |  | 	__be16 remote_port; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u16 pad; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 private_data_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 private_data[0];	/* Private data in-line. */ | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_qp_connect { | 
					
						
							|  |  |  | 	struct c2wr_qp_connect_req req; | 
					
						
							|  |  |  | 	/* no synchronous reply.         */ | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ MM ------------------------ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_stag_alloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_stag_alloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_nsmr_stag_alloc { | 
					
						
							|  |  |  | 	struct c2wr_nsmr_stag_alloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_nsmr_stag_alloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_register_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 va; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be16 flags; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 pbl_depth; | 
					
						
							|  |  |  | 	__be32 pbe_size; | 
					
						
							|  |  |  | 	__be32 fbo; | 
					
						
							|  |  |  | 	__be32 length; | 
					
						
							|  |  |  | 	__be32 addrs_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	/* array of paddrs (must be aligned on a 64bit boundary) */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 paddrs[0]; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_register_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 stag_index; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_nsmr_register { | 
					
						
							|  |  |  | 	struct c2wr_nsmr_register_req req; | 
					
						
							|  |  |  | 	struct c2wr_nsmr_register_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_pbl_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 flags; | 
					
						
							|  |  |  | 	__be32 stag_index; | 
					
						
							|  |  |  | 	__be32 addrs_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	/* array of paddrs (must be aligned on a 64bit boundary) */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 paddrs[0]; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_pbl_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_nsmr_pbl { | 
					
						
							|  |  |  | 	struct c2wr_nsmr_pbl_req req; | 
					
						
							|  |  |  | 	struct c2wr_nsmr_pbl_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mr_query_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mr_query_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad[3]; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_mr_query { | 
					
						
							|  |  |  | 	struct c2wr_mr_query_req req; | 
					
						
							|  |  |  | 	struct c2wr_mr_query_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mw_query_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mw_query_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad[3]; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_mw_query { | 
					
						
							|  |  |  | 	struct c2wr_mw_query_req req; | 
					
						
							|  |  |  | 	struct c2wr_mw_query_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_stag_dealloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 stag_index; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_stag_dealloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_stag_dealloc { | 
					
						
							|  |  |  | 	struct c2wr_stag_dealloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_stag_dealloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_reregister_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 va; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u16 flags; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							|  |  |  | 	u32 pbe_size; | 
					
						
							|  |  |  | 	u32 fbo; | 
					
						
							|  |  |  | 	u32 length; | 
					
						
							|  |  |  | 	u32 addrs_length; | 
					
						
							|  |  |  | 	u32 pad1; | 
					
						
							|  |  |  | 	/* array of paddrs (must be aligned on a 64bit boundary) */ | 
					
						
							|  |  |  | 	u64 paddrs[0]; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_reregister_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 pbl_depth; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_nsmr_reregister { | 
					
						
							|  |  |  | 	struct c2wr_nsmr_reregister_req req; | 
					
						
							|  |  |  | 	struct c2wr_nsmr_reregister_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_smr_register_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 va; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u16 flags; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_smr_register_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_smr_register { | 
					
						
							|  |  |  | 	struct c2wr_smr_register_req req; | 
					
						
							|  |  |  | 	struct c2wr_smr_register_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mw_alloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 pd_id; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mw_alloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_mw_alloc { | 
					
						
							|  |  |  | 	struct c2wr_mw_alloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_mw_alloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  *------------------------ WRs ----------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_user_hdr { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr;		/* Has status and WR Type */ | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum c2_qp_state { | 
					
						
							|  |  |  | 	C2_QP_STATE_IDLE = 0x01, | 
					
						
							|  |  |  | 	C2_QP_STATE_CONNECTING = 0x02, | 
					
						
							|  |  |  | 	C2_QP_STATE_RTS = 0x04, | 
					
						
							|  |  |  | 	C2_QP_STATE_CLOSING = 0x08, | 
					
						
							|  |  |  | 	C2_QP_STATE_TERMINATE = 0x10, | 
					
						
							|  |  |  | 	C2_QP_STATE_ERROR = 0x20, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Completion queue entry. */ | 
					
						
							|  |  |  | struct c2wr_ce { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr;		/* Has status and WR Type */ | 
					
						
							|  |  |  | 	u64 qp_user_context;	/* c2_user_qp_t * */ | 
					
						
							|  |  |  | 	u32 qp_state;		/* Current QP State */ | 
					
						
							|  |  |  | 	u32 handle;		/* QPID or EP Handle */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 bytes_rcvd;		/* valid for RECV WCs */ | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u32 stag; | 
					
						
							|  |  |  | } __attribute__((packed)) ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Flags used for all post-sq WRs.  These must fit in the flags | 
					
						
							|  |  |  |  * field of the struct c2wr_hdr (eight bits). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum { | 
					
						
							|  |  |  | 	SQ_SIGNALED = 0x01, | 
					
						
							|  |  |  | 	SQ_READ_FENCE = 0x02, | 
					
						
							|  |  |  | 	SQ_FENCE = 0x04, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Common fields for all post-sq WRs.  Namely the standard header and a | 
					
						
							|  |  |  |  * secondary header with fields common to all post-sq WRs. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2_sq_hdr { | 
					
						
							|  |  |  | 	struct c2wr_user_hdr user_hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Same as above but for post-rq WRs. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2_rq_hdr { | 
					
						
							|  |  |  | 	struct c2wr_user_hdr user_hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * use the same struct for all sends. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_send_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 sge_len; | 
					
						
							|  |  |  | 	__be32 remote_stag; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 data[0];		/* SGE array */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_send { | 
					
						
							|  |  |  | 	struct c2wr_send_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rdma_write_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 remote_to; | 
					
						
							|  |  |  | 	__be32 remote_stag; | 
					
						
							|  |  |  | 	__be32 sge_len; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 data[0];		/* SGE array */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rdma_write { | 
					
						
							|  |  |  | 	struct c2wr_rdma_write_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_rdma_read_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 local_to; | 
					
						
							|  |  |  | 	__be64 remote_to; | 
					
						
							|  |  |  | 	__be32 local_stag; | 
					
						
							|  |  |  | 	__be32 remote_stag; | 
					
						
							|  |  |  | 	__be32 length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_rdma_read { | 
					
						
							|  |  |  | 	struct c2wr_rdma_read_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_mw_bind_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							|  |  |  | 	u64 va; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad[3]; | 
					
						
							|  |  |  | 	u32 mw_stag_index; | 
					
						
							|  |  |  | 	u32 mr_stag_index; | 
					
						
							|  |  |  | 	u32 length; | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_mw_bind { | 
					
						
							|  |  |  | 	struct c2wr_mw_bind_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_nsmr_fastreg_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							|  |  |  | 	u64 va; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad[3]; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | 	u32 pbe_size; | 
					
						
							|  |  |  | 	u32 fbo; | 
					
						
							|  |  |  | 	u32 length; | 
					
						
							|  |  |  | 	u32 addrs_length; | 
					
						
							|  |  |  | 	/* array of paddrs (must be aligned on a 64bit boundary) */ | 
					
						
							|  |  |  | 	u64 paddrs[0]; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_nsmr_fastreg { | 
					
						
							|  |  |  | 	struct c2wr_nsmr_fastreg_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_stag_invalidate_req { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							|  |  |  | 	u8 stag_key; | 
					
						
							|  |  |  | 	u8 pad[3]; | 
					
						
							|  |  |  | 	u32 stag_index; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_stag_invalidate { | 
					
						
							|  |  |  | 	struct c2wr_stag_invalidate_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_sqwr { | 
					
						
							|  |  |  | 	struct c2_sq_hdr sq_hdr; | 
					
						
							|  |  |  | 	struct c2wr_send_req send; | 
					
						
							|  |  |  | 	struct c2wr_send_req send_se; | 
					
						
							|  |  |  | 	struct c2wr_send_req send_inv; | 
					
						
							|  |  |  | 	struct c2wr_send_req send_se_inv; | 
					
						
							|  |  |  | 	struct c2wr_rdma_write_req rdma_write; | 
					
						
							|  |  |  | 	struct c2wr_rdma_read_req rdma_read; | 
					
						
							|  |  |  | 	struct c2wr_mw_bind_req mw_bind; | 
					
						
							|  |  |  | 	struct c2wr_nsmr_fastreg_req nsmr_fastreg; | 
					
						
							|  |  |  | 	struct c2wr_stag_invalidate_req stag_inv; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * RQ WRs | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_rqwr { | 
					
						
							|  |  |  | 	struct c2_rq_hdr rq_hdr; | 
					
						
							|  |  |  | 	u8 data[0];		/* array of SGEs */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_recv { | 
					
						
							|  |  |  | 	struct c2wr_rqwr req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * All AEs start with this header.  Most AEs only need to convey the | 
					
						
							|  |  |  |  * information in the header.  Some, like LLP connection events, need | 
					
						
							|  |  |  |  * more info.  The union typdef c2wr_ae_t has all the possible AEs. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * hdr.context is the user_context from the rnic_open WR.  NULL If this | 
					
						
							|  |  |  |  * is not affiliated with an rnic | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * hdr.id is the AE identifier (eg;  CCAE_REMOTE_SHUTDOWN, | 
					
						
							|  |  |  |  * CCAE_LLP_CLOSE_COMPLETE) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * resource_type is one of:  C2_RES_IND_QP, C2_RES_IND_CQ, C2_RES_IND_SRQ | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * user_context is the context passed down when the host created the resource. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_ae_hdr { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 user_context;	/* user context for this res. */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 resource_type;	/* see enum c2_resource_indicator */ | 
					
						
							|  |  |  | 	__be32 resource;	/* handle for resource */ | 
					
						
							|  |  |  | 	__be32 qp_state;	/* current QP State */ | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * After submitting the CCAE_ACTIVE_CONNECT_RESULTS message on the AEQ, | 
					
						
							|  |  |  |  * the adapter moves the QP into RTS state | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_ae_active_connect_results { | 
					
						
							|  |  |  | 	struct c2wr_ae_hdr ae_hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 laddr; | 
					
						
							|  |  |  | 	__be32 raddr; | 
					
						
							|  |  |  | 	__be16 lport; | 
					
						
							|  |  |  | 	__be16 rport; | 
					
						
							|  |  |  | 	__be32 private_data_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 private_data[0];	/* data is in-line in the msg. */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * When connections are established by the stack (and the private data | 
					
						
							|  |  |  |  * MPA frame is received), the adapter will generate an event to the host. | 
					
						
							|  |  |  |  * The details of the connection, any private data, and the new connection | 
					
						
							|  |  |  |  * request handle is passed up via the CCAE_CONNECTION_REQUEST msg on the | 
					
						
							|  |  |  |  * AE queue: | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_ae_connection_request { | 
					
						
							|  |  |  | 	struct c2wr_ae_hdr ae_hdr; | 
					
						
							|  |  |  | 	u32 cr_handle;		/* connreq handle (sock ptr) */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 laddr; | 
					
						
							|  |  |  | 	__be32 raddr; | 
					
						
							|  |  |  | 	__be16 lport; | 
					
						
							|  |  |  | 	__be16 rport; | 
					
						
							|  |  |  | 	__be32 private_data_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 private_data[0];	/* data is in-line in the msg. */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_ae { | 
					
						
							|  |  |  | 	struct c2wr_ae_hdr ae_generic; | 
					
						
							|  |  |  | 	struct c2wr_ae_active_connect_results ae_active_connect_results; | 
					
						
							|  |  |  | 	struct c2wr_ae_connection_request ae_connection_request; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_init_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be64 hint_count; | 
					
						
							|  |  |  | 	__be64 q0_host_shared; | 
					
						
							|  |  |  | 	__be64 q1_host_shared; | 
					
						
							|  |  |  | 	__be64 q1_host_msg_pool; | 
					
						
							|  |  |  | 	__be64 q2_host_shared; | 
					
						
							|  |  |  | 	__be64 q2_host_msg_pool; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_init_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_init { | 
					
						
							|  |  |  | 	struct c2wr_init_req req; | 
					
						
							|  |  |  | 	struct c2wr_init_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * For upgrading flash. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_init_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_init_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 adapter_flash_buf_offset; | 
					
						
							|  |  |  | 	u32 adapter_flash_len; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_flash_init { | 
					
						
							|  |  |  | 	struct c2wr_flash_init_req req; | 
					
						
							|  |  |  | 	struct c2wr_flash_init_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 len; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 status; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_flash { | 
					
						
							|  |  |  | 	struct c2wr_flash_req req; | 
					
						
							|  |  |  | 	struct c2wr_flash_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_buf_alloc_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 size; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_buf_alloc_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 offset;		/* 0 if mem not available */ | 
					
						
							|  |  |  | 	u32 size;		/* 0 if mem not available */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_buf_alloc { | 
					
						
							|  |  |  | 	struct c2wr_buf_alloc_req req; | 
					
						
							|  |  |  | 	struct c2wr_buf_alloc_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_buf_free_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 offset;		/* Must match value from alloc */ | 
					
						
							|  |  |  | 	u32 size;		/* Must match value from alloc */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_buf_free_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_buf_free { | 
					
						
							|  |  |  | 	struct c2wr_buf_free_req req; | 
					
						
							|  |  |  | 	struct c2wr_ce rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_write_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 offset; | 
					
						
							|  |  |  | 	u32 size; | 
					
						
							|  |  |  | 	u32 type; | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_flash_write_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 status; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_flash_write { | 
					
						
							|  |  |  | 	struct c2wr_flash_write_req req; | 
					
						
							|  |  |  | 	struct c2wr_flash_write_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Messages for LLP connection setup. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Listen Request.  This allocates a listening endpoint to allow passive | 
					
						
							|  |  |  |  * connection setup.  Newly established LLP connections are passed up | 
					
						
							|  |  |  |  * via an AE.  See c2wr_ae_connection_request_t | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_ep_listen_create_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u64 user_context;	/* returned in AEs. */ | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 local_addr;		/* local addr, or 0  */ | 
					
						
							|  |  |  | 	__be16 local_port;		/* 0 means "pick one" */ | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u16 pad; | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 backlog;		/* tradional tcp listen bl */ | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_ep_listen_create_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 ep_handle;		/* handle to new listening ep */ | 
					
						
							|  |  |  | 	u16 local_port;		/* resulting port... */ | 
					
						
							|  |  |  | 	u16 pad; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_ep_listen_create { | 
					
						
							|  |  |  | 	struct c2wr_ep_listen_create_req req; | 
					
						
							|  |  |  | 	struct c2wr_ep_listen_create_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_ep_listen_destroy_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 ep_handle; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_ep_listen_destroy_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_ep_listen_destroy { | 
					
						
							|  |  |  | 	struct c2wr_ep_listen_destroy_req req; | 
					
						
							|  |  |  | 	struct c2wr_ep_listen_destroy_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_ep_query_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 ep_handle; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct c2wr_ep_query_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 local_addr; | 
					
						
							|  |  |  | 	u32 remote_addr; | 
					
						
							|  |  |  | 	u16 local_port; | 
					
						
							|  |  |  | 	u16 remote_port; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_ep_query { | 
					
						
							|  |  |  | 	struct c2wr_ep_query_req req; | 
					
						
							|  |  |  | 	struct c2wr_ep_query_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The host passes this down to indicate acceptance of a pending iWARP | 
					
						
							|  |  |  |  * connection.  The cr_handle was obtained from the CONNECTION_REQUEST | 
					
						
							|  |  |  |  * AE passed up by the adapter.  See c2wr_ae_connection_request_t. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_cr_accept_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 qp_handle;		/* QP to bind to this LLP conn */ | 
					
						
							|  |  |  | 	u32 ep_handle;		/* LLP  handle to accept */ | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | 	__be32 private_data_length; | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | 	u8 private_data[0];	/* data in-line in msg. */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * adapter sends reply when private data is successfully submitted to | 
					
						
							|  |  |  |  * the LLP. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_cr_accept_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_cr_accept { | 
					
						
							|  |  |  | 	struct c2wr_cr_accept_req req; | 
					
						
							|  |  |  | 	struct c2wr_cr_accept_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The host sends this down if a given iWARP connection request was | 
					
						
							|  |  |  |  * rejected by the consumer.  The cr_handle was obtained from a | 
					
						
							|  |  |  |  * previous c2wr_ae_connection_request_t AE sent by the adapter. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct  c2wr_cr_reject_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	u32 rnic_handle; | 
					
						
							|  |  |  | 	u32 ep_handle;		/* LLP handle to reject */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Dunno if this is needed, but we'll add it for now.  The adapter will | 
					
						
							|  |  |  |  * send the reject_reply after the LLP endpoint has been destroyed. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct  c2wr_cr_reject_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_cr_reject { | 
					
						
							|  |  |  | 	struct c2wr_cr_reject_req req; | 
					
						
							|  |  |  | 	struct c2wr_cr_reject_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * console command.  Used to implement a debug console over the verbs | 
					
						
							|  |  |  |  * request and reply queues. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Console request message.  It contains: | 
					
						
							|  |  |  |  *	- message hdr with id = CCWR_CONSOLE | 
					
						
							|  |  |  |  *	- the physaddr/len of host memory to be used for the reply. | 
					
						
							|  |  |  |  *	- the command string.  eg:  "netstat -s" or "zoneinfo" | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_console_req { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr;		/* id = CCWR_CONSOLE */ | 
					
						
							|  |  |  | 	u64 reply_buf;		/* pinned host buf for reply */ | 
					
						
							|  |  |  | 	u32 reply_buf_len;	/* length of reply buffer */ | 
					
						
							|  |  |  | 	u8 command[0];		/* NUL terminated ascii string */ | 
					
						
							|  |  |  | 	/* containing the command req */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * flags used in the console reply. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum c2_console_flags { | 
					
						
							|  |  |  | 	CONS_REPLY_TRUNCATED = 0x00000001	/* reply was truncated */ | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Console reply message. | 
					
						
							|  |  |  |  * hdr.result contains the c2_status_t error if the reply was _not_ generated, | 
					
						
							|  |  |  |  * or C2_OK if the reply was generated. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct c2wr_console_rep { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr;		/* id = CCWR_CONSOLE */ | 
					
						
							|  |  |  | 	u32 flags; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | union c2wr_console { | 
					
						
							|  |  |  | 	struct c2wr_console_req req; | 
					
						
							|  |  |  | 	struct c2wr_console_rep rep; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Giant union with all WRs.  Makes life easier... | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | union c2wr { | 
					
						
							|  |  |  | 	struct c2wr_hdr hdr; | 
					
						
							|  |  |  | 	struct c2wr_user_hdr user_hdr; | 
					
						
							|  |  |  | 	union c2wr_rnic_open rnic_open; | 
					
						
							|  |  |  | 	union c2wr_rnic_query rnic_query; | 
					
						
							|  |  |  | 	union c2wr_rnic_getconfig rnic_getconfig; | 
					
						
							|  |  |  | 	union c2wr_rnic_setconfig rnic_setconfig; | 
					
						
							|  |  |  | 	union c2wr_rnic_close rnic_close; | 
					
						
							|  |  |  | 	union c2wr_cq_create cq_create; | 
					
						
							|  |  |  | 	union c2wr_cq_modify cq_modify; | 
					
						
							|  |  |  | 	union c2wr_cq_destroy cq_destroy; | 
					
						
							|  |  |  | 	union c2wr_pd_alloc pd_alloc; | 
					
						
							|  |  |  | 	union c2wr_pd_dealloc pd_dealloc; | 
					
						
							|  |  |  | 	union c2wr_srq_create srq_create; | 
					
						
							|  |  |  | 	union c2wr_srq_destroy srq_destroy; | 
					
						
							|  |  |  | 	union c2wr_qp_create qp_create; | 
					
						
							|  |  |  | 	union c2wr_qp_query qp_query; | 
					
						
							|  |  |  | 	union c2wr_qp_modify qp_modify; | 
					
						
							|  |  |  | 	union c2wr_qp_destroy qp_destroy; | 
					
						
							|  |  |  | 	struct c2wr_qp_connect qp_connect; | 
					
						
							|  |  |  | 	union c2wr_nsmr_stag_alloc nsmr_stag_alloc; | 
					
						
							|  |  |  | 	union c2wr_nsmr_register nsmr_register; | 
					
						
							|  |  |  | 	union c2wr_nsmr_pbl nsmr_pbl; | 
					
						
							|  |  |  | 	union c2wr_mr_query mr_query; | 
					
						
							|  |  |  | 	union c2wr_mw_query mw_query; | 
					
						
							|  |  |  | 	union c2wr_stag_dealloc stag_dealloc; | 
					
						
							|  |  |  | 	union c2wr_sqwr sqwr; | 
					
						
							|  |  |  | 	struct c2wr_rqwr rqwr; | 
					
						
							|  |  |  | 	struct c2wr_ce ce; | 
					
						
							|  |  |  | 	union c2wr_ae ae; | 
					
						
							|  |  |  | 	union c2wr_init init; | 
					
						
							|  |  |  | 	union c2wr_ep_listen_create ep_listen_create; | 
					
						
							|  |  |  | 	union c2wr_ep_listen_destroy ep_listen_destroy; | 
					
						
							|  |  |  | 	union c2wr_cr_accept cr_accept; | 
					
						
							|  |  |  | 	union c2wr_cr_reject cr_reject; | 
					
						
							|  |  |  | 	union c2wr_console console; | 
					
						
							|  |  |  | 	union c2wr_flash_init flash_init; | 
					
						
							|  |  |  | 	union c2wr_flash flash; | 
					
						
							|  |  |  | 	union c2wr_buf_alloc buf_alloc; | 
					
						
							|  |  |  | 	union c2wr_buf_free buf_free; | 
					
						
							|  |  |  | 	union c2wr_flash_write flash_write; | 
					
						
							|  |  |  | } __attribute__((packed)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Accessors for the wr fields that are packed together tightly to | 
					
						
							|  |  |  |  * reduce the wr message size.  The wr arguments are void* so that | 
					
						
							|  |  |  |  * either a struct c2wr*, a struct c2wr_hdr*, or a pointer to any of the types | 
					
						
							|  |  |  |  * in the struct c2wr union can be passed in. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static __inline__ u8 c2_wr_get_id(void *wr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return ((struct c2wr_hdr *) wr)->id; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ void c2_wr_set_id(void *wr, u8 id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	((struct c2wr_hdr *) wr)->id = id; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ u8 c2_wr_get_result(void *wr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return ((struct c2wr_hdr *) wr)->result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ void c2_wr_set_result(void *wr, u8 result) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	((struct c2wr_hdr *) wr)->result = result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ u8 c2_wr_get_flags(void *wr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return ((struct c2wr_hdr *) wr)->flags; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ void c2_wr_set_flags(void *wr, u8 flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	((struct c2wr_hdr *) wr)->flags = flags; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ u8 c2_wr_get_sge_count(void *wr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return ((struct c2wr_hdr *) wr)->sge_count; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ void c2_wr_set_sge_count(void *wr, u8 sge_count) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	((struct c2wr_hdr *) wr)->sge_count = sge_count; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-04-16 21:01:08 -07:00
										 |  |  | static __inline__ __be32 c2_wr_get_wqe_count(void *wr) | 
					
						
							| 
									
										
										
										
											2006-09-22 15:22:48 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	return ((struct c2wr_hdr *) wr)->wqe_count; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static __inline__ void c2_wr_set_wqe_count(void *wr, u32 wqe_count) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	((struct c2wr_hdr *) wr)->wqe_count = wqe_count; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif				/* _C2_WR_H_ */
 |