From a54067cc0efddcbcbd4622bb7301b8b54d8cf228 Mon Sep 17 00:00:00 2001 From: Matt Jacob Date: Sun, 3 Dec 2006 00:28:11 +0000 Subject: [PATCH] Fix a debug message which didn't quite get it right about data direction. Fix things to use the LSI-Logic Fusion Library mask and shift names for offset and sync, no matter how awkward they are, in preference to just plain numbers. --- sys/dev/mpt/mpt.c | 9 +-- sys/dev/mpt/mpt.h | 3 +- sys/dev/mpt/mpt_cam.c | 171 ++++++++++++++++++++++------------------- sys/dev/mpt/mpt_raid.c | 82 ++++++++++++++++---- 4 files changed, 163 insertions(+), 102 deletions(-) diff --git a/sys/dev/mpt/mpt.c b/sys/dev/mpt/mpt.c index 8883edd83eb..48c6baa7d72 100644 --- a/sys/dev/mpt/mpt.c +++ b/sys/dev/mpt/mpt.c @@ -894,7 +894,7 @@ static int mpt_wait_db_int(struct mpt_softc *mpt) { int i; - for (i=0; i < MPT_MAX_WAIT; i++) { + for (i = 0; i < MPT_MAX_WAIT; i++) { if (MPT_DB_INTR(mpt_rd_intr(mpt))) { maxwait_int = i > maxwait_int ? i : maxwait_int; return MPT_OK; @@ -1365,7 +1365,7 @@ mpt_send_handshake_cmd(struct mpt_softc *mpt, size_t len, void *cmd) /* Wait for the chip to notice */ if (mpt_wait_db_int(mpt) != MPT_OK) { - mpt_prt(mpt, "mpt_send_handshake_cmd timeout1\n"); + mpt_prt(mpt, "mpt_send_handshake_cmd: db ignored\n"); return (ETIMEDOUT); } @@ -1373,7 +1373,7 @@ mpt_send_handshake_cmd(struct mpt_softc *mpt, size_t len, void *cmd) mpt_write(mpt, MPT_OFFSET_INTR_STATUS, 0); if (mpt_wait_db_ack(mpt) != MPT_OK) { - mpt_prt(mpt, "mpt_send_handshake_cmd timeout2\n"); + mpt_prt(mpt, "mpt_send_handshake_cmd: db ack timed out\n"); return (ETIMEDOUT); } @@ -1382,8 +1382,7 @@ mpt_send_handshake_cmd(struct mpt_softc *mpt, size_t len, void *cmd) mpt_write(mpt, MPT_OFFSET_DOORBELL, htole32(*data32++)); if (mpt_wait_db_ack(mpt) != MPT_OK) { mpt_prt(mpt, - "mpt_send_handshake_cmd timeout! index = %d\n", - i); + "mpt_send_handshake_cmd: timeout @ index %d\n", i); return (ETIMEDOUT); } } diff --git a/sys/dev/mpt/mpt.h b/sys/dev/mpt/mpt.h index 4671521f128..0c6e6f4a495 100644 --- a/sys/dev/mpt/mpt.h +++ b/sys/dev/mpt/mpt.h @@ -522,10 +522,9 @@ struct mpt_softc { */ uint16_t mpt_global_credits; uint16_t request_frame_size; - uint8_t mpt_max_devices; + uint16_t mpt_max_devices; uint8_t mpt_max_buses; uint8_t ioc_facts_flags; - uint8_t padding0; /* * Port Facts diff --git a/sys/dev/mpt/mpt_cam.c b/sys/dev/mpt/mpt_cam.c index 8f9a721927e..5678f678021 100644 --- a/sys/dev/mpt/mpt_cam.c +++ b/sys/dev/mpt/mpt_cam.c @@ -1879,12 +1879,14 @@ mpt_start(struct cam_sim *sim, union ccb *ccb) * Do a *short* print here if we're set to MPT_PRT_DEBUG */ if (mpt->verbose == MPT_PRT_DEBUG) { + U32 df; mpt_prt(mpt, "mpt_start: %s op 0x%x ", (mpt_req->Function == MPI_FUNCTION_SCSI_IO_REQUEST)? "SCSI_IO_REQUEST" : "SCSI_IO_PASSTHRU", mpt_req->CDB[0]); - if (mpt_req->Control != MPI_SCSIIO_CONTROL_NODATATRANSFER) { + df = mpt_req->Control & MPI_SCSIIO_CONTROL_DATADIRECTION_MASK; + if (df != MPI_SCSIIO_CONTROL_NODATATRANSFER) { mpt_prtc(mpt, "(%s %u byte%s ", - (mpt_req->Control == MPI_SCSIIO_CONTROL_READ)? + (df == MPI_SCSIIO_CONTROL_READ)? "read" : "write", csio->dxfer_len, (csio->dxfer_len == 1)? ")" : "s)"); } @@ -2151,10 +2153,6 @@ mpt_cam_event(struct mpt_softc *mpt, request_t *req, mpt_prt(mpt, "FC Logout Port: %d N_PortID: %02x\n", (data1 >> 8) & 0xff, data0); break; - case MPI_EVENT_EVENT_CHANGE: - mpt_lprt(mpt, MPT_PRT_DEBUG, - "mpt_cam_event: MPI_EVENT_EVENT_CHANGE\n"); - break; case MPI_EVENT_QUEUE_FULL: { struct cam_sim *sim; @@ -2193,18 +2191,11 @@ mpt_cam_event(struct mpt_softc *mpt, request_t *req, CAMLOCK_2_MPTLOCK(mpt); break; } + case MPI_EVENT_EVENT_CHANGE: + case MPI_EVENT_INTEGRATED_RAID: case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE: - { - mpt_lprt(mpt, MPT_PRT_DEBUG, - "mpt_cam_event: SAS_DEVICE_STATUS_CHANGE\n"); - break; - } case MPI_EVENT_SAS_SES: - { - mpt_lprt(mpt, MPT_PRT_DEBUG, - "mpt_cam_event: MPI_EVENT_SAS_SES\n"); break; - } default: mpt_lprt(mpt, MPT_PRT_WARN, "mpt_cam_event: 0x%x\n", msg->Event & 0xFF); @@ -2873,7 +2864,8 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) tgt = ccb->ccb_h.target_id; lun = ccb->ccb_h.target_lun; - if (raid_passthru && ccb->ccb_h.func_code != XPT_PATH_INQ && + if (raid_passthru && + ccb->ccb_h.func_code != XPT_PATH_INQ && ccb->ccb_h.func_code != XPT_RESET_BUS && ccb->ccb_h.func_code != XPT_RESET_DEV) { CAMLOCK_2_MPTLOCK(mpt); @@ -2913,11 +2905,15 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) return; case XPT_RESET_BUS: + if (raid_passthru) { + ccb->ccb_h.status &= ~CAM_SIM_QUEUED; + mpt_set_ccb_status(ccb, CAM_REQ_CMP); + break; + } case XPT_RESET_DEV: - mpt_lprt(mpt, MPT_PRT_DEBUG, - ccb->ccb_h.func_code == XPT_RESET_BUS ? - "XPT_RESET_BUS\n" : "XPT_RESET_DEV\n"); - + xpt_print_path(ccb->ccb_h.path); + printf("reset %s\n", ccb->ccb_h.func_code == XPT_RESET_BUS? + "bus" : "device"); CAMLOCK_2_MPTLOCK(mpt); (void) mpt_bus_reset(mpt, tgt, lun, FALSE); MPTLOCK_2_CAMLOCK(mpt); @@ -2986,6 +2982,17 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) break; } + scsi = &cts->proto_specific.scsi; + spi = &cts->xport_specific.spi; + + /* + * We can be called just to valid transport and proto versions + */ + if (scsi->valid == 0 && spi->valid == 0) { + mpt_set_ccb_status(ccb, CAM_REQ_CMP); + break; + } + /* * Skip attempting settings on RAID volume disks. * Other devices on the bus get the normal treatment. @@ -2993,7 +3000,7 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) if (mpt->phydisk_sim && raid_passthru == 0 && mpt_is_raid_volume(mpt, tgt) != 0) { mpt_lprt(mpt, MPT_PRT_NEGOTIATION, - "skipping transfer settings for RAID volumes\n"); + "no transfer settings for RAID vols\n"); mpt_set_ccb_status(ccb, CAM_REQ_CMP); break; } @@ -3014,9 +3021,6 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) period = 0; offset = 0; - scsi = &cts->proto_specific.scsi; - spi = &cts->xport_specific.spi; - if ((spi->valid & CTS_SPI_VALID_DISC) != 0) { dval |= ((spi->flags & CTS_SPI_FLAGS_DISC_ENB) != 0) ? DP_DISC_ENABLE : DP_DISC_DISABL; @@ -3074,10 +3078,9 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) mpt_set_ccb_status(ccb, CAM_REQ_CMP); break; } - mpt_lprt(mpt, MPT_PRT_NEGOTIATION, - "Set Settings[%d]: 0x%x period 0x%x offset %d\n", tgt, - dval, period , offset); + "set [%d]: 0x%x period 0x%x offset %d\n", + tgt, dval, period, offset); if (mpt_update_spi_config(mpt, tgt)) { mpt_set_ccb_status(ccb, CAM_REQ_CMP_ERR); } else { @@ -3088,29 +3091,24 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) } case XPT_GET_TRAN_SETTINGS: cts = &ccb->cts; + cts->protocol = PROTO_SCSI; if (mpt->is_fc) { struct ccb_trans_settings_fc *fc = &cts->xport_specific.fc; - - cts->protocol = PROTO_SCSI; cts->protocol_version = SCSI_REV_SPC; cts->transport = XPORT_FC; cts->transport_version = 0; - fc->valid = CTS_FC_VALID_SPEED; - fc->bitrate = 100000; /* XXX: Need for 2Gb/s */ - /* XXX: need a port database for each target */ + fc->bitrate = 100000; } else if (mpt->is_sas) { struct ccb_trans_settings_sas *sas = &cts->xport_specific.sas; - cts->protocol = PROTO_SCSI; cts->protocol_version = SCSI_REV_SPC2; cts->transport = XPORT_SAS; cts->transport_version = 0; - sas->valid = CTS_SAS_VALID_SPEED; - sas->bitrate = 300000; /* XXX: Default 3Gbps */ + sas->bitrate = 300000; } else if (mpt_get_spi_settings(mpt, cts) != 0) { mpt_set_ccb_status(ccb, CAM_REQ_CMP_ERR); break; @@ -3141,63 +3139,61 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) cpi->hba_eng_cnt = 0; cpi->max_target = mpt->mpt_max_devices - 1; /* - * XXX: FC cards report MAX_DEVICES of 512- but we - * XXX: seem to hang when going higher than 255. + * FC cards report MAX_DEVICES of 512, but + * the MSG_SCSI_IO_REQUEST target id field + * is only 8 bits. Until we fix the driver + * to support 'channels' for bus overflow, + * just limit it. */ if (cpi->max_target > 255) { cpi->max_target = 255; } + /* - * XXX: VMware ESX reports > 16 devices and then dies - * XXX: when we probe. + * VMware ESX reports > 16 devices and then dies when we probe. */ if (mpt->is_spi && cpi->max_target > 15) { cpi->max_target = 15; } cpi->max_lun = 7; cpi->initiator_id = mpt->mpt_ini_id; - cpi->bus_id = cam_sim_bus(sim); + /* - * Actual speed for each device varies. - * * The base speed is the speed of the underlying connection. - * This is strictly determined for SPI (async, narrow). If - * link is up for Fibre Channel, then speed can be gotten - * from that. */ + cpi->protocol = PROTO_SCSI; if (mpt->is_fc) { cpi->hba_misc = PIM_NOBUSRESET; cpi->base_transfer_speed = 100000; cpi->hba_inquiry = PI_TAG_ABLE; - cpi->transport = XPORT_FC; - cpi->transport_version = 0; + cpi->transport = XPORT_FC; + cpi->transport_version = 0; + cpi->protocol_version = SCSI_REV_SPC; } else if (mpt->is_sas) { cpi->hba_misc = PIM_NOBUSRESET; cpi->base_transfer_speed = 300000; cpi->hba_inquiry = PI_TAG_ABLE; - cpi->transport = XPORT_SAS; - cpi->transport_version = 0; + cpi->transport = XPORT_SAS; + cpi->transport_version = 0; + cpi->protocol_version = SCSI_REV_SPC2; } else { cpi->hba_misc = PIM_SEQSCAN; cpi->base_transfer_speed = 3300; cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE|PI_WIDE_16; - cpi->transport = XPORT_SPI; - cpi->transport_version = 2; + cpi->transport = XPORT_SPI; + cpi->transport_version = 2; + cpi->protocol_version = SCSI_REV_2; } - cpi->protocol = PROTO_SCSI; - cpi->protocol_version = SCSI_REV_2; /* * We give our fake RAID passhtru bus a width that is MaxVolumes - * wide, restrict it to one lun and have it *not* be a bus - * that can have a SCSI bus reset. + * wide and restrict it to one lun. */ if (raid_passthru) { cpi->max_target = mpt->ioc_page2->MaxPhysDisks - 1; cpi->initiator_id = cpi->max_target + 1; cpi->max_lun = 0; - cpi->hba_misc |= PIM_NOBUSRESET; } if ((mpt->role & MPT_ROLE_INITIATOR) == 0) { @@ -3297,7 +3293,14 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts) uint8_t dval, pval, oval; int rv; - if (xpt_path_sim(cts->ccb_h.path) == mpt->phydisk_sim) { + cts->protocol = PROTO_SCSI; + cts->protocol_version = SCSI_REV_2; + cts->transport = XPORT_SPI; + cts->transport_version = 2; + + if (cts->type == CTS_TYPE_USER_SETTINGS) { + tgt = cts->ccb_h.target_id; + } else if (xpt_path_sim(cts->ccb_h.path) == mpt->phydisk_sim) { if (mpt_map_physdisk(mpt, (union ccb *)cts, &tgt)) { return (-1); } @@ -3306,8 +3309,10 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts) } /* - * XXX: We aren't looking Port Page 2 BIOS settings here. - * XXX: For goal settings, we pick the max from port page 0 + * We aren't looking at Port Page 2 BIOS settings here- + * sometimes these have been known to be bogus XXX. + * + * For user settings, we pick the max from port page 0 * * For current settings we read the current settings out from * device page 0 for that target. @@ -3326,40 +3331,43 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts) return (rv); } MPTLOCK_2_CAMLOCK(mpt); + mpt_lprt(mpt, MPT_PRT_DEBUG, + "mpt_get_spi_settings[%d]: current NP %x Info %x\n", tgt, + tmp.NegotiatedParameters, tmp.Information); dval |= (tmp.NegotiatedParameters & MPI_SCSIDEVPAGE0_NP_WIDE) ? DP_WIDE : DP_NARROW; dval |= (mpt->mpt_disc_enable & (1 << tgt)) ? DP_DISC_ENABLE : DP_DISC_DISABL; dval |= (mpt->mpt_tag_enable & (1 << tgt)) ? DP_TQING_ENABLE : DP_TQING_DISABL; - oval = (tmp.NegotiatedParameters >> 16) & 0xff; - pval = (tmp.NegotiatedParameters >> 8) & 0xff; + oval = tmp.NegotiatedParameters; + oval &= MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK; + oval >>= MPI_SCSIDEVPAGE0_NP_SHIFT_SYNC_OFFSET; + pval = tmp.NegotiatedParameters; + pval &= MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK; + pval >>= MPI_SCSIDEVPAGE0_NP_SHIFT_SYNC_PERIOD; mpt->mpt_dev_page0[tgt] = tmp; } else { - /* - * XXX: Just make theoretical maximum. - */ dval = DP_WIDE|DP_DISC_ENABLE|DP_TQING_ENABLE; - oval = (mpt->mpt_port_page0.Capabilities >> 16) & 0xff; - pval = (mpt->mpt_port_page0.Capabilities >> 8) & 0xff; + oval = mpt->mpt_port_page0.Capabilities; + oval = MPI_SCSIPORTPAGE0_CAP_GET_MAX_SYNC_OFFSET(oval); + pval = mpt->mpt_port_page0.Capabilities; + pval = MPI_SCSIPORTPAGE0_CAP_GET_MIN_SYNC_PERIOD(pval); } - cts->protocol = PROTO_SCSI; - cts->protocol_version = SCSI_REV_2; - cts->transport = XPORT_SPI; - cts->transport_version = 2; - scsi->flags &= ~CTS_SCSI_FLAGS_TAG_ENB; - spi->flags &= ~CTS_SPI_FLAGS_DISC_ENB; + spi->valid = 0; + scsi->valid = 0; + spi->flags = 0; + scsi->flags = 0; if (dval & DP_DISC_ENABLE) { spi->flags |= CTS_SPI_FLAGS_DISC_ENB; } - if (dval & DP_TQING_ENABLE) { - scsi->flags |= CTS_SCSI_FLAGS_TAG_ENB; - } - if (oval && pval) { + if (oval) { spi->sync_offset = oval; - spi->sync_period = pval; spi->valid |= CTS_SPI_VALID_SYNC_OFFSET; + } + if (pval) { + spi->sync_period = pval; spi->valid |= CTS_SPI_VALID_SYNC_RATE; } spi->valid |= CTS_SPI_VALID_BUS_WIDTH; @@ -3368,6 +3376,9 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts) } else { spi->bus_width = MSG_EXT_WDTR_BUS_8_BIT; } + if (dval & DP_TQING_ENABLE) { + scsi->flags |= CTS_SCSI_FLAGS_TAG_ENB; + } if (cts->ccb_h.target_lun != CAM_LUN_WILDCARD) { scsi->valid = CTS_SCSI_VALID_TQ; spi->valid |= CTS_SPI_VALID_DISC; @@ -3375,8 +3386,10 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts) scsi->valid = 0; } mpt_lprt(mpt, MPT_PRT_NEGOTIATION, - "mpt_get_spi_settings[%d]: %s 0x%x period 0x%x offset %d\n", tgt, - IS_CURRENT_SETTINGS(cts)? "ACTIVE" : "NVRAM ", dval, pval, oval); + "mpt_get_spi_settings[%d]:%s per=%x off=%d SPF=%x SPV=%x SCF=%x SCV" + "=%x bw=%x\n", + tgt, IS_CURRENT_SETTINGS(cts)? "ACTIVE" : "NVRAM ", pval, oval, + spi->flags, spi->valid, scsi->flags, scsi->valid, spi->bus_width); return (0); } diff --git a/sys/dev/mpt/mpt_raid.c b/sys/dev/mpt/mpt_raid.c index d51a0eef815..216428bcbce 100644 --- a/sys/dev/mpt/mpt_raid.c +++ b/sys/dev/mpt/mpt_raid.c @@ -792,7 +792,6 @@ mpt_map_physdisk(struct mpt_softc *mpt, union ccb *ccb, u_int *tgt) mpt_disk = mpt->raid_disks + ccb->ccb_h.target_id; if (ccb->ccb_h.target_id < mpt->raid_max_disks && (mpt_disk->flags & MPT_RDF_ACTIVE) != 0) { - *tgt = mpt_disk->config_page.PhysDiskID; return (0); } @@ -808,6 +807,9 @@ mpt_is_raid_volume(struct mpt_softc *mpt, int tgt) CONFIG_PAGE_IOC_2_RAID_VOL *ioc_vol; CONFIG_PAGE_IOC_2_RAID_VOL *ioc_last_vol; + if (mpt->ioc_page2 == NULL || mpt->ioc_page2->MaxPhysDisks == 0) { + return (0); + } ioc_vol = mpt->ioc_page2->RaidVolume; ioc_last_vol = ioc_vol + mpt->ioc_page2->NumActiveVolumes; for (;ioc_vol != ioc_last_vol; ioc_vol++) { @@ -1106,20 +1108,66 @@ mpt_announce_vol(struct mpt_softc *mpt, struct mpt_raid_volume *mpt_vol) for (i = 0; i < vol_pg->NumPhysDisks; i++){ struct mpt_raid_disk *mpt_disk; CONFIG_PAGE_RAID_PHYS_DISK_0 *disk_pg; + int pt_bus = cam_sim_bus(mpt->phydisk_sim); + U8 f, s; - mpt_disk = mpt->raid_disks - + vol_pg->PhysDisk[i].PhysDiskNum; + mpt_disk = mpt->raid_disks + vol_pg->PhysDisk[i].PhysDiskNum; disk_pg = &mpt_disk->config_page; mpt_prtc(mpt, " "); - mpt_prtc(mpt, "(%s:%d:%d): ", device_get_nameunit(mpt->dev), - disk_pg->PhysDiskBus, disk_pg->PhysDiskID); - if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) - mpt_prtc(mpt, "%s\n", - mpt_disk->member_number == 0 - ? "Primary" : "Secondary"); - else - mpt_prtc(mpt, "Stripe Position %d\n", + mpt_prtc(mpt, "(%s:%d:%d:0): ", device_get_nameunit(mpt->dev), + pt_bus, disk_pg->PhysDiskID); + if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) { + mpt_prtc(mpt, "%s", mpt_disk->member_number == 0? + "Primary" : "Secondary"); + } else { + mpt_prtc(mpt, "Stripe Position %d", mpt_disk->member_number); + } + f = disk_pg->PhysDiskStatus.Flags; + s = disk_pg->PhysDiskStatus.State; + if (f & MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC) { + mpt_prtc(mpt, " Out of Sync"); + } + if (f & MPI_PHYSDISK0_STATUS_FLAG_QUIESCED) { + mpt_prtc(mpt, " Quiesced"); + } + if (f & MPI_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME) { + mpt_prtc(mpt, " Inactive"); + } + if (f & MPI_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS) { + mpt_prtc(mpt, " Was Optimal"); + } + if (f & MPI_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS) { + mpt_prtc(mpt, " Was Non-Optimal"); + } + switch (s) { + case MPI_PHYSDISK0_STATUS_ONLINE: + mpt_prtc(mpt, " Online"); + break; + case MPI_PHYSDISK0_STATUS_MISSING: + mpt_prtc(mpt, " Missing"); + break; + case MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE: + mpt_prtc(mpt, " Incompatible"); + break; + case MPI_PHYSDISK0_STATUS_FAILED: + mpt_prtc(mpt, " Failed"); + break; + case MPI_PHYSDISK0_STATUS_INITIALIZING: + mpt_prtc(mpt, " Initializing"); + break; + case MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED: + mpt_prtc(mpt, " Requested Offline"); + break; + case MPI_PHYSDISK0_STATUS_FAILED_REQUESTED: + mpt_prtc(mpt, " Requested Failed"); + break; + case MPI_PHYSDISK0_STATUS_OTHER_OFFLINE: + default: + mpt_prtc(mpt, " Offline Other (%x)", s); + break; + } + mpt_prtc(mpt, "\n"); } } @@ -1127,15 +1175,16 @@ static void mpt_announce_disk(struct mpt_softc *mpt, struct mpt_raid_disk *mpt_disk) { CONFIG_PAGE_RAID_PHYS_DISK_0 *disk_pg; + int rd_bus = cam_sim_bus(mpt->sim); + int pt_bus = cam_sim_bus(mpt->phydisk_sim); u_int i; disk_pg = &mpt_disk->config_page; mpt_disk_prt(mpt, mpt_disk, - "Physical (%s:%d:%d), Pass-thru (%s:%d:%d)\n", - device_get_nameunit(mpt->dev), disk_pg->PhysDiskBus, + "Physical (%s:%d:%d:0), Pass-thru (%s:%d:%d:0)\n", + device_get_nameunit(mpt->dev), rd_bus, disk_pg->PhysDiskID, device_get_nameunit(mpt->dev), - /*bus*/1, mpt_disk - mpt->raid_disks); - + pt_bus, mpt_disk - mpt->raid_disks); if (disk_pg->PhysDiskSettings.HotSparePool == 0) return; mpt_disk_prt(mpt, mpt_disk, "Member of Hot Spare Pool%s", @@ -1218,8 +1267,9 @@ mpt_refresh_raid_vol(struct mpt_softc *mpt, struct mpt_raid_volume *mpt_vol, mpt_disk = mpt->raid_disks + vol_pg->PhysDisk[i].PhysDiskNum; mpt_disk->volume = mpt_vol; mpt_disk->member_number = vol_pg->PhysDisk[i].PhysDiskMap; - if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) + if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) { mpt_disk->member_number--; + } } if ((vol_pg->VolumeStatus.Flags