summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid
diff options
context:
space:
mode:
authorRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>2017-12-27 05:34:41 +0100
committerMartin K. Petersen <martin.petersen@oracle.com>2018-01-04 05:26:43 +0100
commit2290678fed775194ef84d65949d93a4f524765b0 (patch)
tree4dfd9803c106c1df8e0ff04f9dca6dc619dc1256 /drivers/scsi/aacraid
parentscsi: aacraid: Process hba and container hot plug events in single function (diff)
downloadlinux-2290678fed775194ef84d65949d93a4f524765b0.tar.xz
linux-2290678fed775194ef84d65949d93a4f524765b0.zip
scsi: aacraid: Added macros to help loop through known buses and targets
Added macros to loop through the MAX SUPPORTED Buses and Targets. This will make the code a bit easier to read. Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r--drivers/scsi/aacraid/aacraid.h4
-rw-r--r--drivers/scsi/aacraid/commsup.c34
2 files changed, 21 insertions, 17 deletions
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 17c6cdd52806..a8fe1e1272c1 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -117,9 +117,13 @@ enum {
/* Thor: 5 phys. buses: #0: empty, 1-4: 256 targets each */
#define AAC_MAX_BUSES 5
#define AAC_MAX_TARGETS 256
+#define AAC_BUS_TARGET_LOOP (AAC_MAX_BUSES * AAC_MAX_TARGETS)
#define AAC_MAX_NATIVE_SIZE 2048
#define FW_ERROR_BUFFER_SIZE 512
+#define get_bus_number(x) (x/AAC_MAX_TARGETS)
+#define get_target_number(x) (x%AAC_MAX_TARGETS)
+
/* Thor AIF events */
#define SA_AIF_HOTPLUG (1<<1)
#define SA_AIF_HARDWARE (1<<2)
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index ed79159db752..8966371ec103 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1890,31 +1890,31 @@ static int aac_is_safw_target_valid(struct aac_dev *dev, int bus, int target)
static void aac_resolve_luns(struct aac_dev *dev)
{
+ int i;
int bus, target, channel;
struct scsi_device *sdev;
- for (bus = 0; bus < AAC_MAX_BUSES; bus++) {
- for (target = 0; target < AAC_MAX_TARGETS; target++) {
+ for (i = 0; i < AAC_BUS_TARGET_LOOP; i++) {
- if (bus == CONTAINER_CHANNEL)
- channel = CONTAINER_CHANNEL;
- else
- channel = aac_phys_to_logical(bus);
+ bus = get_bus_number(i);
+ target = get_target_number(i);
- sdev = scsi_device_lookup(dev->scsi_host_ptr, channel,
- target, 0);
+ if (bus == CONTAINER_CHANNEL)
+ channel = CONTAINER_CHANNEL;
+ else
+ channel = aac_phys_to_logical(bus);
- if (!sdev && aac_is_safw_target_valid(dev, bus, target))
- scsi_add_device(dev->scsi_host_ptr, channel,
- target, 0);
- else if (sdev && aac_is_safw_target_valid(dev,
- bus, target))
- scsi_remove_device(sdev);
+ sdev = scsi_device_lookup(dev->scsi_host_ptr, channel,
+ target, 0);
- if (sdev)
- scsi_device_put(sdev);
+ if (!sdev && aac_is_safw_target_valid(dev, bus, target))
+ scsi_add_device(dev->scsi_host_ptr, channel,
+ target, 0);
+ else if (sdev && aac_is_safw_target_valid(dev, bus, target))
+ scsi_remove_device(sdev);
- }
+ if (sdev)
+ scsi_device_put(sdev);
}
}