This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / drivers / scsi / qla4xxx / ql4_inline.h
diff --git a/drivers/scsi/qla4xxx/ql4_inline.h b/drivers/scsi/qla4xxx/ql4_inline.h
new file mode 100644 (file)
index 0000000..6375eb0
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c)  2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+
+/*
+ *
+ * qla4xxx_lookup_ddb_by_fw_index
+ *     This routine locates a device handle given the firmware device
+ *     database index.  If device doesn't exist, returns NULL.
+ *
+ * Input:
+ *     ha - Pointer to host adapter structure.
+ *     fw_ddb_index - Firmware's device database index
+ *
+ * Returns:
+ *     Pointer to the corresponding internal device database structure
+ */
+static inline struct ddb_entry *
+qla4xxx_lookup_ddb_by_fw_index(struct scsi_qla_host *ha, uint32_t fw_ddb_index)
+{
+       struct ddb_entry *ddb_entry = NULL;
+
+       if ((fw_ddb_index < MAX_DDB_ENTRIES) &&
+           (ha->fw_ddb_index_map[fw_ddb_index] !=
+               (struct ddb_entry *) INVALID_ENTRY)) {
+               ddb_entry = ha->fw_ddb_index_map[fw_ddb_index];
+       }
+
+       DEBUG3(printk("scsi%d: %s: index [%d], ddb_entry = %p\n",
+           ha->host_no, __func__, fw_ddb_index, ddb_entry));
+
+       return ddb_entry;
+}
+
+static inline void
+__qla4xxx_enable_intrs(struct scsi_qla_host *ha)
+{
+       if (is_qla4022(ha) | is_qla4032(ha)) {
+               writel(set_rmask(IMR_SCSI_INTR_ENABLE),
+                      &ha->reg->u1.isp4022.intr_mask);
+               readl(&ha->reg->u1.isp4022.intr_mask);
+       } else {
+               writel(set_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status);
+               readl(&ha->reg->ctrl_status);
+       }
+       set_bit(AF_INTERRUPTS_ON, &ha->flags);
+}
+
+static inline void
+__qla4xxx_disable_intrs(struct scsi_qla_host *ha)
+{
+       if (is_qla4022(ha) | is_qla4032(ha)) {
+               writel(clr_rmask(IMR_SCSI_INTR_ENABLE),
+                      &ha->reg->u1.isp4022.intr_mask);
+               readl(&ha->reg->u1.isp4022.intr_mask);
+       } else {
+               writel(clr_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status);
+               readl(&ha->reg->ctrl_status);
+       }
+       clear_bit(AF_INTERRUPTS_ON, &ha->flags);
+}
+
+static inline void
+qla4xxx_enable_intrs(struct scsi_qla_host *ha)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&ha->hardware_lock, flags);
+       __qla4xxx_enable_intrs(ha);
+       spin_unlock_irqrestore(&ha->hardware_lock, flags);
+}
+
+static inline void
+qla4xxx_disable_intrs(struct scsi_qla_host *ha)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&ha->hardware_lock, flags);
+       __qla4xxx_disable_intrs(ha);
+       spin_unlock_irqrestore(&ha->hardware_lock, flags);
+}