diff options
Diffstat (limited to 'drivers/scsi/qla4xxx/ql4_inline.h')
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_inline.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_inline.h b/drivers/scsi/qla4xxx/ql4_inline.h new file mode 100644 index 000000000000..0d61797af7da --- /dev/null +++ b/drivers/scsi/qla4xxx/ql4_inline.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * QLogic iSCSI HBA Driver | ||
3 | * Copyright (c) 2003-2006 QLogic Corporation | ||
4 | * | ||
5 | * See LICENSE.qla4xxx for copyright and licensing details. | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * | ||
10 | * qla4xxx_lookup_ddb_by_fw_index | ||
11 | * This routine locates a device handle given the firmware device | ||
12 | * database index. If device doesn't exist, returns NULL. | ||
13 | * | ||
14 | * Input: | ||
15 | * ha - Pointer to host adapter structure. | ||
16 | * fw_ddb_index - Firmware's device database index | ||
17 | * | ||
18 | * Returns: | ||
19 | * Pointer to the corresponding internal device database structure | ||
20 | */ | ||
21 | static inline struct ddb_entry * | ||
22 | qla4xxx_lookup_ddb_by_fw_index(struct scsi_qla_host *ha, uint32_t fw_ddb_index) | ||
23 | { | ||
24 | struct ddb_entry *ddb_entry = NULL; | ||
25 | |||
26 | if ((fw_ddb_index < MAX_DDB_ENTRIES) && | ||
27 | (ha->fw_ddb_index_map[fw_ddb_index] != | ||
28 | (struct ddb_entry *) INVALID_ENTRY)) { | ||
29 | ddb_entry = ha->fw_ddb_index_map[fw_ddb_index]; | ||
30 | } | ||
31 | |||
32 | DEBUG3(printk("scsi%d: %s: index [%d], ddb_entry = %p\n", | ||
33 | ha->host_no, __func__, fw_ddb_index, ddb_entry)); | ||
34 | |||
35 | return ddb_entry; | ||
36 | } | ||
37 | |||
38 | static inline void | ||
39 | __qla4xxx_enable_intrs(struct scsi_qla_host *ha) | ||
40 | { | ||
41 | if (is_qla4022(ha)) { | ||
42 | writel(set_rmask(IMR_SCSI_INTR_ENABLE), | ||
43 | &ha->reg->u1.isp4022.intr_mask); | ||
44 | readl(&ha->reg->u1.isp4022.intr_mask); | ||
45 | } else { | ||
46 | writel(set_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status); | ||
47 | readl(&ha->reg->ctrl_status); | ||
48 | } | ||
49 | set_bit(AF_INTERRUPTS_ON, &ha->flags); | ||
50 | } | ||
51 | |||
52 | static inline void | ||
53 | __qla4xxx_disable_intrs(struct scsi_qla_host *ha) | ||
54 | { | ||
55 | if (is_qla4022(ha)) { | ||
56 | writel(clr_rmask(IMR_SCSI_INTR_ENABLE), | ||
57 | &ha->reg->u1.isp4022.intr_mask); | ||
58 | readl(&ha->reg->u1.isp4022.intr_mask); | ||
59 | } else { | ||
60 | writel(clr_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status); | ||
61 | readl(&ha->reg->ctrl_status); | ||
62 | } | ||
63 | clear_bit(AF_INTERRUPTS_ON, &ha->flags); | ||
64 | } | ||
65 | |||
66 | static inline void | ||
67 | qla4xxx_enable_intrs(struct scsi_qla_host *ha) | ||
68 | { | ||
69 | unsigned long flags; | ||
70 | |||
71 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
72 | __qla4xxx_enable_intrs(ha); | ||
73 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
74 | } | ||
75 | |||
76 | static inline void | ||
77 | qla4xxx_disable_intrs(struct scsi_qla_host *ha) | ||
78 | { | ||
79 | unsigned long flags; | ||
80 | |||
81 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
82 | __qla4xxx_disable_intrs(ha); | ||
83 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
84 | } | ||