Commit | Line | Data |
---|---|---|
afaf5a2d DS |
1 | /* |
2 | * QLogic iSCSI HBA Driver | |
4a4f51e9 | 3 | * Copyright (c) 2003-2013 QLogic Corporation |
afaf5a2d DS |
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 | ||
f4f5df23 | 32 | DEBUG3(printk("scsi%d: %s: ddb [%d], ddb_entry = %p\n", |
afaf5a2d DS |
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 | { | |
d915058f | 41 | if (is_qla4022(ha) | is_qla4032(ha)) { |
afaf5a2d DS |
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 | { | |
d915058f | 55 | if (is_qla4022(ha) | is_qla4032(ha)) { |
afaf5a2d DS |
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 | } | |
26ffd7b4 AC |
85 | |
86 | static inline int qla4xxx_get_chap_type(struct ql4_chap_table *chap_entry) | |
87 | { | |
88 | int type; | |
89 | ||
90 | if (chap_entry->flags & BIT_7) | |
91 | type = LOCAL_CHAP; | |
92 | else | |
93 | type = BIDI_CHAP; | |
94 | ||
95 | return type; | |
96 | } |