- fusion - Greater than 255 target and lun support
Subsystems (2)
PATCH 1/9 - fusion - Greater than 255 target and lun support
Add support for greater than 255 target and luns. Kill the hd->Target[] field, and change all references of bus_id/target_id, to channel/id.
Signed-off-by Eric Moore <[email protected]>
drivers/message/fusion/Makefile +1 -1
@@ -8,6 +8,7 @@ #EXTRA_CFLAGS += -DMPT_DEBUG_INIT #EXTRA_CFLAGS += -DMPT_DEBUG_EXIT #EXTRA_CFLAGS += -DMPT_DEBUG_FAIL +#EXTRA_CFLAGS += -DMPT_DEBUG_TM # # driver/module specifics...
@@ -22,7 +23,6 @@ # For mptscsih: #CFLAGS_mptscsih.o += -DMPT_DEBUG_DV #CFLAGS_mptscsih.o += -DMPT_DEBUG_NEGO -#CFLAGS_mptscsih.o += -DMPT_DEBUG_TM #CFLAGS_mptscsih.o += -DMPT_DEBUG_SCSI #CFLAGS_mptscsih.o += -DMPT_DEBUG_REPLY #
drivers/message/fusion/mptbase.c +22 -7
@@ -82,6 +82,10 @@ static int mpt_msi_enable;module_param (mpt_msi_enable, int,0 );MODULE_PARM_DESC (mpt_msi_enable," MSI Support Enable (default=0)" ); +static int mpt_channel_mapping; +module_param (mpt_channel_mapping, int,0 ); +MODULE_PARM_DESC (mpt_channel_mapping," Mapping id's to channels (default=0)" ); +#ifdef MFCNT static int mfcounter =0 ;#define PRINT_MF_COUNT 20000
@@ -2505,6 +2509,7 @@ GetPortFacts(MPT_ADAPTER *ioc, int portnint ii;int req_sz;int reply_sz; +int max_id;/* IOC *must* NOT be in RESET state! */ if (ioc->last_state ==MPI_IOC_STATE_RESET ) {
@@ -2552,6 +2557,21 @@ GetPortFacts(MPT_ADAPTER *ioc, int portn pfacts->MaxPersistentIDs =le16_to_cpu (pfacts->MaxPersistentIDs); pfacts->MaxLanBuckets =le16_to_cpu (pfacts->MaxLanBuckets); + max_id = (ioc->bus_type ==SAS ) ? pfacts->PortSCSIID : + pfacts->MaxDevices; + ioc->devices_per_bus = (max_id >255 ) ?256 : max_id; + ioc->number_of_buses = (ioc->devices_per_bus <256 ) ?1 : max_id/256 ; + +/* +* Place all the devices on channels +* +* (for debuging) +*/ +if (mpt_channel_mapping) { + ioc->devices_per_bus =1 ; + ioc->number_of_buses = (max_id >255 ) ?255 : max_id; + } +return 0 ; }
@@ -2592,13 +2612,8 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFddlprintk ((MYIOC_s_INFO_FMT"upload_fw %d facts.Flags=%x\n" , ioc->name, ioc->upload_fw, ioc->facts.Flags)); -if (ioc->bus_type ==SAS ) - ioc_init.MaxDevices = ioc->facts.MaxDevices; -else if (ioc->bus_type ==FC ) - ioc_init.MaxDevices =MPT_MAX_FC_DEVICES ; -else - ioc_init.MaxDevices =MPT_MAX_SCSI_DEVICES ; - ioc_init.MaxBuses =MPT_MAX_BUS ; + ioc_init.MaxDevices = (U8 )ioc->devices_per_bus; + ioc_init.MaxBuses = (U8 )ioc->number_of_buses;dinitprintk ((MYIOC_s_INFO_FMT"facts.MsgVersion=%x\n" , ioc->name, ioc->facts.MsgVersion));if (ioc->facts.MsgVersion >=MPI_VERSION_01_05 ) {
drivers/message/fusion/mptbase.h +6 -6
@@ -334,8 +334,8 @@ typedef struct _VirtTarget {struct scsi_target *starget;u8 tflags;u8 ioc_id; -u8 target_id; -u8 bus_id; +u8 id; +u8 channel;u8 minSyncFactor;/* 0xFF is async */ u8 maxOffset;/* 0 if async */ u8 maxWidth;/* 0 if narrow, 1 if wide */
@@ -344,13 +344,12 @@ typedef struct _VirtTarget {u8 type;/* byte 0 of Inquiry data */ u8 deleted;/* target in process of being removed */ u32 num_luns; -u32 luns[8 ];/* Max LUNs is 256 */ } VirtTarget;typedef struct _VirtDevice {VirtTarget *vtarget;u8 configured_lun; -u32 lun; +int lun; }VirtDevice ;/*
@@ -412,7 +411,7 @@ typedef struct _MPT_IOCTL {u8 rsvd;u8 status;/* current command status */ u8 reset;/* 1 if bus reset allowed */ -u8 target;/* target for reset */ +u8 id;/* target for reset */ struct mutex ioctl_mutex; }MPT_IOCTL ;
@@ -528,6 +527,8 @@ typedef struct _MPT_ADAPTERu32 mem_phys;/* == f4020000 (mmap) */ u32 pio_mem_phys;/* Programmed IO (downloadboot) */ int mem_size;/* mmap memory size */ +int number_of_buses; +int devices_per_bus;int alloc_total;u32 last_state;int active;
@@ -957,7 +958,6 @@ typedef struct _MPT_SCSI_HOST {int port;u32 pad0;struct scsi_cmnd **ScsiLookup; -VirtTarget **Targets;MPT_LOCAL_REPLY *pLocal;/* used for internal commands */ struct timer_list timer;/* Pool of memory for holding SCpnts before doing
drivers/message/fusion/mptctl.c +51 -108
245 lines not on this page · raw message
drivers/message/fusion/mptfc.c +21 -30
112 lines not on this page · raw message
drivers/message/fusion/mptsas.c +35 -38
172 lines not on this page · raw message
drivers/message/fusion/mptscsih.c +81 -219
553 lines not on this page · raw message
drivers/message/fusion/mptscsih.h +35 -7
65 lines not on this page · raw message
drivers/message/fusion/mptspi.c +126 -60
313 lines not on this page · raw message