summaryrefslogtreecommitdiff
path: root/drivers/scsi/isci/host.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/isci/host.h')
-rw-r--r--drivers/scsi/isci/host.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/scsi/isci/host.h b/drivers/scsi/isci/host.h
index 6a6304c06976..3c69f1ffb1c3 100644
--- a/drivers/scsi/isci/host.h
+++ b/drivers/scsi/isci/host.h
@@ -61,6 +61,7 @@
/*#include "task.h"*/
#include "timers.h"
#include "remote_device.h"
+#include "scic_remote_device.h"
#define DRV_NAME "isci"
#define SCI_PCI_BAR_COUNT 2
@@ -117,8 +118,18 @@ struct isci_host {
struct list_head requests_to_complete;
struct list_head requests_to_abort;
spinlock_t scic_lock;
+
+ /* careful only access this via idev_by_id */
+ struct isci_remote_device devices[0];
};
+static inline struct isci_remote_device *idev_by_id(struct isci_host *ihost, int i)
+{
+ void *p = ihost->devices;
+
+ return p + i * (sizeof(struct isci_remote_device) +
+ scic_remote_device_get_object_size());
+}
/**
* struct isci_pci_info - This class represents the pci function containing the
@@ -219,11 +230,7 @@ static inline void wait_for_device_start(struct isci_host *ihost, struct isci_re
static inline void wait_for_device_stop(struct isci_host *ihost, struct isci_remote_device *idev)
{
- /* todo switch to:
- * wait_event(ihost->eventq, !test_bit(IDEV_STOP_PENDING, &idev->flags));
- * once devices are statically allocated
- */
- wait_for_completion(idev->cmp);
+ wait_event(ihost->eventq, !test_bit(IDEV_STOP_PENDING, &idev->flags));
}
/**