svn commit: r189184 - projects/jbuild/sys/dev/mpt

John Birrell jb at FreeBSD.org
Sat Feb 28 09:57:46 PST 2009


Author: jb
Date: Sat Feb 28 17:57:45 2009
New Revision: 189184
URL: http://svn.freebsd.org/changeset/base/189184

Log:
  MFC

Modified:
  projects/jbuild/sys/dev/mpt/mpt.c
  projects/jbuild/sys/dev/mpt/mpt.h
  projects/jbuild/sys/dev/mpt/mpt_cam.c
  projects/jbuild/sys/dev/mpt/mpt_raid.c
  projects/jbuild/sys/dev/mpt/mpt_user.c

Modified: projects/jbuild/sys/dev/mpt/mpt.c
==============================================================================
--- projects/jbuild/sys/dev/mpt/mpt.c	Sat Feb 28 17:57:21 2009	(r189183)
+++ projects/jbuild/sys/dev/mpt/mpt.c	Sat Feb 28 17:57:45 2009	(r189184)
@@ -1637,7 +1637,7 @@ mpt_read_extcfg_header(struct mpt_softc 
 		rslt->PageVersion = cfgp->Header.PageVersion;
 		rslt->PageNumber = cfgp->Header.PageNumber;
 		rslt->PageType = cfgp->Header.PageType;
-		rslt->ExtPageLength = cfgp->ExtPageLength;
+		rslt->ExtPageLength = le16toh(cfgp->ExtPageLength);
 		rslt->ExtPageType = cfgp->ExtPageType;
 		error = 0;
 		break;
@@ -1668,7 +1668,7 @@ mpt_read_extcfg_page(struct mpt_softc *m
 
 	req = mpt_get_request(mpt, sleep_ok);
 	if (req == NULL) {
-		mpt_prt(mpt, "mpt_read_cfg_page: Get request failed!\n");
+		mpt_prt(mpt, "mpt_read_extcfg_page: Get request failed!\n");
 		return (-1);
 	}
 
@@ -2025,6 +2025,7 @@ mpt_read_config_info_ioc(struct mpt_soft
 		mpt_raid_free_mem(mpt);
 		return (EIO);
 	}
+	mpt2host_config_page_ioc3(mpt->ioc_page3);
 	mpt_raid_wakeup(mpt);
 	return (0);
 }
@@ -2760,6 +2761,7 @@ mpt_enable_ioc(struct mpt_softc *mpt, in
 void
 mpt2host_sge_simple_union(SGE_SIMPLE_UNION *sge)
 {
+
 	MPT_2_HOST32(sge, FlagsLength);
 	MPT_2_HOST32(sge, u.Address64.Low);
 	MPT_2_HOST32(sge, u.Address64.High);
@@ -2768,6 +2770,7 @@ mpt2host_sge_simple_union(SGE_SIMPLE_UNI
 void
 mpt2host_iocfacts_reply(MSG_IOC_FACTS_REPLY *rp)
 {
+
 	MPT_2_HOST16(rp, MsgVersion);
 	MPT_2_HOST16(rp, HeaderVersion);
 	MPT_2_HOST32(rp, MsgContext);
@@ -2794,6 +2797,7 @@ mpt2host_iocfacts_reply(MSG_IOC_FACTS_RE
 void
 mpt2host_portfacts_reply(MSG_PORT_FACTS_REPLY *pfp)
 {
+
 	MPT_2_HOST16(pfp, Reserved);
 	MPT_2_HOST16(pfp, Reserved1);
 	MPT_2_HOST32(pfp, MsgContext);
@@ -2809,20 +2813,139 @@ mpt2host_portfacts_reply(MSG_PORT_FACTS_
 	MPT_2_HOST16(pfp, Reserved4);
 	MPT_2_HOST32(pfp, Reserved5);
 }
+
 void
 mpt2host_config_page_ioc2(CONFIG_PAGE_IOC_2 *ioc2)
 {
 	int i;
-	ioc2->CapabilitiesFlags = htole32(ioc2->CapabilitiesFlags);
+
+	MPT_2_HOST32(ioc2, CapabilitiesFlags);
 	for (i = 0; i < MPI_IOC_PAGE_2_RAID_VOLUME_MAX; i++) {
 		MPT_2_HOST16(ioc2, RaidVolume[i].Reserved3);
 	}
 }
 
 void
+mpt2host_config_page_ioc3(CONFIG_PAGE_IOC_3 *ioc3)
+{
+
+	MPT_2_HOST16(ioc3, Reserved2);
+}
+
+void
+mpt2host_config_page_scsi_port_0(CONFIG_PAGE_SCSI_PORT_0 *sp0)
+{
+
+	MPT_2_HOST32(sp0, Capabilities);
+	MPT_2_HOST32(sp0, PhysicalInterface);
+}
+
+void
+mpt2host_config_page_scsi_port_1(CONFIG_PAGE_SCSI_PORT_1 *sp1)
+{
+
+	MPT_2_HOST32(sp1, Configuration);
+	MPT_2_HOST32(sp1, OnBusTimerValue);
+	MPT_2_HOST16(sp1, IDConfig);
+}
+
+void
+host2mpt_config_page_scsi_port_1(CONFIG_PAGE_SCSI_PORT_1 *sp1)
+{
+
+	HOST_2_MPT32(sp1, Configuration);
+	HOST_2_MPT32(sp1, OnBusTimerValue);
+	HOST_2_MPT16(sp1, IDConfig);
+}
+
+void
+mpt2host_config_page_scsi_port_2(CONFIG_PAGE_SCSI_PORT_2 *sp2)
+{
+	int i;
+
+	MPT_2_HOST32(sp2, PortFlags);
+	MPT_2_HOST32(sp2, PortSettings);
+	for (i = 0; i < sizeof(sp2->DeviceSettings) /
+	    sizeof(*sp2->DeviceSettings); i++) {
+		MPT_2_HOST16(sp2, DeviceSettings[i].DeviceFlags);
+	}
+}
+
+void
+mpt2host_config_page_scsi_device_0(CONFIG_PAGE_SCSI_DEVICE_0 *sd0)
+{
+
+	MPT_2_HOST32(sd0, NegotiatedParameters);
+	MPT_2_HOST32(sd0, Information);
+}
+
+void
+mpt2host_config_page_scsi_device_1(CONFIG_PAGE_SCSI_DEVICE_1 *sd1)
+{
+
+	MPT_2_HOST32(sd1, RequestedParameters);
+	MPT_2_HOST32(sd1, Reserved);
+	MPT_2_HOST32(sd1, Configuration);
+}
+
+void
+host2mpt_config_page_scsi_device_1(CONFIG_PAGE_SCSI_DEVICE_1 *sd1)
+{
+
+	HOST_2_MPT32(sd1, RequestedParameters);
+	HOST_2_MPT32(sd1, Reserved);
+	HOST_2_MPT32(sd1, Configuration);
+}
+
+void
+mpt2host_config_page_fc_port_0(CONFIG_PAGE_FC_PORT_0 *fp0)
+{
+
+	MPT_2_HOST32(fp0, Flags);
+	MPT_2_HOST32(fp0, PortIdentifier);
+	MPT_2_HOST32(fp0, WWNN.Low);
+	MPT_2_HOST32(fp0, WWNN.High);
+	MPT_2_HOST32(fp0, WWPN.Low);
+	MPT_2_HOST32(fp0, WWPN.High);
+	MPT_2_HOST32(fp0, SupportedServiceClass);
+	MPT_2_HOST32(fp0, SupportedSpeeds);
+	MPT_2_HOST32(fp0, CurrentSpeed);
+	MPT_2_HOST32(fp0, MaxFrameSize);
+	MPT_2_HOST32(fp0, FabricWWNN.Low);
+	MPT_2_HOST32(fp0, FabricWWNN.High);
+	MPT_2_HOST32(fp0, FabricWWPN.Low);
+	MPT_2_HOST32(fp0, FabricWWPN.High);
+	MPT_2_HOST32(fp0, DiscoveredPortsCount);
+	MPT_2_HOST32(fp0, MaxInitiators);
+}
+
+void
+mpt2host_config_page_fc_port_1(CONFIG_PAGE_FC_PORT_1 *fp1)
+{
+
+	MPT_2_HOST32(fp1, Flags);
+	MPT_2_HOST32(fp1, NoSEEPROMWWNN.Low);
+	MPT_2_HOST32(fp1, NoSEEPROMWWNN.High);
+	MPT_2_HOST32(fp1, NoSEEPROMWWPN.Low);
+	MPT_2_HOST32(fp1, NoSEEPROMWWPN.High);
+}
+
+void
+host2mpt_config_page_fc_port_1(CONFIG_PAGE_FC_PORT_1 *fp1)
+{
+
+	HOST_2_MPT32(fp1, Flags);
+	HOST_2_MPT32(fp1, NoSEEPROMWWNN.Low);
+	HOST_2_MPT32(fp1, NoSEEPROMWWNN.High);
+	HOST_2_MPT32(fp1, NoSEEPROMWWPN.Low);
+	HOST_2_MPT32(fp1, NoSEEPROMWWPN.High);
+}
+
+void
 mpt2host_config_page_raid_vol_0(CONFIG_PAGE_RAID_VOL_0 *volp)
 {
 	int i;
+
 	MPT_2_HOST16(volp, VolumeStatus.Reserved);
 	MPT_2_HOST16(volp, VolumeSettings.Settings);
 	MPT_2_HOST32(volp, MaxLBA);
@@ -2836,8 +2959,21 @@ mpt2host_config_page_raid_vol_0(CONFIG_P
 }
 
 void
+mpt2host_config_page_raid_phys_disk_0(CONFIG_PAGE_RAID_PHYS_DISK_0 *rpd0)
+{
+
+	MPT_2_HOST32(rpd0, Reserved1);
+	MPT_2_HOST16(rpd0, PhysDiskStatus.Reserved);
+	MPT_2_HOST32(rpd0, MaxLBA);
+	MPT_2_HOST16(rpd0, ErrorData.Reserved);
+	MPT_2_HOST16(rpd0, ErrorData.ErrorCount);
+	MPT_2_HOST16(rpd0, ErrorData.SmartCount);
+}
+
+void
 mpt2host_mpi_raid_vol_indicator(MPI_RAID_VOL_INDICATOR *vi)
 {
+
 	MPT_2_HOST16(vi, TotalBlocks.High);
 	MPT_2_HOST16(vi, TotalBlocks.Low);
 	MPT_2_HOST16(vi, BlocksRemaining.High);

Modified: projects/jbuild/sys/dev/mpt/mpt.h
==============================================================================
--- projects/jbuild/sys/dev/mpt/mpt.h	Sat Feb 28 17:57:21 2009	(r189183)
+++ projects/jbuild/sys/dev/mpt/mpt.h	Sat Feb 28 17:57:45 2009	(r189184)
@@ -317,14 +317,39 @@ void mpt2host_sge_simple_union(SGE_SIMPL
 void mpt2host_iocfacts_reply(MSG_IOC_FACTS_REPLY *);
 void mpt2host_portfacts_reply(MSG_PORT_FACTS_REPLY *);
 void mpt2host_config_page_ioc2(CONFIG_PAGE_IOC_2 *);
+void mpt2host_config_page_ioc3(CONFIG_PAGE_IOC_3 *);
+void mpt2host_config_page_scsi_port_0(CONFIG_PAGE_SCSI_PORT_0 *);
+void mpt2host_config_page_scsi_port_1(CONFIG_PAGE_SCSI_PORT_1 *);
+void host2mpt_config_page_scsi_port_1(CONFIG_PAGE_SCSI_PORT_1 *);
+void mpt2host_config_page_scsi_port_2(CONFIG_PAGE_SCSI_PORT_2 *);
+void mpt2host_config_page_scsi_device_0(CONFIG_PAGE_SCSI_DEVICE_0 *);
+void mpt2host_config_page_scsi_device_1(CONFIG_PAGE_SCSI_DEVICE_1 *);
+void host2mpt_config_page_scsi_device_1(CONFIG_PAGE_SCSI_DEVICE_1 *);
+void mpt2host_config_page_fc_port_0(CONFIG_PAGE_FC_PORT_0 *);
+void mpt2host_config_page_fc_port_1(CONFIG_PAGE_FC_PORT_1 *);
+void host2mpt_config_page_fc_port_1(CONFIG_PAGE_FC_PORT_1 *);
 void mpt2host_config_page_raid_vol_0(CONFIG_PAGE_RAID_VOL_0 *);
+void mpt2host_config_page_raid_phys_disk_0(CONFIG_PAGE_RAID_PHYS_DISK_0 *);
 void mpt2host_mpi_raid_vol_indicator(MPI_RAID_VOL_INDICATOR *);
 #else
 #define	mpt2host_sge_simple_union(x)		do { ; } while (0)
 #define	mpt2host_iocfacts_reply(x)		do { ; } while (0)
 #define	mpt2host_portfacts_reply(x)		do { ; } while (0)
 #define	mpt2host_config_page_ioc2(x)		do { ; } while (0)
+#define	mpt2host_config_page_ioc3(x)		do { ; } while (0)
+#define	mpt2host_config_page_scsi_port_0(x)	do { ; } while (0)
+#define	mpt2host_config_page_scsi_port_1(x)	do { ; } while (0)
+#define	host2mpt_config_page_scsi_port_1(x)	do { ; } while (0)
+#define	mpt2host_config_page_scsi_port_2(x)	do { ; } while (0)
+#define	mpt2host_config_page_scsi_device_0(x)	do { ; } while (0)
+#define	mpt2host_config_page_scsi_device_1(x)	do { ; } while (0)
+#define	host2mpt_config_page_scsi_device_1(x)	do { ; } while (0)
+#define	mpt2host_config_page_fc_port_0(x)	do { ; } while (0)
+#define	mpt2host_config_page_fc_port_1(x)	do { ; } while (0)
+#define	host2mpt_config_page_fc_port_1(x)	do { ; } while (0)
 #define	mpt2host_config_page_raid_vol_0(x)	do { ; } while (0)
+#define	mpt2host_config_page_raid_phys_disk_0(x)			\
+	do { ; } while (0)
 #define	mpt2host_mpi_raid_vol_indicator(x)	do { ; } while (0)
 #endif
 

Modified: projects/jbuild/sys/dev/mpt/mpt_cam.c
==============================================================================
--- projects/jbuild/sys/dev/mpt/mpt_cam.c	Sat Feb 28 17:57:21 2009	(r189183)
+++ projects/jbuild/sys/dev/mpt/mpt_cam.c	Sat Feb 28 17:57:45 2009	(r189184)
@@ -437,6 +437,7 @@ mpt_read_config_info_fc(struct mpt_softc
 		mpt_prt(mpt, "failed to read FC Port Page 0\n");
 		return (-1);
 	}
+	mpt2host_config_page_fc_port_0(&mpt->mpt_fcport_page0);
 
 	mpt->mpt_fcport_speed = mpt->mpt_fcport_page0.CurrentSpeed;
 
@@ -527,13 +528,14 @@ mpt_set_initial_config_fc(struct mpt_sof
 		mpt_prt(mpt, "failed to read FC page 1\n");
 		return (mpt_fc_reset_link(mpt, 1));
 	}
+	mpt2host_config_page_fc_port_1(&fc);
 
 	/*
 	 * Check our flags to make sure we support the role we want.
 	 */
 	doit = 0;
 	role = 0;
-	fl = le32toh(fc.Flags);;
+	fl = fc.Flags;
 
 	if (fl & MPI_FCPORTPAGE1_FLAGS_PROT_FCP_INIT) {
 		role |= MPT_ROLE_INITIATOR;
@@ -587,7 +589,8 @@ mpt_set_initial_config_fc(struct mpt_sof
 	}
 
 	if (doit) {
-		fc.Flags = htole32(fl);
+		fc.Flags = fl;
+		host2mpt_config_page_fc_port_1(&fc);
 		r = mpt_write_cfg_page(mpt,
 		    MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM, 0, &fc.Header,
 		    sizeof(fc), FALSE, 5000);
@@ -982,6 +985,7 @@ mpt_read_config_info_spi(struct mpt_soft
 	if (rv) {
 		mpt_prt(mpt, "failed to read SPI Port Page 0\n");
 	} else {
+		mpt2host_config_page_scsi_port_0(&mpt->mpt_port_page0);
 		mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
 		    "SPI Port Page 0: Capabilities %x PhysicalInterface %x\n",
 		    mpt->mpt_port_page0.Capabilities,
@@ -993,6 +997,7 @@ mpt_read_config_info_spi(struct mpt_soft
 	if (rv) {
 		mpt_prt(mpt, "failed to read SPI Port Page 1\n");
 	} else {
+		mpt2host_config_page_scsi_port_1(&mpt->mpt_port_page1);
 		mpt_lprt(mpt, MPT_PRT_DEBUG,
 		    "SPI Port Page 1: Configuration %x OnBusTimerValue %x\n",
 		    mpt->mpt_port_page1.Configuration,
@@ -1008,6 +1013,7 @@ mpt_read_config_info_spi(struct mpt_soft
 		    "Port Page 2: Flags %x Settings %x\n",
 		    mpt->mpt_port_page2.PortFlags,
 		    mpt->mpt_port_page2.PortSettings);
+		mpt2host_config_page_scsi_port_2(&mpt->mpt_port_page2);
 		for (i = 0; i < 16; i++) {
 			mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
 		  	    " Port Page 2 Tgt %d: timo %x SF %x Flags %x\n",
@@ -1026,6 +1032,7 @@ mpt_read_config_info_spi(struct mpt_soft
 			    "cannot read SPI Target %d Device Page 0\n", i);
 			continue;
 		}
+		mpt2host_config_page_scsi_device_0(&mpt->mpt_dev_page0[i]);
 		mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
 		    "target %d page 0: Negotiated Params %x Information %x\n",
 		    i, mpt->mpt_dev_page0[i].NegotiatedParameters,
@@ -1039,6 +1046,7 @@ mpt_read_config_info_spi(struct mpt_soft
 			    "cannot read SPI Target %d Device Page 1\n", i);
 			continue;
 		}
+		mpt2host_config_page_scsi_device_1(&mpt->mpt_dev_page1[i]);
 		mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
 		    "target %d page 1: Requested Params %x Configuration %x\n",
 		    i, mpt->mpt_dev_page1[i].RequestedParameters,
@@ -1068,6 +1076,7 @@ mpt_set_initial_config_spi(struct mpt_so
 		    "be %x\n", mpt->mpt_port_page1.Configuration, pp1val);
 		tmp = mpt->mpt_port_page1;
 		tmp.Configuration = pp1val;
+		host2mpt_config_page_scsi_port_1(&tmp);
 		error = mpt_write_cur_cfg_page(mpt, 0,
 		    &tmp.Header, sizeof(tmp), FALSE, 5000);
 		if (error) {
@@ -1078,6 +1087,7 @@ mpt_set_initial_config_spi(struct mpt_so
 		if (error) {
 			return (-1);
 		}
+		mpt2host_config_page_scsi_port_1(&tmp);
 		if (tmp.Configuration != pp1val) {
 			mpt_prt(mpt,
 			    "failed to reset SPI Port Page 1 Config value\n");
@@ -1432,7 +1442,8 @@ bad:
 		memset(se, 0, sizeof (*se));
 		se->Address.Low = htole32(dm_segs->ds_addr & 0xffffffff);
 		if (sizeof(bus_addr_t) > 4) {
-			se->Address.High = ((uint64_t) dm_segs->ds_addr) >> 32;
+			se->Address.High =
+			    htole32(((uint64_t)dm_segs->ds_addr) >> 32);
 		}
 		MPI_pSGE_SET_LENGTH(se, dm_segs->ds_len);
 		tf = flags;
@@ -1507,9 +1518,9 @@ bad:
 		chain_list_addr += cur_off;
 		if (sizeof (bus_addr_t) > 4) {
 			ce->Address.High =
-			    htole32((uint32_t) ((uint64_t)chain_list_addr >> 32));
+			    htole32(((uint64_t)chain_list_addr) >> 32);
 		}
-		ce->Address.Low = htole32((uint32_t) chain_list_addr);
+		ce->Address.Low = htole32(chain_list_addr & 0xffffffff);
 		ce->Flags = MPI_SGE_FLAGS_CHAIN_ELEMENT |
 			    MPI_SGE_FLAGS_64_BIT_ADDRESSING;
 
@@ -1536,6 +1547,7 @@ bad:
 			ce->Length = (this_seg_lim - seg) *
 			    sizeof (SGE_SIMPLE64);
 		}
+		ce->Length = htole16(ce->Length);
 
 		/*
 		 * Fill in the chain list SGE elements with our segment data.
@@ -1546,7 +1558,8 @@ bad:
 		 */
 		while (seg < this_seg_lim) {
 			memset(se, 0, sizeof (*se));
-			se->Address.Low = htole32(dm_segs->ds_addr);
+			se->Address.Low = htole32(dm_segs->ds_addr &
+			    0xffffffff);
 			if (sizeof (bus_addr_t) > 4) {
 				se->Address.High =
 				    htole32(((uint64_t)dm_segs->ds_addr) >> 32);
@@ -1830,7 +1843,7 @@ bad:
 		uint32_t tf;
 
 		memset(se, 0,sizeof (*se));
-		se->Address = dm_segs->ds_addr;
+		se->Address = htole32(dm_segs->ds_addr);
 
 
 
@@ -1908,7 +1921,7 @@ bad:
 
 
 
-		ce->Address = chain_list_addr;
+		ce->Address = htole32(chain_list_addr);
 		ce->Flags = MPI_SGE_FLAGS_CHAIN_ELEMENT;
 
 
@@ -1935,6 +1948,7 @@ bad:
 			ce->Length = (this_seg_lim - seg) *
 			    sizeof (SGE_SIMPLE32);
 		}
+		ce->Length = htole16(ce->Length);
 
 		/*
 		 * Fill in the chain list SGE elements with our segment data.
@@ -1945,7 +1959,7 @@ bad:
 		 */
 		while (seg < this_seg_lim) {
 			memset(se, 0, sizeof (*se));
-			se->Address = dm_segs->ds_addr;
+			se->Address = htole32(dm_segs->ds_addr);
 
 
 
@@ -2193,6 +2207,7 @@ mpt_start(struct cam_sim *sim, union ccb
 			mpt_req->Control |= MPI_SCSIIO_CONTROL_NO_DISCONNECT;
 		}
 	}
+	mpt_req->Control = htole32(mpt_req->Control);
 
 	/* Copy the scsi command block into place */
 	if ((ccb->ccb_h.flags & CAM_CDB_POINTER) != 0) {
@@ -2317,7 +2332,7 @@ mpt_bus_reset(struct mpt_softc *mpt, tar
 	error = mpt_wait_req(mpt, mpt->tmf_req, REQ_STATE_DONE,
 	    REQ_STATE_DONE, sleep_ok, 5000);
 
-	status = mpt->tmf_req->IOCStatus;
+	status = le16toh(mpt->tmf_req->IOCStatus);
 	response = mpt->tmf_req->ResponseCode;
 	mpt->tmf_req->state = REQ_STATE_FREE;
 
@@ -2524,10 +2539,11 @@ mpt_cam_event(struct mpt_softc *mpt, req
 		struct cam_sim *sim;
 		struct cam_path *tmppath;
 		struct ccb_relsim crs;
-		PTR_EVENT_DATA_QUEUE_FULL pqf =
-		    (PTR_EVENT_DATA_QUEUE_FULL) msg->Data;
+		PTR_EVENT_DATA_QUEUE_FULL pqf;
 		lun_id_t lun_id;
 
+		pqf = (PTR_EVENT_DATA_QUEUE_FULL)msg->Data;
+		pqf->CurrentDepth = le16toh(pqf->CurrentDepth);
 		mpt_prt(mpt, "QUEUE FULL EVENT: Bus 0x%02x Target 0x%02x Depth "
 		    "%d\n", pqf->Bus, pqf->TargetID, pqf->CurrentDepth);
 		if (mpt->phydisk_sim) {
@@ -3086,9 +3102,10 @@ mpt_scsi_reply_frame_handler(struct mpt_
 	 && (ccb->ccb_h.flags & (CAM_SENSE_PHYS | CAM_SENSE_PTR)) == 0) {
 		ccb->ccb_h.status |= CAM_AUTOSNS_VALID;
 		ccb->csio.sense_resid =
-		    ccb->csio.sense_len - scsi_io_reply->SenseCount;
+		    ccb->csio.sense_len - le32toh(scsi_io_reply->SenseCount);
 		bcopy(req->sense_vbuf, &ccb->csio.sense_data,
-		      min(ccb->csio.sense_len, scsi_io_reply->SenseCount));
+		    min(ccb->csio.sense_len,
+		    le32toh(scsi_io_reply->SenseCount)));
 	}
 
 	if ((sstate & MPI_SCSI_STATE_QUEUE_TAG_REJECTED) != 0) {
@@ -3776,6 +3793,8 @@ mpt_get_spi_settings(struct mpt_softc *m
 			mpt_prt(mpt, "can't get tgt %d config page 0\n", tgt);
 			return (rv);
 		}
+		mpt2host_config_page_scsi_device_0(&tmp);
+		
 		MPTLOCK_2_CAMLOCK(mpt);
 		mpt_lprt(mpt, MPT_PRT_DEBUG,
 		    "mpt_get_spi_settings[%d]: current NP %x Info %x\n", tgt,
@@ -3905,6 +3924,7 @@ mpt_update_spi_config(struct mpt_softc *
 	    "mpt_update_spi_config[%d].page1: Requested Params 0x%08x\n",
 	    tgt, mpt->mpt_dev_page1[tgt].RequestedParameters);
 	tmp = mpt->mpt_dev_page1[tgt];
+	host2mpt_config_page_scsi_device_1(&tmp);
 	rv = mpt_write_cur_cfg_page(mpt, tgt,
 	    &tmp.Header, sizeof(tmp), FALSE, 5000);
 	if (rv) {
@@ -4156,7 +4176,7 @@ mpt_recover_commands(struct mpt_softc *m
 		error = mpt_wait_req(mpt, mpt->tmf_req, REQ_STATE_DONE,
 		    REQ_STATE_DONE, TRUE, 500);
 
-		status = mpt->tmf_req->IOCStatus;
+		status = le16toh(mpt->tmf_req->IOCStatus);
 		response = mpt->tmf_req->ResponseCode;
 		mpt->tmf_req->state = REQ_STATE_FREE;
 

Modified: projects/jbuild/sys/dev/mpt/mpt_raid.c
==============================================================================
--- projects/jbuild/sys/dev/mpt/mpt_raid.c	Sat Feb 28 17:57:21 2009	(r189183)
+++ projects/jbuild/sys/dev/mpt/mpt_raid.c	Sat Feb 28 17:57:45 2009	(r189184)
@@ -564,7 +564,7 @@ mpt_raid_reply_frame_handler(struct mpt_
 	action_result = REQ_TO_RAID_ACTION_RESULT(req);
 	memcpy(&action_result->action_data, &reply->ActionData,
 	    sizeof(action_result->action_data));
-	action_result->action_status = reply->ActionStatus;
+	action_result->action_status = le16toh(reply->ActionStatus);
 	return (TRUE);
 }
 
@@ -583,7 +583,7 @@ mpt_issue_raid_req(struct mpt_softc *mpt
 	rap = req->req_vbuf;
 	memset(rap, 0, sizeof *rap);
 	rap->Action = Action;
-	rap->ActionDataWord = ActionDataWord;
+	rap->ActionDataWord = htole32(ActionDataWord);
 	rap->Function = MPI_FUNCTION_RAID_ACTION;
 	rap->VolumeID = vol->config_page->VolumeID;
 	rap->VolumeBus = vol->config_page->VolumeBus;
@@ -592,12 +592,13 @@ mpt_issue_raid_req(struct mpt_softc *mpt
 	else
 		rap->PhysDiskNum = 0xFF;
 	se = (SGE_SIMPLE32 *)&rap->ActionDataSGE;
-	se->Address = addr;
+	se->Address = htole32(addr);
 	MPI_pSGE_SET_LENGTH(se, len);
 	MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT |
 	    MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
 	    MPI_SGE_FLAGS_END_OF_LIST |
 	    write ? MPI_SGE_FLAGS_HOST_TO_IOC : MPI_SGE_FLAGS_IOC_TO_HOST));
+	se->FlagsLength = htole32(se->FlagsLength);
 	rap->MsgContext = htole32(req->index | raid_handler_id);
 
 	mpt_check_doorbell(mpt);
@@ -1226,6 +1227,7 @@ mpt_refresh_raid_disk(struct mpt_softc *
 		mpt_prt(mpt, "mpt_refresh_raid_disk: "
 			"Failed to read RAID Disk Page(%d)\n",
 		 	ioc_disk->PhysDiskNum);
+	mpt2host_config_page_raid_phys_disk_0(&mpt_disk->config_page);
 }
 
 static void
@@ -1354,6 +1356,7 @@ mpt_refresh_raid_data(struct mpt_softc *
 		    "mpt_refresh_raid_data: Failed to read IOC Page 3\n");
 		return (-1);
 	}
+	mpt2host_config_page_ioc3(mpt->ioc_page3);
 
 	ioc_disk = mpt->ioc_page3->PhysDisk;
 	ioc_last_disk = ioc_disk + mpt->ioc_page3->NumPhysDisks;
@@ -1384,6 +1387,7 @@ mpt_refresh_raid_data(struct mpt_softc *
 			"Failed to read IOC Page 2\n");
 		return (-1);
 	}
+	mpt2host_config_page_ioc2(mpt->ioc_page2);
 
 	ioc_vol = mpt->ioc_page2->RaidVolume;
 	ioc_last_vol = ioc_vol + mpt->ioc_page2->NumActiveVolumes;

Modified: projects/jbuild/sys/dev/mpt/mpt_user.c
==============================================================================
--- projects/jbuild/sys/dev/mpt/mpt_user.c	Sat Feb 28 17:57:21 2009	(r189183)
+++ projects/jbuild/sys/dev/mpt/mpt_user.c	Sat Feb 28 17:57:45 2009	(r189184)
@@ -256,7 +256,7 @@ mpt_user_read_cfg_header(struct mpt_soft
 	params.PageLength = 0;
 	params.PageNumber = page_req->header.PageNumber;
 	params.PageType = page_req->header.PageType;
-	params.PageAddress = page_req->page_address;
+	params.PageAddress = le32toh(page_req->page_address);
 	error = mpt_issue_cfg_req(mpt, req, &params, /*addr*/0, /*len*/0,
 				  TRUE, 5000);
 	if (error != 0) {
@@ -270,7 +270,7 @@ mpt_user_read_cfg_header(struct mpt_soft
 		return (ETIMEDOUT);
 	}
 
-	page_req->ioc_status = req->IOCStatus;
+	page_req->ioc_status = htole16(req->IOCStatus);
 	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
 		cfgp = req->req_vbuf;
 		bcopy(&cfgp->Header, &page_req->header,
@@ -301,15 +301,15 @@ mpt_user_read_cfg_page(struct mpt_softc 
 	params.PageLength = hdr->PageLength;
 	params.PageNumber = hdr->PageNumber;
 	params.PageType = hdr->PageType & MPI_CONFIG_PAGETYPE_MASK;
-	params.PageAddress = page_req->page_address;
+	params.PageAddress = le32toh(page_req->page_address);
 	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
-				  page_req->len, TRUE, 5000);
+	    le32toh(page_req->len), TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_user_read_cfg_page timed out\n");
 		return (ETIMEDOUT);
 	}
 
-	page_req->ioc_status = req->IOCStatus;
+	page_req->ioc_status = htole16(req->IOCStatus);
 	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
 		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
 		    BUS_DMASYNC_POSTREAD);
@@ -337,7 +337,7 @@ mpt_user_read_extcfg_header(struct mpt_s
 	params.PageLength = 0;
 	params.PageNumber = ext_page_req->header.PageNumber;
 	params.PageType = MPI_CONFIG_PAGETYPE_EXTENDED;
-	params.PageAddress = ext_page_req->page_address;
+	params.PageAddress = le32toh(ext_page_req->page_address);
 	params.ExtPageType = ext_page_req->header.ExtPageType;
 	params.ExtPageLength = 0;
 	error = mpt_issue_cfg_req(mpt, req, &params, /*addr*/0, /*len*/0,
@@ -353,7 +353,7 @@ mpt_user_read_extcfg_header(struct mpt_s
 		return (ETIMEDOUT);
 	}
 
-	ext_page_req->ioc_status = req->IOCStatus;
+	ext_page_req->ioc_status = htole16(req->IOCStatus);
 	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
 		cfgp = req->req_vbuf;
 		ext_page_req->header.PageVersion = cfgp->Header.PageVersion;
@@ -387,17 +387,17 @@ mpt_user_read_extcfg_page(struct mpt_sof
 	params.PageLength = 0;
 	params.PageNumber = hdr->PageNumber;
 	params.PageType = MPI_CONFIG_PAGETYPE_EXTENDED;
-	params.PageAddress = ext_page_req->page_address;
+	params.PageAddress = le32toh(ext_page_req->page_address);
 	params.ExtPageType = hdr->ExtPageType;
 	params.ExtPageLength = hdr->ExtPageLength;
 	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
-				  ext_page_req->len, TRUE, 5000);
+	    le32toh(ext_page_req->len), TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_user_read_extcfg_page timed out\n");
 		return (ETIMEDOUT);
 	}
 
-	ext_page_req->ioc_status = req->IOCStatus;
+	ext_page_req->ioc_status = htole16(req->IOCStatus);
 	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
 		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
 		    BUS_DMASYNC_POSTREAD);
@@ -446,7 +446,7 @@ mpt_user_write_cfg_page(struct mpt_softc
 	params.PageVersion = hdr->PageVersion;
 	params.PageLength = hdr->PageLength;
 	params.PageNumber = hdr->PageNumber;
-	params.PageAddress = page_req->page_address;
+	params.PageAddress = le32toh(page_req->page_address);
 #if	0
 	/* Restore stripped out attributes */
 	hdr->PageType |= hdr_attr;
@@ -455,13 +455,13 @@ mpt_user_write_cfg_page(struct mpt_softc
 	params.PageType = hdr->PageType;
 #endif
 	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
-				  page_req->len, TRUE, 5000);
+	    le32toh(page_req->len), TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_write_cfg_page timed out\n");
 		return (ETIMEDOUT);
 	}
 
-	page_req->ioc_status = req->IOCStatus;
+	page_req->ioc_status = htole16(req->IOCStatus);
 	mpt_free_request(mpt, req);
 	return (0);
 }
@@ -536,14 +536,15 @@ mpt_user_raid_action(struct mpt_softc *m
 	if (mpt_page->vaddr != NULL && raid_act->len != 0) {
 		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
 		    BUS_DMASYNC_PREWRITE);
-		se->Address = mpt_page->paddr;
-		MPI_pSGE_SET_LENGTH(se, raid_act->len);
+		se->Address = htole32(mpt_page->paddr);
+		MPI_pSGE_SET_LENGTH(se, le32toh(raid_act->len));
 		MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT |
 		    MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
 		    MPI_SGE_FLAGS_END_OF_LIST |
 		    raid_act->write ? MPI_SGE_FLAGS_HOST_TO_IOC :
 		    MPI_SGE_FLAGS_IOC_TO_HOST));
 	}
+	se->FlagsLength = htole32(se->FlagsLength);
 	rap->MsgContext = htole32(req->index | user_handler_id);
 
 	mpt_check_doorbell(mpt);
@@ -559,7 +560,7 @@ mpt_user_raid_action(struct mpt_softc *m
 		return (error);
 	}
 
-	raid_act->ioc_status = req->IOCStatus;
+	raid_act->ioc_status = htole16(req->IOCStatus);
 	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) != MPI_IOCSTATUS_SUCCESS) {
 		mpt_free_request(mpt, req);
 		return (0);


More information about the svn-src-projects mailing list