[SCSI] be2iscsi: Adding msix and mcc_rings V3
This patch enables msix for be2iscsi. It also enables use of mcc_rings for fw commands. Since the mcc eq creation is dependent on msix I am sending as one patch Signed-off-by: Jayamohan Kallickal <jayamohank@serverengines.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:

committed by
James Bottomley

parent
b4a9c7ede9
commit
bfead3b2cb
@@ -21,11 +21,9 @@
|
||||
#ifndef _BEISCSI_MAIN_
|
||||
#define _BEISCSI_MAIN_
|
||||
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/blk-iopoll.h>
|
||||
#include <scsi/scsi.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
@@ -35,12 +33,8 @@
|
||||
#include <scsi/scsi_transport_iscsi.h>
|
||||
|
||||
#include "be.h"
|
||||
|
||||
|
||||
|
||||
#define DRV_NAME "be2iscsi"
|
||||
#define BUILD_STR "2.0.527.0"
|
||||
|
||||
#define BE_NAME "ServerEngines BladeEngine2" \
|
||||
"Linux iSCSI Driver version" BUILD_STR
|
||||
#define DRV_DESC BE_NAME " " "Driver"
|
||||
@@ -49,6 +43,8 @@
|
||||
#define BE_DEVICE_ID1 0x212
|
||||
#define OC_DEVICE_ID1 0x702
|
||||
#define OC_DEVICE_ID2 0x703
|
||||
#define OC_DEVICE_ID3 0x712
|
||||
#define OC_DEVICE_ID4 0x222
|
||||
|
||||
#define BE2_MAX_SESSIONS 64
|
||||
#define BE2_CMDS_PER_CXN 128
|
||||
@@ -63,6 +59,7 @@
|
||||
#define BE2_IO_DEPTH \
|
||||
(BE2_MAX_ICDS / 2 - (BE2_LOGOUTS + BE2_TMFS + BE2_NOPOUT_REQ))
|
||||
|
||||
#define MAX_CPUS 31
|
||||
#define BEISCSI_SGLIST_ELEMENTS BE2_SGE
|
||||
|
||||
#define BEISCSI_MAX_CMNDS 1024 /* Max IO's per Ctrlr sht->can_queue */
|
||||
@@ -79,7 +76,7 @@
|
||||
#define BE_SENSE_INFO_SIZE 258
|
||||
#define BE_ISCSI_PDU_HEADER_SIZE 64
|
||||
#define BE_MIN_MEM_SIZE 16384
|
||||
|
||||
#define MAX_CMD_SZ 65536
|
||||
#define IIOC_SCSI_DATA 0x05 /* Write Operation */
|
||||
|
||||
#define DBG_LVL 0x00000001
|
||||
@@ -100,6 +97,8 @@ do { \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define BE_ADAPTER_UP 0x00000000
|
||||
#define BE_ADAPTER_LINK_DOWN 0x00000001
|
||||
/**
|
||||
* hardware needs the async PDU buffers to be posted in multiples of 8
|
||||
* So have atleast 8 of them by default
|
||||
@@ -160,21 +159,19 @@ do { \
|
||||
|
||||
enum be_mem_enum {
|
||||
HWI_MEM_ADDN_CONTEXT,
|
||||
HWI_MEM_CQ,
|
||||
HWI_MEM_EQ,
|
||||
HWI_MEM_WRB,
|
||||
HWI_MEM_WRBH,
|
||||
HWI_MEM_SGLH, /* 5 */
|
||||
HWI_MEM_SGLH,
|
||||
HWI_MEM_SGE,
|
||||
HWI_MEM_ASYNC_HEADER_BUF,
|
||||
HWI_MEM_ASYNC_HEADER_BUF, /* 5 */
|
||||
HWI_MEM_ASYNC_DATA_BUF,
|
||||
HWI_MEM_ASYNC_HEADER_RING,
|
||||
HWI_MEM_ASYNC_DATA_RING, /* 10 */
|
||||
HWI_MEM_ASYNC_DATA_RING,
|
||||
HWI_MEM_ASYNC_HEADER_HANDLE,
|
||||
HWI_MEM_ASYNC_DATA_HANDLE,
|
||||
HWI_MEM_ASYNC_DATA_HANDLE, /* 10 */
|
||||
HWI_MEM_ASYNC_PDU_CONTEXT,
|
||||
ISCSI_MEM_GLOBAL_HEADER,
|
||||
SE_MEM_MAX /* 15 */
|
||||
SE_MEM_MAX
|
||||
};
|
||||
|
||||
struct be_bus_address32 {
|
||||
@@ -212,6 +209,9 @@ struct be_mem_descriptor {
|
||||
|
||||
struct sgl_handle {
|
||||
unsigned int sgl_index;
|
||||
unsigned int type;
|
||||
unsigned int cid;
|
||||
struct iscsi_task *task;
|
||||
struct iscsi_sge *pfrag;
|
||||
};
|
||||
|
||||
@@ -274,13 +274,17 @@ struct beiscsi_hba {
|
||||
struct pci_dev *pcidev;
|
||||
unsigned int state;
|
||||
unsigned short asic_revision;
|
||||
struct blk_iopoll iopoll;
|
||||
unsigned int num_cpus;
|
||||
unsigned int nxt_cqid;
|
||||
struct msix_entry msix_entries[MAX_CPUS + 1];
|
||||
bool msix_enabled;
|
||||
struct be_mem_descriptor *init_mem;
|
||||
|
||||
unsigned short io_sgl_alloc_index;
|
||||
unsigned short io_sgl_free_index;
|
||||
unsigned short io_sgl_hndl_avbl;
|
||||
struct sgl_handle **io_sgl_hndl_base;
|
||||
struct sgl_handle **sgl_hndl_array;
|
||||
|
||||
unsigned short eh_sgl_alloc_index;
|
||||
unsigned short eh_sgl_free_index;
|
||||
@@ -315,6 +319,7 @@ struct beiscsi_hba {
|
||||
unsigned short cid_alloc;
|
||||
unsigned short cid_free;
|
||||
unsigned short avlbl_cids;
|
||||
unsigned short iscsi_features;
|
||||
spinlock_t cid_lock;
|
||||
} fw_config;
|
||||
|
||||
@@ -343,6 +348,7 @@ struct beiscsi_conn {
|
||||
unsigned short login_in_progress;
|
||||
struct sgl_handle *plogin_sgl_handle;
|
||||
struct beiscsi_session *beiscsi_sess;
|
||||
struct iscsi_task *task;
|
||||
};
|
||||
|
||||
/* This structure is used by the chip */
|
||||
@@ -390,7 +396,7 @@ struct beiscsi_io_task {
|
||||
unsigned int flags;
|
||||
unsigned short cid;
|
||||
unsigned short header_len;
|
||||
|
||||
itt_t libiscsi_itt;
|
||||
struct be_cmd_bhs *cmd_bhs;
|
||||
struct be_bus_address bhs_pa;
|
||||
unsigned short bhs_len;
|
||||
@@ -599,7 +605,6 @@ struct amap_cq_db {
|
||||
|
||||
void beiscsi_process_eq(struct beiscsi_hba *phba);
|
||||
|
||||
|
||||
struct iscsi_wrb {
|
||||
u32 dw[16];
|
||||
} __packed;
|
||||
@@ -820,10 +825,12 @@ struct wrb_handle {
|
||||
};
|
||||
|
||||
struct hwi_context_memory {
|
||||
struct be_eq_obj be_eq;
|
||||
struct be_queue_info be_cq;
|
||||
struct be_queue_info be_mcc_cq;
|
||||
struct be_queue_info be_mcc;
|
||||
/* Adaptive interrupt coalescing (AIC) info */
|
||||
u16 min_eqd; /* in usecs */
|
||||
u16 max_eqd; /* in usecs */
|
||||
u16 cur_eqd; /* in usecs */
|
||||
struct be_eq_obj be_eq[MAX_CPUS];
|
||||
struct be_queue_info be_cq[MAX_CPUS];
|
||||
|
||||
struct be_queue_info be_def_hdrq;
|
||||
struct be_queue_info be_def_dataq;
|
||||
|
Reference in New Issue
Block a user