| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 1 | /* bnx2i.h: Broadcom NetXtreme II iSCSI driver. | 
 | 2 |  * | 
| Eddie Wai | 11cec1e | 2010-11-23 15:29:31 -0800 | [diff] [blame] | 3 |  * Copyright (c) 2006 - 2010 Broadcom Corporation | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 4 |  * Copyright (c) 2007, 2008 Red Hat, Inc.  All rights reserved. | 
 | 5 |  * Copyright (c) 2007, 2008 Mike Christie | 
 | 6 |  * | 
 | 7 |  * This program is free software; you can redistribute it and/or modify | 
 | 8 |  * it under the terms of the GNU General Public License as published by | 
 | 9 |  * the Free Software Foundation. | 
 | 10 |  * | 
 | 11 |  * Written by: Anil Veerabhadrappa (anilgv@broadcom.com) | 
| Eddie Wai | 11cec1e | 2010-11-23 15:29:31 -0800 | [diff] [blame] | 12 |  * Maintained by: Eddie Wai (eddie.wai@broadcom.com) | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 13 |  */ | 
 | 14 |  | 
 | 15 | #ifndef _BNX2I_H_ | 
 | 16 | #define _BNX2I_H_ | 
 | 17 |  | 
 | 18 | #include <linux/module.h> | 
 | 19 | #include <linux/moduleparam.h> | 
 | 20 |  | 
 | 21 | #include <linux/errno.h> | 
 | 22 | #include <linux/pci.h> | 
 | 23 | #include <linux/spinlock.h> | 
 | 24 | #include <linux/interrupt.h> | 
 | 25 | #include <linux/sched.h> | 
 | 26 | #include <linux/in.h> | 
 | 27 | #include <linux/kfifo.h> | 
 | 28 | #include <linux/netdevice.h> | 
 | 29 | #include <linux/completion.h> | 
 | 30 |  | 
 | 31 | #include <scsi/scsi_cmnd.h> | 
 | 32 | #include <scsi/scsi_device.h> | 
 | 33 | #include <scsi/scsi_eh.h> | 
 | 34 | #include <scsi/scsi_host.h> | 
 | 35 | #include <scsi/scsi.h> | 
 | 36 | #include <scsi/iscsi_proto.h> | 
 | 37 | #include <scsi/libiscsi.h> | 
 | 38 | #include <scsi/scsi_transport_iscsi.h> | 
 | 39 |  | 
 | 40 | #include "../../net/cnic_if.h" | 
 | 41 | #include "57xx_iscsi_hsi.h" | 
 | 42 | #include "57xx_iscsi_constants.h" | 
 | 43 |  | 
 | 44 | #define BNX2_ISCSI_DRIVER_NAME		"bnx2i" | 
 | 45 |  | 
 | 46 | #define BNX2I_MAX_ADAPTERS		8 | 
 | 47 |  | 
 | 48 | #define ISCSI_MAX_CONNS_PER_HBA		128 | 
 | 49 | #define ISCSI_MAX_SESS_PER_HBA		ISCSI_MAX_CONNS_PER_HBA | 
 | 50 | #define ISCSI_MAX_CMDS_PER_SESS		128 | 
 | 51 |  | 
 | 52 | /* Total active commands across all connections supported by devices */ | 
 | 53 | #define ISCSI_MAX_CMDS_PER_HBA_5708	(28 * (ISCSI_MAX_CMDS_PER_SESS - 1)) | 
 | 54 | #define ISCSI_MAX_CMDS_PER_HBA_5709	(128 * (ISCSI_MAX_CMDS_PER_SESS - 1)) | 
 | 55 | #define ISCSI_MAX_CMDS_PER_HBA_57710	(256 * (ISCSI_MAX_CMDS_PER_SESS - 1)) | 
 | 56 |  | 
 | 57 | #define ISCSI_MAX_BDS_PER_CMD		32 | 
 | 58 |  | 
 | 59 | #define MAX_PAGES_PER_CTRL_STRUCT_POOL	8 | 
 | 60 | #define BNX2I_RESERVED_SLOW_PATH_CMD_SLOTS	4 | 
 | 61 |  | 
| Dmitry Kravkov | 523224a | 2010-10-06 03:23:26 +0000 | [diff] [blame] | 62 | #define BNX2I_5771X_DBELL_PAGE_SIZE	128 | 
 | 63 |  | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 64 | /* 5706/08 hardware has limit on maximum buffer size per BD it can handle */ | 
 | 65 | #define MAX_BD_LENGTH			65535 | 
 | 66 | #define BD_SPLIT_SIZE			32768 | 
 | 67 |  | 
 | 68 | /* min, max & default values for SQ/RQ/CQ size, configurable via' modparam */ | 
 | 69 | #define BNX2I_SQ_WQES_MIN 		16 | 
 | 70 | #define BNX2I_570X_SQ_WQES_MAX 		128 | 
 | 71 | #define BNX2I_5770X_SQ_WQES_MAX 	512 | 
 | 72 | #define BNX2I_570X_SQ_WQES_DEFAULT 	128 | 
 | 73 | #define BNX2I_5770X_SQ_WQES_DEFAULT 	256 | 
 | 74 |  | 
 | 75 | #define BNX2I_570X_CQ_WQES_MAX 		128 | 
 | 76 | #define BNX2I_5770X_CQ_WQES_MAX 	512 | 
 | 77 |  | 
 | 78 | #define BNX2I_RQ_WQES_MIN 		16 | 
 | 79 | #define BNX2I_RQ_WQES_MAX 		32 | 
 | 80 | #define BNX2I_RQ_WQES_DEFAULT 		16 | 
 | 81 |  | 
 | 82 | /* CCELLs per conn */ | 
 | 83 | #define BNX2I_CCELLS_MIN		16 | 
 | 84 | #define BNX2I_CCELLS_MAX		96 | 
 | 85 | #define BNX2I_CCELLS_DEFAULT		64 | 
 | 86 |  | 
 | 87 | #define ITT_INVALID_SIGNATURE		0xFFFF | 
 | 88 |  | 
 | 89 | #define ISCSI_CMD_CLEANUP_TIMEOUT	100 | 
 | 90 |  | 
 | 91 | #define BNX2I_CONN_CTX_BUF_SIZE		16384 | 
 | 92 |  | 
 | 93 | #define BNX2I_SQ_WQE_SIZE		64 | 
 | 94 | #define BNX2I_RQ_WQE_SIZE		256 | 
 | 95 | #define BNX2I_CQE_SIZE			64 | 
 | 96 |  | 
 | 97 | #define MB_KERNEL_CTX_SHIFT		8 | 
 | 98 | #define MB_KERNEL_CTX_SIZE		(1 << MB_KERNEL_CTX_SHIFT) | 
 | 99 |  | 
 | 100 | #define CTX_SHIFT			7 | 
 | 101 | #define GET_CID_NUM(cid_addr)		((cid_addr) >> CTX_SHIFT) | 
 | 102 |  | 
 | 103 | #define CTX_OFFSET 			0x10000 | 
 | 104 | #define MAX_CID_CNT			0x4000 | 
 | 105 |  | 
| Anil Veerabhadrappa | 5320324 | 2009-09-11 10:38:26 -0700 | [diff] [blame] | 106 | #define BNX2I_570X_PAGE_SIZE_DEFAULT	4096 | 
 | 107 |  | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 108 | /* 5709 context registers */ | 
 | 109 | #define BNX2_MQ_CONFIG2			0x00003d00 | 
 | 110 | #define BNX2_MQ_CONFIG2_CONT_SZ		(0x7L<<4) | 
 | 111 | #define BNX2_MQ_CONFIG2_FIRST_L4L5	(0x1fL<<8) | 
 | 112 |  | 
 | 113 | /* 57710's BAR2 is mapped to doorbell registers */ | 
 | 114 | #define BNX2X_DOORBELL_PCI_BAR		2 | 
 | 115 | #define BNX2X_MAX_CQS			8 | 
 | 116 |  | 
 | 117 | #define CNIC_ARM_CQE			1 | 
 | 118 | #define CNIC_DISARM_CQE			0 | 
 | 119 |  | 
 | 120 | #define REG_RD(__hba, offset)				\ | 
 | 121 | 		readl(__hba->regview + offset) | 
 | 122 | #define REG_WR(__hba, offset, val)			\ | 
 | 123 | 		writel(val, __hba->regview + offset) | 
 | 124 |  | 
 | 125 |  | 
 | 126 | /** | 
 | 127 |  * struct generic_pdu_resc - login pdu resource structure | 
 | 128 |  * | 
 | 129 |  * @req_buf:            driver buffer used to stage payload associated with | 
 | 130 |  *                      the login request | 
 | 131 |  * @req_dma_addr:       dma address for iscsi login request payload buffer | 
 | 132 |  * @req_buf_size:       actual login request payload length | 
 | 133 |  * @req_wr_ptr:         pointer into login request buffer when next data is | 
 | 134 |  *                      to be written | 
 | 135 |  * @resp_hdr:           iscsi header where iscsi login response header is to | 
 | 136 |  *                      be recreated | 
 | 137 |  * @resp_buf:           buffer to stage login response payload | 
 | 138 |  * @resp_dma_addr:      login response payload buffer dma address | 
 | 139 |  * @resp_buf_size:      login response paylod length | 
 | 140 |  * @resp_wr_ptr:        pointer into login response buffer when next data is | 
 | 141 |  *                      to be written | 
 | 142 |  * @req_bd_tbl:         iscsi login request payload BD table | 
 | 143 |  * @req_bd_dma:         login request BD table dma address | 
 | 144 |  * @resp_bd_tbl:        iscsi login response payload BD table | 
 | 145 |  * @resp_bd_dma:        login request BD table dma address | 
 | 146 |  * | 
 | 147 |  * following structure defines buffer info for generic pdus such as iSCSI Login, | 
 | 148 |  *	Logout and NOP | 
 | 149 |  */ | 
 | 150 | struct generic_pdu_resc { | 
 | 151 | 	char *req_buf; | 
 | 152 | 	dma_addr_t req_dma_addr; | 
 | 153 | 	u32 req_buf_size; | 
 | 154 | 	char *req_wr_ptr; | 
 | 155 | 	struct iscsi_hdr resp_hdr; | 
 | 156 | 	char *resp_buf; | 
 | 157 | 	dma_addr_t resp_dma_addr; | 
 | 158 | 	u32 resp_buf_size; | 
 | 159 | 	char *resp_wr_ptr; | 
 | 160 | 	char *req_bd_tbl; | 
 | 161 | 	dma_addr_t req_bd_dma; | 
 | 162 | 	char *resp_bd_tbl; | 
 | 163 | 	dma_addr_t resp_bd_dma; | 
 | 164 | }; | 
 | 165 |  | 
 | 166 |  | 
 | 167 | /** | 
 | 168 |  * struct bd_resc_page - tracks DMA'able memory allocated for BD tables | 
 | 169 |  * | 
 | 170 |  * @link:               list head to link elements | 
 | 171 |  * @max_ptrs:           maximun pointers that can be stored in this page | 
 | 172 |  * @num_valid:          number of pointer valid in this page | 
 | 173 |  * @page:               base addess for page pointer array | 
 | 174 |  * | 
 | 175 |  * structure to track DMA'able memory allocated for command BD tables | 
 | 176 |  */ | 
 | 177 | struct bd_resc_page { | 
 | 178 | 	struct list_head link; | 
 | 179 | 	u32 max_ptrs; | 
 | 180 | 	u32 num_valid; | 
 | 181 | 	void *page[1]; | 
 | 182 | }; | 
 | 183 |  | 
 | 184 |  | 
 | 185 | /** | 
 | 186 |  * struct io_bdt - I/O buffer destricptor table | 
 | 187 |  * | 
 | 188 |  * @bd_tbl:             BD table's virtual address | 
 | 189 |  * @bd_tbl_dma:         BD table's dma address | 
 | 190 |  * @bd_valid:           num valid BD entries | 
 | 191 |  * | 
 | 192 |  * IO BD table | 
 | 193 |  */ | 
 | 194 | struct io_bdt { | 
 | 195 | 	struct iscsi_bd *bd_tbl; | 
 | 196 | 	dma_addr_t bd_tbl_dma; | 
 | 197 | 	u16 bd_valid; | 
 | 198 | }; | 
 | 199 |  | 
 | 200 |  | 
 | 201 | /** | 
 | 202 |  * bnx2i_cmd - iscsi command structure | 
 | 203 |  * | 
 | 204 |  * @scsi_cmd:           SCSI-ML task pointer corresponding to this iscsi cmd | 
 | 205 |  * @sg:                 SG list | 
 | 206 |  * @io_tbl:             buffer descriptor (BD) table | 
 | 207 |  * @bd_tbl_dma:         buffer descriptor (BD) table's dma address | 
 | 208 |  */ | 
 | 209 | struct bnx2i_cmd { | 
 | 210 | 	struct iscsi_hdr hdr; | 
 | 211 | 	struct bnx2i_conn *conn; | 
 | 212 | 	struct scsi_cmnd *scsi_cmd; | 
 | 213 | 	struct scatterlist *sg; | 
 | 214 | 	struct io_bdt io_tbl; | 
 | 215 | 	dma_addr_t bd_tbl_dma; | 
 | 216 | 	struct bnx2i_cmd_request req; | 
 | 217 | }; | 
 | 218 |  | 
 | 219 |  | 
 | 220 | /** | 
 | 221 |  * struct bnx2i_conn - iscsi connection structure | 
 | 222 |  * | 
 | 223 |  * @cls_conn:              pointer to iscsi cls conn | 
 | 224 |  * @hba:                   adapter structure pointer | 
 | 225 |  * @iscsi_conn_cid:        iscsi conn id | 
 | 226 |  * @fw_cid:                firmware iscsi context id | 
 | 227 |  * @ep:                    endpoint structure pointer | 
 | 228 |  * @gen_pdu:               login/nopout/logout pdu resources | 
 | 229 |  * @violation_notified:    bit mask used to track iscsi error/warning messages | 
 | 230 |  *                         already printed out | 
 | 231 |  * | 
 | 232 |  * iSCSI connection structure | 
 | 233 |  */ | 
 | 234 | struct bnx2i_conn { | 
 | 235 | 	struct iscsi_cls_conn *cls_conn; | 
 | 236 | 	struct bnx2i_hba *hba; | 
 | 237 | 	struct completion cmd_cleanup_cmpl; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 238 |  | 
 | 239 | 	u32 iscsi_conn_cid; | 
 | 240 | #define BNX2I_CID_RESERVED	0x5AFF | 
 | 241 | 	u32 fw_cid; | 
 | 242 |  | 
 | 243 | 	struct timer_list poll_timer; | 
 | 244 | 	/* | 
 | 245 | 	 * Queue Pair (QP) related structure elements. | 
 | 246 | 	 */ | 
 | 247 | 	struct bnx2i_endpoint *ep; | 
 | 248 |  | 
 | 249 | 	/* | 
 | 250 | 	 * Buffer for login negotiation process | 
 | 251 | 	 */ | 
 | 252 | 	struct generic_pdu_resc gen_pdu; | 
 | 253 | 	u64 violation_notified; | 
 | 254 | }; | 
 | 255 |  | 
 | 256 |  | 
 | 257 |  | 
 | 258 | /** | 
 | 259 |  * struct iscsi_cid_queue - Per adapter iscsi cid queue | 
 | 260 |  * | 
 | 261 |  * @cid_que_base:           queue base memory | 
 | 262 |  * @cid_que:                queue memory pointer | 
 | 263 |  * @cid_q_prod_idx:         produce index | 
 | 264 |  * @cid_q_cons_idx:         consumer index | 
 | 265 |  * @cid_q_max_idx:          max index. used to detect wrap around condition | 
 | 266 |  * @cid_free_cnt:           queue size | 
 | 267 |  * @conn_cid_tbl:           iscsi cid to conn structure mapping table | 
 | 268 |  * | 
 | 269 |  * Per adapter iSCSI CID Queue | 
 | 270 |  */ | 
 | 271 | struct iscsi_cid_queue { | 
 | 272 | 	void *cid_que_base; | 
 | 273 | 	u32 *cid_que; | 
 | 274 | 	u32 cid_q_prod_idx; | 
 | 275 | 	u32 cid_q_cons_idx; | 
 | 276 | 	u32 cid_q_max_idx; | 
 | 277 | 	u32 cid_free_cnt; | 
 | 278 | 	struct bnx2i_conn **conn_cid_tbl; | 
 | 279 | }; | 
 | 280 |  | 
 | 281 | /** | 
 | 282 |  * struct bnx2i_hba - bnx2i adapter structure | 
 | 283 |  * | 
 | 284 |  * @link:                  list head to link elements | 
 | 285 |  * @cnic:                  pointer to cnic device | 
 | 286 |  * @pcidev:                pointer to pci dev | 
 | 287 |  * @netdev:                pointer to netdev structure | 
 | 288 |  * @regview:               mapped PCI register space | 
 | 289 |  * @age:                   age, incremented by every recovery | 
 | 290 |  * @cnic_dev_type:         cnic device type, 5706/5708/5709/57710 | 
 | 291 |  * @mail_queue_access:     mailbox queue access mode, applicable to 5709 only | 
 | 292 |  * @reg_with_cnic:         indicates whether the device is register with CNIC | 
 | 293 |  * @adapter_state:         adapter state, UP, GOING_DOWN, LINK_DOWN | 
 | 294 |  * @mtu_supported:         Ethernet MTU supported | 
 | 295 |  * @shost:                 scsi host pointer | 
 | 296 |  * @max_sqes:              SQ size | 
 | 297 |  * @max_rqes:              RQ size | 
 | 298 |  * @max_cqes:              CQ size | 
 | 299 |  * @num_ccell:             number of command cells per connection | 
 | 300 |  * @ofld_conns_active:     active connection list | 
| Eddie Wai | 55e15c9 | 2010-07-01 15:34:52 -0700 | [diff] [blame] | 301 |  * @eh_wait:               wait queue for the endpoint to shutdown | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 302 |  * @max_active_conns:      max offload connections supported by this device | 
 | 303 |  * @cid_que:               iscsi cid queue | 
 | 304 |  * @ep_rdwr_lock:          read / write lock to synchronize various ep lists | 
 | 305 |  * @ep_ofld_list:          connection list for pending offload completion | 
| Eddie Wai | 46012e8 | 2010-07-01 15:34:51 -0700 | [diff] [blame] | 306 |  * @ep_active_list:        connection list for active offload endpoints | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 307 |  * @ep_destroy_list:       connection list for pending offload completion | 
 | 308 |  * @mp_bd_tbl:             BD table to be used with middle path requests | 
 | 309 |  * @mp_bd_dma:             DMA address of 'mp_bd_tbl' memory buffer | 
 | 310 |  * @dummy_buffer:          Dummy buffer to be used with zero length scsicmd reqs | 
 | 311 |  * @dummy_buf_dma:         DMA address of 'dummy_buffer' memory buffer | 
 | 312 |  * @lock:              	   lock to synchonize access to hba structure | 
| Eddie Wai | 55e15c9 | 2010-07-01 15:34:52 -0700 | [diff] [blame] | 313 |  * @hba_shutdown_tmo:      Timeout value to shutdown each connection | 
| Eddie Wai | e37d2c4 | 2010-07-01 15:34:53 -0700 | [diff] [blame] | 314 |  * @conn_teardown_tmo:     Timeout value to tear down each connection | 
 | 315 |  * @conn_ctx_destroy_tmo:  Timeout value to destroy context of each connection | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 316 |  * @pci_did:               PCI device ID | 
 | 317 |  * @pci_vid:               PCI vendor ID | 
 | 318 |  * @pci_sdid:              PCI subsystem device ID | 
 | 319 |  * @pci_svid:              PCI subsystem vendor ID | 
 | 320 |  * @pci_func:              PCI function number in system pci tree | 
 | 321 |  * @pci_devno:             PCI device number in system pci tree | 
 | 322 |  * @num_wqe_sent:          statistic counter, total wqe's sent | 
 | 323 |  * @num_cqe_rcvd:          statistic counter, total cqe's received | 
 | 324 |  * @num_intr_claimed:      statistic counter, total interrupts claimed | 
 | 325 |  * @link_changed_count:    statistic counter, num of link change notifications | 
 | 326 |  *                         received | 
 | 327 |  * @ipaddr_changed_count:  statistic counter, num times IP address changed while | 
 | 328 |  *                         at least one connection is offloaded | 
 | 329 |  * @num_sess_opened:       statistic counter, total num sessions opened | 
 | 330 |  * @num_conn_opened:       statistic counter, total num conns opened on this hba | 
 | 331 |  * @ctx_ccell_tasks:       captures number of ccells and tasks supported by | 
 | 332 |  *                         currently offloaded connection, used to decode | 
 | 333 |  *                         context memory | 
 | 334 |  * | 
 | 335 |  * Adapter Data Structure | 
 | 336 |  */ | 
 | 337 | struct bnx2i_hba { | 
 | 338 | 	struct list_head link; | 
 | 339 | 	struct cnic_dev *cnic; | 
 | 340 | 	struct pci_dev *pcidev; | 
 | 341 | 	struct net_device *netdev; | 
 | 342 | 	void __iomem *regview; | 
 | 343 |  | 
 | 344 | 	u32 age; | 
 | 345 | 	unsigned long cnic_dev_type; | 
 | 346 | 		#define BNX2I_NX2_DEV_5706		0x0 | 
 | 347 | 		#define BNX2I_NX2_DEV_5708		0x1 | 
 | 348 | 		#define BNX2I_NX2_DEV_5709		0x2 | 
 | 349 | 		#define BNX2I_NX2_DEV_57710		0x3 | 
 | 350 | 	u32 mail_queue_access; | 
 | 351 | 		#define BNX2I_MQ_KERNEL_MODE		0x0 | 
 | 352 | 		#define BNX2I_MQ_KERNEL_BYPASS_MODE	0x1 | 
 | 353 | 		#define BNX2I_MQ_BIN_MODE		0x2 | 
 | 354 | 	unsigned long  reg_with_cnic; | 
 | 355 | 		#define BNX2I_CNIC_REGISTERED		1 | 
 | 356 |  | 
 | 357 | 	unsigned long  adapter_state; | 
 | 358 | 		#define ADAPTER_STATE_UP		0 | 
 | 359 | 		#define ADAPTER_STATE_GOING_DOWN	1 | 
 | 360 | 		#define ADAPTER_STATE_LINK_DOWN		2 | 
 | 361 | 		#define ADAPTER_STATE_INIT_FAILED	31 | 
 | 362 | 	unsigned int mtu_supported; | 
| Eddie Wai | 4518835 | 2011-02-16 15:04:29 -0600 | [diff] [blame] | 363 | 		#define BNX2I_MAX_MTU_SUPPORTED		9000 | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 364 |  | 
 | 365 | 	struct Scsi_Host *shost; | 
 | 366 |  | 
 | 367 | 	u32 max_sqes; | 
 | 368 | 	u32 max_rqes; | 
 | 369 | 	u32 max_cqes; | 
 | 370 | 	u32 num_ccell; | 
 | 371 |  | 
 | 372 | 	int ofld_conns_active; | 
| Anil Veerabhadrappa | 490475a | 2010-04-08 15:59:15 -0700 | [diff] [blame] | 373 | 	wait_queue_head_t eh_wait; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 374 |  | 
 | 375 | 	int max_active_conns; | 
 | 376 | 	struct iscsi_cid_queue cid_que; | 
 | 377 |  | 
 | 378 | 	rwlock_t ep_rdwr_lock; | 
 | 379 | 	struct list_head ep_ofld_list; | 
| Eddie Wai | 46012e8 | 2010-07-01 15:34:51 -0700 | [diff] [blame] | 380 | 	struct list_head ep_active_list; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 381 | 	struct list_head ep_destroy_list; | 
 | 382 |  | 
 | 383 | 	/* | 
 | 384 | 	 * BD table to be used with MP (Middle Path requests. | 
 | 385 | 	 */ | 
 | 386 | 	char *mp_bd_tbl; | 
 | 387 | 	dma_addr_t mp_bd_dma; | 
 | 388 | 	char *dummy_buffer; | 
 | 389 | 	dma_addr_t dummy_buf_dma; | 
 | 390 |  | 
 | 391 | 	spinlock_t lock;	/* protects hba structure access */ | 
 | 392 | 	struct mutex net_dev_lock;/* sync net device access */ | 
 | 393 |  | 
| Anil Veerabhadrappa | 490475a | 2010-04-08 15:59:15 -0700 | [diff] [blame] | 394 | 	int hba_shutdown_tmo; | 
| Eddie Wai | e37d2c4 | 2010-07-01 15:34:53 -0700 | [diff] [blame] | 395 | 	int conn_teardown_tmo; | 
 | 396 | 	int conn_ctx_destroy_tmo; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 397 | 	/* | 
 | 398 | 	 * PCI related info. | 
 | 399 | 	 */ | 
 | 400 | 	u16 pci_did; | 
 | 401 | 	u16 pci_vid; | 
 | 402 | 	u16 pci_sdid; | 
 | 403 | 	u16 pci_svid; | 
 | 404 | 	u16 pci_func; | 
 | 405 | 	u16 pci_devno; | 
 | 406 |  | 
 | 407 | 	/* | 
 | 408 | 	 * Following are a bunch of statistics useful during development | 
 | 409 | 	 * and later stage for score boarding. | 
 | 410 | 	 */ | 
 | 411 | 	u32 num_wqe_sent; | 
 | 412 | 	u32 num_cqe_rcvd; | 
 | 413 | 	u32 num_intr_claimed; | 
 | 414 | 	u32 link_changed_count; | 
 | 415 | 	u32 ipaddr_changed_count; | 
 | 416 | 	u32 num_sess_opened; | 
 | 417 | 	u32 num_conn_opened; | 
 | 418 | 	unsigned int ctx_ccell_tasks; | 
 | 419 | }; | 
 | 420 |  | 
 | 421 |  | 
 | 422 | /******************************************************************************* | 
 | 423 |  * 	QP [ SQ / RQ / CQ ] info. | 
 | 424 |  ******************************************************************************/ | 
 | 425 |  | 
 | 426 | /* | 
 | 427 |  * SQ/RQ/CQ generic structure definition | 
 | 428 |  */ | 
 | 429 | struct 	sqe { | 
 | 430 | 	u8 sqe_byte[BNX2I_SQ_WQE_SIZE]; | 
 | 431 | }; | 
 | 432 |  | 
 | 433 | struct 	rqe { | 
 | 434 | 	u8 rqe_byte[BNX2I_RQ_WQE_SIZE]; | 
 | 435 | }; | 
 | 436 |  | 
 | 437 | struct 	cqe { | 
 | 438 | 	u8 cqe_byte[BNX2I_CQE_SIZE]; | 
 | 439 | }; | 
 | 440 |  | 
 | 441 |  | 
 | 442 | enum { | 
 | 443 | #if defined(__LITTLE_ENDIAN) | 
 | 444 | 	CNIC_EVENT_COAL_INDEX	= 0x0, | 
 | 445 | 	CNIC_SEND_DOORBELL	= 0x4, | 
 | 446 | 	CNIC_EVENT_CQ_ARM	= 0x7, | 
 | 447 | 	CNIC_RECV_DOORBELL	= 0x8 | 
 | 448 | #elif defined(__BIG_ENDIAN) | 
 | 449 | 	CNIC_EVENT_COAL_INDEX	= 0x2, | 
 | 450 | 	CNIC_SEND_DOORBELL	= 0x6, | 
 | 451 | 	CNIC_EVENT_CQ_ARM	= 0x4, | 
 | 452 | 	CNIC_RECV_DOORBELL	= 0xa | 
 | 453 | #endif | 
 | 454 | }; | 
 | 455 |  | 
 | 456 |  | 
 | 457 | /* | 
 | 458 |  * CQ DB | 
 | 459 |  */ | 
 | 460 | struct bnx2x_iscsi_cq_pend_cmpl { | 
 | 461 | 	/* CQ producer, updated by Ustorm */ | 
 | 462 | 	u16 ustrom_prod; | 
 | 463 | 	/* CQ pending completion counter */ | 
 | 464 | 	u16 pend_cntr; | 
 | 465 | }; | 
 | 466 |  | 
 | 467 |  | 
 | 468 | struct bnx2i_5771x_cq_db { | 
 | 469 | 	struct bnx2x_iscsi_cq_pend_cmpl qp_pend_cmpl[BNX2X_MAX_CQS]; | 
 | 470 | 	/* CQ pending completion ITT array */ | 
 | 471 | 	u16 itt[BNX2X_MAX_CQS]; | 
 | 472 | 	/* Cstorm CQ sequence to notify array, updated by driver */; | 
 | 473 | 	u16 sqn[BNX2X_MAX_CQS]; | 
 | 474 | 	u32 reserved[4] /* 16 byte allignment */; | 
 | 475 | }; | 
 | 476 |  | 
 | 477 |  | 
 | 478 | struct bnx2i_5771x_sq_rq_db { | 
 | 479 | 	u16 prod_idx; | 
 | 480 | 	u8 reserved0[14]; /* Pad structure size to 16 bytes */ | 
 | 481 | }; | 
 | 482 |  | 
 | 483 |  | 
 | 484 | struct bnx2i_5771x_dbell_hdr { | 
 | 485 | 	u8 header; | 
 | 486 | 	/* 1 for rx doorbell, 0 for tx doorbell */ | 
 | 487 | #define B577XX_DOORBELL_HDR_RX				(0x1<<0) | 
 | 488 | #define B577XX_DOORBELL_HDR_RX_SHIFT			0 | 
 | 489 | 	/* 0 for normal doorbell, 1 for advertise wnd doorbell */ | 
 | 490 | #define B577XX_DOORBELL_HDR_DB_TYPE			(0x1<<1) | 
 | 491 | #define B577XX_DOORBELL_HDR_DB_TYPE_SHIFT		1 | 
 | 492 | 	/* rdma tx only: DPM transaction size specifier (64/128/256/512B) */ | 
 | 493 | #define B577XX_DOORBELL_HDR_DPM_SIZE			(0x3<<2) | 
 | 494 | #define B577XX_DOORBELL_HDR_DPM_SIZE_SHIFT		2 | 
 | 495 | 	/* connection type */ | 
 | 496 | #define B577XX_DOORBELL_HDR_CONN_TYPE			(0xF<<4) | 
 | 497 | #define B577XX_DOORBELL_HDR_CONN_TYPE_SHIFT		4 | 
 | 498 | }; | 
 | 499 |  | 
 | 500 | struct bnx2i_5771x_dbell { | 
 | 501 | 	struct bnx2i_5771x_dbell_hdr dbell; | 
 | 502 | 	u8 pad[3]; | 
 | 503 |  | 
 | 504 | }; | 
 | 505 |  | 
 | 506 | /** | 
 | 507 |  * struct qp_info - QP (share queue region) atrributes structure | 
 | 508 |  * | 
 | 509 |  * @ctx_base:           ioremapped pci register base to access doorbell register | 
 | 510 |  *                      pertaining to this offloaded connection | 
 | 511 |  * @sq_virt:            virtual address of send queue (SQ) region | 
 | 512 |  * @sq_phys:            DMA address of SQ memory region | 
 | 513 |  * @sq_mem_size:        SQ size | 
 | 514 |  * @sq_prod_qe:         SQ producer entry pointer | 
 | 515 |  * @sq_cons_qe:         SQ consumer entry pointer | 
 | 516 |  * @sq_first_qe:        virtaul address of first entry in SQ | 
 | 517 |  * @sq_last_qe:         virtaul address of last entry in SQ | 
 | 518 |  * @sq_prod_idx:        SQ producer index | 
 | 519 |  * @sq_cons_idx:        SQ consumer index | 
 | 520 |  * @sqe_left:           number sq entry left | 
 | 521 |  * @sq_pgtbl_virt:      page table describing buffer consituting SQ region | 
 | 522 |  * @sq_pgtbl_phys:      dma address of 'sq_pgtbl_virt' | 
 | 523 |  * @sq_pgtbl_size:      SQ page table size | 
 | 524 |  * @cq_virt:            virtual address of completion queue (CQ) region | 
 | 525 |  * @cq_phys:            DMA address of RQ memory region | 
 | 526 |  * @cq_mem_size:        CQ size | 
 | 527 |  * @cq_prod_qe:         CQ producer entry pointer | 
 | 528 |  * @cq_cons_qe:         CQ consumer entry pointer | 
 | 529 |  * @cq_first_qe:        virtaul address of first entry in CQ | 
 | 530 |  * @cq_last_qe:         virtaul address of last entry in CQ | 
 | 531 |  * @cq_prod_idx:        CQ producer index | 
 | 532 |  * @cq_cons_idx:        CQ consumer index | 
 | 533 |  * @cqe_left:           number cq entry left | 
 | 534 |  * @cqe_size:           size of each CQ entry | 
 | 535 |  * @cqe_exp_seq_sn:     next expected CQE sequence number | 
 | 536 |  * @cq_pgtbl_virt:      page table describing buffer consituting CQ region | 
 | 537 |  * @cq_pgtbl_phys:      dma address of 'cq_pgtbl_virt' | 
 | 538 |  * @cq_pgtbl_size:    	CQ page table size | 
 | 539 |  * @rq_virt:            virtual address of receive queue (RQ) region | 
 | 540 |  * @rq_phys:            DMA address of RQ memory region | 
 | 541 |  * @rq_mem_size:        RQ size | 
 | 542 |  * @rq_prod_qe:         RQ producer entry pointer | 
 | 543 |  * @rq_cons_qe:         RQ consumer entry pointer | 
 | 544 |  * @rq_first_qe:        virtaul address of first entry in RQ | 
 | 545 |  * @rq_last_qe:         virtaul address of last entry in RQ | 
 | 546 |  * @rq_prod_idx:        RQ producer index | 
 | 547 |  * @rq_cons_idx:        RQ consumer index | 
 | 548 |  * @rqe_left:           number rq entry left | 
 | 549 |  * @rq_pgtbl_virt:      page table describing buffer consituting RQ region | 
 | 550 |  * @rq_pgtbl_phys:      dma address of 'rq_pgtbl_virt' | 
 | 551 |  * @rq_pgtbl_size:      RQ page table size | 
 | 552 |  * | 
 | 553 |  * queue pair (QP) is a per connection shared data structure which is used | 
 | 554 |  *	to send work requests (SQ), receive completion notifications (CQ) | 
 | 555 |  *	and receive asynchoronous / scsi sense info (RQ). 'qp_info' structure | 
 | 556 |  *	below holds queue memory, consumer/producer indexes and page table | 
 | 557 |  *	information | 
 | 558 |  */ | 
 | 559 | struct qp_info { | 
 | 560 | 	void __iomem *ctx_base; | 
 | 561 | #define DPM_TRIGER_TYPE			0x40 | 
 | 562 |  | 
 | 563 | #define BNX2I_570x_QUE_DB_SIZE		0 | 
 | 564 | #define BNX2I_5771x_QUE_DB_SIZE		16 | 
 | 565 | 	struct sqe *sq_virt; | 
 | 566 | 	dma_addr_t sq_phys; | 
 | 567 | 	u32 sq_mem_size; | 
 | 568 |  | 
 | 569 | 	struct sqe *sq_prod_qe; | 
 | 570 | 	struct sqe *sq_cons_qe; | 
 | 571 | 	struct sqe *sq_first_qe; | 
 | 572 | 	struct sqe *sq_last_qe; | 
 | 573 | 	u16 sq_prod_idx; | 
 | 574 | 	u16 sq_cons_idx; | 
 | 575 | 	u32 sqe_left; | 
 | 576 |  | 
 | 577 | 	void *sq_pgtbl_virt; | 
 | 578 | 	dma_addr_t sq_pgtbl_phys; | 
 | 579 | 	u32 sq_pgtbl_size;	/* set to PAGE_SIZE for 5708 & 5709 */ | 
 | 580 |  | 
 | 581 | 	struct cqe *cq_virt; | 
 | 582 | 	dma_addr_t cq_phys; | 
 | 583 | 	u32 cq_mem_size; | 
 | 584 |  | 
 | 585 | 	struct cqe *cq_prod_qe; | 
 | 586 | 	struct cqe *cq_cons_qe; | 
 | 587 | 	struct cqe *cq_first_qe; | 
 | 588 | 	struct cqe *cq_last_qe; | 
 | 589 | 	u16 cq_prod_idx; | 
 | 590 | 	u16 cq_cons_idx; | 
 | 591 | 	u32 cqe_left; | 
 | 592 | 	u32 cqe_size; | 
 | 593 | 	u32 cqe_exp_seq_sn; | 
 | 594 |  | 
 | 595 | 	void *cq_pgtbl_virt; | 
 | 596 | 	dma_addr_t cq_pgtbl_phys; | 
 | 597 | 	u32 cq_pgtbl_size;	/* set to PAGE_SIZE for 5708 & 5709 */ | 
 | 598 |  | 
 | 599 | 	struct rqe *rq_virt; | 
 | 600 | 	dma_addr_t rq_phys; | 
 | 601 | 	u32 rq_mem_size; | 
 | 602 |  | 
 | 603 | 	struct rqe *rq_prod_qe; | 
 | 604 | 	struct rqe *rq_cons_qe; | 
 | 605 | 	struct rqe *rq_first_qe; | 
 | 606 | 	struct rqe *rq_last_qe; | 
 | 607 | 	u16 rq_prod_idx; | 
 | 608 | 	u16 rq_cons_idx; | 
 | 609 | 	u32 rqe_left; | 
 | 610 |  | 
 | 611 | 	void *rq_pgtbl_virt; | 
 | 612 | 	dma_addr_t rq_pgtbl_phys; | 
 | 613 | 	u32 rq_pgtbl_size;	/* set to PAGE_SIZE for 5708 & 5709 */ | 
 | 614 | }; | 
 | 615 |  | 
 | 616 |  | 
 | 617 |  | 
 | 618 | /* | 
 | 619 |  * CID handles | 
 | 620 |  */ | 
 | 621 | struct ep_handles { | 
 | 622 | 	u32 fw_cid; | 
 | 623 | 	u32 drv_iscsi_cid; | 
 | 624 | 	u16 pg_cid; | 
 | 625 | 	u16 rsvd; | 
 | 626 | }; | 
 | 627 |  | 
 | 628 |  | 
 | 629 | enum { | 
 | 630 | 	EP_STATE_IDLE                   = 0x0, | 
 | 631 | 	EP_STATE_PG_OFLD_START          = 0x1, | 
 | 632 | 	EP_STATE_PG_OFLD_COMPL          = 0x2, | 
 | 633 | 	EP_STATE_OFLD_START             = 0x4, | 
 | 634 | 	EP_STATE_OFLD_COMPL             = 0x8, | 
 | 635 | 	EP_STATE_CONNECT_START          = 0x10, | 
 | 636 | 	EP_STATE_CONNECT_COMPL          = 0x20, | 
 | 637 | 	EP_STATE_ULP_UPDATE_START       = 0x40, | 
 | 638 | 	EP_STATE_ULP_UPDATE_COMPL       = 0x80, | 
 | 639 | 	EP_STATE_DISCONN_START          = 0x100, | 
 | 640 | 	EP_STATE_DISCONN_COMPL          = 0x200, | 
 | 641 | 	EP_STATE_CLEANUP_START          = 0x400, | 
 | 642 | 	EP_STATE_CLEANUP_CMPL           = 0x800, | 
 | 643 | 	EP_STATE_TCP_FIN_RCVD           = 0x1000, | 
 | 644 | 	EP_STATE_TCP_RST_RCVD           = 0x2000, | 
| Eddie Wai | 2eefb20 | 2010-07-01 15:34:54 -0700 | [diff] [blame] | 645 | 	EP_STATE_LOGOUT_SENT            = 0x4000, | 
 | 646 | 	EP_STATE_LOGOUT_RESP_RCVD       = 0x8000, | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 647 | 	EP_STATE_PG_OFLD_FAILED         = 0x1000000, | 
 | 648 | 	EP_STATE_ULP_UPDATE_FAILED      = 0x2000000, | 
 | 649 | 	EP_STATE_CLEANUP_FAILED         = 0x4000000, | 
 | 650 | 	EP_STATE_OFLD_FAILED            = 0x8000000, | 
 | 651 | 	EP_STATE_CONNECT_FAILED         = 0x10000000, | 
 | 652 | 	EP_STATE_DISCONN_TIMEDOUT       = 0x20000000, | 
| Eddie Wai | bee3487 | 2010-11-23 15:29:29 -0800 | [diff] [blame] | 653 | 	EP_STATE_OFLD_FAILED_CID_BUSY   = 0x80000000, | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 654 | }; | 
 | 655 |  | 
 | 656 | /** | 
 | 657 |  * struct bnx2i_endpoint - representation of tcp connection in NX2 world | 
 | 658 |  * | 
 | 659 |  * @link:               list head to link elements | 
 | 660 |  * @hba:                adapter to which this connection belongs | 
 | 661 |  * @conn:               iscsi connection this EP is linked to | 
| Eddie Wai | 46012e8 | 2010-07-01 15:34:51 -0700 | [diff] [blame] | 662 |  * @cls_ep:             associated iSCSI endpoint pointer | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 663 |  * @sess:               iscsi session this EP is linked to | 
 | 664 |  * @cm_sk:              cnic sock struct | 
 | 665 |  * @hba_age:            age to detect if 'iscsid' issues ep_disconnect() | 
 | 666 |  *                      after HBA reset is completed by bnx2i/cnic/bnx2 | 
 | 667 |  *                      modules | 
 | 668 |  * @state:              tracks offload connection state machine | 
 | 669 |  * @teardown_mode:      indicates if conn teardown is abortive or orderly | 
 | 670 |  * @qp:                 QP information | 
 | 671 |  * @ids:                contains chip allocated *context id* & driver assigned | 
 | 672 |  *                      *iscsi cid* | 
 | 673 |  * @ofld_timer:         offload timer to detect timeout | 
 | 674 |  * @ofld_wait:          wait queue | 
 | 675 |  * | 
 | 676 |  * Endpoint Structure - equivalent of tcp socket structure | 
 | 677 |  */ | 
 | 678 | struct bnx2i_endpoint { | 
 | 679 | 	struct list_head link; | 
 | 680 | 	struct bnx2i_hba *hba; | 
 | 681 | 	struct bnx2i_conn *conn; | 
| Eddie Wai | 46012e8 | 2010-07-01 15:34:51 -0700 | [diff] [blame] | 682 | 	struct iscsi_endpoint *cls_ep; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 683 | 	struct cnic_sock *cm_sk; | 
 | 684 | 	u32 hba_age; | 
 | 685 | 	u32 state; | 
 | 686 | 	unsigned long timestamp; | 
 | 687 | 	int num_active_cmds; | 
 | 688 |  | 
 | 689 | 	struct qp_info qp; | 
 | 690 | 	struct ep_handles ids; | 
 | 691 | 		#define ep_iscsi_cid	ids.drv_iscsi_cid | 
 | 692 | 		#define ep_cid		ids.fw_cid | 
 | 693 | 		#define ep_pg_cid	ids.pg_cid | 
 | 694 | 	struct timer_list ofld_timer; | 
 | 695 | 	wait_queue_head_t ofld_wait; | 
 | 696 | }; | 
 | 697 |  | 
 | 698 |  | 
 | 699 |  | 
 | 700 | /* Global variables */ | 
 | 701 | extern unsigned int error_mask1, error_mask2; | 
 | 702 | extern u64 iscsi_error_mask; | 
 | 703 | extern unsigned int en_tcp_dack; | 
 | 704 | extern unsigned int event_coal_div; | 
| Anil Veerabhadrappa | 8776193 | 2009-12-07 11:40:18 -0800 | [diff] [blame] | 705 | extern unsigned int event_coal_min; | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 706 |  | 
 | 707 | extern struct scsi_transport_template *bnx2i_scsi_xport_template; | 
 | 708 | extern struct iscsi_transport bnx2i_iscsi_transport; | 
 | 709 | extern struct cnic_ulp_ops bnx2i_cnic_cb; | 
 | 710 |  | 
 | 711 | extern unsigned int sq_size; | 
 | 712 | extern unsigned int rq_size; | 
 | 713 |  | 
 | 714 | extern struct device_attribute *bnx2i_dev_attributes[]; | 
 | 715 |  | 
 | 716 |  | 
 | 717 |  | 
 | 718 | /* | 
 | 719 |  * Function Prototypes | 
 | 720 |  */ | 
 | 721 | extern void bnx2i_identify_device(struct bnx2i_hba *hba); | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 722 |  | 
 | 723 | extern void bnx2i_ulp_init(struct cnic_dev *dev); | 
 | 724 | extern void bnx2i_ulp_exit(struct cnic_dev *dev); | 
 | 725 | extern void bnx2i_start(void *handle); | 
 | 726 | extern void bnx2i_stop(void *handle); | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 727 | extern struct bnx2i_hba *get_adapter_list_head(void); | 
 | 728 |  | 
 | 729 | struct bnx2i_conn *bnx2i_get_conn_from_id(struct bnx2i_hba *hba, | 
 | 730 | 					  u16 iscsi_cid); | 
 | 731 |  | 
 | 732 | int bnx2i_alloc_ep_pool(void); | 
 | 733 | void bnx2i_release_ep_pool(void); | 
 | 734 | struct bnx2i_endpoint *bnx2i_ep_ofld_list_next(struct bnx2i_hba *hba); | 
 | 735 | struct bnx2i_endpoint *bnx2i_ep_destroy_list_next(struct bnx2i_hba *hba); | 
 | 736 |  | 
 | 737 | struct bnx2i_hba *bnx2i_find_hba_for_cnic(struct cnic_dev *cnic); | 
 | 738 |  | 
 | 739 | struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic); | 
 | 740 | void bnx2i_free_hba(struct bnx2i_hba *hba); | 
 | 741 |  | 
 | 742 | void bnx2i_get_rq_buf(struct bnx2i_conn *conn, char *ptr, int len); | 
 | 743 | void bnx2i_put_rq_buf(struct bnx2i_conn *conn, int count); | 
 | 744 |  | 
 | 745 | void bnx2i_iscsi_unmap_sg_list(struct bnx2i_cmd *cmd); | 
 | 746 |  | 
 | 747 | void bnx2i_drop_session(struct iscsi_cls_session *session); | 
 | 748 |  | 
 | 749 | extern int bnx2i_send_fw_iscsi_init_msg(struct bnx2i_hba *hba); | 
 | 750 | extern int bnx2i_send_iscsi_login(struct bnx2i_conn *conn, | 
 | 751 | 				  struct iscsi_task *mtask); | 
 | 752 | extern int bnx2i_send_iscsi_tmf(struct bnx2i_conn *conn, | 
 | 753 | 				  struct iscsi_task *mtask); | 
| Eddie Wai | 09813ba | 2011-02-16 15:04:30 -0600 | [diff] [blame] | 754 | extern int bnx2i_send_iscsi_text(struct bnx2i_conn *conn, | 
 | 755 | 				 struct iscsi_task *mtask); | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 756 | extern int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *conn, | 
 | 757 | 				    struct bnx2i_cmd *cmnd); | 
 | 758 | extern int bnx2i_send_iscsi_nopout(struct bnx2i_conn *conn, | 
| Eddie Wai | 3930407 | 2010-08-12 16:44:27 -0700 | [diff] [blame] | 759 | 				   struct iscsi_task *mtask, | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 760 | 				   char *datap, int data_len, int unsol); | 
 | 761 | extern int bnx2i_send_iscsi_logout(struct bnx2i_conn *conn, | 
 | 762 | 				   struct iscsi_task *mtask); | 
 | 763 | extern void bnx2i_send_cmd_cleanup_req(struct bnx2i_hba *hba, | 
 | 764 | 				       struct bnx2i_cmd *cmd); | 
| Eddie Wai | bee3487 | 2010-11-23 15:29:29 -0800 | [diff] [blame] | 765 | extern int bnx2i_send_conn_ofld_req(struct bnx2i_hba *hba, | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 766 | 				    struct bnx2i_endpoint *ep); | 
| Eddie Wai | bee3487 | 2010-11-23 15:29:29 -0800 | [diff] [blame] | 767 | extern void bnx2i_update_iscsi_conn(struct iscsi_conn *conn); | 
 | 768 | extern int bnx2i_send_conn_destroy(struct bnx2i_hba *hba, | 
 | 769 | 				   struct bnx2i_endpoint *ep); | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 770 |  | 
 | 771 | extern int bnx2i_alloc_qp_resc(struct bnx2i_hba *hba, | 
 | 772 | 			       struct bnx2i_endpoint *ep); | 
 | 773 | extern void bnx2i_free_qp_resc(struct bnx2i_hba *hba, | 
 | 774 | 			       struct bnx2i_endpoint *ep); | 
 | 775 | extern void bnx2i_ep_ofld_timer(unsigned long data); | 
 | 776 | extern struct bnx2i_endpoint *bnx2i_find_ep_in_ofld_list( | 
 | 777 | 		struct bnx2i_hba *hba, u32 iscsi_cid); | 
 | 778 | extern struct bnx2i_endpoint *bnx2i_find_ep_in_destroy_list( | 
 | 779 | 		struct bnx2i_hba *hba, u32 iscsi_cid); | 
 | 780 |  | 
 | 781 | extern int bnx2i_map_ep_dbell_regs(struct bnx2i_endpoint *ep); | 
 | 782 | extern void bnx2i_arm_cq_event_coalescing(struct bnx2i_endpoint *ep, u8 action); | 
 | 783 |  | 
| Eddie Wai | 55e15c9 | 2010-07-01 15:34:52 -0700 | [diff] [blame] | 784 | extern int bnx2i_hw_ep_disconnect(struct bnx2i_endpoint *bnx2i_ep); | 
 | 785 |  | 
| Michael Chan | cf4e636 | 2009-06-08 18:14:44 -0700 | [diff] [blame] | 786 | /* Debug related function prototypes */ | 
 | 787 | extern void bnx2i_print_pend_cmd_queue(struct bnx2i_conn *conn); | 
 | 788 | extern void bnx2i_print_active_cmd_queue(struct bnx2i_conn *conn); | 
 | 789 | extern void bnx2i_print_xmit_pdu_queue(struct bnx2i_conn *conn); | 
 | 790 | extern void bnx2i_print_recv_state(struct bnx2i_conn *conn); | 
 | 791 |  | 
 | 792 | #endif |