~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/scsi/qla4xxx/ql4_inline.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * QLogic iSCSI HBA Driver
 
3
 * Copyright (c)  2003-2010 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: ddb [%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) | is_qla4032(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) | is_qla4032(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
}