aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/scsi_scan.c32
-rw-r--r--include/scsi/scsi_device.h1
2 files changed, 33 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 9fa209097e3b..ad3a5b142468 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -1000,6 +1000,38 @@ static int scsilun_to_int(struct scsi_lun *scsilun)
1000} 1000}
1001 1001
1002/** 1002/**
1003 * int_to_scsilun: reverts an int into a scsi_lun
1004 * @int: integer to be reverted
1005 * @scsilun: struct scsi_lun to be set.
1006 *
1007 * Description:
1008 * Reverts the functionality of the scsilun_to_int, which packed
1009 * an 8-byte lun value into an int. This routine unpacks the int
1010 * back into the lun value.
1011 * Note: the scsilun_to_int() routine does not truly handle all
1012 * 8bytes of the lun value. This functions restores only as much
1013 * as was set by the routine.
1014 *
1015 * Notes:
1016 * Given an integer : 0x0b030a04, this function returns a
1017 * scsi_lun of : struct scsi_lun of: 0a 04 0b 03 00 00 00 00
1018 *
1019 **/
1020void int_to_scsilun(unsigned int lun, struct scsi_lun *scsilun)
1021{
1022 int i;
1023
1024 memset(scsilun->scsi_lun, 0, sizeof(scsilun->scsi_lun));
1025
1026 for (i = 0; i < sizeof(lun); i += 2) {
1027 scsilun->scsi_lun[i] = (lun >> 8) & 0xFF;
1028 scsilun->scsi_lun[i+1] = lun & 0xFF;
1029 lun = lun >> 16;
1030 }
1031}
1032EXPORT_SYMBOL(int_to_scsilun);
1033
1034/**
1003 * scsi_report_lun_scan - Scan using SCSI REPORT LUN results 1035 * scsi_report_lun_scan - Scan using SCSI REPORT LUN results
1004 * @sdevscan: scan the host, channel, and id of this Scsi_Device 1036 * @sdevscan: scan the host, channel, and id of this Scsi_Device
1005 * 1037 *
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 63c91dd85ca1..223f92f4d2cb 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -243,6 +243,7 @@ extern void scsi_target_reap(struct scsi_target *);
243extern void scsi_target_block(struct device *); 243extern void scsi_target_block(struct device *);
244extern void scsi_target_unblock(struct device *); 244extern void scsi_target_unblock(struct device *);
245extern void scsi_remove_target(struct device *); 245extern void scsi_remove_target(struct device *);
246extern void int_to_scsilun(unsigned int, struct scsi_lun *);
246extern const char *scsi_device_state_name(enum scsi_device_state); 247extern const char *scsi_device_state_name(enum scsi_device_state);
247extern int scsi_is_sdev_device(const struct device *); 248extern int scsi_is_sdev_device(const struct device *);
248extern int scsi_is_target_device(const struct device *); 249extern int scsi_is_target_device(const struct device *);